unit ofronta; interface const MAX = 100; type index = 1..MAX; pole = array [index] of integer; ptab = ^tab; tab = object function isempty :boolean; {test na prazdnotu fronty} function isfull:boolean; {test zda je fronta plna} procedure pridej(Co:integer); {prida prvek Co do fronty - na konec } function uber:integer; {odebere prvni prvek z fronty a vrati jeho hodnotu} constructor init; {konstruuje prazdnou frontu} destructor done; private A : pole; {prvky A[1]..A[D] obsahuji frontu} D : 0..Max; {pocet prvku ve fronte} end; ptab2 = ^tab2; tab2 = object (tab) procedure pridej(Co:integer); function uber:integer; constructor init; private first,last : integer; procedure setempt; {nastavuje spravne hodnoty first (=1) a last (=Max) pro prazdnou tabulku } end; implementation constructor tab.init; begin D:=0; end; destructor tab.done; begin end; function tab.isempty:boolean; begin isempty:= D=0; end; function tab.isfull:boolean; begin isfull:= D=Max; end; procedure tab.pridej(Co:integer); begin if isfull then {chyba} else begin inc(D); A[D]:=CO; end; end; function tab.uber: integer; var I:integer; begin if isempty then {chyba} else begin uber:=A[1]; for I:=2 to D do A[I-1]:=A[I]; D:=D-1; end; end; procedure tab2.setempt; begin first:=1; last:=Max; end; constructor tab2.init; begin inherited init; setempt; end; procedure tab2.pridej(Co:integer); begin if isfull then {chyba} else begin inc(D); if last=Max then last:=1 else inc(last); A[last]:=Co; end; end; function tab2.uber:integer; var I:integer; begin if isempty then {chyba} else begin uber:=A[first]; if first