Program SOD_3; Uses Crt; Type Pointer=^Line; Line=Record Inf:Integer; Next:Pointer; End; Var Head, {голова очереди} Tail, {хвост очереди} First, {очередной элемент очереди} PointerNew,P,NewP:Pointer; f:boolean; i:Integer; a:Real; j: integer; procedure PrintQueue(Head: Pointer); begin While Head <> nil Do Begin Write(Head^.Inf:4); Head := Head^.Next; End; end; {Вставка элемента в очередь} Procedure Vstavka(Var Head,NewP,Tail:Pointer); Var a:Real; Begin f:=True; Repeat Write('Введите целое число -> '); {$I-} {временно отключаем контроль ошибок ввода-вывода} Readln(a); {$I+} if IOResult<>0 then {ф-ция возвращает целое значение, являющееся состоянием последней выполненной операции ввода-вывода} begin f:=False; Exit; end Until (IOResult=0)and(a>=-32768)and(a<=32767); New(NewP); If Head=Nil then {очереди нет - создаем ее} Head:=NewP else Tail^.Next:=NewP; {очередь есть - становимся в хвост} Tail:=NewP; {новый хвост} NewP^.Inf:=trunc(a); NewP^.Next:=Nil; End; {удаление элемента} Procedure Udalenie(var Head,Tail:Pointer); var First:Pointer; Begin If Head <> Nil then Begin First:=Head; Head:=Head^.Next; Dispose(First); If Head = nil Then Tail := nil; End Else Writeln('Удалять нельзя, т.к. очередь пуста!') End; {поиск максимального элемента} Procedure Maximal(Head,Tail:Pointer); Var K,First:Pointer; max:Integer; begin if Head=Nil then Writeln('Очередь пуста!') else begin K:=Head; First:=K^.Next; max:=K^.Inf; while First<>Nil do begin if max