Здравствуйте. Нужно выполнить некоторые действия с очередью в сплошном и цепном представлении. Использую модуль, как видно из кода, crt. А для меню - оператор case. Мне нужно, чтобы,допустим, если пользователь выбрал цепное представление - у него еще открылось подменю, где он бы мог выбрать дальнейшие действия. Не очень понятно, как это реализовать с case. Плюс ко всему, как только я нажимаю "цепное представление", то программа завершается. Как устранить эти проблемы?
Заранее благодарю за ответ.
Pascal |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
| uses crt;
const n = 5;
type pnode=^node;
node = record {элемент очереди}
d : word;
s : string;
p : pnode;
end;
Type UKAZ=^OCHER;
OCHER=record
info: integer;
next: UKAZ {указатель на следующий элемент цепочки}
end;
Var H, E, NE, KON: UKAZ; value: integer;
{.................................СПЛОШНОЕ ПРЕДСТАВЛЕНИЕ.............................}
var beg, fin : pnode; {указатели на начало и конец очереди}
i : word;
s : string;
const text : array [1..n] of string = ('one', 'two', 'three', 'four', 'five');
{------------------- начальное формирование очереди------------------------}
procedure first (var beg, fin : pnode; d : word; const s : string);
begin
new(beg);
beg^.d:=d; beg^.s:=s; beg^.p:=nil;
fin:= beg;
end;
{-------------------добавление элемента в конец------------------------------}
procedure add (var fin : pnode; d : word; const s : string);
var p : pnode;
begin
new(p);
p^.d:=d; p^.s:=s; p^.p:=nil;
fin^.p:=p;
fin:=p;
end;
{-------------------выборка элемента из начала-------------------------------}
procedure get (var beg : pnode; var d : word; var s: string);
var p : pnode;
begin
d:=beg^.d; s:=beg^.s;
p:= beg; beg := beg^.p;
dispose(p);
end;
{..............................ЦЕПНОЕ ПРЕДСТАВЛЕНИЕ.....................................}
{-----------Создание очереди (H- указатель на голову, E- указатель на хвост)------------------}
Procedure Sozd_Och;
BEGIN
E := Nil;
H := E
END;
{-----------------------------Добавление элемента в очередь (Добавляемый элемент – value)-----}
Procedure Dobav_Och;
BEGIN
New(NE);
NE^.next:=nil;
NE^.info:= value;
If H=nil then H:=NE {очередь пуста}
else E^.next:=NE; {в конец очереди}
E := NE {Е – указатель на последний}
END;
{-----------------------------Удаление элемента из очереди-----------------------------------}
Procedure Udal_Och;
var KP : Ukaz;
BEGIN
if H = Nil then
begin
writeln('пустая очередь – удалить нельзя');
exit
end
else
begin
KP := H; {Для сохранения доступа к фрагменту памяти, занимаемому удаляемым элементом. }
H := H^.next;
dispose(H) {Возврат памяти в «кучу»}
end
END;
{-------------------------Чтение первого элемента в очереди------------------------------}
Function FirstChain (H:UKAZ; Var ERR: boolean): integer;
BEGIN
If H=Nil then begin
Writeln('очередь пуста'); err:=true;
Exit
end
else begin {чтение успешно}
write('первый=', H^.info:4);
err:=false;
FirstChain:= H^.info
end
END;
{--------------------------Просмотр элементов очереди------------------------------------}
Procedure Cont_Och;
BEGIN
Kon:= H;
while Kon<>Nil do
begin
writeln (Kon^.info);
Kon :=Kon^.next
end
END;
{-------------------главная программа-----------------------------------------}
var w:char;
begin
clrscr;
writeln('Выберите форму физического представления очереди:');
writeln('1 - Сплошное представление.' );
writeln('2 - Цепное представление.' );
read(w);
case w of
'1': {занесение в очередь:}
begin
first (beg, fin, 1, text[1]);
for i := 2 to 5 do add(fin, i, text[i]);
{выборка из очереди:}
while beg <> nil do begin
get (beg, i, s);
writeln(i:2, s);
end; end; ;
'2': begin
writeln('Вы выбрали цепное представление. Выберите дальнейшие действия с очередью:');
writeln('1 - Добавить элемент в очередь; 2 - Удалить элемент из очереди; ');
writeln('3 - Чтение первого элемента очереди; 4 - Просмотр элементов очереди;');
end;
else exit;
end;
END. |
|