{ File: datasuN2.pas }

program DataSuccessiva;
{ Legge giorno, mese ed anno di una data, un intero n, e determina la data
  di n giorni dopo.
  La data finale deve essere del XX secolo.
}

var
  g, m, a     : integer;   { rappresentano la data }
  quanti_dopo : integer;   { numero di giorni di cui avanzare }
  i           : integer;   { indice per il ciclo }

  procedure AvanzaGiorni (var giorno, mese, anno : integer;
                            { vengono aggiornati ai valori della nuova data }
                          num_giorni : integer );

  var
    giorni_del_mese : integer;  { giorni del mese corrente }

    function GiorniDelMese (mm, aa : integer): integer;
    { Calcola il numero dei giorni del mese. }
    begin
      case mm of
        1,3,5,7,8,10,12 : GiorniDelMese := 31;
        4,6,9,11        : GiorniDelMese := 30;
        2               : if (aa mod 4 = 0) and (aa <> 1900) then
                            GiorniDelMese := 29
                          else
                            GiorniDelMese := 28
      end { case }
    end; { GiorniDelMese }

  begin { AvanzaGiorni }
    repeat
      giorni_del_mese := GiorniDelMese(mese,anno);
      if giorno + num_giorni <= giorni_del_mese then
      begin   { avanza direttamente di num_giorni }
        giorno := giorno + num_giorni;
        num_giorni := 0
      end
      else    { portati al primo del mese successivo }
      begin
        num_giorni := num_giorni - (giorni_del_mese - giorno + 1);
        giorno := 1;
        if mese = 12 then
        begin
          mese := 1;
          anno := anno + 1
        end
        else
          mese := mese + 1
      end
    until num_giorni = 0
  end; { AvanzaGiorni }


begin { DataSuccessiva }
  { lettura della data }
  write('Data (giorno, mese, anno) ? ');
  readln(g, m, a);
  writeln;
  write('Quanti giorni dopo ? ');
  readln(quanti_dopo);

  write(quanti_dopo, ' giorni successivi al',
        g:3, '/', m:2, '/', a:4, ' e'' ');

  AvanzaGiorni(g, m, a, quanti_dopo);

  { stampa la data aggiornata }
  writeln(g:2, '/', m:2, '/', a:4)
end. { DataSuccessiva }