Advertisement
Sailein

Source stackprog2

May 4th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 24.03 KB | None | 0 0
  1. #include "DiamondDogs.h"
  2.  
  3. void testWhereInt1 ()
  4. {
  5.     Stack<int> stack;
  6.     Stack<int> res;
  7.     stack.push(12);
  8.     stack.push(3);
  9.     stack.push(4);
  10.     stack.push(0);
  11.     stack.push(4);
  12.     res.push(4);
  13.     res.push(4);
  14.     cout << "testWhereInt1 successful: " << boolalpha << (stack.where(WhereModInt1<int>()) == res) << endl;
  15. }
  16.  
  17. void testWhereInt2 ()
  18. {
  19.     Stack<int> stack;
  20.     Stack<int> res;
  21.     stack.push(12);
  22.     stack.push(3);
  23.     stack.push(4);
  24.     stack.push(0);
  25.     stack.push(1);
  26.     res.push(3);
  27.     res.push(1);
  28.     cout << "testWhereInt2 successful: " << boolalpha << (stack.where(WhereModInt2<int>()) == res) << endl;
  29. }
  30.  
  31. void testWhereInt3 ()
  32. {
  33.     Stack<int> stack;
  34.     Stack<int> res;
  35.     stack.push(12);
  36.     stack.push(-5);
  37.     stack.push(4);
  38.     stack.push(0);
  39.     stack.push(10);
  40.     res.push(-5);
  41.     res.push(0);
  42.     res.push(10);
  43.     cout << "testWhereInt3 successful: " << boolalpha << (stack.where(WhereModInt3<int>()) == res) << endl;
  44. }
  45.  
  46. void testWhereFloat1 ()
  47. {
  48.     Stack<float> stack;
  49.     Stack<float> res;
  50.     stack.push(1.0002);
  51.     stack.push(1.0);
  52.     stack.push(4.021);
  53.     stack.push(1.0);
  54.     stack.push(4.021);
  55.     res.push(1.0);
  56.     res.push(1.0);
  57.     cout << "testWhereFloat1 successful: " << boolalpha << (stack.where(WhereModFloat1<float>()) == res) << endl;
  58. }
  59.  
  60. void testWhereFloat2 ()
  61. {
  62.     Stack<float> stack;
  63.     Stack<float> res;
  64.     stack.push(1.0002);
  65.     stack.push(1.0);
  66.     stack.push(4.021);
  67.     stack.push(2.0);
  68.     stack.push(4.021);
  69.     res.push(2.0);
  70.     cout << "testWhereFloat2 successful: " << boolalpha << (stack.where(WhereModFloat2<float>()) == res) << endl;
  71. }
  72.  
  73. void testWhereFloat3 ()
  74. {
  75.     Stack<float> stack;
  76.     Stack<float> res;
  77.     stack.push(1.0002);
  78.     stack.push(1.0);
  79.     stack.push(4.021);
  80.     stack.push(5.0);
  81.     stack.push(4.021);
  82.     res.push(1.0002);
  83.     res.push(1.0);
  84.     res.push(4.021);
  85.     res.push(4.021);
  86.     cout << "testWhereFloat3 successful: " << boolalpha << (stack.where(WhereModFloat3<float>()) == res) << endl;
  87. }
  88.  
  89. void testWhereComplex1()
  90. {
  91.     Stack<Complex> stack;
  92.     Stack<Complex> res;
  93.     stack.push(Complex (-1.12, -552.0));
  94.     stack.push(Complex (0.0, 0.0));
  95.     stack.push(Complex (10.12, 2.10));
  96.     stack.push(Complex (22.0, 71.5));
  97.     res.push(Complex (0.0, 0.0));
  98.     res.push(Complex (10.12, 2.10));;
  99.     cout << "testWhereComplex1 successful: " << boolalpha << (stack.where(WhereModComplex1<Complex>()) == res) << endl;
  100. }
  101.  
  102. void testWhereComplex2()
  103. {
  104.     Stack<Complex> stack;
  105.     Stack<Complex> res;
  106.     stack.push(Complex (-1.12, -552.0));
  107.     stack.push(Complex (0.0, 0.0));
  108.     stack.push(Complex (0.12, 0.222));
  109.     stack.push(Complex (10.12, 2.10));
  110.     stack.push(Complex (22.0, 71.5));
  111.     res.push(Complex (-1.12, -552.0));
  112.     res.push(Complex (10.12, 2.10));
  113.     res.push(Complex (22.0, 71.5));
  114.     cout << "testWhereComplex2 successful: " << boolalpha << (stack.where(WhereModComplex2<Complex>()) == res) << endl;
  115. }
  116.  
  117. void testWhereComplex3()
  118. {
  119.     Stack<Complex> stack;
  120.     Stack<Complex> res;
  121.     stack.push(Complex (-1.12, -552.0));
  122.     stack.push(Complex (0.0, 0.0));
  123.     stack.push(Complex (0.012, 0.099));
  124.     stack.push(Complex (10.12, 2.10));
  125.     stack.push(Complex (4.0, 3.0));
  126.     res.push(Complex (0.0, 0.0));
  127.     res.push(Complex (0.012, 0.099));
  128.     cout << "testWhereComplex3 successful: " << boolalpha << (stack.where(WhereModComplex3<Complex>()) == res) << endl;
  129. }
  130.  
  131. void testReduceInt1 ()
  132. {
  133.     Stack<int> stack;
  134.     int res = 23;
  135.     stack.push(12);
  136.     stack.push(3);
  137.     stack.push(4);
  138.     stack.push(0);
  139.     stack.push(4);
  140.     cout << "testReduceIntSum successful: " << boolalpha << (stack.reduce(Sum<int>()) == res) << endl;
  141. }
  142.  
  143. void testReduceInt2 ()
  144. {
  145.     Stack<int> stack;
  146.     int res = 576;
  147.     stack.push(12);
  148.     stack.push(3);
  149.     stack.push(4);
  150.     stack.push(1);
  151.     stack.push(4);
  152.     cout << "testWhereIntMul successful: " << boolalpha << (stack.reduce(Mul<int>()) == res) << endl;
  153. }
  154.  
  155. void testReduceFloat1 ()
  156. {
  157.     Stack<float > stack;
  158.     float res = 20.8;
  159.     stack.push(12.1);
  160.     stack.push(3.2);
  161.     stack.push(4.0);
  162.     stack.push(0.3);
  163.     stack.push(1.2);
  164.     cout << "testReduceFloatSum successful: " << boolalpha << (stack.reduce(Sum<float>()) == res) << endl;
  165. }
  166. void testReduceFloat2 ()
  167. {
  168.     Stack<float > stack;
  169.     float res = 154.88;
  170.     stack.push(12.1);
  171.     stack.push(3.2);
  172.     stack.push(4.0);
  173.     stack.push(1.0);
  174.     stack.push(1.0);
  175.     cout << "testReduceFloatMul successful: " << boolalpha << (stack.reduce(Mul<float>()) == res) << endl;
  176. }
  177.  
  178. void testReduceComplex1 ()
  179. {
  180.     Stack<Complex> stack;
  181.     Complex res = Complex(15.0, 572.5);
  182.     stack.push(Complex (-1.2, 0.3));
  183.     stack.push(Complex (0.0, 0.0));
  184.     stack.push(Complex (0.2, 552.2));
  185.     stack.push(Complex (10.8, 10.0));
  186.     stack.push(Complex (5.2, 10.0));
  187.     cout << "testReduceComplexSum successful: " << boolalpha << (stack.reduce(Sum<Complex>()) == res) << endl;
  188. }
  189.  
  190. void testReduceComplex2 () //bad
  191. {
  192.     Stack<Complex> stack;
  193.     Complex res = Complex(13.4784, 0.0);
  194.     stack.push(Complex (-1.2, -552.0));
  195.     stack.push(Complex (1.0, 0.0));
  196.     stack.push(Complex (0.2, 552.2));
  197.     stack.push(Complex (10.8, 10.0));
  198.     stack.push(Complex (5.2, 10.0));
  199.     cout << "testReduceComplexMul successful: " << boolalpha << !(stack.reduce(Mul<Complex>()) == res) << endl;
  200. }
  201.  
  202. void testIndexOfInt()
  203. {
  204.     Stack<int> stack;
  205.     Stack<int> sub;
  206.     size_t res = 2;
  207.     stack.push(1);
  208.     stack.push(2);
  209.     stack.push(3);
  210.     stack.push(4);
  211.     stack.push(5);
  212.     stack.push(6);
  213.     sub.push(3);
  214.     sub.push(4);
  215.     size_t index = stack.indexOf(sub);
  216.     cout << "testIndexOfInt successful: " << boolalpha << (index == res) << endl;
  217. }
  218.  
  219. void testIndexOfFloat()
  220. {
  221.     Stack<float> stack;
  222.     Stack<float> sub;
  223.     size_t res = 2;
  224.     stack.push(1.4);
  225.     stack.push(2.0);
  226.     stack.push(3.6);
  227.     stack.push(4.1);
  228.     stack.push(5.9);
  229.     stack.push(6.0);
  230.     sub.push(3.6);
  231.     sub.push(4.1);
  232.     size_t index = stack.indexOf(sub);
  233.     cout << "testIndexOfFloat successful: " << boolalpha << (index == res) << endl;
  234. }
  235. void testIndexOfComplex()
  236. {
  237.     Stack<Complex> stack;
  238.     Stack<Complex> sub;
  239.     size_t res = 2;
  240.     stack.push(Complex(1.22, 0.0));
  241.     stack.push(Complex(-1.12, -552.0));
  242.     stack.push(Complex(0.0, 0.0));
  243.     stack.push(Complex(0.1, 0.9));
  244.     stack.push(Complex(10.12, 2.10));
  245.     stack.push(Complex(4.0, 3.0));
  246.     sub.push(Complex(0.0, 0.0));
  247.     sub.push(Complex(0.1, 0.9));
  248.     size_t index = stack.indexOf(sub);
  249.     cout << "testIndexOfComplex successful: " << boolalpha << (index == res) << endl;
  250. }
  251.  
  252. void testAll ()
  253. {
  254.     testWhereInt1();
  255.     testWhereInt2();
  256.     testWhereInt3();
  257.  
  258.     testWhereFloat1();
  259.     testWhereFloat2();
  260.     testWhereFloat3();
  261.  
  262.     testWhereComplex1();
  263.     testWhereComplex2();
  264.     testWhereComplex3();
  265.  
  266.     testReduceInt1();
  267.     testReduceInt2();
  268.  
  269.     testReduceFloat1();
  270.     testReduceFloat2();
  271.  
  272.     testReduceComplex1();
  273.     testReduceComplex2();
  274.  
  275.     testIndexOfInt();
  276.     testIndexOfFloat();
  277.     testIndexOfComplex();
  278. }
  279.  
  280. int main() {
  281.     int oper, type, test;
  282.     cout << "Hello, you are about to work with stacks. Would you like to test all functions?" << endl;
  283.     cin >> test;
  284.     while ((test != 1) && (test != 2)) {
  285.         cout << "error (enter 1 or 2)" << endl;
  286.         cin >> test;
  287.     }
  288.     if (test == 1) testAll();
  289.  
  290.     cout << "Choose the type of numbers: \n 1 - int\n 2 - float \n 3 - complex \n 4 - exit program" << endl;
  291.     cin >> type;
  292.     while ((type != 1) && (type != 2) && (type != 3) && (type != 4)) {
  293.         cout << "error (enter 1, 2, 3 or 4)" << endl;
  294.         cin >> type;
  295.     }
  296.     if (type == 1) //int
  297.     {
  298.         cout << "Choose an operation: \n 1 - where\n 2 - reduce\n 3 - find\n 4 - separate" << endl;
  299.         cin >> oper;
  300.         while ((oper != 1) && (oper != 2) && (oper != 3) && (oper != 4)) {
  301.             cout << "error (enter 1, 2, 3 or 4)" << endl;
  302.             cin >> oper;
  303.         }
  304.         if (oper == 1) {
  305.             Stack<int> stack;
  306.             cout << "Enter stack size:" << endl;
  307.             size_t size;
  308.             cin >> size;
  309.             cout << "Enter elements:" << endl;
  310.             for (int i = 0; i < size; i++) {
  311.                 int x;
  312.                 cin >> x;
  313.                 stack.push(x);
  314.             }
  315.             cout << "Your stack:  " << stack << endl;
  316.             cout << "Choose your function: \n 1 - N mod 3 == 1\n 2 - N mod 2 == 1\n 3 - N mod 5 == 0" << endl;
  317.             int cond;
  318.             cin >> cond;
  319.             switch (cond) {
  320.                 case 1: {
  321.                     Stack<int> stackRes = stack.where(WhereModInt1<int>());
  322.                     cout << stackRes << endl;
  323.                 }
  324.                     break;
  325.                 case 2: {
  326.                     Stack<int> stackRes = stack.where(WhereModInt2<int>());
  327.                     cout << stackRes << endl;
  328.                 }
  329.                     break;
  330.                 case 3: {
  331.                     Stack<int> stackRes = stack.where(WhereModInt3<int>());
  332.                     cout << stackRes << endl;
  333.                 }
  334.                     break;
  335.                 default: {
  336.                     cout << "What are you doing? Try again!" << endl;
  337.                     cin >> cond;
  338.                 }
  339.             }
  340.         } else if (oper == 2) {
  341.             Stack<int> stack;
  342.             cout << "Enter stack size:" << endl;
  343.             size_t size;
  344.             cin >> size;
  345.             cout << "Enter elements:" << endl;
  346.             for (int i = 0; i < size; i++) {
  347.                 int x;
  348.                 cin >> x;
  349.                 stack.push(x);
  350.             }
  351.             cout << "Your stack:  " << stack << endl;
  352.             cout << "Choose your function: \n 1 - Sum\n 2 - Mul" << endl;
  353.             int cond;
  354.             cin >> cond;
  355.             switch (cond) {
  356.                 case 1: {
  357.                     int sum = stack.reduce(Sum<int>());
  358.                     cout << sum << endl;
  359.                 }
  360.                     break;
  361.                 case 2: {
  362.                     int mul = stack.reduce(Mul<int>());
  363.                     cout << mul << endl;
  364.                 }
  365.                     break;
  366.                 default: {
  367.                     cout << "What are you doing? Try again!" << endl;
  368.                     cin >> cond;
  369.                 }
  370.             }
  371.         } else if (oper == 3) {
  372.             Stack<int> stack;
  373.             cout << "Enter main stack size:" << endl;
  374.             size_t size;
  375.             cin >> size;
  376.             cout << "Enter elements:" << endl;
  377.             for (int i = 0; i < size; i++) {
  378.                 int x;
  379.                 cin >> x;
  380.                 stack.push(x);
  381.             }
  382.             cout << "Your stack:  " << stack << endl;
  383.             Stack<int> sub;
  384.             cout << "Enter sub stack size:" << endl;
  385.             size_t sizeSub;
  386.             cin >> sizeSub;
  387.             cout << "Enter elements:" << endl;
  388.             for (int i = 0; i < sizeSub; i++) {
  389.                 int x;
  390.                 cin >> x;
  391.                 sub.push(x);
  392.             }
  393.             cout << "Your sub stack:  " << sub << endl;
  394.             bool contain = stack.contains(sub);
  395.             size_t index = stack.indexOf(sub);
  396.             cout << boolalpha << contain << endl;
  397.             cout <<"Index found: " << index << endl;
  398.         } else if (oper == 4) {
  399.             Stack<int> stack;
  400.             cout << "Enter main stack size:" << endl;
  401.             size_t size;
  402.             cin >> size;
  403.             cout << "Enter elements:" << endl;
  404.             for (int i = 0; i < size; i++) {
  405.                 int x;
  406.                 cin >> x;
  407.                 stack.push(x);
  408.             }
  409.             cout << "Your stack:  " << stack << endl;
  410.             cout << "Choose your function: \n 1 - N mod 3 == 1\n 2 - N mod 2 == 1\n 3 - N mod 5 == 0" << endl;
  411.             int cond;
  412.             cin >> cond;
  413.             switch (cond) {
  414.                 case 1: {
  415.                     pair<Stack<int>, Stack<int>> my_pair = stack.split(WhereModInt1<int>());
  416.                     cout << "first stack: " << my_pair.first << endl;
  417.                     cout << "second stack: " << my_pair.second << endl;
  418.                 }
  419.                     break;
  420.                 case 2: {
  421.                     pair<Stack<int>, Stack<int>> my_pair = stack.split(WhereModInt2<int>());
  422.                     cout << "first stack: " << my_pair.first << endl;
  423.                     cout << "second stack: " << my_pair.second << endl;
  424.                 }
  425.                     break;
  426.                 case 3: {
  427.                     pair<Stack<int>, Stack<int>> my_pair = stack.split(WhereModInt3<int>());
  428.                     cout << "first stack: " << my_pair.first << endl;
  429.                     cout << "second stack: " << my_pair.second << endl;
  430.                 }
  431.                     break;
  432.                 default: {
  433.                     cout << "What are you doing? Try again!" << endl;
  434.                     cin >> cond;
  435.                 }
  436.             }
  437.         }
  438.     } else if (type == 2) {
  439.         cout << "Choose an operation: \n 1 - where\n 2 - reduce\n 3 - find\n 4 - separate" << endl;
  440.         cin >> oper;
  441.         while ((oper != 1) && (oper != 2) && (oper != 3) && (oper != 4)) {
  442.             cout << "error (enter 1, 2, 3 or 4)" << endl;
  443.             cin >> oper;
  444.         }
  445.         if (oper == 1) {
  446.             Stack<float> stack;
  447.             cout << "Enter stack size:" << endl;
  448.             size_t size;
  449.             cin >> size;
  450.             cout << "Enter elements:" << endl;
  451.             for (int i = 0; i < size; i++) {
  452.                 float x;
  453.                 cin >> x;
  454.                 stack.push(x);
  455.             }
  456.             cout << "Your stack:  " << stack << endl;
  457.             cout << "Choose your function: \n 1 - N  == 1\n 2 - N  == 2\n 3 - N != 5" << endl;
  458.             int cond;
  459.             cin >> cond;
  460.             switch (cond) {
  461.                 case 1: {
  462.                     Stack<float> stackRes = stack.where(WhereModFloat1<float>());
  463.                     cout << stackRes << endl;
  464.                 }
  465.                     break;
  466.                 case 2: {
  467.                     Stack<float> stackRes = stack.where(WhereModFloat2<float>());
  468.                     cout << stackRes << endl;
  469.                 }
  470.                     break;
  471.                 case 3: {
  472.                     Stack<float> stackRes = stack.where(WhereModFloat3<float>());
  473.                     cout << stackRes << endl;
  474.                 }
  475.                     break;
  476.                 default: {
  477.                     cout << "What are you doing? Try again!" << endl;
  478.                     cin >> cond;
  479.                 }
  480.             }
  481.         } else if (oper == 2) {
  482.             Stack<float> stack;
  483.             cout << "Enter stack size:" << endl;
  484.             size_t size;
  485.             cin >> size;
  486.             cout << "Enter elements:" << endl;
  487.             for (int i = 0; i < size; i++) {
  488.                 float x;
  489.                 cin >> x;
  490.                 stack.push(x);
  491.             }
  492.             cout << "Your stack:  " << stack << endl;
  493.             cout << "Choose your function: \n 1 - Sum\n 2 - Mul" << endl;
  494.             int cond;
  495.             cin >> cond;
  496.             switch (cond) {
  497.                 case 1: {
  498.                     float sum = stack.reduce(Sum<float>());
  499.                     cout << sum << endl;
  500.                 }
  501.                     break;
  502.                 case 2: {
  503.                     float mul = stack.reduce(Mul<float>());
  504.                     cout << mul << endl;
  505.                 }
  506.                     break;
  507.                 default: {
  508.                     cout << "What are you doing? Try again!" << endl;
  509.                     cin >> cond;
  510.                 }
  511.             }
  512.         } else if (oper == 3) {
  513.             Stack<float> stack;
  514.             cout << "Enter main stack size:" << endl;
  515.             size_t size;
  516.             cin >> size;
  517.             cout << "Enter elements:" << endl;
  518.             for (int i = 0; i < size; i++) {
  519.                 float x;
  520.                 cin >> x;
  521.                 stack.push(x);
  522.             }
  523.             cout << "Your stack:  " << stack << endl;
  524.             Stack<float> sub;
  525.             cout << "Enter sub stack size:" << endl;
  526.             size_t sizeSub;
  527.             cin >> sizeSub;
  528.             cout << "Enter elements:" << endl;
  529.             for (int i = 0; i < sizeSub; i++) {
  530.                 float x;
  531.                 cin >> x;
  532.                 sub.push(x);
  533.             }
  534.             cout << "Your sub stack:  " << sub << endl;
  535.             bool contain = stack.contains(sub);
  536.             size_t index = stack.indexOf(sub);
  537.             cout << boolalpha << contain << endl;
  538.             cout <<"Index found: " << index << endl;
  539.         } else if (oper == 4) {
  540.             Stack<float> stack;
  541.             cout << "Enter main stack size:" << endl;
  542.             size_t size;
  543.             cin >> size;
  544.             cout << "Enter elements:" << endl;
  545.             for (int i = 0; i < size; i++) {
  546.                 float x;
  547.                 cin >> x;
  548.                 stack.push(x);
  549.             }
  550.             cout << "Your stack:  " << stack << endl;
  551.             cout << "Choose your function: \n 1 - N  == 1\n 2 - N  == 2\n 3 - N != 5" << endl;
  552.             int cond;
  553.             cin >> cond;
  554.             switch (cond) {
  555.                 case 1: {
  556.                     pair<Stack<float>, Stack<float>> my_pair = stack.split(WhereModFloat1<float>());
  557.                     cout << "first stack: " << my_pair.first << endl;
  558.                     cout << "second stack: " << my_pair.second << endl;
  559.                 }
  560.                     break;
  561.                 case 2: {
  562.                     pair<Stack<float>, Stack<float>> my_pair = stack.split(WhereModFloat2<float>());
  563.                     cout << "first stack: " << my_pair.first << endl;
  564.                     cout << "second stack: " << my_pair.second << endl;
  565.                 }
  566.                     break;
  567.                 case 3: {
  568.                     pair<Stack<float>, Stack<float>> my_pair = stack.split(WhereModFloat3<float>());
  569.                     cout << "first stack: " << my_pair.first << endl;
  570.                     cout << "second stack: " << my_pair.second << endl;
  571.                 }
  572.                     break;
  573.                 default: {
  574.                     cout << "What are you doing? Try again!" << endl;
  575.                     cin >> cond;
  576.                 }
  577.             }
  578.         }
  579.     } else if (type == 3) //complex
  580.     {
  581.         cout << "Choose an operation: \n 1 - where\n 2 - reduce\n 3 - find\n 4 - separate" << endl;
  582.         cin >> oper;
  583.         while ((oper != 1) && (oper != 2) && (oper != 3) && (oper != 4)) {
  584.             cout << "error (enter 1, 2, 3 or 4)" << endl;
  585.             cin >> oper;
  586.         }
  587.         if (oper == 1) {
  588.             Stack<Complex> stack;
  589.             cout << "Enter stack size:" << endl;
  590.             size_t size;
  591.             cin >> size;
  592.             cout << "Enter elements:" << endl;
  593.             for (int i = 0; i < size; i++) {
  594.                 Complex x;
  595.                 cin >> x;
  596.                 stack.push(x);
  597.             }
  598.             cout << "Your stack:  " << stack << endl;
  599.             cout << "Choose your function: \n 1 - |Z| < 64 \n 2 - |Z| > 4\n 3 - |Z| > 1" << endl;
  600.             int cond;
  601.             cin >> cond;
  602.             switch (cond) {
  603.                 case 1: {
  604.                     Stack<Complex> stackRes = stack.where(WhereModComplex1<Complex>());
  605.                     cout << stackRes << endl;
  606.                 }
  607.                     break;
  608.                 case 2: {
  609.                     Stack<Complex> stackRes = stack.where(WhereModComplex2<Complex>());
  610.                     cout << stackRes << endl;
  611.                 }
  612.                     break;
  613.                 case 3: {
  614.                     Stack<Complex> stackRes = stack.where(WhereModComplex3<Complex>());
  615.                     cout << stackRes << endl;
  616.                 }
  617.                     break;
  618.                 default: {
  619.                     cout << "What are you doing? Try again!" << endl;
  620.                     cin >> cond;
  621.                 }
  622.             }
  623.         } else if (oper == 2) {
  624.             Stack<Complex> stack;
  625.             cout << "Enter stack size:" << endl;
  626.             size_t size;
  627.             cin >> size;
  628.             cout << "Enter elements:" << endl;
  629.             for (int i = 0; i < size; i++) {
  630.                 Complex x;
  631.                 cin >> x;
  632.                 stack.push(x);
  633.             }
  634.             cout << "Your stack:  " << stack << endl;
  635.             cout << "Choose your function: \n 1 - Sum\n 2 - Mul" << endl;
  636.             int cond;
  637.             cin >> cond;
  638.             switch (cond) {
  639.                 case 1: {
  640.                     Complex sum = stack.reduce(Sum<Complex>());
  641.                     cout << sum << endl;
  642.                 }
  643.                     break;
  644.                 case 2: {
  645.                     Complex mul = stack.reduce(Mul<Complex>());
  646.                     cout << mul << endl;
  647.                 }
  648.                     break;
  649.                 default: {
  650.                     cout << "What are you doing? Try again!" << endl;
  651.                     cin >> cond;
  652.                 }
  653.             }
  654.         } else if (oper == 3) {
  655.             Stack<Complex> stack;
  656.             cout << "Enter main stack size:" << endl;
  657.             size_t size;
  658.             cin >> size;
  659.             cout << "Enter elements:" << endl;
  660.             for (int i = 0; i < size; i++) {
  661.                 Complex x;
  662.                 cin >> x;
  663.                 stack.push(x);
  664.             }
  665.             cout << "Your stack:  " << stack << endl;
  666.             Stack<Complex> sub;
  667.             cout << "Enter sub stack size:" << endl;
  668.             size_t sizeSub;
  669.             cin >> sizeSub;
  670.             cout << "Enter elements:" << endl;
  671.             for (int i = 0; i < sizeSub; i++) {
  672.                 Complex x;
  673.                 cin >> x;
  674.                 sub.push(x);
  675.             }
  676.             cout << "Your sub stack:  " << sub << endl;
  677.             bool contain = stack.contains(sub);
  678.             size_t index = stack.indexOf(sub);
  679.             cout << boolalpha << contain << endl;
  680.             cout <<"Index fount: " << index << endl;
  681.         } else if (oper == 4) {
  682.             Stack<Complex> stack;
  683.             cout << "Enter main stack size:" << endl;
  684.             size_t size;
  685.             cin >> size;
  686.             cout << "Enter elements:" << endl;
  687.             for (int i = 0; i < size; i++) {
  688.                 Complex x;
  689.                 cin >> x;
  690.                 stack.push(x);
  691.             }
  692.             cout << "Your stack:  " << stack << endl;
  693.             cout << "Choose your function: \n 1 - |Z| < 64 \n 2 - |Z| > 4\n 3 - |Z| < 1" << endl;
  694.             int cond;
  695.             cin >> cond;
  696.             switch (cond) {
  697.                 case 1: {
  698.                     pair<Stack<Complex>, Stack<Complex>> my_pair = stack.split(WhereModComplex1<Complex>());
  699.                     cout << "first stack: " << my_pair.first << endl;
  700.                     cout << "second stack: " << my_pair.second << endl;
  701.                 }
  702.                     break;
  703.                 case 2: {
  704.                     pair<Stack<Complex>, Stack<Complex>> my_pair = stack.split(WhereModComplex2<Complex>());
  705.                     cout << "first stack: " << my_pair.first << endl;
  706.                     cout << "second stack: " << my_pair.second << endl;
  707.                 }
  708.                     break;
  709.                 case 3: {
  710.                     pair<Stack<Complex>, Stack<Complex>> my_pair = stack.split(WhereModComplex3<Complex>());
  711.                     cout << "first stack: " << my_pair.first << endl;
  712.                     cout << "second stack: " << my_pair.second << endl;
  713.                 }
  714.                     break;
  715.                 default: {
  716.                     cout << "What are you doing? Try again!" << endl;
  717.                     cin >> cond;
  718.                 }
  719.             }
  720.         }
  721.     } else if (type == 4) {
  722.         return 0;
  723.     }
  724. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement