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