Viết chương trình nhập 2 mốc thời gian (ngày, tháng, năm). Hãy kiểm tra xem đó có phải là những ngày tháng năm hợp lệ không? Nếu hợp lệ, hãy tính số ngày giữa hai mốc thời gian đó.
Giải
Var
ng1,t1,n1,ng2,t2,n2,ng,i: Integer;
kt1,kt2:boolean;
Function nhuan(x:integer): boolean;
Begin
if ((x mod 4 = 0) and ((x mod 100) <> 0)) or ((x mod 400) = 0) then nhuan:=true
else nhuan:=false;
End;
Procedure Kt(a,b,c:Integer;var d:boolean);
Begin
if (b in [1,3,5,7,8,10,12]) and (a<32) and (a>0) then d:=true
else if (b in [4,6,9,11]) and (a<31) and (a>0) then d:=true
else if (b=2) and nhuan(c) and (a<30) and (a>0) then d:=true
else if (b=2) and (a<29) and (a>0) then d:=true
else d:=false;
End;
BEGIN
Repeat
Writeln('Nhap moc thoi gian thu nhat: '); Readln(ng1,t1,n1);
KT(ng1,t1,n1,kt1);
Writeln('Nhap moc thoi gian thu hai: '); Readln(ng2,t2,n2);
KT(ng2,t2,n2,kt2);
if (kt1=false) or (kt2=false) then Write('Ngay thang nam khong hop le, moi ban nhap lai.');
Until kt1 and kt2;
If n2 = n1 Then if t2=t1 then ng:=ng2-ng1+1
Else
begin
if t1 in [1,3,5,7,8,10,12] then ng:=31-ng1+1;
if t1 in [4,6,9,11] then ng:=30-ng1+1; if (t1 = 2) and nhuan(n1) then ng:=29-ng1+1;
if (t1=2) and (nhuan(n1) = false) then ng:=28-ng1+1;
for i:=t1+1 to t2-1 do
begin
if i in [1,3,5,7,8,10,12] then ng:=ng+31; if i in [4,6,9,11] then ng:=ng+30;
if (i = 2) and nhuan(n1) then ng:=29;
if (i=2) and (nhuan(n1) = false) then ng:=ng+28;
end;
ng:=ng+ng2;
end;
If n1 <> n2 Then
begin
if t1 in [1,3,5,7,8,10,12] then ng:=31-ng1+1;
if t1 in [4,6,9,11] then ng:=30-ng1+1;
if (t1=2) and nhuan(n1) then ng:=29-ng1+1;
if (t1=2) and (nhuan(n1) = false) then ng:=28-ng1+1;
for i:=t1+1 to 12 do
begin
if i in [1,3,5,7,8,10,12] then ng:=ng+31;
if i in [4,6,9,11] then ng:=ng+30;
if (i=2) and nhuan(n1) then ng:=ng+29;
if (i=2) and (nhuan(n1) = false) then ng:=ng+28;
end;
for i:=n1+1 to n2-1 do
if nhuan(i) then ng:=ng+366
else ng:=ng+365;
for i:=1 to t2-1 do
begin
if i in [1,3,5,7,8,10,12] then ng:=ng+31;
if i in [4,6,9,11] then ng:=ng+30;
if (i = 2) and nhuan(n2) then ng:=ng+29;
if (i=2) and (nhuan(n2) = false) then ng:=ng+28;
end;
ng:=ng+ng2;
end;
Writeln('So ngay giua hai moc thoi gian la: ',ng);
readln;
END.
No comments:
Post a Comment
Cảm ơn bạn đã nhận xét