{ File: palinfis.pas } { Scopo: array di caratteri, stringhe, confronto tra packed array } program StringhePalindrome; { Legge una sequenza di caratteri (su una riga) di lunghezza fissa e determina se e` palindroma. } const N = 7; type TipoStringa = packed array [1..N] of char; { In TurboPascal si puo` usare in alternativa la seguente dichiarazione: TipoStringa = string[N]; oppure TipoStringa = string; e` equivalente a string[256] } var fr : TipoStringa; ind : 1..N; function Palindroma (stringa: TipoStringa) : boolean; { Verifica se una stringa di lunghezza fissa e` palindroma. Usa una stringa di appoggio in cui copia la stringa al contrario. } var i : 1..N; rovesciata : TipoStringa; begin { Palindroma } for i := 1 to N do { copia la stringa rovesciandola } rovesciata[N-i+1] := stringa[i]; Palindroma := (stringa = rovesciata) { i due packed array possono essere confrontati direttamente } end; { Palindroma } begin { StringhePalindrome } writeln('Scrivi una stringa di ', N, ' caratteri !'); for ind := 1 to N do read(fr[ind]); { un packed array di caratteri deve essere letto un carattere alla volta } { N.B. In TurboPascal, se dichiariamo una variabile di tipo string[N] (oppure string) possiamo leggerla con un'unica istruzione di read. read(fr); } readln; write('La stringa "', fr, '" '); { un packed array di caratteri puo` essere stampato direttamente } if Palindroma(fr) then writeln('e'' palindroma') else writeln('non e'' palindroma') end. { StringhePalindrome }