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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
| type dann = record
pun_nazn: string;
pometki: string;
chas: byte;
min: byte;
end;
mas = array [1..10] of dann;
var k,v,i,n,nmenu,nn: byte; elect: mas;
{------------ВВОД--------------}
Procedure readd (var e: mas; t: word);
var n:word;
begin
writeln('Введите данные поездах в таком порядке');
writeln('Пункт назначения | Пометки (СВ/ПВ/КСВ) | Час отправления (0-23) | Минуты отправления');
for n:=1 to t do begin
readln(e[n].pun_nazn);
readln(e[n].pometki);
readln(e[n].chas);
readln(e[n].min);
end; end;
{------------корректировка--------------}
Procedure korr (var e:mas; t:word); {массив записей и кол-во зап }
var n, ns,f:word;
begin
for n:=1 to t do
writeln(n,'-',e[n].pun_nazn,' ', e[n].pometki,' ', e[n].chas,' ', e[n].min);
f:=1;
while f=1 do
begin
writeln('Введите номер строки, которую хотите отредактировать');
readln(ns);
writeln('Через ENTER напишите заново Пункт назначения | Пометки (СВ/ПВ/КСВ) | Час отправления (0-23) | Минуты отправления для этой записи');
readln(e[ns].pun_nazn);
readln(e[ns].pometki);
readln(e[ns].chas);
readln(e[ns].min);
writeln('Измененное расписание:');
for n:=1 to t do
writeln(n,'-',e[n].pun_nazn,' ', e[n].pometki,' ', e[n].chas,' ', e[n].min);
writeln('Есть еще строки, подлежащие редактированию? Если "Да" ввидите - 1, "Нет" - 0');
readln(f);
end;
end;
{---------дополнение-----------}
Function dopol (var e:mas; t:word):word;
var i, n, k, l: word; f:dann; b: boolean;
begin
writeln('Введите количество поездов');
readln (k);
writeln('Пункт назначения | Пометки (СВ/ПВ/КСВ) | Час отправления (0-23) | Минуты отправления');
l:=t+k;
for n:=t+1 to l do begin
readln(e[n].pun_nazn);
readln(e[n].pometki);
readln(e[n].chas);
readln(e[n].min);
end;
dopol:=l;
end;
{---------сортировка по станции---------}
function match (s1, s2 : string) : boolean;
var i, n : integer; {n - длина наименьшей строки}
begin
s1 := UpperCase(s1);
s2 := UpperCase(s2);
if length(s1) > length(s2) then n := length(s2)
else n := length(s1); {наименьший}
i := 1;
while (i <= n) and (s1[i] = s2[i]) do inc(i); {сравниваем пока и если начала одинаковые}
if i = n + 1 then
begin
if (length(s1) = length(s2))
then match := true {Фамилии абсолютно совпадают}
else if (length(s1) < length(s2))
then match := true {"Петров" шёл перед "Петрова"}
else match := false;
end
else begin
if ord(s1[i]) < ord(s2[i]) then match := true else match := false;
end;
end;
{---------------}
Procedure sort_s (var e:mas; t:word);
var i, n, j: word; f:dann; b: boolean;
begin
for i:=1 to t-1 do
for j:=1 to t-i do
begin
b := match (e[j].pun_nazn, e[j+1].pun_nazn);
if b = false then
begin
f:=e[j];
e[j]:=e[j+1];
e[j+1]:=f;
end;
end;
end;
{-------сортировка по времени-------}
Procedure sort_v (var e:mas; t:word);
var i, min, j, nom: word; f:dann; b: boolean;
begin
for i:=1 to t-1 do
begin
f:=e[i]; nom:=i;
for j:=i+1 to t do
begin
if (e[nom].chas>e[j].chas) then nom:=j;
end;
if (nom<>i) then
begin
e[i]:=e[nom];
e[nom]:=f;
end;
end;
for i:=1 to t-1 do
begin
f:=e[i]; nom:=i;
for j:=i+1 to t do
begin
if (e[nom].chas=e[j].chas) and (e[nom].min>e[j].min) then nom:=j;
end;
if (nom<>i) then
begin
e[i]:=e[nom];
e[nom]:=f;
end;
end;
end;
{----------инф о поездах после введенного времени------------}
Procedure inf_v (var e: mas; t:word);
var i, m, h: word;
begin
writeln('Введите час отправления и минуты');
readln(h, m);
for i:=1 to t do
if (e[i].chas = h) and (e[i].min >m) or (e[i].chas > h) then
writeln(i,'-',e[i].pun_nazn,' ', e[i].pometki,' ', e[i].chas,' ', e[i].min);
end;
{----вывод по-бырому---}
Procedure vv (var e: mas; t:word);
var n: word;
begin
for n:=1 to t do
writeln(n,'-',e[n].pun_nazn,' ', e[n].pometki,' ', e[n].chas,' ', e[n].min);
end;
{------------сама прога--------}
begin
n:=1;
writeln ('____________________________');
writeln ('| MENU |');
writeln ('| 1) Ввод данных |');
writeln ('| 2) Вывод всего расписания|');
writeln ('| 3) Корректировка данных |');
writeln ('| 4) Дополнение расписания |');
writeln ('| 5) Сортировка по |');
writeln ('| станции назначения |');
writeln ('| 6) Сортировка по |');
writeln ('| времени отправления |');
writeln ('| 7) Вывод информации |');
writeln ('| о поездах, отходящих |');
writeln ('| после введенного времени |');
writeln ('| 8) Добавление в файл |');
writeln ('| 0) Выход |');
writeln ('____________________________');
while n>0 do
begin
writeln (' выберите пункт меню');
readln (nmenu);
case nmenu of
1: begin writeln('Введите количество поездов в расписании < 10'); readln(n); readd(elect,n); end;
2: vv (elect, n);
3: korr(elect,n);
4: n:=dopol (elect, n);
5: sort_s (elect, n);
6: sort_v (elect, n);
7: inf_v (elect, n);
0: exit;
end;
end;
end. |