{ File: palindr1.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 }