Advertisement
amsavchenko

Untitled

May 27th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 14.15 KB | None | 0 0
  1. int main() {
  2.     test_all_functions();
  3.     while (1) {
  4.         cout << "\nДоступны 2 режима работы: со строками и функциями. Выберите, чтобы продолжить: " << endl;
  5.         cout << "1 - строки \n2 - функции\n3 - закончить работу " << endl;
  6.         char mode_choise;
  7.         do { cin >> mode_choise; } while (mode_choise != '1' && mode_choise != '2' && mode_choise != '3');
  8.        
  9.         switch (mode_choise) {
  10.             case '1': {
  11.                 cout << "Выбран режим работы со строками " << endl;
  12.                 cout << "Доступны следующие функции " << endl;
  13.                 cout << " 1 - map\n 2 - where\n 3 - слияние\n 4 - извлечение поддерева по заданному элементу\n 5 - поиск на вхождение поддерева\n 6 - поиск элемента на вхождение " << endl;
  14.                 char string_mode_choise;
  15.                 do { cin >> string_mode_choise; } while (string_mode_choise != '1' && string_mode_choise != '2' && string_mode_choise != '3' && string_mode_choise != '4' && string_mode_choise != '5' && string_mode_choise != '6');
  16.                 switch (string_mode_choise) {
  17.                     case '1': { // map
  18.                         cout << "Функция map преобразует все элементы дерева в строку, введенную пользователем\n\n";
  19.                         tree<string> *string_tree = new tree<string>;
  20.                         string_tree->set_tree();
  21.                         cout << "Введите строку для преобразований: " << endl;
  22.                         string for_map; cin >> for_map;
  23.                         string_tree->map(for_map);
  24.                         string_tree->print_by_levels();
  25.                         delete string_tree;
  26.                         break;
  27.                     }
  28.                     case '2': { // where
  29.                         cout << "Функция where вернёт дерево, состоящее из строк исходного, длина которых меньше 5\n\n";
  30.                         tree<string> *string_tree = new tree<string>;
  31.                         tree<string> *res_string_tree = new tree<string>;
  32.                         string_tree->set_tree();
  33.                         string_tree->where(res_string_tree);
  34.                         if (res_string_tree->getroot() == nullptr) cout << "Элементов, удовлетворяющих условию, не найдено" << endl;
  35.                         else {
  36.                             res_string_tree->rootRightLeft_print();
  37.                             res_string_tree->leftRootRight_print();
  38.                             res_string_tree->print_by_levels();
  39.                         }
  40.                         delete string_tree;
  41.                         delete res_string_tree;
  42.                         break;
  43.                        
  44.                     }
  45.                     case '3': { // слияние
  46.                         cout << "Первое дерево для слияния:" << endl;
  47.                         tree<string> *first_string_tree = new tree<string>;
  48.                         first_string_tree->set_tree();
  49.                         cout << "Второе дерево для слияния:" << endl;
  50.                         tree<string> *second_string_tree = new tree<string>;
  51.                         second_string_tree->set_tree();
  52.                         second_string_tree->merge_trees(first_string_tree);
  53.                         cout << "Результат: " << endl;
  54.                         first_string_tree->rootRightLeft_print();
  55.                         first_string_tree->leftRootRight_print();
  56.                         first_string_tree->print_by_levels();
  57.                         delete first_string_tree;
  58.                         delete second_string_tree;
  59.                         break;
  60.                     }
  61.                     case '4': { // извлечение поддерева
  62.                         tree<string> *string_tree = new tree<string>;
  63.                         tree<string> *res_string_tree = new tree<string>;
  64.                         string_tree->set_tree();
  65.                         cout << "Введите строку: ";
  66.                         string str; cin >> str;
  67.                         string_tree->subtree_extraction(str, res_string_tree);
  68.                         cout << "Результат извлечения поддерева по заданному элементу: " << endl;
  69.                         if (res_string_tree->getroot() == nullptr) cout << "Поддерева не существует" << endl;
  70.                         else {
  71.                             res_string_tree->rootRightLeft_print();
  72.                             res_string_tree->leftRootRight_print();
  73.                             res_string_tree->print_by_levels();
  74.                         }
  75.                         delete string_tree;
  76.                         delete res_string_tree;
  77.                         break;
  78.                     }
  79.                     case '5': { // поиск на вхождение поддерева
  80.                         tree<string> *string_tree = new tree<string>;
  81.                         cout << "Введите дерево " << endl;
  82.                         string_tree->set_tree();
  83.                         tree<string> *string_subtree = new tree<string>;
  84.                         cout << "Введите поддерево " << endl;
  85.                         string_subtree->set_tree();
  86.                         if (string_tree->if_tree_contain(string_subtree)) cout << "Поддерево содержится в дереве" << endl;
  87.                         else cout << "Поддерево не найдено в дереве" << endl;
  88.                         delete string_tree;
  89.                         delete string_subtree;
  90.                         break;
  91.                     }
  92.                     case '6': { // поиск на вхождение элемента
  93.                         tree<string> *string_tree = new tree<string>;
  94.                         string_tree->set_tree();
  95.                         cout << "Введите строку, для которой надо проверить, содержится ли она в дереве: ";
  96.                         string str; cin >> str;
  97.                         if (string_tree->if_element_contain(str)) cout << "Строка содержится в дереве" << endl;
  98.                         else cout << "Строка не найдена в дереве" << endl;
  99.                         delete string_tree;
  100.                         break;
  101.                     }
  102.                         break;
  103.                 }
  104.                 break;
  105.             }
  106.             case '2': {
  107.                 void *ptr[] = {(void*)f1, (void*)f2, (void*)f3, (void*)f4, (void*)f5};
  108.                 cout << "Выбран режим работы с функциями " << endl;
  109.                 cout << "Доступны следующие функции для реализации" << endl;
  110.                 cout << " 1 - map\n 2 - where\n 3 - слияние\n 4 - извлечение поддерева по заданному элементу\n 5 - поиск на вхождение поддерева\n 6 - поиск элемента на вхождение " << endl;
  111.                 char func_mode_choise;
  112.                 do { cin >> func_mode_choise; } while (func_mode_choise != '1' && func_mode_choise != '2' && func_mode_choise != '3' && func_mode_choise != '4' && func_mode_choise != '5' && func_mode_choise != '6');
  113.                 switch (func_mode_choise) {
  114.                     case '1': { // map
  115.                         cout << "Функция map преобразует все элементы дерева в функцию, выбранную пользователем\n\n";
  116.                         tree<void*> *func_tree = new tree<void*>;
  117.                         func_tree->set_function_tree(ptr);
  118.                         cout << "Введите функцию для преобразований: " << endl;
  119.                         int func_number;
  120.                        
  121.                         do {
  122.                             cin >> func_number;
  123.                         } while (func_number != 1 && func_number != 2 && func_number != 3 && func_number != 4 && func_number != 5);
  124.                         void *for_map = ptr[func_number-1];
  125.                         func_tree->map(for_map);
  126.                         func_tree->print_by_levels();
  127.                         func_tree->print_value_of_function();
  128.                         delete func_tree;
  129.                         break;
  130.                     }
  131.                     case '2': { // where
  132.                         cout << "Функция where вернёт дерево, состоящее из функций исходного, значение которых от x=5 меньше 10\n\n";
  133.                         tree<void*> *func_tree = new tree<void*>;
  134.                         tree<void*> *res_func_tree = new tree<void*>;
  135.                         func_tree->set_function_tree(ptr);
  136.                         func_tree->where(res_func_tree);
  137.                         if (res_func_tree->getroot() == nullptr) cout << "Элементов, удовлетворяющих условию, не найдено" << endl;
  138.                         else {
  139.                             res_func_tree->print_by_levels();
  140.                             res_func_tree->print_value_of_function();
  141.                         }
  142.                         delete func_tree;
  143.                         delete res_func_tree;
  144.                         break;
  145.                     }
  146.                     case '3': { // merge
  147.                         cout << "Первое дерево для слияния:" << endl;
  148.                         tree<void*> *first_functional_tree = new tree<void*>;
  149.                         first_functional_tree->set_function_tree(ptr);
  150.                         cout << "Второе дерево для слияния:" << endl;
  151.                         tree<void*> *second_functional_tree = new tree<void*>;
  152.                         second_functional_tree->set_function_tree(ptr);
  153.                         second_functional_tree->merge_trees(first_functional_tree);
  154.                         cout << "Результат: " << endl;
  155.                         first_functional_tree->print_by_levels();
  156.                         first_functional_tree->print_value_of_function();
  157.                         delete first_functional_tree;
  158.                         delete second_functional_tree;
  159.                         break;
  160.                     }
  161.                     case '4': { // извлечение поддерева
  162.                         tree<void*> *functional_tree = new tree<void*>;
  163.                         tree<void*> *res_functional_tree = new tree<void*>;
  164.                         functional_tree->set_function_tree(ptr);
  165.                         cout << "Выберите функцию для извлечения: " << endl;
  166.                         int func_number;
  167.                         do {
  168.                             cin >> func_number;
  169.                         } while (func_number != 1 && func_number != 2 && func_number != 3 && func_number != 4 && func_number != 5);
  170.                         void *func = ptr[func_number-1];
  171.                         functional_tree->subtree_extraction(func, res_functional_tree);
  172.                         if (functional_tree->getroot() == nullptr) cout << "Поддерева не найдено" << endl;
  173.                         //else {
  174.                             res_functional_tree->print_by_levels();
  175.                             res_functional_tree->print_value_of_function();
  176.                         //}
  177.                         delete functional_tree;
  178.                         delete res_functional_tree;
  179.                         break;
  180.                     }
  181.                     case '5': { // поиск на вхождение поддерева
  182.                         tree<void*> *func_tree = new tree<void*>;
  183.                         cout << "Введите дерево " << endl;
  184.                         func_tree->set_function_tree(ptr);
  185.                         tree<void*> *func_subtree = new tree<void*>;
  186.                         cout << "Введите поддерево " << endl;
  187.                         func_subtree->set_function_tree(ptr);
  188.                         if (func_tree->if_tree_contain(func_subtree)) cout << "Поддерево содержится в дереве" << endl;
  189.                         else cout << "Поддерево не найдено в дереве" << endl;
  190.                         delete func_tree;
  191.                         delete func_subtree;
  192.                         break;
  193.                     }
  194.                     case '6': { // поиск на вхождение элемента
  195.                         tree<void*> *func_tree = new tree<void*>;
  196.                         func_tree->set_function_tree(ptr);
  197.                         cout << "Выберите функцию, для которой надо проверить, содержится ли она в дереве: ";
  198.                         int func_number;
  199.                         do {
  200.                             cin >> func_number;
  201.                         } while (func_number != 1 && func_number != 2 && func_number != 3 && func_number != 4 && func_number != 5);
  202.                         void *func = ptr[func_number-1];
  203.                         if (func_tree->if_element_contain(func)) cout << "Функция содержится в дереве" << endl;
  204.                         else cout << "Функция не найдена в дереве" << endl;
  205.                         delete func_tree;
  206.                         break;
  207.                     }
  208.                         break;
  209.                 }
  210.                 break;
  211.             }
  212.             case '3': {
  213.                 cout << "Выход из программы " << endl;
  214.                 return 0;
  215.             }
  216.         }
  217.     }
  218. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement