if (p<>NIL) then
begin
obhod(p^.right,i);
write(p^.data.avtor,' ',p^.data.page_number,' ',p^.data.zaglavie,p^.data.god);
writeln(' ',p^.data.izdanie);
inc(i);
if (i mod 20 = 0) then readkey;
obhod(p^.left,i);
end;
end;
{----------------------------------------------------------------}
procedure search(p:pv);
procedure find(d:zapis;p:pv);
begin
if p=NIL then
begin
writeln('‡ ЇЁбм Ґ ©¤Ґ !');
end
else
if (compare(d,p^.data)=-1) then find(d,p^.left)
else
if (compare(d,p^.data)=1) then find(d,p^.right)
else
begin
writeln('ЋЎ¬ гвл© ЁўҐбв®а ',p^.data.zaglavie);
writeln('ў«®¦Ё« ',p^.data.god,'$ б«Ґ¤го饣® зЁб« : ',p^.data.avtor,'.');
end;
end;
{-----------------------------------------------------------}
var
d:zapis;
str:string;
i:integer;
ch:char;
begin
clrscr;
while true do
begin
while true do
begin
writeln('‚ўҐ¤ЁвҐ ¤ вг ўЄ« ¤ бЎҐpҐ¦ҐЁ©');
readln(str);
{ if length(str)<>8 then writeln('”®а¬ в ¤ вл ҐўҐаҐ')
else}
break;
end;
for i:=1 to 12 do d.avtor[i]:=str[i];
find(d,p);
writeln('Џа®¤®«¦Ё¬ Ї®ЁбЄ?(1/0)');
ch:=' ';
while ( (ch<>'1')and(ch<>'1')and(ch<>'0')and(ch<>'0') ) do
begin
ch:=readkey;
end;
if (ch='0') then break;
end;
end;
{----------------------------------------------------------------}
const
str1='‘®¤Ґа¦Ё¬®Ґ д ©« :';
str2='Ћвб®авЁа®ў ® Ї® б㬬Ґ Ё ¤ ⥠ўЄ« ¤ :';
str3='‘®¤Ґа¦Ё¬®Ґ ®зҐаҐ¤Ё:';
punkt1='1.sort';
punkt2='2.exit';
var
name_file:string;
head,head2:ple;
root:pv;
sch:longint;
b:mas;
ch:char;
check2:boolean;
t:longint;
punkt:array[1..max_punktov] of elem;
begin
clrscr;
writeln('‚ўҐ¤ЁвҐ Ё¬п д ©« , ў Є®в®а®¬ еа Ёвбп Ў § ¤ ле:');
readln(name_file);
head:=NIL;
head2:=NIL;
root:=NIL;
check2:=false;
ZAGRUZKA (name_file,head,sch);
writeln('‚ д ©«Ґ ',name_file,' ',sch,' § ЇЁбҐ©.');
readkey;
clrscr;
writeln(str1);
view(head,str1);
readln;
digital_sort(head,5);
index_massiv(b,head,sch);
while true do
begin
clrscr;
gotoxy(20,12);
write('1. Џа®б¬®ва ®вб®авЁа®ў ®© Ў §л');
gotoxy(20,13);
write('2. Џ®ЁбЄ Ї® ў«®¦Ґ®© ЁўҐбв®а®¬ б㬬Ґ');
gotoxy(20,14);
write('3. Џ®ЁбЄ ўЄ« ¤зЁЄ Ї® ¤ ⥠ў«®¦ҐЁп Є ЇЁв « ');
gotoxy(20,15);
write('4. ‚л室');
punkt[1]:=punkt1;
menu(1,4,1,1);
ch:=readkey;
case ch of
'1':
begin
clrscr;
writeln(str2);
view(head,str2);
readln;
end;
'2':
begin
clrscr;
if check2 then
begin
dispose_list(head2);
dispose_dp(root);
end;
poisk(b,sch,head2);
dbd(head2,root);
clrscr;
writeln(str3);
obhod(root);
check2:=true;
readln;
end;
'3':
begin
clrscr;
search(root);
end;
end;
if (ch=#27) or (ch='4') then break;
end;
end.
4. Описание программы
Используются следующие стандартные библиотечные модули: CRT (для использования таких функций, как readkey и clrscr).
Введено несколько дополнительных типов:
Dat – запись определена для описания информации об «обманутом вкладчике», содержит 4 информационных поля.
Predpriyatie – запись дла описания элементов очереди.
Vertex – запись для вершины двоичного Б – дерева.
Mas – тип описан для того, чтобы можно было передать в подпрограмму массив в качестве параметра.
В программе не введено ни одной глобальной переменной. Связь между подпрограммами и основной программой осуществляется через параметры функций.
Переменные в основной программе:
Head – указатель на начало списка, загруженного из файла.
Head2 – указатель на начало списка, созданной из записей с одинаковой суммой.
Tail – указатель на конец списка.
Root – указатель на корень двоичного Б - дерева
Sch – количество записей в файле.
B – массив указателей на элементы списка.
Check2 – логичекая переменная, указывающая, были ли раньше созданы очередь с одинаковой суммой и ДБД; если да - необходимо освободить занимаемую ими память и построить их заново.
Name_file – имя файла, в котором хранится исходная база данных.
Procedure ZAGRUZKA (name_file: string; var head: ple; var sch: longint);
- осуществляется загрузка базы из файла, постройка очереди;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.