Очередь в виде массива

Используя очередь решить следующую задачу.
Type fr = file of real;
За один просмотр файла f типа fr и без использования дополнительных файлов напечатать элементы файла f в следующем порядке. Сначала все числа, меньше а, затем - все числа из отрезка [a, b] и, наконец, – все остальные числа, сохраняя исходный взаимный порядок в каждой из этих групп чисел (a, b – заданны a<b).
При компилляции выдаёт ошибку. Пожалуйста подскажите, что не так.
Type fr = file of real;
За один просмотр файла f типа fr и без использования дополнительных файлов напечатать элементы файла f в следующем порядке. Сначала все числа, меньше а, затем - все числа из отрезка [a, b] и, наконец, – все остальные числа, сохраняя исходный взаимный порядок в каждой из этих групп чисел (a, b – заданны a<b).
- Код: Выделить всё
rogram Ochered;
uses crt;
const n = 50; a = 20; b =40;
type FR = file of real;
mass = array [1..n] of real;
var f : FR;
before_a, a_b, after_b : mass;
y : real;
k, l, m, o, p, r : integer ;
procedure realgenerator;
var f : file of real;
y : real;
i : integer ;
begin
randomize;
assign (f, 'd:\digit.dat');
rewrite(f);
for i:=1 to n do
begin
y:=random(50);
write(f,y);
end;
close(f);
end;
begin
clrscr;
realgenerator;
assign (f, 'd:\digit.dat');
reset(f);
k:=1;l:=1;m:=1; o:=1; p:=1;r:=1;
while not Eof(f) do
begin
read(f, y);
if y < a then
begin
before_a[k] := y;
k := k + k;
end;
if ((y >=a) and (y<=b)) then
begin
a_b[l] := y;
l:=l+1;
end;
if y > b then
begin
after_b[m] :=y;
m:=m+1;
end;
close(f);
end;
while (r<=k) do
begin
y := before_a[r];
r := r + 1;
writeln('before_a[0..',a,']: ');
write(before_a[r]:2:0,' ');
writeln;
end;
while (o<=l) do
begin
y := a_b[o];
o := o + 1;
writeln('a_b[',a,'..',b,']: ');
write(a_b[o]:2:0,' ');
writeln;
end;
while (p<=m) do
begin
y := after_b[p];
p := p + 1;
writeln('after_b[',b,'..',n,']: ');
write (after_b[p]:2:0,' ');
readln
end;
end.
При компилляции выдаёт ошибку. Пожалуйста подскажите, что не так.