ChameL1oN

Vanya

Jun 18th, 2015
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.75 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. while (!end){
  221. if (beg->data.Number == 0){
  222. cout << "В парке нет ни одного автобуса" << endl;
  223. end = true;
  224. break;
  225. }
  226. cout << "Введите номер выезжающего автобуса" << endl;
  227. cin >> s;
  228. a = atoi(s.c_str());
  229. s2 = to_string(a);
  230. if (s == s2){
  231. if (beg->left == NULL && beg->right == NULL){
  232. delete_node(beg, a, begTrack);
  233. beg = new(Point);
  234. beg->data.Number = 0;
  235. }
  236. else{
  237. delete_node(beg, a, begTrack);
  238. }
  239. }
  240. else{
  241. cout << "Ошибка ввода" << endl;
  242. end = true;
  243. }
  244. do{
  245. cout << "Конец ? y/Y" << endl;
  246. char b;
  247. cin >> b;
  248. if (b == 'y' || b == 'Y') end = true;
  249. else if (b == 'n' || b == 'N') { end = false; break; }
  250. else cout << "Ошибка ввода" << endl;
  251. } while (!end);
  252. }
  253. break;
  254. case ('2') :
  255. end = false;
  256. while (!end){
  257. if (begTrack->data.Number == 0){
  258. cout << "На маршруте нет ни одного автобуса" << endl;
  259. end = true;
  260. break;
  261. }
  262. cout << "Введите номер въезжающего автобуса" << endl;
  263. cin >> s;
  264. a = atoi(s.c_str());
  265. s2 = to_string(a);
  266. if (s == s2){
  267. if (begTrack->left == NULL && begTrack->right == NULL){
  268. delete_node(begTrack, a, beg);
  269. begTrack = new (Point);
  270. begTrack->data.Number = 0;
  271. begTrack->data.Cap = "0";
  272. begTrack->data.Track = 0;
  273. begTrack->left = NULL;
  274. begTrack->right = NULL;
  275.  
  276. }
  277. else{
  278. delete_node(begTrack, a, beg);
  279. }
  280. }
  281. else{
  282. cout << "Ошибка ввода" << endl;
  283. end = true;
  284. }
  285. do{
  286. cout << "Конец ? y/Y" << endl;
  287. char b;
  288. cin >> b;
  289. if (b == 'y' || b == 'Y') end = true;
  290. else if (b == 'n' || b == 'N') { end = false; break; }
  291. else cout << "Ошибка ввода" << endl;
  292. } while (!end);
  293. }
  294. break;
  295. case ('3') : if (beg->data.Number != 0)print(beg);
  296. else{ cout << "Нет автобусов , находящихся в парке" << endl; } cout << endl; break;
  297.  
  298. case ('4') : if (begTrack->data.Number != 0)print(begTrack);
  299. else{ cout << "Нет автобусов , находящихся на маршруте" << endl; }
  300. cout << endl;
  301. cout << endl;
  302. break;
  303.  
  304. case ('5') : fullend = true; break;
  305. default: cout << "Ошибка ввода" << endl; break;
  306. }
  307. } while (!fullend);
  308. }
Advertisement
Add Comment
Please, Sign In to add comment