type
TipoPosPila = 0..MaxPila;
TipoPila = record
pila : array[1..MaxPila] of TipoElemPila;
pos : TipoPosPila;
end;
procedure InitPila (var p: TipoPila);
begin
p.pos := 0
end;
function TestPilaVuota (p: TipoPila): boolean;
begin
TestPilaVuota := (p.pos = 0)
end;
procedure TopPila (p: TipoPila; var v: TipoElemPila);
begin
if TestPilaVuota(p) then
writeln('ERRORE: PILA VUOTA')
else
v := p.pila[p.pos]
end;
function TestPilaPiena (p: TipoPila): boolean;
begin
TestPilaPiena := (p.pos = MaxPila)
end;
procedure Push (var p: TipoPila; v: TipoElemPila);
begin
if TestPilaPiena(p) then
writeln('ERRORE: PILA PIENA')
else
begin
p.pos := p.pos + 1;
p.pila[p.pos] := v
end
end;
procedure Pop (var p: TipoPila; var v: TipoElemPila);
begin
if TestPilaVuota(p) then
writeln('ERRORE: PILA VUOTA')
else
begin
v := p.pila[p.pos];
p.pos := p.pos - 1
end
end;