cadenapq.pas
{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION
Determinar si una cadena $z$ es de la forma $z = x C y$,
donde $y$ es la cadena inversa de $x$. Se usan los
TAD-PILA y TAD-COLA de caracteres por punteros.
keywords: pila, cola
FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{$ Id: cadenapq.pas 2002/04/11 11:10 jdelia Exp jdelia $}
program p_cadenapq ;
uses
u_pilapc, u_colapc ;
const
nulo = '' ;
blanco = ' ' ;
separador = 'C' ;
type
pila = pilapc ;
cola = colapc ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure ERROR (s: string);
begin
write ('error: ') ;
writeln (s);
halt ;
end ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function ES_CADENAPQ (s: string): boolean ;
var
b : boolean ;
j, k, n : integer ;
P : pila ;
C : cola ;
x, y : char ;
begin
ES_CADENAPQ := false ;
k := 0 ;
n := length (s);
for j := 1 to n do begin
if ( s [j] = separador ) then begin
k := j ;
break
end ; {if}
end ; {j}
if ( k = 0 ) then exit ;
P.ANULA ;
j := 1 ;
while ( j <= k ) do begin
x := s [j];
b := (x <> blanco) and (x <> nulo) and (x <> separador);
if (b) then begin write (x) ; P.METE (x) end ;
j := j + 1 ;
end ; {while}
writeln ;
C.ANULA ;
j := k + 1 ;
while ( j <= n ) do begin
y := s [j];
b := (y <> blanco) and (y <> nulo) and (y <> separador);
if (b) then begin write (y) ; C.PONE (y) end ;
j := j + 1 ;
end ; {while}
writeln ;
writeln ;
while not (P.VACIA) do begin
x := P.TOPE ;
y := C.FRENTE ;
P.SACA;
C.QUITA;
writeln ('caracter extraido en la pila = ', x);
writeln ('caracter extraido en la cola = ', y);
if (x <> y) then begin writeln ; exit end ;
end ; {while}
writeln ;
ES_CADENAPQ := true ;
end;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
s : string;
begin
writeln;
write ('string: ');
readln (s) ;
if ( ES_CADENAPQ (s) ) then
writeln ('SI es de la forma x C y, donde y = inv (x) ')
else begin
writeln ('NO es de la forma x C y, donde y = inv (x) ')
end ; {if}
writeln
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
Generated by GNU enscript 1.6.1.