program Cronos; uses Crt; var Dia_Inicial, Dia_Final, Mes_Inicial, Mes_Final, I: Integer; Ano_Inicial, Ano_Final, TotalDias: LongInt; DiasMes: array[1..12] of Integer; NomeMes: array[1..12] of string[3]; const EDataInv = '*** ERRO ***'; begin DiasMes[1] := 31; DiasMes[2] := 28; DiasMes[3] := 31; DiasMes[4] := 30; DiasMes[5] := 31; DiasMes[6] := 30; DiasMes[7] := 31; DiasMes[8] := 31; DiasMes[9] := 30; DiasMes[10] := 31; DiasMes[11] := 30; DiasMes[12] := 31; NomeMes[1] := 'Jan'; NomeMes[2] := 'Fev'; NomeMes[3] := 'Mar'; NomeMes[4] := 'Abr'; NomeMes[5] := 'Mai'; NomeMes[6] := 'Jun'; NomeMes[7] := 'Jul'; NomeMes[8] := 'Ago'; NomeMes[9] := 'Set'; NomeMes[10] := 'Out'; NomeMes[11] := 'Nov'; NomeMes[12] := 'Dez'; TotalDias := 1; Writeln; TextColor(15); Write(' _/_/_/ '); Write(' _/ _/ _/_/ _/_/ _/_/_/ _/_/ _/_/_/ '); Write(' _/ _/_/ _/ _/ _/ _/ _/ _/ _/_/ '); Write(' _/ _/ _/ _/ _/ _/ _/ _/ _/_/ '); Write(' _/_/_/ _/ _/_/ _/ _/ _/_/ _/_/_/ '); NormVideo; Writeln; Writeln('DATA INICIAL:'); Writeln('~~~~~~~~~~~~'); Write('- Dia: '); Readln(Dia_Inicial); if (Dia_Inicial > 31) or (Dia_Inicial < 1) then begin Writeln; Writeln(EDataInv); Writeln('Este dia nao existe.'); Exit; end; Write('- Mes: '); Readln(Mes_Inicial); if (Mes_Inicial > 12) or (Mes_Inicial < 1) then begin Writeln; Writeln(EDataInv); Writeln('Este mes nao existe.'); Exit; end; Write('- Ano: '); Readln(Ano_Inicial); Writeln; if (Mes_Inicial = 2) and (Dia_Inicial = 29) and ((Ano_Inicial mod 4) <> 0) then begin Writeln(EDataInv); Writeln(Ano_Inicial, ' nao eh um ano bissexto.'); Exit; end; if (Mes_Inicial = 2) and (Dia_Inicial > 29) then begin Writeln(EDataInv); Writeln(NomeMes[Mes_Inicial], ' nao possui ', Dia_Inicial, ' dias.'); Exit; end; for I := 1 to 12 do begin if (I = 2) then begin I := 3; end; if (Mes_Inicial = I) and (Dia_Inicial > DiasMes[I]) then begin Writeln(EDataInv); Writeln(NomeMes[Mes_Inicial], ' nao possui ', Dia_Inicial, ' dias.'); Exit; end; end; Writeln('DATA FINAL:'); Writeln('~~~~~~~~~~'); Write('- Dia: '); Readln(Dia_Final); if (Dia_Final > 31) or (Dia_Final < 1) then begin Writeln; Writeln(EDataInv); Writeln('Este dia nao existe.'); Exit; end; Write('- Mes: '); Readln(Mes_Final); if (Mes_Final > 12) or (Mes_Final < 1) then begin Writeln; Writeln(EDataInv); Writeln('Este mes nao existe.'); Exit; end; Write('- Ano: '); Readln(Ano_Final); Writeln; if (Mes_Final = 2) and (Dia_Final = 29) and ((Ano_Final mod 4) <> 0) then begin Writeln(EDataInv); Writeln(Ano_Final, ' nao eh um ano bissexto.'); Exit; end; if (Mes_Final = 2) and (Dia_Final > 29) then begin Writeln(EDataInv); Writeln(NomeMes[Mes_Final], ' nao possui ', Dia_Final, ' dias.'); Exit; end; for I := 1 to 12 do begin if (I = 2) then begin I := 3; end; if (Mes_Final = I) and (Dia_Final > DiasMes[I]) then begin Writeln(EDataInv); Writeln(NomeMes[Mes_Final], ' nao possui ', Dia_Final, ' dias.'); Exit; end; end; if (Ano_Inicial > Ano_Final) then begin Writeln(EDataInv); Writeln('Ano inicial maior que o ano final.'); Exit; end; if (Ano_Inicial = Ano_Final) and (Mes_Inicial > Mes_Final) then begin Writeln(EDataInv); Writeln('Mes inicial maior que o mes final.'); Exit; end; if (Ano_Inicial = Ano_Final) and (Mes_Inicial = Mes_Final) and (Dia_Inicial > Dia_Final) then begin Writeln(EDataInv); Writeln('Dia inicial maior que o dia final.'); Exit; end; if (Dia_Inicial = Dia_Final) and (Mes_Inicial = Mes_Final) and (Ano_Inicial = Ano_Final) then begin Writeln('De ', Dia_Inicial, '/', NomeMes[Mes_Inicial] , '/', Ano_Inicial, ' ate ', Dia_Final, '/', NomeMes[Mes_Final], '/', Ano_Final, ' decorreu apenas ', TotalDias, ' dia.'); Exit; end; if (Ano_Inicial = Ano_Final) then begin if (Mes_Inicial <= 2) and (Mes_Final >= 2) then begin if ((Ano_Inicial mod 4) = 0) then begin TotalDias := TotalDias + 1; end; end; if (Mes_Inicial = Mes_Final) then begin TotalDias := TotalDias + Dia_Final - Dia_Inicial; end else begin TotalDias := TotalDias + DiasMes[Mes_Inicial] - Dia_Inicial + Dia_Final; end; for I := Mes_Inicial + 1 to Mes_Final - 1 do begin TotalDias := TotalDias + DiasMes[I]; end; end else begin if ((Ano_Inicial mod 4) = 0) then begin TotalDias := TotalDias + 1; end; TotalDias := TotalDias + ((Ano_Final - Ano_Inicial) div 4) + DiasMes[Mes_Inicial] - Dia_Inicial + Dia_Final; for I := Ano_Inicial + 1 to Ano_Final - 1 do begin TotalDias := TotalDias + 365; end; for I := Mes_Inicial + 1 to 12 do begin TotalDias := TotalDias + DiasMes[I]; end; for I := Mes_Final - 1 downto 1 do begin TotalDias := TotalDias + DiasMes[I]; end; end; Writeln('De ', Dia_Inicial, '/', NomeMes[Mes_Inicial] , '/', Ano_Inicial, ' ate ', Dia_Final, '/', NomeMes[Mes_Final], '/', Ano_Final, ' decorreram ', TotalDias, ' dias.'); end.