pascal编写输出星期几的问题

来源:百度知道 编辑:UC知道 时间:2024/05/09 15:39:40
program p5_3_5;
var
y,m,d:integer;
y1,m1:integer;
s:integer;
begin
readln(y,m,d);
y1:=y-1+(y-1) div 4-(y-1)div 100+(y-1) div 400;
case m of
1,10:m1:=0;
5:m1:=1;
8:m1:=2;
2,3,11:m1:=3;
6:m1:=4;
9,12:m1:=5;
4,7:m1:=6;
end;
writeln((y1+m1+d) mod 7);
end.
这一段程序中
y1:=y-1+(y-1) div 4-(y-1)div 100+(y-1) div 400;
case m of
1,10:m1:=0;
5:m1:=1;
8:m1:=2;
2,3,11:m1:=3;
6:m1:=4;
9,12:m1:=5;
4,7:m1:=6;
是什么意思?能不能给点详细的注释。

因为闰年满足4年一闰,100年不闰,400年又闰的原则(不动可以查阅有关闰年的资料)
y1:=y-1+(y-1) div 4-(y-1)div 100+(y-1) div 400;
这一句是利用容斥原理算出从耶稣诞生的那一年到公园y年有多少年是闰年,
就要加上闰年二月所多的那一天,即y1.
case m of
1,10:m1:=0;
5:m1:=1;
8:m1:=2;
2,3,11:m1:=3;
6:m1:=4;
9,12:m1:=5;
4,7:m1:=6;
这个case是计算从公园y年1月1日到m-1月的天数mod 7的余数
最后d可以直接运算
所以是(y1+m1+d) mod 7

这整段程序大致是为了求出它是一年当中的第几天,
不过很难表达出每一句的具体意思,
因为这段程序被简化过

最好把题目要求和输入输出一起写出来
那样才清晰的知道你输入的是什么啊
对吧...