concatena.pas

{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION
  Escriba un programa para concatenar dos listas de enteros
  L1 y L2 en una nueva lista L3. Esta soluci\'on
  llama primero al procedimiento COPIA para copiar la 
  primera lista L1 en la lista L3 y, luego, apendiza
  la lista L2 al final de L3.
  Esta versi\'on usa la unidad 'u_listpi', es decir, listas
  de enteros por punteros y sin puntero a la celda final.
  keywords: lista

 FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $Id: concatena.pas 2002/04/05 12:00 mstorti Exp jdelia    $}

program p_concatena ;

uses u_listpi ;

type
  lista = listpi ;

var
  L1, L2, L3 : lista ;
  p1, p2     : posicion;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure COPIA (L1: lista ; var L2: lista);
var 
  p1 : posicion;
  e1 : tipo_elemento ;
begin
  L2.ANULA ;
  p1 := L1.PRIMERO ;
  while ( p1 <> L1.FIN ) do begin
    e1 := L1.RECUPERA (p1);
    L2.INSERTA (e1, L2.FIN);
    p1 := L1.SIGUIENTE (p1);
  end ; {while}
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure CONCATENA (L1, L2: lista ; var L3: lista);
var 
  p2 : posicion;
  e2 : tipo_elemento ;
begin
  COPIA (L1, L3) ;
  p2 := L2.PRIMERO ;
  while ( p2 <> L2.FIN ) do begin
    e2 := L2.RECUPERA (p2);
    L3.INSERTA (e2, L3.FIN);
    p2 := L2.SIGUIENTE (p2);
  end ; {while}
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
begin
  L1.ANULA ;
  p1 := L1.PRIMERO ;
  L1.INSERTA (5, p1);
  L1.INSERTA (3, p1);
  L1.INSERTA (1, p1);
  L1.IMPRIME ('lista L1');

  L2.ANULA ;
  p2 := L2.PRIMERO ;
  L2.INSERTA (6, p2);
  L2.INSERTA (4, p2);
  L2.INSERTA (2, p2);
  L2.IMPRIME ('lista L2');

  CONCATENA (L1, L2, L3);
  L3.IMPRIME ('lista concatenada L3');
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}

Generated by GNU enscript 1.6.1.