Доработка программы по нахождению названия года по японскому календарю - 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;
}

Объяснение кода листинга программы

  1. В коде присутствуют два массива: color и animal, каждый из которых содержит 12 элементов.
  2. В функции main определены две переменные: year и iRes.
  3. В цикле while происходит считывание значения переменной year с помощью функции scanf.
  4. Если при считывании значения произошла ошибка (например, пользователь ввел не число), то условие цикла while не выполняется и программа переходит к следующей итерации цикла.
  5. Если значение year меньше 4, то выводится сообщение об ошибке и программа продолжает считывать значения.
  6. Значение year приводится к диапазону от 0 до 59 (год по григорианскому календарю + 3).
  7. Вычисляется значение year по японскому календарю с помощью формулы: (год по григорианскому календарю - 4) % 60.
  8. Выводится сообщение с названием года по японскому календарю и животным этого года.
  9. Программа завершается, когда пользователь вводит некорректное значение или достигает конца ввода.

Оцени полезность:

12   голосов , оценка 3.75 из 5
Похожие ответы