Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 20.10.2010, 23:29   #1 (permalink)
Linka
Member
 
Аватар для Linka
 
Регистрация: 24.01.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 26
По умолчанию Не могу придумать алгоритм

Нужно написать программу на языке С, не могу придумать алгоритм. Помогите пожалуйста

Программа следующая: пользователь вводит дату рождения (день, месяц, год) программа показывает кто он по знаку зодиака и в какой год он родился (например год свиньи).

Конкретно не пойму как можно определить знак зодиака?

Месяц записывается в одну переменную, день в другую. В зависимости от введенного месяца, смотрится значение второй переменной и в зависимости от того в каком интервале он находится, программа выдает соотв. сообщение.

Но мы сейчас проходим массивы и я так подозреваю, что они тоже должны быть задействованы. Можно ли это как-то реализовать с помощью массивов ?

Спасибо заранее.
Linka вне форума   Ответить с цитированием

Старый 20.10.2010, 23:29
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Можно узнать множество полезной информации перейдя по этим ссылкам

Помогите придумать схему со светодиодом
Алгоритм

Старый 21.10.2010, 00:20   #2 (permalink)
kreol
Member
 
Аватар для kreol
 
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
По умолчанию

ну можно год дату и месяц например ввести в массив)
а там уже проверять куда попадет ячейка... но это будет нормально если у вас много пользователей и вы вбиваете для каждого... а так достаточно просто переменных... ну а проверка там та, которую вы написали...
kreol вне форума   Ответить с цитированием
Старый 21.10.2010, 07:05   #3 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Раз обязательно нужны массивы, можно в них занести знаки зодиака и названия годов, потом проверять соответствие. К примеру, год можно определить путём вычисления остатка от деления разности введенного и эталонного значения на 12. За эталонное значение можно принять любой определенный год, название которого вам известно. Сам остаток от деления и будет индексом для элемента массива.

Для определения знака зодиака вам нужно ввести выбор из 12 вариантов. Дело в том, что для каждого знака периоды охватывают 2 месяца и нужно проверять попадание в них введенной даты. Каждый из вариантов выбора даст вам индекс для элемента массива знаков зодиака.

В конце вам останется только вывести все полученные значения.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 21.10.2010, 10:44   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Вот, нарисовал некий алгоритм насчет Зодиака. Реализация (увы) - на Паскале, но, думаю, перевести в СИ несложно. Здесь применяются латинские названия Знаков:
Aries - Овен
Taurus - Телец
Gemini - Близнецы
Cancer - Рак
Leo - Лев
Virgo - Дева
Libra - Весы
Scorpio - Скорпион
Saggitarius - Стрелец
Capricorn - Козерог
Aquarius - Водолей
Pisces - Рыбы
Код:
VAR
 month,date,md: WORD;
 S:STRING;
Begin
 Write('Enter month (1-12) ');
 ReadLn(Month);
 Write('Enter date (1-31) ');
 ReadLn(Date);
 md:=month*100+date;
 If md< 121 then S:='Capricorn' else
 If md< 219 then S:='Aquarius' else
 If md< 321 then S:='Pisces' else
 If md< 421 then S:='Aries' else
 If md< 521 then S:='Taurus' else
 If md< 622 then S:='Gemini' else
 If md< 723 then S:='Cancer' else
 If md< 823 then S:='Leo' else
 If md< 924 then S:='Virgo' else
 If md<1024 then S:='Libra' else
 If md<1123 then S:='Scorpio' else
 If md<1222 then S:='Sagittarius' else
 S:='Capricorn';
 WriteLn('Zodiac sign is ',S);
 ReadLn;
END.
Проверено - работает.
Vladimir_S вне форума   Ответить с цитированием
Старый 21.10.2010, 11:48   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Еще в свое время для себя сделал программку по восточному календарю. Сейчас малость "причесал": убрал кириллицу (DOS) и годы до н.э. (у меня учитываются и такие). К сожалению, опять же Паскаль.
Код:
CONST
  Matter_Color:ARRAY[0..9] of STRING[16]=('Metal    White  ',
                                          'Metal    White  ',
                                          'Water    Black  ',
                                          'Water    Black ',
                                          'Wood     Blue  ',
                                          'Wood     Blue  ',
                                          'Fire     Red   ',
                                          'Fire     Red   ',
                                          'Earth    Yellow',
                                          'Earth    Yellow');

 Animal:ARRAY[0..11] of STRING[8]=('Monkey',
                                   'Hen   ',
                                   'Dog   ',
                                   'Swine ',
                                   'Mouse ',
                                   'Cow   ',
                                   'Tiger ',
                                   'Rabbit',
                                   'Dragon',
                                   'Snake ',
                                   'Horse ',
                                   'Sheep ');

VAR
 CurYear, Mod1, Mod2, Mod3:LongInt;

BEGIN
 WRITELN('Enter zero year to exit');
 WRITELN;
 REPEAT
  WRITE('Enter the year:  '); READLN(CurYear);
  IF CurYear>0 THEN
   BEGIN
    Mod1:=CurYear mod 60;
    Mod2:=Mod1 mod 10;
    Mod3:=Mod1 mod 12;
    WRITELN(CurYear:8,'   ',Animal[Mod3],'   ',Matter_Color[Mod2]);
   END;
 UNTIL CurYear=0;
END.
Может быть, пригодится.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 21.10.2010, 18:06   #6 (permalink)
Linka
Member
 
Аватар для Linka
 
Регистрация: 24.01.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 26
По умолчанию

Спасибо всем большое )
Linka вне форума   Ответить с цитированием
Старый 23.10.2010, 05:46   #7 (permalink)
Linka
Member
 
Аватар для Linka
 
Регистрация: 24.01.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 26
По умолчанию

Vladimir_S, не подскажите, а можно ли в языке Си сделать массив строк ? Как у вас во втором примере ? Ведь в Си строка - это массив символов.
Linka вне форума   Ответить с цитированием
Старый 23.10.2010, 10:00   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Linka Посмотреть сообщение
Vladimir_S, не подскажите, а можно ли в языке Си сделать массив строк ? Как у вас во втором примере ? Ведь в Си строка - это массив символов.
К сожалению - не подскажу. СИ, как говорится, "не мой профиль".
Между прочим, в Паскале строка тоже ни что иное, как массив символов.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.10.2010, 10:24   #9 (permalink)
KiD2
Member
 
Аватар для KiD2
 
Регистрация: 07.06.2010
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Можно сделать массив строк в Cи, например вот так:
const string Str1[4] = {"Sc","Cs","Df","Hd"};
или
string Str[10];
Str[0]="aaaa";
Только нужно будет подключать string.h...
P.S.: в наиболее ранних версиях Си нет string, только char А в более поздних помимо string, появился и AnsiString...
KiD2 вне форума   Ответить с цитированием
Старый 23.10.2010, 16:46   #10 (permalink)
Linka
Member
 
Аватар для Linka
 
Регистрация: 24.01.2010
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 26
По умолчанию

KiD2, попробовал твои варианты - выдает ошибку. Значит Си старый ? String.h подключил.
Linka вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 16:13.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.