Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <locale>
- #include <Windows.h>
- #include <string>
- #include <stdlib.h>
- using namespace std;
- int n, n2 = 0;
- ifstream f("input.txt", ios::in);
- //Вариант 1
- //Составить программу, которая содержит динамическую инфоpмацию о наличии автобусов в автобусном парке.
- //Сведения о каждом автобусе включают :
- //□ номер автобуса;
- //□ фамилию и инициалы водителя;
- //□ номер маршрута.
- //Программа должна обеспечивать :
- //□ начальное формирование данных обо всех автобусах в парке в виде бинарного дерева;
- //□ при выезде каждого автобуса из парка вводится номер автобуса, и программа удаляет данные об этом автобусе из списка автобусов, находящихся в парке, и записывает эти данные в список автобусов, находящихся на маршруте;
- //□ при въезде каждого автобуса в парк вводится номер автобуса, и программа удаляет данные об этом автобусе из списка автобусов, находящихся на маршруте, и записывает эти данные в спи - сок автобусов, находящихся в парке;
- //□ по запросу выдаются сведения об автобусах, находящихся в парке, или об автобусах, находящихся на маршруте.
- struct Boos{
- int Number;
- int Track;
- string Cap;
- };
- struct Point
- {
- Boos data;
- Point *left;
- Point *right;
- };
- Point* first(Boos d)//формирование первого элемента дерева
- {
- Point* p = new Point;
- string a;
- p->data = d;
- p->left = 0;
- p->right = 0;
- return p;
- }
- //добавление элемента d в дерево поиска
- Point* Add(Point*root, Boos d)
- {
- Point*p = root;//корень дерева
- Point*r = new(Point);//флаг для проверки существования элемента d
- //в дереве
- bool ok = false;
- while (p&&!ok)
- {
- r = p;
- if (d.Number == p->data.Number)ok = true; //элемент уже существует
- else
- if (d.Number<p->data.Number)p = p->left;
- //пойти в левое поддерево
- else p = p->right;//пойти в правое поддерево
- }
- if (ok) return p; //найдено, не добавляем
- //создаем узел
- Point* New_point = new Point();//выделили память
- New_point->data = d;
- New_point->left = 0;
- New_point->right = 0;
- // если d<r->key, то добавляем его в левое поддерево
- if (d.Number<r->data.Number)r->left = New_point;
- // если d>r->key, то добавляем его в правое поддерево
- else r->right = New_point;
- return New_point;
- }
- void print_Tree(Point* p, int level){
- if (p){
- print_Tree(p->left, level + 1);
- for (int i = 0; i < level; i++)cout << " ";
- cout << p->data.Number << endl;
- print_Tree(p->right, level + 1);
- }
- }
- void print(Point* p){
- if (p){
- print(p->left);
- cout << p->data.Number << " " << p->data.Track << " " << p->data.Cap << endl;
- print(p->right);
- }
- }
- void del(Point* &r, Point* &q)
- {
- if (r->right != NULL) del(r->right, q);
- else
- {
- q->data = r->data;
- q = r;
- r = r->left;
- }
- }
- void Delete(Point* &Tree)
- // удаление узла
- {
- Point* q;
- q = Tree;
- if (q->right == NULL) Tree = q->left;
- else if (q->left == NULL) Tree = q->right;
- else del(q->left, q);
- delete(q);
- }
- void delete_node(Point* &Tree, int t, Point* &Tree2)
- // удаление узла с заданной продолжительностью
- {
- Point* p = Tree;
- if (Tree)
- {
- delete_node(Tree->right, t, Tree2);
- delete_node(Tree->left, t, Tree2);
- if (Tree->data.Number == t) {
- if (Tree2->data.Number == 0){
- Tree2 = first(Tree->data);
- }
- else{
- Add(Tree2, Tree->data);
- }
- Delete(Tree);
- }
- }
- }
- void main(){
- setlocale(LC_ALL, "rus");
- Point* beg;
- Point* p;
- Point* begTrack = new(Point);
- begTrack->data.Number = 0;
- bool end = false;
- bool fullend = false;
- string c;
- int Nam;
- char sw;
- int i = 0, j = 0;
- f >> n;
- Boos Temp;
- string s, s2;
- int a, a2;
- f >> s;
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- Temp.Number = a;
- }
- else{
- cout << "Ошибка ввода номера автобуса" << endl;
- exit(0);
- }
- f >> s;
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- Temp.Track = a;
- }
- else{
- cout << "Ошибка ввода номера маршрута" << endl;
- exit(0);
- }
- f >> Temp.Cap;
- beg = first(Temp);
- for (i = 0; i < n - 1; i++){
- f >> s;
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- Temp.Number = a;
- }
- else{
- cout << "Ошибка ввода номера автобуса" << endl;
- exit(0);
- }
- f >> s;
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- Temp.Track = a;
- }
- else{
- cout << "Ошибка ввода номера маршрута" << endl;
- exit(0);
- }
- f >> Temp.Cap;
- Add(beg, Temp);
- }
- cout << "Исходное дерево: " << endl;
- print(beg);
- //print_Tree(beg, 0);
- cout << endl;
- do{
- cout << endl;
- cout << "Выберите операцию" << endl;
- cout << "1 - сообщить о выезде автобуса из парка" << endl;
- cout << "2 - сообщить о въезде автобуса в парк" << endl;
- cout << "3 - распечатать информацию о автобусах в парке" << endl;
- cout << "4 - распечатать информацию о автобусах , находящихся на маршруте" << endl;
- cout << "5 - выход из программы" << endl;
- cin >> sw;
- switch (sw)
- {
- case ('1') : end = false;
- while (!end){
- if (beg->data.Number == 0){
- cout << "В парке нет ни одного автобуса" << endl;
- end = true;
- break;
- }
- cout << "Введите номер выезжающего автобуса" << endl;
- cin >> s;
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- if (beg->left == NULL && beg->right == NULL){
- delete_node(beg, a, begTrack);
- beg = new(Point);
- beg->data.Number = 0;
- }
- else{
- delete_node(beg, a, begTrack);
- }
- }
- else{
- cout << "Ошибка ввода" << endl;
- end = true;
- }
- do{
- cout << "Конец ? y/Y" << endl;
- char b;
- cin >> b;
- if (b == 'y' || b == 'Y') end = true;
- else if (b == 'n' || b == 'N') { end = false; break; }
- else cout << "Ошибка ввода" << endl;
- } while (!end);
- }
- break;
- case ('2') :
- end = false;
- while (!end){
- if (begTrack->data.Number == 0){
- cout << "На маршруте нет ни одного автобуса" << endl;
- end = true;
- break;
- }
- cout << "Введите номер въезжающего автобуса" << endl;
- cin >> s;
- a = atoi(s.c_str());
- s2 = to_string(a);
- if (s == s2){
- if (begTrack->left == NULL && begTrack->right == NULL){
- delete_node(begTrack, a, beg);
- begTrack = new (Point);
- begTrack->data.Number = 0;
- begTrack->data.Cap = "0";
- begTrack->data.Track = 0;
- begTrack->left = NULL;
- begTrack->right = NULL;
- }
- else{
- delete_node(begTrack, a, beg);
- }
- }
- else{
- cout << "Ошибка ввода" << endl;
- end = true;
- }
- do{
- cout << "Конец ? y/Y" << endl;
- char b;
- cin >> b;
- if (b == 'y' || b == 'Y') end = true;
- else if (b == 'n' || b == 'N') { end = false; break; }
- else cout << "Ошибка ввода" << endl;
- } while (!end);
- }
- break;
- case ('3') : if (beg->data.Number != 0)print(beg);
- else{ cout << "Нет автобусов , находящихся в парке" << endl; } cout << endl; break;
- case ('4') : if (begTrack->data.Number != 0)print(begTrack);
- else{ cout << "Нет автобусов , находящихся на маршруте" << endl; }
- cout << endl;
- cout << endl;
- break;
- case ('5') : fullend = true; break;
- default: cout << "Ошибка ввода" << endl; break;
- }
- } while (!fullend);
- }
Advertisement
Add Comment
Please, Sign In to add comment