tpu/u_colexp.pas

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

  Cola de expresi\'on usada en evaluaci\'on de expresiones
  algebraicas. keywords: cola

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

unit u_colexp ;

interface

type

  tipo_elemento1 = real;
  tipo_elemento2 = boolean;

  ptipo_celda = ^tipo_celda;

  tipo_celda = record
    a  : tipo_elemento1;
    b  : tipo_elemento2;
    sig: ptipo_celda
  end;

  colexp = object
  private
    ant, post: ptipo_celda;
    procedure ERROR (s: string);
  public
    procedure ANULA;
    procedure PONE (x: tipo_elemento1; y: tipo_elemento2);
    procedure QUITA;
    function  VACIA: boolean;
    function  FRENTE1: tipo_elemento1;
    function  FRENTE2: tipo_elemento2;
    procedure IMPRIME;
  end;

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

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

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure colexp.PONE (x: tipo_elemento1; y: tipo_elemento2);
begin
  new (post^.sig);
  post := post^.sig;
  post^.a := x;
  post^.b := y;
  post^.sig := nil;
end;

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

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function  colexp.VACIA : boolean;
begin
  VACIA := ( ant = post );
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function  colexp.FRENTE1 : tipo_elemento1;
begin
  if ( VACIA ) then
    ERROR (' la cola esta vacia')
  else begin
    FRENTE1 := ant^.sig^.a;
  end ; {if}
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
function  colexp.FRENTE2 : tipo_elemento2;
begin
  if ( VACIA )  then
     ERROR (' la cola esta vacia')
  else begin
     FRENTE2 := ant^.sig^.b;
  end ; {if}
end;

{-----+-----+-----+-----+-----+-----+-----+-----+-----+-----}
procedure  colexp.IMPRIME;
var
  p: ptipo_celda;
begin
  p := ant^.sig;
  while (p <> nil) do begin
    writeln (p^.a, p^.b);
    p := p^.sig;
  end ; {while}
end;

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

Generated by GNU enscript 1.6.1.