All pastes #45686 Raw Edit

Someone

public text v1 · immutable
#45686 ·published 2006-03-14 16:17 UTC
rendered paste body
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.