Цифровая сортировка базы данных "Жизнь замечательных людей", страница 4

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);

-  осуществляется загрузка базы из файла, постройка очереди;