![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Jill |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Есть программка - демонстрация работы очереди. Рабочая. Трабл в том, что менюха выбора действий Case of позволяет провести ОДНО действие. При перестановках всяких...очередь куда-то теряется
![]() Как сделать так, чтобы менюха висела постоянно (до команды "Выход"), и действий можно было МНОГО совершать над этой...очередью!!! ПЛЗ!!! Вот, собственно, программка: Исходный код 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. ЗЫ: препод злой - придираться будет к любым мелочам... |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Пост №4 перечитай, и сравни со своим выводом...
PrintQueue(Head);Так - не работает? |
Jill |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 105 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
сейчас вообще что попало выводит
![]() c PrintQueue(First);только удаление не проходило... забор полнейший... ![]() |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 13:21 |