Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2010, 17:14   #1
dyusha2006
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 17
По умолчанию написать программу, определяющую название года по его номеру

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

Решить хотел так:
Вводим год, делим его нацело на 12, получившееся число умножаем на 12, от введённого отнимаем получившееся. По разности с помощью case определяем название года.

Но программа почему-то работать не хочет.
Я С только начал изучать, в Delphi давно бы уже сделал.

Вот код:
int year;
float year2;
main()
{
printf("Vvedite god: ");
scanf("%f", &year);
year2=year & 12;
year2=year2*12;
year=year-year2;
switch (year)
{
case 0: printf("eto god obez'yani\n"); break;
case 1: printf("eto god petuha\n");break;;
case 2: printf("eto god sobaki\n");break;
case 3: printf("eto god svin'i\n");break;
case 4: printf("eto god krisi\n");break;
case 5: printf("eto god korovi\n");break;
case 6: printf("eto god tigra\n");break;
case 7: printf("eto god zayca\n");break;
case 8: printf("eto god drakona\n");break;
case 9: printf("eto god zmei\n");break;
case 10: printf("eto god loshadi\n");break;
case 11: printf("eto god ovci\n");break;
default: printf("\n God vveden neverno! \n");
}
getch();
return 0;
}

В переменной year после расчёта почему-то 0. Видимо что-то с типами напутал?

Последний раз редактировалось dyusha2006; 21.10.2010 в 17:34.
dyusha2006 вне форума Ответить с цитированием
Старый 21.10.2010, 17:33   #2
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
year2=year & 12;
& - логический оператор И. Никак не похож на целочисленное деление.
Целочисленное деление имеет место быть, когда мы целочисленный тип делим на целочисленный. Зачем у вас год имеет тип float не ясно
sashonk вне форума Ответить с цитированием
Старый 21.10.2010, 17:35   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Код:
year % 12; // Остаток от деления
pu4koff вне форума Ответить с цитированием
Старый 21.10.2010, 17:38   #4
dyusha2006
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от sashonk Посмотреть сообщение
Зачем у вас год имеет тип float не ясно
Пробовал просто по разному, и int и float.
Про & нашёл в интернете. А как произвести целочисленное деление?
dyusha2006 вне форума Ответить с цитированием
Старый 21.10.2010, 17:38   #5
dyusha2006
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 17
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Код:
year % 12; // Остаток от деления
Про % знаю, только мне остаток то не нужен.
Хотя нет, так тоже можно попробовать.
dyusha2006 вне форума Ответить с цитированием
Старый 21.10.2010, 17:44   #6
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Года должны быть переменными типа int;
Далее
Код:
scanf("%d", &year);
year2=year/12;//=========делится  нацело
year2*=12;
year-=year2;
И вуаля код работает
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Старый 21.10.2010, 17:45   #7
dyusha2006
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 17
По умолчанию

Проблема вообще не в расчётах. После этих строк программа выдаёт 0
printf("Vvedite god: ");
scanf("%f", &year);
printf("%4.0f", &year);
dyusha2006 вне форума Ответить с цитированием
Старый 21.10.2010, 17:47   #8
dyusha2006
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 17
По умолчанию

О, спасибо. Вообще не знал что там кроме f может что-то быть.
dyusha2006 вне форума Ответить с цитированием
Старый 21.10.2010, 17:59   #9
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

%f аргумент рассматривается как переменная типа float или double
%d преобразуется к десятичному виду

там вообще много чего писать можно

Если интересно, про спецификации формата функций семейства printf() можешь почитать здесь http://www.codenet.ru/progr/cpp/spr/328.php
Единственный способ стать умнее - играть с более умным противником.
Sam Gold вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить программу, определяющую учеников класса, являющимися хорошистами и отличниками по итогам года Roman@- Паскаль, Turbo Pascal, PascalABC.NET 3 02.06.2011 16:28
В ячейке проставить название месяца, согласно номеру листа kzld Microsoft Office Excel 5 06.10.2010 10:32
программу,запрашивающая кол-во сотен, десятков и единиц вчисле и выводит его название StillersMom Паскаль, Turbo Pascal, PascalABC.NET 1 15.03.2010 00:26
Написать программу, определяющую, через сколько дней количество съеденных комаров превысит 100 мелкая007 Паскаль, Turbo Pascal, PascalABC.NET 1 12.01.2009 13:22
при введении любого номера года нашей эры, программа выводит его название за старым японским календарем mobi_vic Общие вопросы C/C++ 1 06.06.2007 12:33