ChameL1oN

Лаба3(3 вар.)

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