ChameL1oN

Индивидуальная_Ваня

Apr 12th, 2015
349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <locale>
  4. #include <Windows.h>
  5. #include <string>
  6. #include <stdlib.h>
  7.  
  8. using namespace std;
  9.  
  10. int n,n2=0;
  11.  
  12.  
  13. ifstream f("input.txt", ios::in);
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20. //Вариант 1
  21. //Составить программу, которая содержит динамическую инфоpмацию о наличии автобусов в автобусном парке.
  22. //Сведения о каждом автобусе включают :
  23. //□ номер автобуса;
  24. //□ фамилию и инициалы водителя;
  25. //□ номер маршрута.
  26. //Программа должна обеспечивать :
  27. //□ начальное формирование данных обо всех автобусах в парке в виде бинарного дерева;
  28. //□ при выезде каждого автобуса из парка вводится номер автобуса, и программа удаляет данные об этом автобусе из списка автобусов, находящихся в парке, и записывает эти данные в список автобусов, находящихся на маршруте;
  29. //□ при въезде каждого автобуса в парк вводится номер автобуса, и программа удаляет данные об этом автобусе из списка автобусов, находящихся на маршруте, и записывает эти данные в спи - сок автобусов, находящихся в парке;
  30. //□ по запросу выдаются сведения об автобусах, находящихся в парке, или об автобусах, находящихся на маршруте.
  31.  
  32.  
  33. struct Boos{
  34. int Number;
  35. int Track;
  36. string Cap;
  37. };
  38.  
  39. struct Point
  40. {
  41. Boos data;
  42. Point *left;
  43. Point *right;
  44. };
  45. Point* first(Boos d)//формирование первого элемента дерева
  46. {
  47. Point* p = new Point;
  48. string a;
  49. p->data = d;
  50. p->left = 0;
  51. p->right = 0;
  52. return p;
  53. }
  54. //добавление элемента d в дерево поиска
  55. Point* Add(Point*root, Boos d)
  56. {
  57. Point*p = root;//корень дерева
  58. Point*r = new(Point);//флаг для проверки существования элемента d
  59. //в дереве
  60. bool ok = false;
  61. while (p&&!ok)
  62. {
  63. r = p;
  64. if (d.Number == p->data.Number)ok = true; //элемент уже существует
  65. else
  66. if (d.Number<p->data.Number)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->data = d;
  74. New_point->left = 0;
  75. New_point->right = 0;
  76. // если d<r->key, то добавляем его в левое поддерево
  77. if (d.Number<r->data.Number)r->left = New_point;
  78. // если d>r->key, то добавляем его в правое поддерево
  79. else r->right = New_point;
  80. return New_point;
  81. }
  82.  
  83. void print_Tree(Point* p, int level){
  84. if (p){
  85. print_Tree(p->left, level + 1);
  86. for (int i = 0; i < level; i++)cout << " ";
  87. cout << p->data.Number << endl;
  88. print_Tree(p->right, level + 1);
  89. }
  90. }
  91.  
  92. void print(Point* p){
  93. if (p){
  94. print(p->left);
  95. cout << p->data.Number << " " << p->data.Track << " " << p->data.Cap << endl;
  96. print(p->right);
  97. }
  98. }
  99.  
  100. void del(Point* &r, Point* &q)
  101. {
  102. if (r->right != NULL) del(r->right, q);
  103. else
  104. {
  105. q->data = r->data;
  106. q = r;
  107. r = r->left;
  108. }
  109. }
  110. void Delete(Point* &Tree)
  111. // удаление узла
  112. {
  113.  
  114. Point* q;
  115. q = Tree;
  116. if (q->right == NULL) Tree = q->left;
  117. else if (q->left == NULL) Tree = q->right;
  118. else del(q->left, q);
  119. delete(q);
  120. }
  121. void delete_node(Point* &Tree, int t,Point* &Tree2)
  122. // удаление узла с заданной продолжительностью
  123. {
  124. Point* p = Tree;
  125. if (Tree)
  126. {
  127. delete_node(Tree->right, t,Tree2);
  128. delete_node(Tree->left, t,Tree2);
  129. if (Tree->data.Number == t) {
  130. if (Tree2->data.Number == 0){
  131. Tree2 = first(Tree->data);
  132. }
  133. else{
  134. Add(Tree2, Tree->data);
  135. }
  136. Delete(Tree);
  137. }
  138. }
  139. }
  140.  
  141.  
  142. void main(){
  143. setlocale(LC_ALL, "rus");
  144. Point* beg;
  145. Point* p;
  146. Point* begTrack = new(Point);
  147. begTrack->data.Number = 0;
  148. bool end = false;
  149. bool fullend = false;
  150. string c;
  151. int Nam;
  152. char sw;
  153. int i = 0, j = 0;
  154. f >> n;
  155. Boos Temp;
  156. string s, s2;
  157. int a, a2;
  158. f >> s;
  159. a = atoi(s.c_str());
  160. s2 = to_string(a);
  161. if (s == s2){
  162. Temp.Number = a;
  163. }
  164. else{
  165. cout << "Ошибка ввода номера автобуса" << endl;
  166. exit(0);
  167. }
  168. f >> s;
  169. a = atoi(s.c_str());
  170. s2 = to_string(a);
  171. if (s == s2){
  172. Temp.Track = a;
  173. }
  174. else{
  175. cout << "Ошибка ввода номера маршрута" << endl;
  176. exit(0);
  177. }
  178. f >> Temp.Cap;
  179. beg = first(Temp);
  180. for (i = 0; i < n - 1; i++){
  181. f >> s;
  182. a = atoi(s.c_str());
  183. s2 = to_string(a);
  184. if (s == s2){
  185. Temp.Number = a;
  186. }
  187. else{
  188. cout << "Ошибка ввода номера автобуса" << endl;
  189. exit(0);
  190. }
  191. f >> s;
  192. a = atoi(s.c_str());
  193. s2 = to_string(a);
  194. if (s == s2){
  195. Temp.Track = a;
  196. }
  197. else{
  198. cout << "Ошибка ввода номера маршрута" << endl;
  199. exit(0);
  200. }
  201. f >> Temp.Cap;
  202. Add(beg, Temp);
  203. }
  204. cout << "Исходное дерево: " << endl;
  205. print(beg);
  206. //print_Tree(beg, 0);
  207. cout << endl;
  208. do{
  209. cout << endl;
  210. cout << "Выберите операцию" << endl;
  211. cout << "1 - сообщить о выезде автобуса из парка" << endl;
  212. cout << "2 - сообщить о въезде автобуса в парк" << endl;
  213. cout << "3 - распечатать информацию о автобусах в парке" << endl;
  214. cout << "4 - распечатать информацию о автобусах , находящихся на маршруте" << endl;
  215. cout << "5 - выход из программы" << endl;
  216. cin >> sw;
  217. switch (sw)
  218. {
  219. case ('1') : end = false;
  220. if (beg->data.Number == 0){
  221. end = true;
  222. cout << "В парке нет ни одного автобуса" << endl;
  223. }
  224. while (!end){
  225. cout << "Введите номер выезжающего автобуса" << endl;
  226. cin >> s;
  227. a = atoi(s.c_str());
  228. s2 = to_string(a);
  229. if (s == s2){
  230. delete_node(beg, a, begTrack);
  231. }
  232. else{
  233. cout << "Ошибка ввода" << endl;
  234. end = true;
  235. }
  236. do{
  237. cout << "Конец ? y/Y" << endl;
  238. char b;
  239. cin >> b;
  240. if (b == 'y' || b == 'Y') end = true;
  241. else if (b == 'n' || b == 'N') { end = false; break; }
  242. else cout << "Ошибка ввода" << endl;
  243. } while (!end);
  244. }
  245. break;
  246. case ('2') : end = false;
  247. if (begTrack->data.Number == 0){
  248. end = true;
  249. cout << "На маршруте нет ни одного автобуса" << endl;
  250. }
  251. while (!end){
  252. cout << "Введите номер въезжающего автобуса" << endl;
  253. cin >> Nam;
  254. p = begTrack;
  255. }
  256. break;
  257. case ('3') : if (beg->data.Number != 0)print(beg);
  258. else{ cout << "Нет автобусов , находящихся в парке" << endl; } cout << endl; break;
  259.  
  260. case ('4') : if (begTrack->data.Number != 0)print(begTrack);
  261. else{ cout << "Нет автобусов , находящихся на маршруте" << endl; }
  262. cout << endl;
  263. cout << endl;
  264. break;
  265.  
  266. case ('5') : fullend = true; break;
  267. default: cout << "Ошибка ввода" << endl; break;
  268. }
  269. }while (!fullend);
  270. }
Advertisement
Add Comment
Please, Sign In to add comment