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
| Program Test;
Uses Crt;
const Nmax=100;
Type Rec=Record
Name:String[15]; {Страна}
Area: Integer; {Площадь}
end;
Table=array [1..Nmax] of Rec;
var T: Table; {Основная таблица}
n: integer; {Количество записей}
ch: byte;
procedure InFileTab(var T: Table;
var n: integer);
{Чтение записей таблицы из файла}
var f: file of rec;
fname: string;
ch:char;
begin
ClrScr;
repeat
Writeln('Введите имя файла');
ReadLn(fname);
Assign(f,fname);
{$I-} {Отключение контроля ошибок ввода/вывода}
Reset(f);
{$I+}
if IOResult<>0 then {Файл не найден}
begin
WriteLn('Файл с указанным именем не найден');
Writeln('Будете вводить новое имя: y/n?');
ch:=ReadKey;
if ch in ['n','N'] then
Halt(0)
end;
until IOResult=0;
n:=0;
while not eof(f)do
begin
n:=n+1;
read(f,T[n]);
end;
close(f);
WriteLn('Таблица загружена из файла ', fname);
Write('Нажмите любую клавишу...');
ReadKey;
end;
procedure InTab(var T: Table;
var n: integer);
{Ввод записей таблицы с клавиатуры}
var ch: char;
fname: string;
i: integer;
f: file of rec;
begin
ClrScr;
n:=0;
repeat
n:=n+1;
WriteLn('Введите ',n,'-ую запись табицы');
Writeln('Страна');
ReadLn(t[n].name);
WriteLn('Площадь территории');
Readln(t[n].area);
WriteLn('Продолжить ввод: y/n?');
ch:=ReadKey;
until ch in ['n','N'];
Writeln('SOHRANIT VVEDENIE DANIE V FAILE? y/n');
ch:=ReadKey;
if ch in ['n','N'] then
exit;
Writeln('Введите имя файла');
ReadLn(fname);
Assign(f,fname);
{$I-} {Отключение контроля ошибок ввода/вывода}
Rewrite(f);
{$I+}
for i:=1 to n do
write(f, t[i]);
close(f);
end;
procedure ShowTab(var T: Table;n: integer);
{PECHAT VSEH ZAPISEY TABLICI}
var i: Integer;
begin
ClrScr;
WriteLn('ZAPISI TABLICI:');
WriteLn('+-------------+----------+');
WriteLn('| COUNTRY |TERRITORIA|');
WriteLn('|-------------+----------|');
for i:=1 to n do
WriteLn('|',T[i].Name:12,'|',T[i].Area:9,'|');
WriteLn('+-------------+----------+');
WriteLn('NAZHMITE LUBUUY KLAVISHUя...');
ReadKey;
end;
procedure PrintTab(var T:Table;
n,i,imin:integer);
{Промежуточная печать ключей для демонстрации алгоритма}
var k:Integer;
begin
for k:=1 to n do
begin
if k=i then {Позиция переставляемой записи}
textattr:=red*16+white { Белые символы на красном фоне}
else
if k=imin then {Позиция записи с наименьшим ключём}
textattr:=blue*16+white {Белые символы на синем фоне}
else
textattr:=black*16+white;
write(t[k].Area);
textattr:=black*16+white;
write(' ');
end;
writeln;
end;
begin
repeat
ClrScr;
WriteLn('1. Ввести данные с клавиатуры.');
WriteLn('2. Загрузить таблицу из файла.');
WriteLn('3. Показать таблицу.');
WriteLn('4. Сортировка таблицы.');
WriteLn('------------------------------');
WriteLn('0. Выход.');
Write('Ваш выбор: ');
ReadLn(ch);
Case ch of
1: InTab(T,n);
2: InFileTab(T,n);
3: ShowTab(T,n);
end; {case}
until ch=0;
end. |