tpu/u_colapr.pas

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

  Colas de reales por punteros.
  keywords: cola, punteros

FIN DE DESCRIPCION }
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
{ $Id: u_colapr.pas,v 1.1 2002/04/25 15:57:09 mstorti Exp mstorti $}

unit u_colapr;

interface

type
  tipo_elemento = integer;
  ptipo_celda = ^tipo_celda;

  tipo_celda = record
    elemento : tipo_elemento;
    sig      : ptipo_celda
  end;

  colapr = object
  private
    ant, post: ptipo_celda;
      procedure ERROR (s: string);
    public
      procedure ANULA;
      procedure PONE (x: tipo_elemento);
      procedure QUITA;
      function  VACIA: boolean;
      function  FRENTE: tipo_elemento;
      procedure IMPRIME (s : string) ;
  end;			      

  implementation

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure colapr.ERROR (s:string);
begin
  write ('error: ');
  writeln (s);
  halt;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure colapr.ANULA;
begin
  new (ant);
  ant^.sig := nil;
  post := ant;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure colapr.PONE (x: tipo_elemento);
begin
  new (post^.sig);
  post := post^.sig;
  post^.elemento := x;
  post^.sig := nil;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure colapr.QUITA;
begin
  if VACIA then
    error ('la cola esta vacia')
  else begin
    ant := ant^.sig
  end ; {if}
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function  colapr.VACIA : boolean;
begin
  VACIA := ant = post;
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function  colapr.FRENTE : tipo_elemento;
begin
  if ( VACIA ) then
    ERROR (' la cola esta vacia')
  else begin
    FRENTE := ant^.sig^.elemento
  end ; {if}
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure colapr.IMPRIME (s : string);
begin
  writeln ;
  if length (s) > 0 then writeln (s);
  writeln ('imprime cola : ');
  while ( not VACIA ) do begin
    write (FRENTE, ' ');
    QUITA ;
  end; {while}
  writeln ;
end; {IMPRIME}

end.
{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}

Generated by GNU enscript 1.6.1.