{ 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 }