Guest User

charchange

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