Очередь, печать файла

Дан файл number.txt, в котором записан набор чисел и даны два числа А и В. Используя очередь, за один проход по файлу вывести на экран сначала, числа меньшие заданного А, затем числа в промежутке от А до В, затем оставшиеся (большие В).

Программа

program Fifo;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
type PList = ^TList;
     TList = record
       Num: Real;
       Next: PList;
     end;
 
Procedure Push(Var FIFO: PList; A: Real);
Var Elem, Last: PList;
begin
 if FIFO = nil then begin
   new(FIFO);
   FIFO^.Num  := A;
   FIFO^.Next := nil;
 end else begin
   Last := FIFO;
   while Last^.Next <> nil do Last := Last^.Next;
   New(Elem);
   Elem^.Num := A;
   Elem^.Next := nil;
   Last^.Next := Elem;
 end;
end;
 
Function Pop(Var FIFO: PList): Real;
Var Elem: PList;
begin
 Result := FIFO^.Num;
 Elem := FIFO;
 FIFO := FIFO^.Next;
 Dispose(Elem);
end;
 
Procedure PrintAndDestroy(Var FIFO: PList);
begin
  While FIFO <> nil do WriteLn(Pop(FIFO):10:5);
end;
 
Var  LessA, MoreB, AB: PList;
     F : Text;
     Num, A, B : Real;
begin
  LessA := nil;
  MoreB := nil;
  AB    := nil;
  Writeln('Input A,B:');
  ReadLn(A,B);
  Assign(F,'number.txt');
  Reset(F);
  While not eof(F) do begin
    ReadLn(F,Num);
    if (Num <= A) then Push(LessA, Num) else
      if (Num > A) and (Num <= B) then Push(AB, Num)
        else Push(MoreB, Num);
  end;
  Close(F);
  PrintAndDestroy(LessA);
  PrintAndDestroy(AB);
  PrintAndDestroy(MoreB);
  readln;
end.

Ключевые слова: 
очередь, список, FIFO, работа с файлом