Доработка программы по нахождению названия года по японскому календарю - C (СИ)
Формулировка задачи:
Вот задание
Разработать программу, которая для любого заданного года по современному летоисчислению определяет название соответствующего года по японскому календарю.
В японском календаре принят 60-ти летний цикл, который состоит из пяти двенадцатилетних подциклов, обозначаемых пятью цветами: зелёный (green), красный (red), жёлтый (yellow), белый (white) и чёрный (black). В любом из этих цветных подциклов каждый соответствует названию одного из следующих животных: крыса (rat), бык (bull), тигр (tiger), кролик (rabbit), дракон (dragon), змея (snake), лошадь (horse), овца (sheep), обезьяна (monkey), петух (cock), собака (dog) и кабан (boar). Таким образом, по японскому календарю каждый год в 60-ти летнем цикле обозначает сочетание названий одного из перечисленных цветов и животных. В частности, начало первого цикла, год зелёной крысы (green rat), в современном цикле соответствует 4-ому году нашей эры. Программа должна выполняться в режиме фильтра, получая последовательность номеров годов современного летоисчисления через поток стандартного ввода (stdin) и отображая соответствующие им названия в японском календаре через поток стандартного вывода (stdout). Работа программы должна продолжаться до тех пор, пока не получен признак конца входного потока, установленный в операционной среде её выполнения.
вот мой код.
Подскажите, работает ли моя программа по заданию? Преподаватель сказал что кроме этого нужно добавить возможность фильтрации из файла. то есть перенаправлять файл в программу, как это сделать?
#include <stdio.h> int wrongi(int); int main(int argc, char *argv[]) { const char *color[] = {"green", "red", "yellow", "white", "black"}; const char *animal[] = {"rat", "bull", "tiger", "rabbit", "dragon", "snake", "horse", "sheep", "monkey", "cock", "dog", "boar"}; int year; printf( "\nВведите год: "); if (scanf( "%d", &year) != 1) return wrongi(1); if (year < 4) return wrongi(2); printf( "\t%d = ", year); year = (year - 4) % 60; printf( color[year / 12]); printf( " %s", animal[year % 12]); printf('\n'); return 0; } int wrongi(int kod) { if (kod == 1) printf( "\nНеобходимо указать число!\n"); else printf( "\nГод должен быть не меньше четырех!\n"); return -1; }
Решение задачи: «Доработка программы по нахождению названия года по японскому календарю»
textual
Листинг программы
#include <stdio.h> static const char* color[] = { "green", "red", "yellow", "white", "black" }; static const char* animal[] = { "rat", "bull", "tiger", "rabbit", "dragon", "snake", "horse", "sheep", "monkey", "cock", "dog", "boar" }; int main(int argc,char** argv) { int year = 0; int iRes = 0; while (iRes = scanf("%d",&year)) { if (iRes != 1) { // End of Input break; } if (year < 4) { printf("Too small Year value!\n"); continue; } year = (year - 4) % 60; printf(" -->> %s %s\n\n",color[year / 12],animal[year % 12]); } return 0; }
Объяснение кода листинга программы
- В коде присутствуют два массива:
color
иanimal
, каждый из которых содержит 12 элементов. - В функции
main
определены две переменные:year
иiRes
. - В цикле
while
происходит считывание значения переменнойyear
с помощью функцииscanf
. - Если при считывании значения произошла ошибка (например, пользователь ввел не число), то условие цикла
while
не выполняется и программа переходит к следующей итерации цикла. - Если значение
year
меньше 4, то выводится сообщение об ошибке и программа продолжает считывать значения. - Значение
year
приводится к диапазону от 0 до 59 (год по григорианскому календарю + 3). - Вычисляется значение
year
по японскому календарю с помощью формулы: (год по григорианскому календарю - 4) % 60. - Выводится сообщение с названием года по японскому календарю и животным этого года.
- Программа завершается, когда пользователь вводит некорректное значение или достигает конца ввода.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д