purgaord.pas

{ ppc386 -va -vh *.pas }
{ COMIENZO DE DESCRIPCION

  Escribir un programa que elimina los elementos repetidos de
  una lista ordenada. 
  keywords: lista
  FIN DE DESCRIPCION }

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $ Id: purgaord.pas 2002/04/05 16:35 jdelia  Exp jdelia   $}

program prupurga;

uses u_listpi;

type
  lista = listpi ;

procedure ERROR (s: string);
begin
    writeln (s);
    halt;
end; {error}

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function PURGA_ORD (var L: lista) : boolean;
var
  p, q   : posicion;
  xp, xq : tipo_elemento;
begin
  PURGA_ORD := true ;
  p  := L.PRIMERO ;
  xp := L.RECUPERA (p);
  while (p <> L.FIN) and (PURGA_ORD) do begin
    q  := L.SIGUIENTE (p);
    if ( q = L.FIN ) then  exit ;
    xq := L.RECUPERA (q) ;
    if  (xq < xp) then
      PURGA_ORD := false
    else if (xq = xp) then
      L.SUPRIME (p)
    else begin
      p  := q;
      xp := xq;
    end; {if}
  end; {while}
  PURGA_ORD := true;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
var
  L : lista;
  p : posicion;
begin
  L.ANULA;
  L.IMPRIME ('lista inicial');
  p := L.PRIMERO;
  L.INSERTA (17,p);
  L.INSERTA (8,p);
  L.INSERTA (4,p);
  L.INSERTA (3,p);
  L.INSERTA (3,p);
  L.INSERTA (3,p);
  L.INSERTA (2,p);
  L.INSERTA (2,p);
  L.INSERTA (2,p);
  L.INSERTA (1,p);
  L.IMPRIME ('Lista inicial ordenada');

  if not PURGA_ORD (L) then begin
     ERROR ('La lista no esta en orden!');
  end ; {if}
  L.IMPRIME ('Lista ordenada y purgada');
end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}

Generated by GNU enscript 1.6.1.