10.04.2017

Số ngày ở giữa 2 mốc

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