{ File: palin3.pas }

{ Scopo: array di caratteri, funzioni }

program StringhePalindrome;
{ Legge una sequenza di caratteri (su una riga) di lunghezza MASSIMA fissata e
  determina se e` palindroma.
}

const
  Nmax = 20;

type
  TipoIndice  = 1..Nmax;
  TipoStringa = packed array [TipoIndice] of char;

var
  fr   : TipoStringa;
  lung : integer;      { ATTENZIONE: viene inizializzata a 0 }
  ch   : char;


  function Palindroma (stringa: TipoStringa; lunghezza: TipoIndice): boolean;
  { Verifica se una stringa di una certa lunghezza e` palindroma. }
  var
    i : TipoIndice;
  begin
    Palindroma := TRUE;                      { assumiamo che sia palindroma }
    for i := 1 to trunc(lunghezza/2) do
      if stringa[i] <> stringa[lunghezza-i+1] then
        { appena viene trovato una coppia di elementi che NON soddisfa la
          condizione sappiamo che la stringa NON e` palindroma }
        Palindroma := FALSE
      { N.B. NON c'e' il ramo else }
  end; { Palindroma }


begin { StringhePalindrome }
  writeln('Scrivi una stringa di al piu'' ' , Nmax,
          ' caratteri terminata da un ''.'' !');
  lung := 0;
  read(ch);
  while (ch <> '.') and (lung < Nmax) do
  begin
    lung := lung + 1;
    fr[lung] := ch;                          { memorizza il carattere letto }
    read(ch)
  end;

  write('La stringa "', fr, '" e'' lunga ', lung);
  if Palindroma(fr, lung) then
    writeln(' e palindroma')
  else
    writeln(' e non palindroma')
end. { StringhePalindrome }