请详细解释以下pascal程序的原理。(做万年历的)

来源:百度知道 编辑:UC知道 时间:2024/07/02 03:39:50
program week(input,output);
var
y,m,temp,sum,a,b,d,w,n:integer;
begin
writeln('Input year and month');
readln(y,m);
if(y mod 4=0)and(y mod 100<>0)or(y mod 400=0) then
case m of
1,4,7:n:=5;
2,8:n:=1;
3,11:n:=2;
5:n:=0;
6:n:=3;
9,12:n:=4;
10:n:=6
end
else
case m of
1,10:n:=6;
2,3,11:n:=2;
4,7:n:=5;
5:n:=0;
6:n:=3;
8:n:=1;
9,12:n:=4
end;
w:=(y div 4)+(y mod 7)+n;
w:=w-(w div 7)*7;
writeln(' sun mon tue wed thu fri sat');
temp:=w;
while temp>=1 do
begin
write(' ');
temp:=temp-1
end;
b:=1;
a:=1;
if temp=0 then
for b:=1 to (7-w) do
begin
wri

程序代码有点长,其实本质就是模拟万年历的计数。

算法是模拟
先判断是否是闰年
在判断月份

program adsf;
var
year:1000..9999;
month,i:1..12;
day:1..31;
dayth,b,c,d,dayth1,dayth2:integer;

begin
writeln('need year,month and dayth');
readln(year,month,dayth);
if (year mod 4=0)and(year mod 100<>0)or(year mod 400=0)
then writeln(year,' is run nian')
else writeln(year,' is ping nian');
case month of
1,3,5,7,8,10,12:day:=31;
4,6,9,11:day:=30;
2: if (year mod 4=0)and(year mod 100<>0)or(year mod 400=0)
then day:=29
else day:=28;
end;
begin
if month=1
then writeln( ' January has ',day )
else if month =2
then writeln( ' February has ',day)