bad3p
Проще переделать твою прогу, поскольку у меня нет ни времени, ни желания искать ошибку в своей. Собственно, с самого начала я и хотел написать именно так, но не мог вспомнить формулу. Как работает эта формула и кто ее вывел - ума не дам

Держи свой вариант с моими добавлениями:
Код:
uses
crt;
const
day_weeks: array [0..6] of string = { массив с днями недели }
('VOS', 'PN', 'VT', 'SRE', 'CHE', 'PIA', 'SUB');
type
years = 0..2100; { тип-диапазон: годы }
months = 1..12; { тип-диапазон: месяцы }
days = 1..31; { тип-диапазон: дни }
var
year: years; { год }
month: months; { месяц }
day: days; { день }
r, { результат }
p: integer; { дополнительная переменная }
begin
clrscr;
repeat { вводим номер года }
write ('year (0-2100): '); readln(year);
until (year >= 0) and (year < 2101);
year := year mod 100; { вычисляем номер года в столетии }
p := year div 100; { вычисляем столетие }
repeat { вводим номер месяца }
write ('month (1-12): '); readln(month);
until (month > 0) or (month < 13);
{ делаем март - первым месяцем, а январь и февраль перемещаем в конец года }
if month >= 3 then month := month - 2 else month := month + 10;
repeat { вводим день }
write ('day (1-31): '); readln(day);
until (day > 0) and (day < 32);
{ вычисляем номер дня недели по формуле }
r := (day + trunc(0.2 * (13 * month - 1)) + year + trunc(year / 4) +
trunc(p / 4) - 2 * p) mod 7;
{ выводим название дня недели из массива }
writeln('day of week: ', day_weeks[r]);
readkey;
end.