unit UnitZasobnik;
{Unita pro práci se zásobníkem.}
interface
uses UnitData;
{ Zásobník bude typu TData, který je deklarován v unitě UnitData. }
const MAX = 5;
{ Maximální počet prvků, které můžeme do zásobníku uložit. }
{ Datová struktura pro zásobník. Do pole zasobnik budeme ukládat jednotlivá data typu TData. Vždy budou
uložena na pozicích 1..pocet. Vrchol zásobníku je na položce s indexem pocet. Budeme-li chtít vybrat
prvek ze zásobníku, budeme vybírat právě tento vrchol, budeme-li chtít přidávat, přidáme prvek nad něj,
tedy na index pocet+1. }
type TZas = record
zasobnik: array[1..MAX] of TData;
pocet: 0..MAX;
end;
function empty( var Z:TZas ):boolean;
{ Vrací true právě tehdy, je-li zásobník Z prázdný. }
procedure initZas( var Z:TZas );
{ Vytvoří prázdný zásobník (s nulovým počtem prvků) a uloží ho do parametru Z. }
procedure push( var Z:TZas; D:TData );
{ Přidá prvek D na zásobník Z. }
function pop( var Z:TZas ):TData;
{ Vybere prvek ze zásobníku Z. }
implementation
{ Vrací true právě tehdy, je-li zásobník Z prázdný. }
function empty( var Z:TZas ):boolean;
begin
empty := Z.pocet = 0;
end;
{ Vytvoří prázdný zásobník (s nulovým počtem prvků) a uloží ho do parametru Z. }
procedure initZas( var Z:TZas );
begin
Z.pocet := 0;
end;
{ Přidá prvek D na zásobník Z. }
procedure push( var Z:TZas; D:TData );
begin
if Z.pocet = MAX then
writeln('Zasobnik je plny.') { Vypsání chybové hlášky nemusí být vždy ta nejlepší varianta, ale zde
nám to stačí. }
else
begin
inc(Z.pocet); { Počet prvků v zásobníku se zvýší o 1. }
Z.zasobnik[Z.pocet]:= D; { Nový prvek přidáme na nový vrchol zásobníku. }
end;
end;
{ Vybere prvek ze zásobníku Z. }
function pop( var Z:TZas ):TData;
begin
if Z.pocet = 0 then
begin
writeln('Zasobnik je prazdny.');
pop:=chybnaData; { Funkce z unity UnitData; vrací data, ze kterých se pozná, že jsou chybná.}
end
else
begin
pop:=Z.zasobnik[Z.pocet]; { Prvek vybereme z vrcholu zásobníku. }
dec(Z.pocet); { Počet prvků v zásobníku se sníží o 1. }
end;
end;
end.
Kdo byste našel v nějakém z těchto programů chybu, dejte mi to vědět - můžete tak získat bonusové body (1 chyba ≈ 5 bodů). ;)