ChameL1oN

Марина_Лаба3

Apr 9th, 2015
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.67 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include<iostream>
  3. #include<fstream>
  4. #include<locale>
  5. #include <Windows.h>
  6.  
  7.  
  8. using namespace std;
  9.  
  10. ifstream f;
  11. FILE* D;
  12. ofstream g;
  13. struct sp
  14. {
  15. string Name;
  16. string City;
  17. int Count;
  18. int Score;
  19. };
  20. struct Point
  21. {
  22. sp data;
  23. Point *left;
  24. Point *right;
  25. };
  26. Point* first(sp d)//формирование первого элемента дерева
  27. {
  28. Point* p = new Point;
  29. string a;
  30. p->data = d;
  31. p->left = 0;
  32. p->right = 0;
  33. return p;
  34. }
  35. //добавление элемента d в дерево поиска
  36. Point* Add(Point*root,sp d)
  37. {
  38. Point*p = root;//корень дерева
  39. Point*r = new(Point);//флаг для проверки существования элемента d
  40. //в дереве
  41. bool ok = false;
  42. while (p&&!ok)
  43. {
  44. r = p;
  45. if (d.Name == p->data.Name)ok = true; //элемент уже существует
  46. else
  47. if (d.Name<p->data.Name)p = p->left;
  48. //пойти в левое поддерево
  49. else p = p->right;//пойти в правое поддерево
  50. }
  51. if (ok) return p; //найдено, не добавляем
  52. //создаем узел
  53. Point* New_point = new Point();//выделили память
  54. New_point->data = d;
  55. New_point->left = 0;
  56. New_point->right = 0;
  57. // если d<r->key, то добавляем его в левое поддерево
  58. if (d.Name<r->data.Name)r->left = New_point;
  59. // если d>r->key, то добавляем его в правое поддерево
  60. else r->right = New_point;
  61. return New_point;
  62. }
  63.  
  64. void print_Tree(Point* p, int level){
  65. if (p){
  66. print_Tree(p->left, level + 1);
  67. for (int i = 0; i < level; i++)cout << " ";
  68. cout << p->data.Name << endl;
  69. print_Tree(p->right, level + 1);
  70. }
  71. }
  72.  
  73. void del(Point* &r, Point* &q)
  74. {
  75. if (r->right != NULL) del(r->right, q);
  76. else
  77. {
  78. q->data = r->data;
  79. q = r;
  80. r = r->left;
  81. }
  82. }
  83. void Delete(Point* &Tree)
  84. // удаление узла
  85. {
  86. Point* q;
  87. q = Tree;
  88. if (q->right == NULL) Tree = q->left;
  89. else if (q->left == NULL) Tree = q->right;
  90. else del(q->left, q);
  91. delete(q);
  92. }
  93. void delete_node(Point* &Tree, int t)
  94. // удаление узла с заданной продолжительностью
  95. {
  96. Point* p = Tree;
  97. if (Tree)
  98. {
  99. delete_node(Tree->right, t);
  100. delete_node(Tree->left, t);
  101. if (Tree->data.Score <= t) Delete(Tree);
  102. }
  103. }
  104. void print_Alf(Point *p){
  105.  
  106. if (p)
  107. {
  108. print_Alf(p->left);
  109.  
  110. cout << p->data.Name << " ";
  111. print_Alf(p->right);
  112. }
  113. }
  114.  
  115. void Fuf(Point *p){
  116. if (p){
  117. Fuf(p->left);
  118. SetConsoleCP(1251);
  119. fwrite(&p->data, sizeof(p->data), 1, D);
  120. Fuf(p->right);
  121. }
  122. }
  123.  
  124. void main()
  125. {
  126. setlocale(LC_ALL, "rus");
  127. int n, i, j;
  128. g.open("Hput.txt");
  129. f.open("input.txt", ios::in);
  130. f >> n;
  131. Point* t;/*
  132. t = first();
  133. print_Tree(t, 0);*/
  134. FILE* H;
  135. H = fopen("inpat.dat", "wb");
  136. for (int i = 0; i < n; i++)
  137. {
  138. sp a;
  139. f >> a.Name;
  140. f >> a.City;
  141. f >> a.Count;
  142. f >> a.Score;
  143. fwrite(&a,sizeof(a),1,H);
  144. }
  145. fclose(H);
  146.  
  147. sp a;
  148. H = fopen("inpat.dat", "rb");
  149. fread(&a, sizeof(a), 1, H);
  150. t = first(a);
  151. for (int i = 0; i < n; i++){
  152.  
  153. fread(&a, sizeof(a), 1, H);
  154. Add(t, a);
  155. }
  156. //print_Tree(t, 0);
  157. cout << endl;
  158. print_Alf(t);
  159. cout << endl;
  160. int o;
  161. cout << "Введите кол-во очков,для удаления элементов";
  162. cin >> o;
  163. D = fopen("output.dat", "wb");
  164. delete_node(t, o);
  165. cout << endl;
  166. print_Alf(t);
  167. Fuf(t);
  168. fclose(D);
  169. D = fopen("output.dat", "rb");
  170. while (!feof(D)){
  171. fread(&a, sizeof(a), 1, D);
  172. g << a.Name; g<< " ";
  173. g << a.City; g << " ";
  174. g << a.Count; g << " ";
  175. g << a.Score; g << " ";
  176. g<<endl;
  177. }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment