Advertisement
Guest User

Untitled

a guest
Mar 31st, 2015
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.16 KB | None | 0 0
  1. Program TreeProcess;
  2. Uses Crt;
  3. Type
  4. Zap=Record{Описание записи о грузополучателе}
  5. Student: record
  6. first_name:string[10];
  7. second_name:string[10];
  8. last_name:string[10]
  9. end;
  10. rating: record
  11. math:integer;
  12. history:integer;
  13. physik:integer
  14. end
  15. End;
  16. TreePtr=^Tree; {Описание узла дерева}
  17. Tree=Record
  18. Data:Zap;
  19. Left,Right:TreePtr
  20. End;
  21. VarTop:Treeptr;
  22. Z,e:Zap;
  23. k: file of zap;
  24. N,i:Integer;
  25. f,m,o:string[10];
  26. Number:Integer;
  27. {Функция добавляющая лист к дереву}
  28. Function AddTree (Top:TreePtr;Newnode:Zap):TreePtr;
  29. Begin
  30. If Top=Nil THEN
  31. Begin
  32. New(Top);
  33. Top^.Data:=Newnode;
  34. Top^.Left:=Nil;
  35. Top^.Right:=Nil;
  36. End
  37. Else
  38. If Top^.Data.student.last_name>Newnode.student.last_nameThen
  39. Top^.Left:=AddTree(Top^.Left,Newnode)
  40. Else
  41. Top^.Right:=AddTree(Top^.Right,Newnode);
  42. Addtree:=Top
  43. End;
  44. Procedure OrgTree;
  45. Begin
  46. Writeln('Выполняется процедура организации дерева');
  47. Writeln('Для выхода из процедуры вводите символ * ');
  48. Writeln('======================================== ');
  49. Top:=nil;
  50. While True Do
  51. Begin
  52. Writeln('Введитефамилиюстудента');
  53. Readln(Z.Student.last_name);
  54. If Z.student.last_name='*' Then Exit;
  55. Writeln('Введитеимястудента');
  56. Readln(Z.Student.first_name);
  57. Writeln('Введитеотчествостудента');
  58. Readln(Z.Student.second_name);
  59. Writeln('Введите оценку студента по математике');
  60. Readln(Z.rating.math);
  61. Writeln('Введите оценку студента по истории');
  62. Readln(Z.rating.history);
  63. Writeln('Введите оценку студента по физике ');
  64. Readln(Z.rating.physik);
  65.  
  66. Top:=Addtree(Top,Z);
  67. End
  68. End;
  69.  
  70.  
  71. ProcedureDobL;
  72. Begin
  73. Writeln('Выполняется процедура добавления листа');
  74. Writeln('Для выхода из процедуры вводите символ * ');
  75. Writeln('======================================== ');
  76. Writeln('Введите фамилию студента');
  77. Readln(Z.Student.last_name);
  78. If Z.student.last_name='*' Then Exit;
  79. Writeln('Введитеимястудента');
  80. Readln(Z.Student.first_name);
  81. Writeln('Введитеотчествостудента');
  82. Readln(Z.Student.second_name);
  83. Writeln('Введите оценку студента по математике');
  84. Readln(Z.rating.math);
  85. Writeln('Введите оценку студента по истории');
  86. Readln(Z.rating.history);
  87. Writeln('Введите оценку студента по физике ');
  88. Readln(Z.rating.physik);
  89.  
  90. Top:=Addtree(Top,Z);
  91. End;
  92. Procedure Prosmotr(Top:TreePtr);
  93. {Процедура просмотра значений узлов дерева слева направо}
  94. Begin
  95. If Top<>Nil Then
  96. Begin
  97. Prosmotr(Top^.Left);
  98. Writeln(i,' ',Top^.data.student.last_name,' ',Top^.data.student.first_name,' ',Top^.data.student.second_name);
  99. Writeln(' ',Top^.data.rating.math,' ',Top^.data.rating.history,' ',Top^.data.rating.physik);
  100. i:=i+1;
  101. Prosmotr(Top^.Right)
  102. End;
  103. End;
  104. Procedure Otobr(Top:TreePtr;Otstup:Integer);
  105. {Процедура отображения структуры дерева.
  106. Дерево отображается повернутым на 90 градусов против
  107. часовой стрелки. Узлы дерева, находящиеся на одном
  108. уровне, отображаются с одинаковым отступом от края
  109. экрана.}
  110. Begin
  111. If Top<>Nil Then
  112. Begin
  113. Otstup:=Otstup+3;
  114. Otobr(Top^.Right,Otstup);
  115. Writeln(' ':Otstup,Top^.Data.student.last_name,' ',Top^.Data.student.first_name,' ',Top^.Data.student.second_name);
  116. Otobr(Top^.Left,Otstup);
  117. End
  118. End;
  119.  
  120. procedurelvlE(Top:TreePtr; f,m,o:string[10]; varN: integer);
  121. begin
  122. iftop<>nil then
  123. begin
  124. N:=N+1;
  125. if(f=Top^.Data.student.last_name) and(m=Top^.Data.student.first_name) and (o=Top^.Data.student.second_name) then
  126. begin
  127. writeln('Уровень на котором находится элемент:',N);
  128. end;
  129.  
  130. lvlE(Top^.Left,f,m,o,N);
  131.  
  132.  
  133. lvlE(Top^.Right,f,m,o,N);
  134. N:=N-1;
  135. end;
  136. end;
  137. Procedure savetree(Top:treeptr);
  138. begin
  139. ifTop<>nil then
  140. begin
  141. write(k, top^.data);
  142. savetree(top^.left);
  143. savetree(top^.right)
  144. end
  145. end;
  146. Function AddE(top:treeptr; e:zap):treeptr;
  147. begin
  148. ifTop=nil then
  149. begin
  150. New(top);
  151. Top^.data:=e;
  152. top^.left:=nil;
  153. top^.right:=nil;
  154. end
  155. else
  156. iftop^.data.student.last_name>e.student.last_namethen top^.left:=AddE(top^.left, e)
  157. elsetop^.right:=Adde(top^.right, e);
  158. AddE:=Top
  159. end;
  160.  
  161. Procedure readtree;
  162. begin
  163. top:=nil;
  164. while not eof(k) do
  165. begin
  166. read(k,e);
  167. Top:=AddE(Top,e);
  168. end
  169. end;
  170.  
  171.  
  172. {==============основная программа================}
  173. begin
  174. { цикл, обеспечивающий вывод на экран пунктов меню}
  175. Repeat
  176. ClrScr; { очистка экрана }
  177. Writeln('1-Организация двоичного дерева');
  178. Writeln('2-Добавление листа к дереву');
  179. Writeln('3-Просмотр дерева');
  180. Writeln('4-Вычисление уровня элемента');
  181. Writeln('5-Сохранение в фаил');
  182. Writeln('6-Чтение из файла');
  183. Writeln('7-Выход');
  184. Writeln('-------------------------------');
  185. Writeln('Введите номер пункта меню');
  186. Readln(Number);
  187. CaseNumberOf{ вызов необходимой процедуры по номеру}
  188. 1:OrgTree;
  189. 2:Dobl;
  190. 3:Begin
  191. Writeln('Выполняется процедура просмотра дерева');
  192. Writeln('======================================== ');
  193. i:=0;
  194. Prosmotr(Top);
  195. Otobr(Top,1);
  196. Writeln('Нажмитеклавишу Enter');
  197. Readln
  198. End;
  199. 4:Begin
  200. N:=0;
  201. writeln('введитефамилию');
  202. Readln(f);
  203. writeln('введитеимя');
  204. Readln(m);
  205. writeln('введите отчество');
  206. Readln(o);
  207. lvlE(Top,f,m,o,N);
  208. readln;
  209. End;
  210. 5:begin
  211. assign(k,'1.dat');
  212. rewrite(k);
  213. Savetree(Top);
  214. close(k);
  215. end;
  216. 6:begin
  217. assign(k,'1.dat');
  218. reset(k);
  219. Readtree;
  220. close(k)
  221. end
  222.  
  223. End;
  224. UntilNumber=7; {выход из цикла, если введено 5}
  225. End. 
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement