Advertisement
Sailein

Tree source

May 28th, 2018
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 17.97 KB | None | 0 0
  1. #include "GrootTree.h"
  2.  
  3. int main()
  4. {
  5.     // int map - лямбда функции
  6.     auto mapI1 = [](const int& element) { return element * 2; }; //multiply by 2
  7.     auto mapI2 = [](const int& element) { return (float)element / 3; }; //divide by 3
  8.     auto mapI3 = [](const int& element) { return element % 5; }; //Nmod5
  9.     // int where
  10.     auto whereI1 = [](const int& element) { return (element * 2.0) < 24; }; //(N * 2) < 24
  11.     auto whereI2 = [](const int& element) { return (element % 3) == 1; }; //Nmod3 == 1
  12.     auto whereI3 = [](const int& element) { return element != 2; }; //N != 2
  13.     // float map
  14.     auto mapF1 = [](const float& element) { return element * 3.5f; }; // multiply by 3.5
  15.     auto mapF2 = [](const float& element) { return (element / 2.0f) + 2.5f; }; //divide by 2 and add 2.5
  16.     auto mapF3 = [](const float& element) { return exp(element); }; //e^N
  17.     // float where
  18.     auto whereF1 = [](const float& element) { return (element * 2.0) < 24.0; }; //(N * 2) < 24
  19.     auto whereF2 = [](const float& element) { return (element / 3.0) > 10.0; }; //N / 3 > 10
  20.     auto whereF3 = [](const float& element) { return element != 2.0; }; //N != 2
  21.     // Complex map
  22.     auto mapC1 = [](const Complex& element) { return element * 3; }; // mul by 3
  23.     auto mapC2 = [](const Complex& element) { return element + Complex(2, 3); }; // plus 2 + 3i
  24.     auto mapC3 = [](const Complex& element) { return (element * 2) + Complex(3, 4); }; // mul by 2 + (3 + 4i)
  25.     // Complex where
  26.     auto whereC1 = [](const Complex& element) { return element == 24; }; // |Z| == 25
  27.     auto whereC2 = [](const Complex& element) { return element > 11; }; // |Z| > 11
  28.     auto whereC3 = [](const Complex& element) { return element < 30; }; //|Z| < 30
  29.  
  30.     /*Tree<int> t = "4,2,1,3,6,5,7";
  31.     cout << t.toString("klp") << endl;
  32.     cout << t.toString("kpl") << endl;
  33.     cout << t.toString("lpk") << endl;
  34.     cout << t.toString("lkp") << endl;
  35.     cout << t.toString("plk") << endl;
  36.     cout << t.toString("pkl") << endl;
  37.     t.map<int>(mul2);
  38.     cin.get();
  39.     */
  40.     string travese; // способ обхода
  41.     string data, data2;// числа
  42.     int oper, type, test;
  43.     cout << "Hello, I am Groot. Would you like to test all functions?" << endl;
  44.     cin >> test;
  45.     while ((test != 1) && (test != 2))
  46.     {
  47.         cout << "error (enter 1 or 2)" << endl;
  48.         cin >> test;
  49.     }
  50.     if (test == 1) // testAll();
  51.     cout << "Choose the type of numbers: \n 1 - int\n 2 - float \n 3 - complex \n 4 - exit program" << endl;
  52.     cin >> type;
  53.     while ((type != 1) && (type != 2) && (type != 3) && (type != 4))
  54.     {
  55.         cout << "error (enter 1, 2, 3 or 4)" << endl;
  56.         cin >> type;
  57.     }
  58.     if (type == 1) //int
  59.     {
  60.         cout << "Choose an operation: \n 1 - map\n 2 - where\n 3 - merging\n 4 - retrieval a tree by an element \n 5 - searching a subtree \n 6 - searching am element " << endl;
  61.         cin >> oper;
  62.         while ((oper != 1) && (oper != 2) && (oper != 3) && (oper != 4))
  63.         {
  64.             cout << "error (enter 1, 2, 3 or 4)" << endl;
  65.             cin >> oper;
  66.         }
  67.         if (oper == 1) //map
  68.         {
  69.             cout << "Choose the map function: \n1 - multiply by 2 \n2 - divide by 3 \n3 -  Nmod5" << endl;
  70.             int cond;
  71.             cin >> cond;
  72.             switch (cond) {
  73.                 case 1: {
  74.                     cout << "Enter string of numbers" << endl;
  75.                     cin >> data;
  76.                     cout << "Enter the way of traverse" << endl;
  77.                     cin >> travese;
  78.                     Tree<int> tree(data);
  79.                     cout << tree.map<int>(mapI1).toString(travese) << endl;
  80.                 }
  81.                     break;
  82.                 case 2: {
  83.                     cout << "Enter string of numbers" << endl;
  84.                     cin >> data;
  85.                     cout << "Enter the way of traverse" << endl;
  86.                     cin >> travese;
  87.                     Tree<int> tree(data);
  88.                     cout << tree.map<float>(mapI2).toString(travese) << endl;
  89.                 }
  90.                     break;
  91.                 case 3: {
  92.                     cout << "Enter string of numbers" << endl;
  93.                     cin >> data;
  94.                     cout << "Enter the way of traverse" << endl;
  95.                     cin >> travese;
  96.                     Tree<int> tree(data);
  97.                     cout << tree.map<int>(mapI3).toString(travese) << endl;
  98.                 }
  99.                     break;
  100.                 default: {
  101.                     cout << "What are you doing? Try again!" << endl;
  102.                     cin >> cond;
  103.                 }
  104.             }
  105.         } else if (oper == 2) //where
  106.         {
  107.             cout << "Choose the where function: \n1 - (N * 2) < 24  \n2 - Nmod3 == 1 \n3 -  N != 2" << endl;
  108.             int cond;
  109.             cin >> cond;
  110.             switch (cond) {
  111.                 case 1: {
  112.                     cout << "Enter string of numbers" << endl;
  113.                     cin >> data;
  114.                     cout << "Enter the way of traverse" << endl;
  115.                     cin >> travese;
  116.                     Tree<int> tree(data);
  117.                     cout << tree.where(whereI1).toString(travese) << endl;
  118.                 }
  119.                     break;
  120.                 case 2: {
  121.                     cout << "Enter string of numbers" << endl;
  122.                     cin >> data;
  123.                     cout << "Enter the way of traverse" << endl;
  124.                     cin >> travese;
  125.                     Tree<int> tree(data);
  126.                     cout << tree.where(whereI2).toString(travese) << endl;
  127.                 }
  128.                     break;
  129.                 case 3: {
  130.                     cout << "Enter string of numbers" << endl;
  131.                     cin >> data;
  132.                     cout << "Enter the way of traverse" << endl;
  133.                     cin >> travese;
  134.                     Tree<int> tree(data);
  135.                     cout << tree.where(whereI3).toString(travese) << endl;
  136.                 }
  137.                     break;
  138.                 default: {
  139.                     cout << "What are you doing? Try again!" << endl;
  140.                     cin >> cond;
  141.                 }
  142.             }
  143.         } else if (oper == 3) //merging
  144.         {
  145.             cout << "Enter string of numbers to first tree" << endl;
  146.             cin >> data;
  147.             Tree<int> tree1(data);
  148.             cout << "Enter string of numbers to second tree" << endl;
  149.             cin >> data2;
  150.             Tree<int> tree2(data2);
  151.             cout << "Enter the way of traverse" << endl;
  152.             cin >> travese;
  153.             Tree<int> treeRes = tree1 + tree2;
  154.             cout << treeRes.toString(travese) << endl;
  155.         } else if (oper == 4) // retrieval
  156.         {
  157.             cout << "Enter string of numbers" << endl;
  158.             cin >> data;
  159.             cout << "Enter a wanted element" << endl;
  160.             int element;
  161.             cin >> element;
  162.             cout << "Enter the way of traverse" << endl;
  163.             cin >> travese;
  164.             Tree<int> tree(data);
  165.             cout << tree.extract(element).toString(travese) <<endl;
  166.         } else if (oper == 5) // search subtree
  167.         {
  168.             //хер его знает
  169.         } else if (oper == 6) // search an element
  170.         {
  171.             cout << "Enter string of numbers" << endl;
  172.             cin >> data;
  173.             cout << "Enter a wanted element" << endl;
  174.             int element;
  175.             cin >> element;
  176.             cout << "Enter the way of traverse" << endl;
  177.             cin >> travese;
  178.             Tree<int> tree(data);
  179.             cout << boolalpha << tree.containsElement(element) << endl;
  180.         }
  181.     } else if (type == 2) //float
  182.     {
  183.         cout << "Choose an operation: \n 1 - map\n 2 - where\n 3 - merging\n 4 - retrieval a tree by an element \n 5 - searching a subtree \n 6 - searching am element " << endl;
  184.         cin >> oper;
  185.         while ((oper != 1) && (oper != 2) && (oper != 3) && (oper != 4))
  186.         {
  187.             cout << "error (enter 1, 2, 3 or 4)" << endl;
  188.             cin >> oper;
  189.         }
  190.         if (oper == 1) //map
  191.         {
  192.             cout << "Choose the map function: \n1 - multiply by 3.5 \n2 - divide by 2 and add 2.5 \n3 - e^N" << endl;
  193.             int cond;
  194.             cin >> cond;
  195.             switch (cond) {
  196.                 case 1: {
  197.                     cout << "Enter string of numbers" << endl;
  198.                     cin >> data;
  199.                     cout << "Enter the way of traverse" << endl;
  200.                     cin >> travese;
  201.                     Tree<float> tree(data);
  202.                     cout << tree.map<float>(mapF1).toString(travese) << endl;
  203.                 }
  204.                     break;
  205.                 case 2: {
  206.                     cout << "Enter string of numbers" << endl;
  207.                     cin >> data;
  208.                     cout << "Enter the way of traverse" << endl;
  209.                     cin >> travese;
  210.                     Tree<float> tree(data);
  211.                     cout << tree.map<float>(mapF2).toString(travese) << endl;
  212.                 }
  213.                     break;
  214.                 case 3: {
  215.                     cout << "Enter string of numbers" << endl;
  216.                     cin >> data;
  217.                     cout << "Enter the way of traverse" << endl;
  218.                     cin >> travese;
  219.                     Tree<float> tree(data);
  220.                     cout << tree.map<float>(mapF3).toString(travese) << endl;
  221.                 }
  222.                     break;
  223.                 default: {
  224.                     cout << "What are you doing? Try again!" << endl;
  225.                     cin >> cond;
  226.                 }
  227.             }
  228.         } else if (oper == 2) //where
  229.         {
  230.             cout << "Choose the where function: \n1 - (N * 2) < 24  \n2 - N / 3 > 10 \n3 -  N != 2" << endl;
  231.             int cond;
  232.             cin >> cond;
  233.             switch (cond) {
  234.                 case 1: {
  235.                     cout << "Enter string of numbers" << endl;
  236.                     cin >> data;
  237.                     cout << "Enter the way of traverse" << endl;
  238.                     cin >> travese;
  239.                     Tree<float> tree(data);
  240.                     cout << tree.where(whereF1).toString(travese) << endl;
  241.                 }
  242.                     break;
  243.                 case 2: {
  244.                     cout << "Enter string of numbers" << endl;
  245.                     cin >> data;
  246.                     cout << "Enter the way of traverse" << endl;
  247.                     cin >> travese;
  248.                     Tree<float> tree(data);
  249.                     cout << tree.where(whereF2).toString(travese) << endl;
  250.                 }
  251.                     break;
  252.                 case 3: {
  253.                     cout << "Enter string of numbers" << endl;
  254.                     cin >> data;
  255.                     cout << "Enter the way of traverse" << endl;
  256.                     cin >> travese;
  257.                     Tree<float> tree(data);
  258.                     cout << tree.where(whereF3).toString(travese) << endl;
  259.                 }
  260.                     break;
  261.                 default: {
  262.                     cout << "What are you doing? Try again!" << endl;
  263.                     cin >> cond;
  264.                 }
  265.             }
  266.         } else if (oper == 3) //merging
  267.         {
  268.             cout << "Enter string of numbers to first tree" << endl;
  269.             cin >> data;
  270.             Tree<float> tree1(data);
  271.             cout << "Enter string of numbers to second tree" << endl;
  272.             cin >> data2;
  273.             Tree<float> tree2(data2);
  274.             cout << "Enter the way of traverse" << endl;
  275.             cin >> travese;
  276.             Tree<float> treeRes = tree1 + tree2;
  277.             cout << treeRes.toString(travese) << endl;
  278.         } else if (oper == 4) // retrieval
  279.         {
  280.             cout << "Enter string of numbers" << endl;
  281.             cin >> data;
  282.             cout << "Enter a wanted element" << endl;
  283.             float element;
  284.             cin >> element;
  285.             cout << "Enter the way of traverse" << endl;
  286.             cin >> travese;
  287.             Tree<float> tree(data);
  288.             cout << tree.extract(element).toString(travese) <<endl;
  289.         } else if (oper == 5) // search subtree
  290.         {
  291.             //хер его знает
  292.         } else if (oper == 6) // search an element
  293.         {
  294.             cout << "Enter string of numbers" << endl;
  295.             cin >> data;
  296.             cout << "Enter a wanted element" << endl;
  297.             float element;
  298.             cin >> element;
  299.             cout << "Enter the way of traverse" << endl;
  300.             cin >> travese;
  301.             Tree<float> tree(data);
  302.             cout << boolalpha << tree.containsElement(element) << endl;
  303.         }
  304.     } else if (type == 3) //Complex
  305.     {
  306.         cout << "Choose an operation: \n 1 - map\n 2 - where\n 3 - merging\n 4 - retrieval a tree by an element \n 5 - searching a subtree \n 6 - searching am element " << endl;
  307.         cin >> oper;
  308.         while ((oper != 1) && (oper != 2) && (oper != 3) && (oper != 4))
  309.         {
  310.             cout << "error (enter 1, 2, 3 or 4)" << endl;
  311.             cin >> oper;
  312.         }
  313.         if (oper == 1) //map
  314.         {
  315.             cout << "Choose the map function: \n1 - multiply by 3 \n2 - add (2 + 3i) \n3 - mul by 2 + (3 + 4i)" << endl;
  316.             int cond;
  317.             cin >> cond;
  318.             switch (cond) {
  319.                 case 1: {
  320.                     cout << "Enter string of numbers" << endl;
  321.                     cin >> data;
  322.                     cout << "Enter the way of traverse" << endl;
  323.                     cin >> travese;
  324.                     Tree<Complex> tree(data);
  325.                     cout << tree.map<Complex>(mapC1).toString(travese) << endl;
  326.                 }
  327.                     break;
  328.                 case 2: {
  329.                     cout << "Enter string of numbers" << endl;
  330.                     cin >> data;
  331.                     cout << "Enter the way of traverse" << endl;
  332.                     cin >> travese;
  333.                     Tree<Complex> tree(data);
  334.                     cout << tree.map<Complex>(mapC2).toString(travese) << endl;
  335.                 }
  336.                     break;
  337.                 case 3: {
  338.                     cout << "Enter string of numbers" << endl;
  339.                     cin >> data;
  340.                     cout << "Enter the way of traverse" << endl;
  341.                     cin >> travese;
  342.                     Tree<Complex> tree(data);
  343.                     cout << tree.map<Complex>(mapC3).toString(travese) << endl;
  344.                 }
  345.                     break;
  346.                 default: {
  347.                     cout << "What are you doing? Try again!" << endl;
  348.                     cin >> cond;
  349.                 }
  350.             }
  351.         } else if (oper == 2) //where
  352.         {
  353.             cout << "Choose the where function: \n1 - |Z| == 25  \n2 - |Z| > 11 \n3 -  |Z| < 30" << endl;
  354.             int cond;
  355.             cin >> cond;
  356.             switch (cond) {
  357.                 case 1: {
  358.                     cout << "Enter string of numbers" << endl;
  359.                     cin >> data;
  360.                     cout << "Enter the way of traverse" << endl;
  361.                     cin >> travese;
  362.                     Tree<Complex> tree(data);
  363.                     cout << tree.where(whereC1).toString(travese) << endl;
  364.                 }
  365.                     break;
  366.                 case 2: {
  367.                     cout << "Enter string of numbers" << endl;
  368.                     cin >> data;
  369.                     cout << "Enter the way of traverse" << endl;
  370.                     cin >> travese;
  371.                     Tree<Complex> tree(data);
  372.                     cout << tree.where(whereC2).toString(travese) << endl;
  373.                 }
  374.                     break;
  375.                 case 3: {
  376.                     cout << "Enter string of numbers" << endl;
  377.                     cin >> data;
  378.                     cout << "Enter the way of traverse" << endl;
  379.                     cin >> travese;
  380.                     Tree<Complex> tree(data);
  381.                     cout << tree.where(whereC3).toString(travese) << endl;
  382.                 }
  383.                     break;
  384.                 default: {
  385.                     cout << "What are you doing? Try again!" << endl;
  386.                     cin >> cond;
  387.                 }
  388.             }
  389.         } else if (oper == 3) //merging
  390.         {
  391.             cout << "Enter string of numbers to first tree" << endl;
  392.             cin >> data;
  393.             Tree<Complex> tree1(data);
  394.             cout << "Enter string of numbers to second tree" << endl;
  395.             cin >> data2;
  396.             Tree<Complex> tree2(data2);
  397.             cout << "Enter the way of traverse" << endl;
  398.             cin >> travese;
  399.             Tree<Complex> treeRes = tree1 + tree2;
  400.             cout << treeRes.toString(travese) << endl;
  401.         } else if (oper == 4) // retrieval
  402.         {
  403.             cout << "Enter string of numbers" << endl;
  404.             cin >> data;
  405.             cout << "Enter a wanted element" << endl;
  406.             Complex element;
  407.             cin >> element;
  408.             cout << "Enter the way of traverse" << endl;
  409.             cin >> travese;
  410.             Tree<Complex> tree(data);
  411.             cout << tree.extract(element).toString(travese) <<endl;
  412.         } else if (oper == 5) // search subtree
  413.         {
  414.             //хер его знает
  415.         } else if (oper == 6) // search an element
  416.         {
  417.             cout << "Enter string of numbers" << endl;
  418.             cin >> data;
  419.             cout << "Enter a wanted element" << endl;
  420.             Complex element;
  421.             cin >> element;
  422.             cout << "Enter the way of traverse" << endl;
  423.             cin >> travese;
  424.             Tree<Complex> tree(data);
  425.             cout << boolalpha << tree.containsElement(element) << endl;
  426.         }
  427.     }else if (type == 4)
  428.     {
  429.         cout << "- Hey. I got the blue dye.\n - No, we are not allowed to use dye's. That's against the rules.\n - Gonna do it\n -NO NO NO GOD DAMN IT!!!" << endl;
  430.         return 0;
  431.     }
  432. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement