ChameL1oN

АиП_Лаба3(1 вар.)

Apr 11th, 2015
301
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.55 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. #include <iomanip>
  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 Date;
  19. float Atest;
  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, float t)
  98. // удаление узла с заданной продолжительностью
  99. {
  100. Point* p = Tree;
  101. if (Tree)
  102. {
  103. delete_node(Tree->right, t);
  104. delete_node(Tree->left, t);
  105. if (Tree->data.Atest <= t) Delete(Tree);
  106.  
  107. }
  108. }
  109. void print_Alf(Point *p){
  110.  
  111. if (p)
  112. {
  113. print_Alf(p->left);
  114. cout << left << setw(8) << p->data.Name[0] << " " << setw(10) << p->data.Name[1] << " " << setw(10) << p->data.Name[2] << " " << setw(15) << p->data.Date << " " << setw(16) << p->data.Atest << " " << endl;
  115. print_Alf(p->right);
  116. }
  117. }
  118.  
  119. void Fuf(Point *p){
  120. if (p){
  121. Fuf(p->left);
  122. SetConsoleCP(1251);
  123. fwrite(&p->data, sizeof(p->data), 1, D);
  124. Fuf(p->right);
  125. }
  126. }
  127.  
  128. void main()
  129. {
  130. setlocale(LC_ALL, "rus");
  131. int n, i, j;
  132. g.open("output.txt");
  133. f.open("input.txt", ios::in);
  134. f >> n;
  135. Point* t;/*
  136. t = first();
  137. print_Tree(t, 0);*/
  138. FILE* H;
  139. H = fopen("inpat.dat", "wb");
  140. for (int i = 0; i < n; i++)
  141. {
  142. sp a;
  143. f >> a.Name[0];
  144. f >> a.Name[1];
  145. f >> a.Name[2];
  146. f >> a.Date;
  147. f >> a.Atest;
  148. f >> a.Score[0];
  149. f >> a.Score[1];
  150. f >> a.Score[2];
  151. fwrite(&a, sizeof(a), 1, H);
  152. }
  153. fclose(H);
  154.  
  155. sp a;
  156. H = fopen("inpat.dat", "rb");
  157. fread(&a, sizeof(a), 1, H);
  158. t = first(a);
  159. for (int i = 0; i < n; i++){
  160.  
  161. fread(&a, sizeof(a), 1, H);
  162. Add(t, a);
  163. }
  164. //print_Tree(t, 0);
  165. cout << endl;
  166. cout << "Исходный список : " << endl;
  167. cout << endl;
  168. cout << setw(20) <<" ФИО " << setw(25) << " Год Рождения " << setw(4) << " Ср. балл аттестата " << " " << endl;
  169. print_Alf(t);
  170. cout << endl;
  171. float o;
  172. cout << "Введите балл аттестата , для удаления" << endl;
  173. cin >> o;
  174. D = fopen("output.dat", "wb");
  175. delete_node(t, o);
  176. cout << endl;
  177. cout << "Список после удаления : " << endl;
  178. cout << endl;
  179. cout << setw(20) << " ФИО " << setw(25) << " Год Рождения " << setw(4) << " Ср. балл аттестата " << " " << endl;
  180. print_Alf(t);
  181. Fuf(t);
  182. fclose(D);
  183. D = fopen("output.dat", "rb");
  184. while (!feof(D)){
  185. fread(&a, sizeof(a), 1, D);
  186.  
  187. g << a.Name[0]; g << " ";
  188. g << a.Name[1]; g << " ";
  189. g << a.Name[2]; g << " ";
  190. g << a.Date; g << " ";
  191. g << a.Atest; g << " ";
  192. g << a.Score[0]; g << " ";
  193. g << a.Score[1]; g << " ";
  194. g << a.Score[2]; g << " ";
  195. g << endl;
  196. }
  197. }
Advertisement
Add Comment
Please, Sign In to add comment