pila2.pas
{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION
Tareas simples sobre el TAD-PILA.
FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ Tareas simples sobre un TAD-PILA.
La pila inicial P0 es la misma en las tareas a-e:
P0 = [ 18 34 9 14 26 5 ];
donde el tope de la pila esta hacia a la izquierda.
Tarea 2a: asignar 0 al segundo elemento desde el tope de
la pila P0, y dejarla sin sus dos primeros
elementos. Queda:
P1 = [ 0 9 14 26 5 ];
Tarea 2b: asignar 0 al segundo elemento desde el tope de
la pila P0, sin modificarla. Para eso,
vamos descargando la pila P0, hasta el lugar
apropiado, y los vamos pasando a la pila auxiliar
Q = [ 18 34 ].
Esta pila auxiliar Q la usamos para recordar, en
forma selectiva, a los elementos desapilados (es
decir, descartando los que no nos interesan). Luego
de desapilar P convenientemente, le introducimos
el nuevo item 0 y volvemos apilar los elementos
remanentes, quedando:
P2 = [ 18 0 9 14 26 5 ];
Tarea 2c: asignar 0 al elemento ubicado en la posicion n=4,
contada desde el tope de la pila P0, dejandola sin
sus 4 elementos superiores. Queda:
P3 = [ 0 26 5 ];
Tarea 2d: asignar 0 al elemento fondo de la pila P0, dejandola
sin sus elementos superiores. Queda:
P4 = [ 0 ];
Tarea 2e: asignar 0 al elemento fondo de la pila P0, dejando
el resto de los elementos sin modificar.
Otra vez usamos la pila auxiliar Q en la misma
forma que en la tarea 2b, quedando:
P5 = [ 18 34 9 14 26 0 }
keywords: pila
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $ Id: pila2.pas 2002/04/10 7:10 jdelia Exp jdelia $}
program tareas_simples_pila ;
uses u_pilapi ;
type
pila = pilapi;
var
P, Q : pila ;
x : tipo_elemento ;
k,n : integer ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
begin
writeln ;
writeln (' Tareas simples sobre una pila ');
writeln ;
writeln (' tarea 2a: ');
P.ANULA ;
P.METE ( 5);
P.METE (26);
P.METE (14);
P.METE ( 9);
P.METE (34);
P.METE (18);
P.SACA ; {descarta el tope en P}
P.SACA ; {descarta el tope en P}
P.METE (0);
P.IMPRIME ('pila actual');
writeln ;
writeln (' tarea 2b: ');
P.ANULA ;
Q.ANULA ;
P.METE ( 5);
P.METE (26);
P.METE (14);
P.METE ( 9);
P.METE (34);
P.METE (18);
x := P.TOPE;
Q.METE (x);
P.SACA ; {descarta el tope en P}
P.SACA ; {descarta el tope en P}
P.METE (0);
x := Q.TOPE;
P.METE (x);
P.IMPRIME ('pila P');
writeln ;
writeln (' tarea 2c: ');
P.ANULA ;
P.METE ( 5);
P.METE (26);
P.METE (14);
P.METE ( 9);
P.METE (34);
P.METE (18);
n := 4 ; {un lugar preciso dentro de la pila}
for k := 1 to (n) do begin
P.SACA ; {descarta n-topes en p}
end ; {for}
P.METE (0);
P.IMPRIME (' pila P');
writeln ;
writeln (' tarea 2d: ');
P.ANULA ;
P.METE ( 5);
P.METE (26);
P.METE (14);
P.METE ( 9);
P.METE (34);
P.METE (18);
while not P.VACIA do begin
P.SACA ; {descarta n-topes en p}
end ; {while}
P.METE (0);
P.IMPRIME (' pila P');
writeln ;
writeln (' tarea 2e: ');
P.ANULA ;
Q.ANULA ;
P.METE ( 5); {n=1}
P.METE (26); {n=2}
P.METE (14); {n=3}
P.METE ( 9); {n=4}
P.METE (34); {n=5}
P.METE (18); {n=6}
while not P.VACIA do begin
x := P.TOPE ;
Q.METE (x);
P.SACA ;
end ; {for}
P.METE (0);
Q.SACA ; {descarta tope en Q}
while not Q.VACIA do begin
x := Q.TOPE ;
P.METE (x);
Q.SACA ;
end ; {while}
P.IMPRIME ('pila P');
end .
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
Generated by GNU enscript 1.6.1.