bad3p
Пришлось малехо помучиться

Код:
uses
crt;
type
years = 0..2100;
months = 1..12;
days = 1..31;
const
day_months: array [months] of days =
(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
day_weeks: array [0..6] of string =
('VOS', 'PN', 'VT', 'SRE', 'CHE', 'PIA', 'SUB');
var
year: years;
month: months;
day: days;
feb29: boolean;
alld: longint;
i: integer;
begin
clrscr;
write ('year (0-2100): '); readln(year);
write ('month (1-12): '); readln(month);
feb29 := ((year mod 4) = 0);
if ((year mod 100) = 0) then feb29 := ((year mod 400) <> 0);
if feb29 then day_months[2] := 29 else day_months[2] := 28;
repeat
write ('day (1-', day_months[month], '): '); readln(day);
until (day > 0) and (day <= day_months[month]);
alld := year + (year div 4) - 3;
for i := 1 to pred(month) do inc (alld, day_months[i]);
alld := (alld + day) mod 7;
writeln('day of week: ', day_weeks[alld]);
readkey;
end.