{ File: invertic.pas }

{ Scopo: utilizzo della pila dei record di attivazione come memoria di lavoro }

program InvertiInput;
{ Legge una sequenza di caratteri in ingresso e la inverte usando una procedura
  iterativa ed una ricorsiva. }

const
  LungMax = 10;


  procedure InvertiInputIterativa;
  { Inverte una sequenza di caratteri letti in input. Versione iterativa }
  type
    TipoParola = array [1..LungMax] of char;
  var
    parola  : TipoParola;
    lung, i : integer;

  begin { InvertiInputIterativa }
    lung := 0;
    repeat                             { lettura e memorizzazione in un array }
      lung := lung + 1;
      read(parola[lung])
    until (parola[lung] = '.') or (lung = LungMax);

  { writeln('Sequenza invertita:'); }
    for i := lung downto 1 do               { stampa della sequenza invertita }
      write(parola[i])
  end; { InvertiInputIterativa }


  procedure InvertiInputRicorsiva;
  { Inverte una sequenza di caratteri letti in input. Versione ricorsiva }
  var
    ch : char;

  begin
    read(ch);
    if ch <> '.' then
      InvertiInputRicorsiva;    { chiamata ricorsiva }
  { else
      writeln('Sequenza invertita:'); }

    write(ch)                   { al ritorno dalla chiamata ricorsiva viene
                                  stampato il carattere letto }
  end; { InvertiInputRicorsiva }


begin { InvertiInput }
  writeln('Immetti una sequenza di caratteri (lunga al piu'' ',
          LungMax, ') terminata da ''.''!');
  InvertiInputIterativa;
  writeln;

  writeln('Immetti una sequenza di caratteri (di lunghezza qualsiasi) terminata da ''.''!');
  InvertiInputRicorsiva;
  writeln
end. { InvertiInput }