Дан файл 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, работа с файлом
|
|||