type
chis = 1 .. 31;
mes = 1 .. 12;
god = 1 .. 2100;
ned = 0 .. 6; { день недели 0-пн...6-вс }
var
d: chis;
m: mes;
g: god;
f: byte;
n: ned;
function intdow(yyyy, mm, dd: integer): integer;
var
Addval: shortint;
begin
if mm < 3 then
Addval := 1
else
Addval := 0;
intdow := (((3 * yyyy - (7 * (yyyy + (mm + 9) div 12)) div 4 + (23 * mm) div 9
+ dd + 2 + ((yyyy - Addval) div 100 + 1) * 3 div 4 - 16) mod 7));
end;
begin
writeln('Введите номер дня(1-31), месяца(1-12) и года(1-2100):');
readln(d, m, g);
f := 0;
if (g < 1) or (g > 2100) then
f := 1; { если год вне пределов }
if (m < 1) or (m > 12) then
f := 1; { или месяц }
if (d < 1) or (d > 31) then
f := 1; { или день }
if (m in [4, 6, 9, 11]) and (d = 31) then
f := 1; { или месяц короткий, а день=31 }
if (m = 2) and (((g mod 100 <> 0) and (g mod 4 = 0)) or (g mod 400 = 0)) and
(d > 29) then
f := 1; { если февраль високосного года, а день больше 29 }
if (m = 2) and ((g mod 4 <> 0) or ((g mod 100 = 0) and (g mod 400 <> 0))) and
(d > 28) then
f := 1; { если февраль невисокосного года, а день больше 28 }
if f = 0 then
write('Дата введена верно!')
else
write('Дата введена не верно!');
n := intdow(g, m, d);
writeln('День недели ', n);
readln
end.