sacapar.pas
{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION
[Ejercicio tomado en el final del 13-Feb-2003].
Escribir un procedure SACAPAR (var L: lista; var C: cola);
que apendiza a la lista {\tt L} todos los elementos de
{\tt C} que son pares, los cuales a su vez deben ser
removidos de la cola {\tt C}. Se puede usar una
estructura auxiliar (cola o lista). Por ejemplo, si
inicialmente {\tt L= (2,3,4) } y {\tt C=(1,6,3,5,2,8)}
entonces, despues de hacer {\tt SACAPAR (L,C)} debe
quedar {\tt L=(2,3,4,6,2,8)} y {\tt C=(1,3,5)}.
keywords: lista, cola
FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $ Id: sacapar.pas 2003/02/02 11:10 jdelia Exp jdelia $ }
program p_sacapar ;
uses
u_listai, u_colaai ;
type
lista = listai ;
cola = colaai ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure ERROR (s: string);
begin
write ('error: ') ;
writeln (s);
halt ;
end ;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure SACAPAR (var L: lista; var C: cola);
var
Z : cola ;
p : posicion ;
x : tipo_elemento ;
begin
Z.ANULA ;
p := L.FIN ;
while not (C.VACIA) do begin
x := C.FRENTE ;
if ( x mod 2 = 0 ) then begin
L.INSERTA (x, p) ;
p := L.SIGUIENTE (p) ; end
else begin
Z.PONE (x);
end ; {if}
C.QUITA;
end ; {while}
{transfiere cola filtrada Z como nueva cola C}
while not (Z.VACIA) do begin
x := Z.FRENTE ;
C.PONE (x);
Z.QUITA;
end ; {while}
L.IMPRIME ('Debe imprimir: 2 3 4 6 2 8');
C.IMPRIME ('Debe imprimir: 1 3 5 ');
end;
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
L : lista ;
C : cola ;
p : posicion ;
begin
writeln ;
writeln ('INICIALIZA LISTA:');
L.ANULA;
p := L.PRIMERO ;
L.INSERTA (4, p);
L.INSERTA (3, p);
L.INSERTA (2, p);
L.IMPRIME ('Debe imprimir: 2 3 4');
writeln ;
writeln ('INICIALIZA COLA:');
C.ANULA ;
C.PONE (1);
C.PONE (6);
C.PONE (3);
C.PONE (5);
C.PONE (2);
C.PONE (8);
C.IMPRIME ('Debe imprimir: 1 6 3 5 2 8');
SACAPAR (L, C);
writeln
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
Generated by GNU enscript 1.6.1.