palindro1.pas

{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION

  Ejercicio tomado en el Ex\'amen Final del 30/7/2001:
  dado un string verificar si es un palindromo.

FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ Ejemplos:
  Menem
  Neuquen
  De La Rua
  Gonzalez
  Dabale arroz a la zorra, el abad.

  Salida:
  "Menem"    : SI es un palindromo!!
  "De La Rua": NO es un palindromo!!
  "Gonzalez" : NO es un palindromo!!
  "Dabale arroz a la zorra, el abad.": SI es un palindromo!!
}
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{$ Id: palindro1.pas  2002/04/10  7:40 jdelia Exp jdelia   $}
program p_palindro1;
uses u_pilapc, u_colapc;
type
  pila = pilapc ;
  cola = colapc ;
   
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function ES_PALINDROMO (s: string): boolean ;
var
  P    : pila ;
  C    : cola ;
  o    : tipo_elemento ;
  j    : integer;
  siga : boolean ;
begin
  C.ANULA;
  P.ANULA;
  for j := 1 to length (s) do begin 
    o := s [j];
    { convierte letras a minusculas }
    if (o >= 'A') and (o <= 'Z') then begin
      o := chr (ord (o) - ord ('A') + ord ('a'));
    end ; {if}
    { pasan solo letras }
    if (o >= 'a') and (o <= 'z') then begin
       C.PONE (o);
       P.METE (o);
    end ; {if}
  end ; {j}
  siga := true ;
  while not (C.VACIA) and (siga) do begin
    write   ('frente: ', C.FRENTE, '  ');
    writeln ('tope  : ', P.TOPE);
    if ( C.FRENTE <> P.TOPE ) then
       siga := false
    else begin
       C.QUITA;
       P.SACA;
    end; {if}
  end ; {while} 
  ES_PALINDROMO := ( C.VACIA = true );
end ;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
  s : string;
begin
  writeln;
  write ('string: ');
  readln (s);
  if ( ES_PALINDROMO (s) ) then
    writeln ('SI es un palindromo')
  else begin
    writeln ('NO es un palindromo');
  end ; {if}
end.  
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}

Generated by GNU enscript 1.6.1.