IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Очередь, менюха Case of
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 105
Пол: Женский
Реальное имя: Юлия

Репутация: -  0  +


Есть программка - демонстрация работы очереди. Рабочая. Трабл в том, что менюха выбора действий Case of позволяет провести ОДНО действие. При перестановках всяких...очередь куда-то теряется sad.gif

Как сделать так, чтобы менюха висела постоянно (до команды "Выход"), и действий можно было МНОГО совершать над этой...очередью!!!

ПЛЗ!!!

Вот, собственно, программка:
Исходный код

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.


ЗЫ: препод злой - придираться будет к любым мелочам...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 9.05.2024 16:57
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name