{ File: palin1.pas } { Scopo: array di caratteri } program Palindrome; { Data in input una sequenza di al piu' 20 lettere, terminata da '.', la memorizza in un array di caratteri, verifica se essa e` palindroma e stampa un messaggio conseguente. Si suppone che l'input sia corretto rispetto alla specifica. } { ALGORITMO 1) leggere l'input e metterlo in FRASE 2) verificare la palindromia di FRASE (fino a ULT) e assegnare PALIN opportunamente 3) stampare il messaggio sulla palindromia } const N = 20; var frase : array [1..N] of char; palin : boolean; c : char; i, j, ult : integer; begin { Palindrome } {lettura frase in input} i := 1; read(c); { lettura primo carattere } while c <> '.' do begin frase[i] := c; { assegnazione in FRASE dell'ultimo carattere letto } i := i+1; { preparazioneprossima iterazione: si incrementa i... } read(c); { ... e si legge il successivo carattere in input } end; ult := i-1; { in uscita dal ciclo i e' andata avanti anche per il '.' letto ... } readln; { NB. dopo aver letto '.' il cursore di input e' posizionato subito dopo '.' cioe' sull'Invio con cui abbiamo comunicato l'input: mandiamolo a capo ... } { stampa di controllo } write('parola letta, di lunghezza ', ult:3, ' = '); for i := 1 to ult do write(frase[i]); writeln; { verifica palindromia: controlliamo se sono uguali le lettere immetriche rispetto al centro della frase } i := 1; j := ult; palin := TRUE; { per ora PALIN e' palindroma (non e' dimostrato che non lo sia) } while palin and (i < j) do begin if frase[i] <> frase[j] then { se uno di questi test fallisce la frase } palin := FALSE; { non e` palindroma e possiamo uscire dal ciclo } { N.B. Non c'e` il ramo else } i := i+1; j := j-1 end; { stampa risultato } if palin then writeln(' ... e'' palindroma') else writeln(' ... non e'' palindroma') end. { Palindrome }