(*Demonstrace z sobn¡kuø FIFO, FILO*) Uses Knihovna,Crt,Graph,B_P5,B_P3; Const N=15; Polo=15; S=1; (*rychlost animace*) Type Po=array[1..16] of byte; Var i,r:integer; Pocet,Akt:Integer; FIFO,FILO:Po; K:string; (**) Procedure VykresliFIFO; Var i,o:Integer; Begin For i:=1 to N Do begin If i<=Pocet then o:=FIFO[i] else o:=0; Setfillstyle(1,o); FillEllipse(600-i*2*(Polo+2),100,Polo,Polo); End; End; (**) Procedure VykresliFILO; Var i,o:Integer; Begin For i:=1 to N Do begin If i<=Pocet then o:=FILO[i] else o:=0; Setfillstyle(1,o); FillEllipse(600-i*2*(Polo+2),380,Polo,Polo); End; End; (**) Procedure Aktualni(X:byte); Var s:string; Begin if X=1 then Begin Akt:=Akt+1;If Akt>N then Akt:=1; End; Str(Pocet,s); setcolor(0);Setfillstyle(1,0); Bar(0,220,640,300); Setcolor(15); B_P5.NapisText(67,245,'Pocet prvku ve fronte: '+s+' z '+k,1); If Pocet=0 then B_P5.NapisText(67,270,'Zasobnik je prazdny',1); If Pocet=N then B_P5.NapisText(67,270,'Zasobnik je plny',1); End; (**) Procedure Pridej; Var i:integer; Begin FIFO[Pocet]:=Akt; For i:=Pocet downto 1 do FILO[i]:=FILO[i-1]; FILO[1]:=0; VykresliFILO; For i:=-Polo to 100 do Begin setcolor(0);SetfillStyle(1,0); FillEllipse(600-Pocet*2*(Polo+2),i-1,Polo,Polo); FillEllipse(600-2*(Polo+2),480-i+1,Polo,Polo); setcolor(15);Setfillstyle(1,Akt); FillEllipse(600-Pocet*2*(Polo+2),i,Polo,Polo); FillEllipse(600-2*(Polo+2),480-i,Polo,Polo); Delay(S); End; FILO[1]:=Akt; Aktualni(1); End; (**) Procedure Odeber; Begin For i:=100 downto -Polo do Begin setcolor(0);SetfillStyle(1,0); FillEllipse(600-2*(Polo+2),i,Polo,Polo); FillEllipse(600-2*(Polo+2),480-i-1,Polo,Polo); setcolor(15);Setfillstyle(1,FIFO[1]); FillEllipse(600-2*(Polo+2),i-1,Polo,Polo); setfillstyle(1,FILO[1]); FillEllipse(600-2*(Polo+2),480-i,Polo,Polo); Delay(S); End; For i:=1 To Pocet do Begin FIFO[i]:=FIFO[i+1]; FILO[i]:=FILO[i+1]; ENd; VykresliFIFO;VykresliFILO; Aktualni(0); End; (**) Begin Grafika;Pocet:=0;Akt:=0; B_P3.NapisText(28,50,'Demonstrace zasobniku FIFO a FILO',1); Line(0,80,640,80);Line(0,40,640,40); B_P5.NapisText(10,100,'Ovladani:',1); B_P5.NapisText(30,125,'Escape - ukoncit program',1); B_P5.NapisText(30,150,'A - pridat polozku',1); B_P5.NapisText(30,175,'D - odebrat polozku',1); B_P5.NapisText(10,210,'Tento program demostruje zpusob, kterym funguji',1); B_P5.NapisText(10,235,'zasobniky FIFO a FILO jednoduchym animovanym',1); B_P5.NapisText(10,260,'postupem provadeni jednotlivych kroku.',1); line(0,400,640,400);Line(0,440,640,440); B_P3.NapisText(10,410,'Pokracujte libovolnou klavesou',1); B_P5.NapisText(490,415,'...',1); Readkey;Str(N,k); ClearDevice; (*Vlastn¡ aplikace:*) B_P3.NapisText(67,130,'Zasobnik FIFO',1); B_P3.NapisText(67,332,'Zasobnik FILO',1); VykresliFIFO;VykresliFILO; Aktualni(1); Repeat R:=Ord(Readkey); Case R of 97: Begin If Pocet0 then Begin Pocet:=Pocet-1; Odeber; End; End; End; Until R=27; End.