Zadání lze nakombinovat z následujících podmínek:
program circularQueue; { A circular queue implemented in an array. } { Author: Bohumir Zamecnik. Date: 2009/11/11 } const maxQueueSize = 10; type tQueue = array [0..maxQueueSize-1] of integer; var queue : tQueue; qFront : integer; qBack : integer; nItems : integer; procedure init; begin qFront := 0; {pointer to the first item} qBack := maxQueueSize - 1; {pointer to the last item} end; function getUsedCapacity : integer; begin getUsedCapacity := nItems end; function getFreeCapacity : integer; begin getFreeCapacity := maxQueueSize - getUsedCapacity end; {insert an item to the back of the queue} procedure insert(item:integer); begin writeln('insert(', item, ')'); if (getFreeCapacity > 0) then begin qBack := (qBack + 1) mod maxQueueSize; queue[qBack] := item; nItems := nItems + 1 end else begin writeln('insert(): error - inserting into a full queue.'); end end; {get an item from the front of the queue and remove it from there} function pop : integer; begin if (getUsedCapacity > 0) then begin pop := queue[qFront]; writeln('pop(): ', queue[qFront]); qFront := (qFront + 1) mod maxQueueSize; nItems := nItems - 1; end else begin writeln('pop(): error - popping from an empty queue.'); pop := -1 end end; procedure printQueue; var i : integer; first, last, tmp : integer; begin for i := 0 to maxQueueSize - 1 do begin write(queue[i], ', '); end; writeln end; var i : integer; begin init; { a queue test } printQueue; for i := 0 to maxQueueSize - 1 do begin insert(i*2); insert(i*2+1); pop; printQueue; end; for i := 0 to maxQueueSize - 1 do begin pop; printQueue; end; end.