Guest User

Trancation problem

a guest
Mar 20th, 2013
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 21.42 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <windows.h>
  5. #include <math.h>
  6. using namespace std;
  7. char charInput;
  8.  
  9.  
  10. long double bracket();
  11. long double exponent();
  12.  
  13. int main()
  14. {
  15.  
  16.     char charInput;
  17.     HANDLE hConsole;
  18. hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
  19. SetConsoleTextAttribute
  20. (hConsole, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
  21.  
  22.     cout.setf(ios::fixed, ios::floatfield);
  23.     cout.setf(ios::showpoint);
  24.  
  25.     cout << "Challenge 3: Create a calculator that can do calculations in standard \n";
  26.     cout << "BEDMAS and use brackets" << endl << endl;
  27.     cout << "Issued by Stephen \"WhiteDragon103\" Smolley" << endl << endl;
  28.     cout << "Enter the equasion using the standard operators: (, ), +, -, *, /, ^, =" << endl;
  29.  
  30.     long double test = pow(2, 0.5);
  31.     cout << test << endl;
  32.  
  33.     for (;;)
  34.     {
  35.     long double result = bracket();
  36.     cout << result << endl;
  37.     }
  38.  
  39.     return 0;
  40. }
  41.  
  42. long double bracket()
  43. {
  44.     long double resultReturn = 0;
  45.     long double multStorage = 1;
  46.     long double digitReader = 0;
  47.     long double divisionEntry = 0;
  48.     long long int decimalPlacer = 1;
  49.     long long int exponentEntry = 0;
  50.     bool multiplicationSlot = false;
  51.     bool negative = false;
  52.     bool decimal = false;
  53.     bool digitEntry = false;
  54.     bool divisionSlot = false;
  55.     //experimental
  56.     bool exponentSlot = false;
  57.  
  58.  
  59.     for (;;)
  60.     {
  61.         if (exponentSlot == false)
  62.         {cin >> charInput;}
  63.         switch (charInput)
  64.             {
  65.  
  66.             case '1':
  67.                 if (divisionSlot == true)
  68.                 {
  69.                 divisionEntry *= 10;
  70.                 divisionEntry += 1;
  71.                 if (decimal == true)
  72.                 {decimalPlacer *= 10;}
  73.                 digitEntry = true;
  74.                 }
  75.                 else
  76.                 {digitReader *= 10;
  77.                 digitReader += 1;
  78.                 if (decimal == true)
  79.                 {decimalPlacer *= 10;}
  80.                 digitEntry = true;
  81.                 }
  82.                 break;
  83.             case '2':
  84.                 if (divisionSlot == true)
  85.                 {
  86.                 divisionEntry *= 10;
  87.                 divisionEntry += 2;
  88.                 if (decimal == true)
  89.                 {decimalPlacer *= 10;}
  90.                 digitEntry = true;
  91.                 }
  92.                 else
  93.                 {digitReader *= 10;
  94.                 digitReader += 2;
  95.                 if (decimal == true)
  96.                 {decimalPlacer *= 10;}
  97.                 digitEntry = true;
  98.                 }
  99.                 break;
  100.             case '3':
  101.                 if (divisionSlot == true)
  102.                 {
  103.                 divisionEntry *= 10;
  104.                 divisionEntry += 3;
  105.                 if (decimal == true)
  106.                 {decimalPlacer *= 10;}
  107.                 digitEntry = true;
  108.                 }
  109.                 else
  110.                 {digitReader *= 10;
  111.                 digitReader += 3;
  112.                 if (decimal == true)
  113.                 {decimalPlacer *= 10;}
  114.                 digitEntry = true;
  115.                 }
  116.                 break;
  117.             case '4':
  118.                 if (divisionSlot == true)
  119.                 {
  120.                 divisionEntry *= 10;
  121.                 divisionEntry += 4;
  122.                 if (decimal == true)
  123.                 {decimalPlacer *= 10;}
  124.                 digitEntry = true;
  125.                 }
  126.                 else
  127.                 {digitReader *= 10;
  128.                 digitReader += 4;
  129.                 if (decimal == true)
  130.                 {decimalPlacer *= 10;}
  131.                 digitEntry = true;
  132.                 }
  133.                 break;
  134.             case '5':
  135.                 if (divisionSlot == true)
  136.                 {
  137.                 divisionEntry *= 10;
  138.                 divisionEntry += 5;
  139.                 if (decimal == true)
  140.                 {decimalPlacer *= 10;}
  141.                 digitEntry = true;
  142.                 }
  143.                 else
  144.                 {digitReader *= 10;
  145.                 digitReader += 5;
  146.                 if (decimal == true)
  147.                 {decimalPlacer *= 10;}
  148.                 digitEntry = true;
  149.                 }
  150.                 break;
  151.             case '6':
  152.                 if (divisionSlot == true)
  153.                 {
  154.                 divisionEntry *= 10;
  155.                 divisionEntry += 6;
  156.                 if (decimal == true)
  157.                 {decimalPlacer *= 10;}
  158.                 digitEntry = true;
  159.                 }
  160.                 else
  161.                 {digitReader *= 10;
  162.                 digitReader += 6;
  163.                 if (decimal == true)
  164.                 {decimalPlacer *= 10;}
  165.                 digitEntry = true;
  166.                 }
  167.                 break;
  168.             case '7':
  169.                 if (divisionSlot == true)
  170.                 {
  171.                 divisionEntry *= 10;
  172.                 divisionEntry += 7;
  173.                 if (decimal == true)
  174.                 {decimalPlacer *= 10;}
  175.                 digitEntry = true;
  176.                 }
  177.                 else
  178.                 {digitReader *= 10;
  179.                 digitReader += 7;
  180.                 if (decimal == true)
  181.                 {decimalPlacer *= 10;}
  182.                 digitEntry = true;
  183.                 }
  184.                 break;
  185.             case '8':
  186.                 if (divisionSlot == true)
  187.                 {
  188.                 divisionEntry *= 10;
  189.                 divisionEntry += 8;
  190.                 if (decimal == true)
  191.                 {decimalPlacer *= 10;}
  192.                 digitEntry = true;
  193.                 }
  194.                 else
  195.                 {digitReader *= 10;
  196.                 digitReader += 8;
  197.                 if (decimal == true)
  198.                 {decimalPlacer *= 10;}
  199.                 digitEntry = true;
  200.                 }
  201.                 break;
  202.             case '9':
  203.                 if (divisionSlot == true)
  204.                 {
  205.                 divisionEntry *= 10;
  206.                 divisionEntry += 9;
  207.                 if (decimal == true)
  208.                 {decimalPlacer *= 10;}
  209.                 digitEntry = true;
  210.                 }
  211.                 else
  212.                 {digitReader *= 10;
  213.                 digitReader += 9;
  214.                 if (decimal == true)
  215.                 {decimalPlacer *= 10;}
  216.                 digitEntry = true;
  217.                 }
  218.                 break;
  219.             case '0':
  220.                 if (divisionSlot == true)
  221.                 {
  222.                 divisionEntry *= 10;
  223.                 if (decimal == true)
  224.                 {decimalPlacer *= 10;}
  225.                 digitEntry = true;
  226.                 }
  227.                 else
  228.                 {digitReader *= 10;
  229.                 if (decimal == true)
  230.                 {decimalPlacer *= 10;}
  231.                 digitEntry = true;
  232.                 }
  233.                 break;
  234.  
  235.             //Complete for now
  236.             case '+':
  237.                 if (exponentSlot == true)
  238.                 {exponentSlot = false;}
  239.                 if (divisionSlot == true)
  240.                 {
  241.                 if (decimal == true)
  242.                     {
  243.                     divisionEntry /= decimalPlacer;
  244.                     decimalPlacer = 1;
  245.                     decimal = false;
  246.                     }
  247.                     if (negative == true)
  248.                     {
  249.                     divisionEntry = -divisionEntry;
  250.                     negative = false;
  251.                     }
  252.  
  253.                     digitReader /= divisionEntry;
  254.                     divisionSlot = false;
  255.                     divisionEntry = 0;
  256.  
  257.                     if (multiplicationSlot == true)
  258.                     {
  259.                     multStorage *= digitReader;
  260.                     resultReturn += multStorage;
  261.                     digitReader = 0;
  262.                     }
  263.                 }
  264.                 else
  265.                 {
  266.                 if (decimal == true)
  267.                 {
  268.                     digitReader /= decimalPlacer;
  269.                     decimalPlacer = 1;
  270.                     decimal = false;
  271.                 }
  272.                 if (negative == true)
  273.                 {
  274.                     digitReader = -digitReader;
  275.                     negative = false;
  276.                 }
  277.                 if (multiplicationSlot == true)
  278.                 {
  279.                     multStorage *= digitReader;
  280.                     resultReturn += multStorage;
  281.                     digitReader = 0;
  282.                 }
  283.                 }
  284.                 resultReturn += digitReader;
  285.                 digitReader = 0;
  286.                 multStorage = 1;
  287.                 multiplicationSlot = false;
  288.                 digitEntry = false;
  289.                 break;
  290.             case '-':
  291.                 if (exponentSlot == true)
  292.                 {exponentSlot = false;}
  293.                 if (digitEntry == false && negative == false)
  294.                 {
  295.                     negative = true;
  296.                     resultReturn += digitReader;
  297.                     digitReader = 0;
  298.                 }
  299.                 else if (digitEntry == false && negative == true)
  300.                 {
  301.                     negative = false;
  302.                     resultReturn += digitReader;
  303.                     digitReader = 0;
  304.                 }
  305.                 else
  306.                 {
  307.                 if (divisionSlot == true)
  308.                 {
  309.                 if (decimal == true)
  310.                     {
  311.                     divisionEntry /= decimalPlacer;
  312.                     decimalPlacer = 1;
  313.                     decimal = false;
  314.                     }
  315.                     if (negative == true)
  316.                     {
  317.                     divisionEntry = -divisionEntry;
  318.                     }
  319.  
  320.                     digitReader /= divisionEntry;
  321.                     divisionSlot = false;
  322.                     divisionEntry = 0;
  323.  
  324.                     if (multiplicationSlot == true)
  325.                     {
  326.                     multStorage *= digitReader;
  327.                     resultReturn += multStorage;
  328.                     }
  329.                     digitReader = 0;
  330.               }
  331.                 else
  332.                 {
  333.                 if (decimal == true)
  334.                 {
  335.                     digitReader /= decimalPlacer;
  336.                     decimalPlacer = 1;
  337.                     decimal = false;
  338.                 }
  339.                 if (negative == true)
  340.                 {
  341.                     digitReader = -digitReader;
  342.                 }
  343.                 if (multiplicationSlot == true)
  344.                 {
  345.                     multStorage *= digitReader;
  346.                     resultReturn += multStorage;
  347.                     digitReader = 0;
  348.                 }
  349.                 negative = true;
  350.                 }
  351.                 resultReturn += digitReader;
  352.                 digitReader = 0;
  353.                 multStorage = 1;
  354.                 multiplicationSlot = false;
  355.                 digitEntry = false;
  356.                 }
  357.                 break;
  358.  
  359.             //Seems done for now
  360.             case '*':
  361.                 if (exponentSlot == true)
  362.                 {exponentSlot = false;}
  363.                 if (divisionSlot == true)
  364.                 {
  365.                 if (decimal == true)
  366.                     {
  367.                     divisionEntry /= decimalPlacer;
  368.                     decimalPlacer = 1;
  369.                     decimal = false;
  370.                     }
  371.                     if (negative == true)
  372.                     {
  373.                     divisionEntry = -divisionEntry;
  374.                     negative = false;
  375.                     }
  376.  
  377.                     digitReader /= divisionEntry;
  378.                     divisionSlot = false;
  379.                     divisionEntry = 0;
  380.  
  381.                     if (multiplicationSlot == true)
  382.                     {
  383.                     multStorage *= digitReader;
  384.                     resultReturn += multStorage;
  385.                     digitReader = 0;
  386.                     }
  387.                 }
  388.                 else
  389.                 {
  390.                 if (decimal == true)
  391.                 {
  392.                     digitReader /= decimalPlacer;
  393.                     decimalPlacer = 1;
  394.                     decimal = false;
  395.                 }
  396.                 if (negative == true)
  397.                 {
  398.                     digitReader = -digitReader;
  399.                     negative = false;
  400.                 }
  401.                 if (multiplicationSlot == true)
  402.                 {
  403.                     multStorage *= digitReader;
  404.                     resultReturn += multStorage;
  405.                     digitReader = 0;
  406.                 }
  407.                 }
  408.                 multStorage *= digitReader;
  409.                 digitReader = 0;
  410.                 multiplicationSlot = true;
  411.                 digitEntry = false;
  412.                 break;
  413.  
  414.             //HIGHLY TENTATIVE
  415.             case '/':
  416.                 if (exponentSlot == true)
  417.                 {exponentSlot = false;}
  418.                 if (decimal == true)
  419.                 {
  420.                     digitReader /= decimalPlacer;
  421.                     decimalPlacer = 1;
  422.                     decimal = false;
  423.                 }
  424.                 if (negative == true)
  425.                 {
  426.                     digitReader = -digitReader;
  427.                     negative = false;
  428.                 }
  429.                 if (divisionSlot == true)
  430.                 {
  431.                     digitReader /= divisionEntry;
  432.                     divisionEntry = 0;
  433.                     divisionSlot = false;
  434.                 }
  435.                 divisionSlot = true;
  436.                 digitEntry = false;
  437.                 break;
  438.  
  439.             case '^':
  440.                 exponentEntry = exponent();
  441.                 digitReader = pow(digitReader, exponentEntry);
  442.                 exponentSlot = true;
  443.                 break;
  444.  
  445.  
  446.             case '=':
  447.                 if (exponentSlot == true)
  448.                 {exponentSlot = false;}
  449.                 if (divisionSlot == true)
  450.                 {
  451.                     digitReader /= divisionEntry;
  452.                     divisionSlot = false;
  453.                 }
  454.                 if (decimal == true)
  455.                 {
  456.                     digitReader /= decimalPlacer;
  457.                     decimalPlacer = 1;
  458.                     decimal = false;
  459.                 }
  460.                 if (negative == true)
  461.                 {
  462.                     digitReader = -digitReader;
  463.                     negative = false;
  464.                 }
  465.                 if (multiplicationSlot == true)
  466.                 {
  467.                     multStorage *= digitReader;
  468.                     resultReturn += multStorage;
  469.                     multiplicationSlot = false;
  470.                     multStorage = 1;
  471.                     digitReader = 0;
  472.                 }
  473.                 resultReturn += digitReader;
  474.                 digitEntry = false;
  475.                 return resultReturn;
  476.             case '.':
  477.                 decimal = true;
  478.                 break;
  479.             case '(':
  480.                    if (divisionSlot == true)
  481.                     {
  482.                        divisionEntry = bracket();
  483.                     }
  484.                    else
  485.                     {
  486.                         digitReader = bracket();
  487.                         digitEntry = false;
  488.                     }
  489.                    break;
  490.             case ')':
  491.                 if (divisionSlot == true)
  492.                 {
  493.                     digitReader /= divisionEntry;
  494.                     divisionSlot = false;
  495.                 }
  496.                 if (decimal == true)
  497.                 {
  498.                     digitReader /= decimalPlacer;
  499.                     decimalPlacer = 1;
  500.                     decimal = false;
  501.                 }
  502.                 if (negative == true)
  503.                 {
  504.                     digitReader = -digitReader;
  505.                     negative = false;
  506.                 }
  507.                 if (multiplicationSlot == true)
  508.                 {
  509.                     multStorage *= digitReader;
  510.                     resultReturn += multStorage;
  511.                     multiplicationSlot = false;
  512.                     multStorage = 1;
  513.                     digitReader = 0;
  514.                 }
  515.                 digitEntry = false;
  516.                 resultReturn += digitReader;
  517.                 return resultReturn;
  518.             default:
  519.                 cout << "Please only use valid digits and operators!" << endl;
  520.                     resultReturn = 0;
  521.                     multStorage = 1;
  522.                     digitReader = 0;
  523.                     divisionEntry = 0;
  524.                     multiplicationSlot = false;
  525.                     negative = false;
  526.                     decimal = false;
  527.                     digitEntry = false;
  528.                     decimalPlacer = 1;
  529.  
  530.             }
  531.     }
  532. }
  533.  
  534. long double exponent()
  535. {
  536.     long double exponentEntry = 0;
  537.     long double exponentEntry2 = 0;
  538.     long double decimalDivider = 1;
  539.     bool digitEntry = false;
  540.     bool decimal = false;
  541.     bool negative = false;
  542.  for (;;)
  543.  {
  544.     cin >> charInput;
  545.     switch (charInput)
  546.     {
  547.          case '1':
  548.                 exponentEntry *= 10;
  549.                 exponentEntry += 1;
  550.                 if (decimal == true)
  551.                 {decimalDivider *= 10;}
  552.                 digitEntry = true;
  553.                 break;
  554.             case '2':
  555.                 exponentEntry *= 10;
  556.                 exponentEntry += 2;
  557.                 if (decimal == true)
  558.                 {decimalDivider *= 10;}
  559.                 digitEntry = true;
  560.                 break;
  561.             case '3':
  562.                 exponentEntry *= 10;
  563.                 exponentEntry += 3;
  564.                 if (decimal == true)
  565.                 {decimalDivider *= 10;}
  566.                 digitEntry = true;
  567.                 break;
  568.             case '4':
  569.                 exponentEntry *= 10;
  570.                 exponentEntry += 4;
  571.                 if (decimal == true)
  572.                 {decimalDivider *= 10;}
  573.                 digitEntry = true;
  574.                 break;
  575.             case '5':
  576.                 exponentEntry *= 10;
  577.                 exponentEntry += 5;
  578.                 if (decimal == true)
  579.                 {decimalDivider *= 10;}
  580.                 digitEntry = true;
  581.                 break;
  582.             case '6':
  583.                 exponentEntry *= 10;
  584.                 exponentEntry += 6;
  585.                 if (decimal == true)
  586.                 {decimalDivider *= 10;}
  587.                 digitEntry = true;
  588.                 break;
  589.             case '7':
  590.                 exponentEntry *= 10;
  591.                 exponentEntry += 7;
  592.                 if (decimal == true)
  593.                 {decimalDivider *= 10;}
  594.                 digitEntry = true;
  595.                 break;
  596.             case '8':
  597.                 exponentEntry *= 10;
  598.                 exponentEntry += 8;
  599.                 if (decimal == true)
  600.                 {decimalDivider *= 10;}
  601.                 digitEntry = true;
  602.                 break;
  603.             case '9':
  604.                 exponentEntry *= 10;
  605.                 exponentEntry += 9;
  606.                 if (decimal == true)
  607.                 digitEntry = true;
  608.                 break;
  609.             case '0':
  610.                 exponentEntry *= 10;
  611.                 if (decimal == true)
  612.                 {decimalDivider *= 10;}
  613.                 digitEntry = true;
  614.                 break;
  615.  
  616.             case '^':
  617.                 exponentEntry2 = exponent();
  618.                 if (decimal == true)
  619.                 {
  620.                 exponentEntry /= decimalDivider;
  621.                 decimalDivider = 1;
  622.                 }
  623.                 if (negative == true)
  624.                 {exponentEntry = -exponentEntry;}
  625.                 exponentEntry = pow(exponentEntry, exponentEntry2);
  626.                 return exponentEntry;
  627.             case '+':
  628.                 if (decimal == true)
  629.                 {
  630.                 exponentEntry /= decimalDivider;
  631.                 decimalDivider = 1;
  632.                 }
  633.                 if (negative == true)
  634.                 {exponentEntry = -exponentEntry;}
  635.                 return exponentEntry;
  636.             case '-':
  637.                 if (digitEntry == false)
  638.                 {
  639.                     negative = true;
  640.                     break;
  641.                 }
  642.                 else
  643.                 {
  644.                 if (decimal == true)
  645.                 {
  646.                 exponentEntry /= decimalDivider;
  647.                 decimalDivider = 1;}
  648.                 if (negative == true)
  649.                 {exponentEntry = -exponentEntry;}
  650.                 return exponentEntry;
  651.                 }
  652.             case '*':
  653.                 if (decimal == true)
  654.                 {
  655.                 exponentEntry /= decimalDivider;
  656.                 decimalDivider = 1;
  657.                 }
  658.                 if (negative == true)
  659.                 {exponentEntry = -exponentEntry;}
  660.                 return exponentEntry;
  661.             case '/':
  662.                 if (decimal == true)
  663.                 {
  664.                 exponentEntry /= decimalDivider;
  665.                 decimalDivider = 1;
  666.                 }
  667.                 if (negative == true)
  668.                 {exponentEntry = -exponentEntry;}
  669.                 return exponentEntry;
  670.             case '=':
  671.                 if (decimal == true)
  672.                 {
  673.                 exponentEntry /= decimalDivider;
  674.                 decimalDivider = 1;
  675.                 }
  676.                 if (negative == true)
  677.                 {exponentEntry = -exponentEntry;}
  678.                 return exponentEntry;
  679.             case '.':
  680.                 decimal = true;
  681.                 break;
  682.             default:
  683.                 cout << "Please only use valid digits and operators!" << endl;
  684.         }
  685.     }
  686. }
Advertisement
Add Comment
Please, Sign In to add comment