假定1901年1月1日星期1。
var year,month,day,days,tempyear,i:integer;
begin
{读入年月日}
repeat
writeln("Which year?");
readln(year);
until (year>1900)and(year<2000);
repeat
writeln("Which month?");
readln(month);
until (month>0)and(month<13);
writeln("Which day?");
readln(day);
{计算输入的年份以前距1901.1.1有几天}
tempyear:=year-1901;
days:=(tempyear div 4)*1461+(tempyear mod 4)*365;
{计算输入的(月份-1)距输入年份1月1日共有几天}
for i:=month-1 downto 1 do
begin
case i of
1,3,5,7,8,10,12:days:=days+31;
4,6,9,11:days:=days+30;
2:
begin
if (year mod 4=0) then days:=days+29
else days:=days+28;
end;
end;
end;
{计算当前日子距1901.1.1总共有几天}
days:=days+day;
{输出星期}
xingqi:=days mod 7;
case xingqi of
0:writeln("Sunday");
1:writeln("Monday");
2:writeln("Tuesday");
3:writeln("Wednesday")
4:writeln("Thursday");
5:writeln("Friday");
6:writeln("Saturday");
end;
end.
const w:array[1..12]of byte=(1,4,4,0,2,5,0,3,6,1,4,6);
var year:word;month,week,days:byte;
begin
repeat
write('Input year(1901~2099):');
readln(year)
until (year>1900)and(year<2100);
repeat write('Input month(1~12):');readln(month)until month in [1..12];
writeln(' ====',year,'.',month,'====');
dec(year,1900);
week:=(w[month]+year+year div 4-byte((year mod 4=0)and(month<=2)))mod 7;
writeln(' SUN MON TUE WED THU FRI SAT');
write('':week*4);
for days:=1 to 31-byte(month in[4,6,9,11])-byte(month=2)*3+byte((month=2)and(year mod 4=0))do
if (days+week) mod 7=0 then writeln(days:4)else write(days:4);
readln;
end.
有公式的