Не знаю, сколь это Вам поможет, но когда-то я сделал для себя такую программку, она тщательно выверена и абсолютно рабочая. Есть отличия:
1. У Вас зеленый цвет, у меня - синий.
2. Помимо цветов, выводятся стихии (огонь, вода и т.п.).
3. В задаче перебор цветов (стихий) задан неправильно. На самом деле в восточном календаре цвет (стихия) не меняется в течение двух лет подряд.
4. За базовый принят не 1984, а год, номер которого кратен 60. Так удобнее.
5. В исходной программе учитываются годы до Н.Э. (легко убрать).
Текст программы:
{ Это для перевода текущего года в восточную символику }
CONST
Matter_Color:ARRAY[0..9] of STRING[16]=('Металл Белый ',
'Металл Белый ',
'Вода Черный ',
'Вода Черный ',
'Дерево Синий ',
'Дерево Синий ',
'Огонь Красный',
'Огонь Красный',
'Земля Желтый ',
'Земля Желтый ');
Animal:ARRAY[0..11] of STRING[8]=('Обезьяна',
'Курица ',
'Пес ',
'Свинья ',
'Мышь ',
'Корова ',
'Тигр ',
'Заяц ',
'Дракон ',
'Змея ',
'Конь ',
'Овца ');
VAR
CurYear, Mod1, Mod2, Mod3:Integer;
BEGIN
WRITELN('Годы до Н.Э. вводите со знаком "-";');
WRITELN('для выхода из программы введите нулевой год.');
WRITELN;
REPEAT
WRITE('Введите год: '); READLN(CurYear);
IF CurYear<>0 THEN
BEGIN
IF CurYear<0 THEN Mod1:=61+(CurYear mod 60) ELSE
Mod1:=CurYear mod 60;
Mod2:=Mod1 mod 10;
Mod3:=Mod1 mod 12;
IF CurYear<0 THEN
WRITELN(CurYear*(-1):8,' до Н.Э. ',Animal[Mod3],' ',
Matter_Color[Mod2])
ELSE
WRITELN(CurYear:8,' Н.Э. ',Animal[Mod3],' ',
Matter_Color[Mod2]);
END;
UNTIL CurYear=0;
END.