{ File: somvett3.pas }

program SommaVettori2;
{ Legge da input due vettori di N componenti, effettua una stampa di controllo,
  calcola e stampa il vettore somma.
  Il tutto viene ripetuto finche' l'utente dice di voler continuare. }

const
  N = 5;

type
  TipoVett = array [1..N] of integer;

var
  a, b, c  : TipoVett;
  risposta : char;     { carattere per leggere la risposta dell'utente }


  procedure LeggiVett (var v: TipoVett);
  var
    i : integer;
  begin
    for i := 1 to N do
    begin
      write(' - elemento d''indice ', i:2, ' ');
      readln(v[i])
    end
  end; { LeggiVett }

  procedure StampaVett (v: TipoVett);
  var
    i : integer;
  begin
    write(' indice ');
    for i := 1 to N do
      write(i:3, ' ');
    writeln;
    write(' valore ');
    for i := 1 to N do
      write(v[i]:3, ' ')
  end; { StampaVett }

  procedure SommaVett (v1, v2: TipoVett; var v3: TipoVett);
  var
    i : integer;
  begin
    for i := 1 to N do v3[i]:= v1[i] + v2[i];
  end; { SommaVett }


  procedure LeggiSommaEStampa;
  { Si occupa di eseguire un ciclo lettura vettori - somma - stampa sommma.
    Questa procedura viene chiamata iterativamente dal programma principale,
    ed e` utilizzata solo per "modularizzare" il programma:
    non ha entita' locali, ma usa le variabili e le procedure dichiarate nella
    parte dichiarativa del programma principale.
  }

  begin
    writeln(' -- lettura primo vettore   --');
    LeggiVett(a);
    writeln(' -- lettura secondo vettore --');
    LeggiVett(b);
    writeln;
    writeln(' -- stampe di controllo     --');
    writeln(' -----------------------------');
    writeln(' -- primo vettore:          --');
    StampaVett(a);
    writeln;
    writeln(' -----------------------------');
    writeln(' -- secondo vettore:        --');
    StampaVett(b);
    writeln;
    writeln(' -----------------------------');
    writeln(' -- vettore somma:          --');
    SommaVett(a, b, c);
    StampaVett(c);
    writeln;

    writeln('<RET> per continuare.');
    readln
  end; { LeggiSommaEStampa }


begin { SommaVettori2 }
  writeln('inizio programma');

  repeat
    write('vuoi sommare vettori? (n/N per no) ');
    readln(risposta);
    if (risposta <> 'n') and (risposta <> 'N')
      then LeggiSommaEStampa;
  until (risposta = 'n') or (risposta = 'N');

  writeln('fine programma.');
{ writeln(' <RET> per finire.');
  readln; }
end. { SommaVettori2 }