var
IsCorrectDate: Boolean; {Признак правильной даты}
d,m,y : integer; {Вводимая дата - день, месяц и год}
{-------------------------------}
Procedure InputDate(var d,m,y : integer;
var correctly : Boolean);
{Вводит в переменные d, m и y очередную дату и проверяет ее.
Если дата правильная, устанавливает correctly=true, иначе
correctly=false }
begin {InputDate}
Write('Введите дату в формате ДД ММ ГГГГ: ');
ReadLn(d,m,y);
correctly := (d>=1) and (d<=31) and (m>=1)
and (m<=12) and (y>=1582) and (y<=4903)
end; {InputDate}
{-------------------------------}
Procedure WriteDay(d,m,y : integer);
const
Days_of_week: array [0..6] of string [11] =
('воскресенье','понедельник','вторник',
'среда','четверг','пятница','суббота');
var
c, w : integer;
begin
if m < 3 then
begin {Месяц январь или февраль}
m := m + 10;
y := y - 1
end
else
m := m - 2; {Остальные месяцы}
c := y div 100; {Вычисляем столетие}
y := y mod 100; {Находим год в столетии}
w := abs(trunc(2.6*m-0.2)+d+y div 4+y+c div 4-2*c) mod 7;
WriteLn(Days_of_week[w])
end;
{-------------------------------}
begin
repeat
InputDate(d,m,y,IsCorrectDate);
if IsCorrectDate then
WriteDay(d,m,y)
until not IsCorrectDate
end.