Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program TreeProcess;
- Uses Crt;
- Type
- Zap=Record{Описание записи о грузополучателе}
- Student: record
- first_name:string[10];
- second_name:string[10];
- last_name:string[10]
- end;
- rating: record
- math:integer;
- history:integer;
- physik:integer
- end
- End;
- TreePtr=^Tree; {Описание узла дерева}
- Tree=Record
- Data:Zap;
- Left,Right:TreePtr
- End;
- VarTop:Treeptr;
- Z,e:Zap;
- k: file of zap;
- N,i:Integer;
- f,m,o:string[10];
- Number:Integer;
- {Функция добавляющая лист к дереву}
- Function AddTree (Top:TreePtr;Newnode:Zap):TreePtr;
- Begin
- If Top=Nil THEN
- Begin
- New(Top);
- Top^.Data:=Newnode;
- Top^.Left:=Nil;
- Top^.Right:=Nil;
- End
- Else
- If Top^.Data.student.last_name>Newnode.student.last_nameThen
- Top^.Left:=AddTree(Top^.Left,Newnode)
- Else
- Top^.Right:=AddTree(Top^.Right,Newnode);
- Addtree:=Top
- End;
- Procedure OrgTree;
- Begin
- Writeln('Выполняется процедура организации дерева');
- Writeln('Для выхода из процедуры вводите символ * ');
- Writeln('======================================== ');
- Top:=nil;
- While True Do
- Begin
- Writeln('Введитефамилиюстудента');
- Readln(Z.Student.last_name);
- If Z.student.last_name='*' Then Exit;
- Writeln('Введитеимястудента');
- Readln(Z.Student.first_name);
- Writeln('Введитеотчествостудента');
- Readln(Z.Student.second_name);
- Writeln('Введите оценку студента по математике');
- Readln(Z.rating.math);
- Writeln('Введите оценку студента по истории');
- Readln(Z.rating.history);
- Writeln('Введите оценку студента по физике ');
- Readln(Z.rating.physik);
- Top:=Addtree(Top,Z);
- End
- End;
- ProcedureDobL;
- Begin
- Writeln('Выполняется процедура добавления листа');
- Writeln('Для выхода из процедуры вводите символ * ');
- Writeln('======================================== ');
- Writeln('Введите фамилию студента');
- Readln(Z.Student.last_name);
- If Z.student.last_name='*' Then Exit;
- Writeln('Введитеимястудента');
- Readln(Z.Student.first_name);
- Writeln('Введитеотчествостудента');
- Readln(Z.Student.second_name);
- Writeln('Введите оценку студента по математике');
- Readln(Z.rating.math);
- Writeln('Введите оценку студента по истории');
- Readln(Z.rating.history);
- Writeln('Введите оценку студента по физике ');
- Readln(Z.rating.physik);
- Top:=Addtree(Top,Z);
- End;
- Procedure Prosmotr(Top:TreePtr);
- {Процедура просмотра значений узлов дерева слева направо}
- Begin
- If Top<>Nil Then
- Begin
- Prosmotr(Top^.Left);
- Writeln(i,' ',Top^.data.student.last_name,' ',Top^.data.student.first_name,' ',Top^.data.student.second_name);
- Writeln(' ',Top^.data.rating.math,' ',Top^.data.rating.history,' ',Top^.data.rating.physik);
- i:=i+1;
- Prosmotr(Top^.Right)
- End;
- End;
- Procedure Otobr(Top:TreePtr;Otstup:Integer);
- {Процедура отображения структуры дерева.
- Дерево отображается повернутым на 90 градусов против
- часовой стрелки. Узлы дерева, находящиеся на одном
- уровне, отображаются с одинаковым отступом от края
- экрана.}
- Begin
- If Top<>Nil Then
- Begin
- Otstup:=Otstup+3;
- Otobr(Top^.Right,Otstup);
- Writeln(' ':Otstup,Top^.Data.student.last_name,' ',Top^.Data.student.first_name,' ',Top^.Data.student.second_name);
- Otobr(Top^.Left,Otstup);
- End
- End;
- procedurelvlE(Top:TreePtr; f,m,o:string[10]; varN: integer);
- begin
- iftop<>nil then
- begin
- N:=N+1;
- if(f=Top^.Data.student.last_name) and(m=Top^.Data.student.first_name) and (o=Top^.Data.student.second_name) then
- begin
- writeln('Уровень на котором находится элемент:',N);
- end;
- lvlE(Top^.Left,f,m,o,N);
- lvlE(Top^.Right,f,m,o,N);
- N:=N-1;
- end;
- end;
- Procedure savetree(Top:treeptr);
- begin
- ifTop<>nil then
- begin
- write(k, top^.data);
- savetree(top^.left);
- savetree(top^.right)
- end
- end;
- Function AddE(top:treeptr; e:zap):treeptr;
- begin
- ifTop=nil then
- begin
- New(top);
- Top^.data:=e;
- top^.left:=nil;
- top^.right:=nil;
- end
- else
- iftop^.data.student.last_name>e.student.last_namethen top^.left:=AddE(top^.left, e)
- elsetop^.right:=Adde(top^.right, e);
- AddE:=Top
- end;
- Procedure readtree;
- begin
- top:=nil;
- while not eof(k) do
- begin
- read(k,e);
- Top:=AddE(Top,e);
- end
- end;
- {==============основная программа================}
- begin
- { цикл, обеспечивающий вывод на экран пунктов меню}
- Repeat
- ClrScr; { очистка экрана }
- Writeln('1-Организация двоичного дерева');
- Writeln('2-Добавление листа к дереву');
- Writeln('3-Просмотр дерева');
- Writeln('4-Вычисление уровня элемента');
- Writeln('5-Сохранение в фаил');
- Writeln('6-Чтение из файла');
- Writeln('7-Выход');
- Writeln('-------------------------------');
- Writeln('Введите номер пункта меню');
- Readln(Number);
- CaseNumberOf{ вызов необходимой процедуры по номеру}
- 1:OrgTree;
- 2:Dobl;
- 3:Begin
- Writeln('Выполняется процедура просмотра дерева');
- Writeln('======================================== ');
- i:=0;
- Prosmotr(Top);
- Otobr(Top,1);
- Writeln('Нажмитеклавишу Enter');
- Readln
- End;
- 4:Begin
- N:=0;
- writeln('введитефамилию');
- Readln(f);
- writeln('введитеимя');
- Readln(m);
- writeln('введите отчество');
- Readln(o);
- lvlE(Top,f,m,o,N);
- readln;
- End;
- 5:begin
- assign(k,'1.dat');
- rewrite(k);
- Savetree(Top);
- close(k);
- end;
- 6:begin
- assign(k,'1.dat');
- reset(k);
- Readtree;
- close(k)
- end
- End;
- UntilNumber=7; {выход из цикла, если введено 5}
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement