【题目】输入年、月、日,求这一天是星期几。
【参考程序1】
【算法提要】求出这一天离公元1年的元旦有多少天days,然后对7求余
const
first=1; {公元1年为基准}
first_week=1; {公元1年的元旦为星期一}
yue:array[1..12] of 1..31=(31,28,31,30,31,30,31,31,30,31,30,31);
week_:array[0..6] of string[20] =('Sunday','Monday','Tuesday','Wedsday',
'Thursday','Friday','Saturday');
var
days,week,year,month,date,i,years:longint;
begin
writeln('year:');readln(year);
writeln('month');readln(month);
writeln('date');readln(date);
years:=0; days:=0;
for i:=first to year-1 do
if (i mod 400=0) or (i mod 4=0) and (i mod 100<>0) then
begin years:=years+1;end; {注意处理闰年的情况}
days:=(year-first)*365+years; {离基准年过了多少天}
for i:=1 to month-1 do days:=days+yue[i]; {本年过了多少个月}
for i:=1 to date do days:=days+1; {本月过了多少天}
if ((year mod 400=0) or (year mod 4=0) and (year mod 100<>0))
and (month>3) then days:=days+1; {如果本年为闰年,且月份超2月,
还要考虑加1}
week:=((days-1) mod 7 +first_week ) mod 7; {求星期数}
writeln('it is ',week_[week]);
readln;
end.
【参考程序2】 用公式法: days:=trunc((year-1)*(1+1/4-1/100+1/400)+c)
用求出的days对7求余数。其中c为该天离该年元旦的天数
const
first=1;
first_week=1;
yue:array[1..12] of 1..31=(31,28,31,30,31,30,31,31,30,31,30,31);
week_:array[0..6] of string[20] =('Sunday','Monday','Tuesday','Wedsday',
'Thursday','Friday','Saturday');
var
days,week,year,month,date,i:longint;
begin
writeln('year:');readln(year);
writeln('month');readln(month);
writeln('date');readln(date);
days:=0;
for i:=1 to month-1 do days:=days+yue[i];
for i:=1 to date do days:=days+1;
if ((year mod 400=0) or (year mod 4=0) and (year mod 100<>0))
and (month>3) then days:=days+1;
days:=trunc((year-1)*(1+1/4-1/100+1/400)+days);
week:=days mod 7;
writeln('it is ',week_[week]);
readln;
end.