Напечатать элементы файла f в следующем порядке: сначала – все числа, меньшие a, затем – все числа из отрезка - Pascal ABC
Формулировка задачи:
Пмоогите пожалуйста написать программный код:
Используя очередь, решить следующую задачу. TYPE FR = FILE OF REAL; За один просмотр файла f типа FR и без использования дополнительных файлов напечатать элементы файла f в следующем порядке: сначала – все числа, меньшие a, затем – все числа из отрезка [a, b], и наконец– все остальные числа, сохраняя исходный взаимный порядок в каждой из этих групп чисел (a ,b – заданы, a<b).
Решение задачи: «Напечатать элементы файла f в следующем порядке: сначала – все числа, меньшие a, затем – все числа из отрезка»
textual
Листинг программы
type
PNode = ^TNode;
TNode = record
next: PNode; r: Real;
end;
var
f: file of Real;
a, b, r: Real;
ph, qh, p: PNode; pp, qq: ^PNode;
begin
Assign(f,'input.dat'); Reset(f);
Write('a, b: '); ReadLn(a,b); pp:=@ph; qq:=@qh;
while not EoF(f) do begin
Read(f,r);
if r<a then WriteLn(r)
else if r<=b then begin
New(pp^); pp^^.r:=r; pp^^.next:=nil; pp:=@pp^^.next;
end else begin
New(qq^); qq^^.r:=r; qq^^.next:=nil; qq:=@qq^^.next;
end;
end;
Close(f);
while ph<>nil do begin
WriteLn(ph^.r); p:=ph; ph:=ph^.next; Dispose(p);
end;
while qh<>nil do begin
WriteLn(qh^.r); p:=qh; qh:=qh^.next; Dispose(p);
end;
end.
Объяснение кода листинга программы
- Создается тип данных PNode, который представляет собой указатель на структуру TNode.
- Создается переменная f типа file of Real, которая представляет собой файл для чтения и записи чисел с плавающей точкой.
- Создаются две переменные a и b типа Real, которые будут использоваться для чтения значений из файла.
- Создаются три указателя ph, qh и p типа PNode, которые будут использоваться для чтения и записи данных в файл.
- Создаются две переменные pp и qq типа ^PNode, которые будут использоваться для чтения и записи данных в файл.
- Задается значение переменной a и b с помощью функции ReadLn.
- Запускается цикл чтения данных из файла до конца файла (до тех пор, пока не будет достигнут конец файла EoF).
- Внутри цикла происходит следующее:
- Чтение значения r из файла.
- Если значение r меньше значения переменной a, то оно записывается в файл.
- Если значение r находится в диапазоне от a до b, то оно записывается в файл.
- Если значение r больше или равно значению переменной b, то оно не записывается в файл.
- Если значение r не попадает в указанный диапазон, то создается новый узел и записывается в него значение r.
- Указатель на предыдущий узел обновляется, чтобы указывать на новый узел.
- После завершения цикла чтения данных из файла закрывается файл.
- Запускается цикл удаления указателей на неиспользуемые узлы.
- Завершается программа.