С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