Как сделать так, чтобы менюха висела постоянно (до команды "Выход"), и действий можно было МНОГО совершать над этой...очередью!!!
ПЛЗ!!!
Вот, собственно, программка:
Исходный код
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;
{Вставка элемента в очередь}
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 Vyvod(Var Head,Tail:Pointer);
Begin
First:=Head;
if First<>Nil then
begin
Head:=First^.Next;
Write(First^.Inf,' ');
end;
End;
{удаление элемента}
Procedure Udalenie(var Head,Tail:Pointer);
var First:Pointer;
Begin
If Head<>Nil
then If Head=Tail {в очереди единственный элемент}
then begin Dispose(Head); Head:=Nil; Tail:=Nil end
else begin
First:=Head; Head:=Head^.Next; Dispose(First)
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<First^.Inf then max:=First^.Inf;
First:=First^.Next;
end;
Writeln;
Writeln('Максимальный элемент: ',max);
Writeln;
end;
end;
{Основной модуль}
Begin
ClrScr;
Head:=Nil;
Mark(P);
Writeln;
Writeln('=================Создание очереди===================');
Writeln;
Writeln('Признак окончания ввода очереди - НЕ числовой символ');
Repeat Vstavka(Head,PointerNew,Tail) until not f;
if Head=Nil then
begin
Writeln('Очередь пуста!');
Readln;
Readln;
Exit;
end;
Writeln;
Writeln('Возможно произвести следующие действия:');
Writeln;
Readln;
Writeln('Показать очередь - 0');
Writeln('Добавить элемент - 1');
Writeln('Удалить элемент - 2');
Writeln('Найти максимальный - 3');
Writeln('Выход - 4');
Writeln;
Readln(i);
Case i of
0: begin First:=Head;
Writeln('Содержимое очереди:');
While First<>Nil do
Vyvod(Head,Tail); Readln; end;
1: begin First:=Head;
Vstavka(Head,NewP,Tail);
Writeln('Содержимое очереди:');
While First<>Nil do
Vyvod(Head,Tail); Readln; end;
2: begin First:=Head;
Udalenie(Head,Tail);
Writeln('Содержимое очереди:');
While First<>Nil do
Vyvod(Head,Tail); Readln; end;
3: begin First:=Head;
Maximal(Head,Tail);
Readln; end;
4: Exit end;
Readln;
Release(P); {освобождение кучи, начиная с адреса P}
End.
ЗЫ: препод злой - придираться будет к любым мелочам...