{ Terreno Antonio mat.9714216 }
unit
   pila_vet;

interface

uses
   vettori;
type
  tipo_pila=  record
                 a: tipo_array;
       testa: integer;
              end;

   procedure crea(var P: tipo_pila);
   function push(x: tipo_elemento;var P: tipo_pila): boolean;
   function pop(var x: tipo_elemento;var P: tipo_pila): boolean;
   function piena(P: tipo_pila): boolean;
   function vuota(P: tipo_pila): boolean;
   procedure visualizza_stato(P: tipo_pila);

implementation

procedure crea(var P: tipo_pila);

begin
   P.testa:=min-1;
end;

function push(x: tipo_elemento;var P: tipo_pila): boolean;

begin
   with P do
      if piena(P) then
         begin
       writeln('owerflow error');
       push:= false
    end
      else
         begin
       testa:=testa+1;
       A[testa]:=x;
       push:=true
    end
end;

function pop(var x: tipo_elemento;var P: tipo_pila): boolean;

begin
   with P do
      if vuota(P) then
         begin
       writeln('pila vuota! ->underflow error');
       pop:= false
    end
      else
         begin
       x:=A[testa];
       writeln('elemento estratto -> ',x);
       testa:=testa-1;
       pop:= true
    end
end;

function piena(P: tipo_pila): boolean;

begin
   piena:= (P.testa = max)
end;

function vuota(P: tipo_pila): boolean;

begin
   vuota:= (P.testa = min-1)
end;

procedure visualizza_stato(P: tipo_pila);

var
   i: integer;
begin
   if vuota(P) then
      writeln('pila vuota')
   else
      for i:= P.testa downto min do
         writeln(P.A[i])
end;

end.