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.