Root /ArchiveAbout
()

Восточный календарь и зодиакальный гороскоп

Восточный календарь и зодиакальный гороскоп

Сase19. В восточном календаре принят 60-летний цикл, состоящий из 12-летних подциклов, обозначаемых названиями цвета: зеленый, красный, желтый, белый и черный. В каждом подцикле годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. По номеру года определить его название, если 1984 год — начало цикла: «год зеленой крысы».

Восточный календарь

var
  N: word;
  Animal, Color: byte;
  S: string;

begin
  writeln('Введите год:');
  readln(N); { <-- вводим год }
  S := 'Год'; { <== Начало предложения }
  { Поскольку цикл 60-летний, то находим остаток при делении
  на 60, с учетом того, что 1984-й год - начало цикла. Также 
  учитываем, что при годах, меньших за 1984, отсчёт остатка 
  идет в обратную сторону. В итоге получим разветвление: }
  if N > 1983 then N := (N - 1984) mod 60 + 1
  else N := 61 - (1984 - N) mod 60;
  { Один цвет длится 2 года: 1 и 2 - зеленый; 3 и 4 - красный;
  5 и 6 - жёлтый; 7 и 8 - белый; 9 и 10 - черный. Потом  цвета
  повторяются снова (11,12 - зеленый; 13,14 - красный и т.д).
  Таким образом, сначала находим остаток при делении на 10: }
  Color := (N - 1) mod 10 + 1; { <== Число от 1 до 10 }
  { Далее годам 1 и 2 нужно поставить в соответсвие 1 (первый
  цвет - зеленый), годам 3 и 4 - поставить 2 (второй цвет - 
  красный), годам 5 и 6 - поставить 3 (третий цвет - жёлтый) и
  т.д. Для этого можем воспользоваться формулой: }
  Color := (Color - 1) div 2 + 1; { <== Число от 1 до 5 }
  { ВНИМАНИЕ! Последние два оператора можно объединить в один:
                Color := (N - 1) mod 10 div 2 + 1          }
  { Животных всего 12 - находим остаток при делении на 12: }
  Animal := (N - 1) mod 12 + 1; { <== Число от 1 до 12 }
  { Определяем начало названия цвета: }
  case Color of
    1: S := S + ' зелено';
    2: S := S + ' красно';
    3: S := S + ' жёлто';
    4: S := S + ' бело';
    5: S := S + ' черно'
  end;
  { Определяем окончание названия цвета: }
  case Animal of
    3..5: S := S + 'го' { <== годы тигра, зайца, дракона }
    else S := S + 'й'  { <== все остальные }
  end;
  { Формируем год животного: }
  case Animal of
    1:  S := S + ' крысы';
    2:  S := S + ' коровы';
    3:  S := S + ' тигра';
    4:  S := S + ' зайца';
    5:  S := S + ' дракона';
    6:  S := S + ' змеи';
    7:  S := S + ' лошади';
    8:  S := S + ' овцы';
    9:  S := S + ' обезъяны';
    10: S := S + ' курицы';
    11: S := S + ' собаки';
    12: S := S + ' свиньи'
  end;
  writeln(' ', S); { <-- Выводим результат }
  readln
end.

**type** word;: Представляет 16-битовое целое число без знака.Диапазон значений: 0 .. 65 535 **type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255 **type** string;: Представляет текст как последовательность знаков Юникода. A **mod** B - остаток при целочисленном делении А на В A **mod** B - остаток при целочисленном делении А на В A **mod** B - остаток при целочисленном делении А на В A **div** B - целочисленное деление А на В A **mod** B - остаток при целочисленном делении А на В Сase20. Даны два целых числа: D (день) и M (месяц), определяющие правильную дату. Вывести знак Зодиака, соответствующий этой дате: «Водолей» (20.1–18.2), «Рыбы» (19.2–20.3), «Овен» (21.3–19.4), «Телец» (20.4–20.5), «Близнецы» (21.5–21.6), «Рак» (22.6–22.7), «Лев» (23.7–22.8), «Дева» (23.8–22.9), «Весы» (23.9–22.10), «Скорпион» (23.10–22.11), «Стрелец» (23.11–21.12), «Козерог» (22.12–19.1).

var
  D, M, N: byte; { D - день рождения, M - месяц рождения,
     N - номер знака Зодиака: «Водолей», «Рыбы» и т. д. }

begin
  write('D = ');
  readln(D); { <-- Вводим значение дня }
  write('M = ');
  readln(M); { <-- Вводим месяц }
  { Каждому месяцу соответствуют два знака Зодиака. Используя 
  определение границ действия  знаков, данные в  условии  за-
  дачи (смотрите вверху), видим, что каждый месяц разделяется 
  на два интервала, в каждом из которых действует только один
  знак  Зодиака. Поэтому  присвоим  каждому  такому интервалу 
  номер  принадлежащего ему  знака, используя  принятую  нами
  нумерациею: 1 - «Водолей», 2 - «Рыбы» и т. д. }
  case M of
     1: if D < 20 then N := 12 else N := 1;
     2: if D < 19 then N := 1  else N := 2;
     3: if D < 21 then N := 2  else N := 3;
     4: if D < 20 then N := 3  else N := 4;
     5: if D < 21 then N := 4  else N := 5;
     6: if D < 22 then N := 5  else N := 6;
     7: if D < 23 then N := 6  else N := 7;
     8: if D < 23 then N := 7  else N := 8;
     9: if D < 23 then N := 8  else N := 9;
    10: if D < 23 then N := 9  else N := 10;
    11: if D < 23 then N := 10 else N := 11;
    12: if D < 22 then N := 11 else N := 12    
  end;
  { Выводим знак Зодиака по его номеру: }
  case N of
    1:  writeln(' Водолей');
    2:  writeln(' Рыбы');
    3:  writeln(' Овен');
    4:  writeln(' Телец');
    5:  writeln(' Близнецы');
    6:  writeln(' Рак');
    7:  writeln(' Лев');
    8:  writeln(' Дева');
    9:  writeln(' Весы');
    10: writeln(' Скорпион');
    11: writeln(' Стрелец');
    12: writeln(' Козерог')
  end;
  readln
end.

**type** byte;: Представляет 8-битовое целое число без знака.Диапазон значений: 0..255