ChameL1oN

Ваня_Лаба3

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