intercala1.pas

{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION
  Escriba un procedimiento para intercalar dos listas
  ordenadas L1 y L2 en una nueva lista L tambi\'en ordenada.
  Esta versi\'on se copia todo L1 en L3 y despu\'es se usa 
  INSERTA_ORD para poner los elementos de L2 en los lugares
  correctos de L (ver tambi\'en ``intercala2.pas'').
  keywords: lista
 FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $ Id: intercala1.pas 2003/03/12 16:30 mstorti Exp jdelia$ }
program p_intercala1 ;

uses u_listpi;

type
  lista = listpi ;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure COPIA (L1: lista ; var L2: lista);
var 
  p : posicion;
  e : tipo_elemento ;
begin
  L2.ANULA ;
  p := L1.PRIMERO ;
  while ( p <> L1.FIN ) do begin
    e := L1.RECUPERA (p);
    L2.INSERTA (e, L2.FIN) ;
    p := L1.SIGUIENTE (p)
  end ;  {while}
  L2.IMPRIME ('lista copia');
  readln
end ; 

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure INSERTA_ORD (e: tipo_elemento; var L: lista);
var 
  p : posicion;
begin
  p := L.PRIMERO ;
  while (p <> L.FIN) and (L.RECUPERA(p) <= e) do begin
    p := L.SIGUIENTE (p) 
  end ; {while}
  L.INSERTA (e, p)
end ;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure INTERCALA1 (L1, L2: lista ; var L3: lista);
var 
  p : posicion;
  e : tipo_elemento ;
begin
  COPIA (L1,L3) ;
  p := L2.PRIMERO ;
  while ( p <> L2.FIN ) do begin
    e := L2.RECUPERA (p);
    INSERTA_ORD (e, L3) ;
    p := L2.SIGUIENTE (p);
    L3.IMPRIME ('lista intercalada actual L');
  end {while}
end ;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
  L1, L2, L3 : lista;
  p1, p2     : posicion;
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');

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

Generated by GNU enscript 1.6.1.