Advertisement
ms_shnits

Калькулятор с обратной польской записью

Oct 20th, 2021
1,188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.68 KB | None | 0 0
  1. // калькулятор с обратной польской записью
  2. // https://rextester.com/WECON61229
  3.  
  4. #include <iostream>
  5. #include <map>
  6.  
  7. #define QUIT  1
  8. #define PLUS  2
  9. #define MINUS 3
  10. #define MUL   4
  11. #define DIV   5
  12.  
  13. using namespace std;
  14.  
  15. int main()
  16. {
  17.     map <string, int> mapping;
  18.     mapping["q"] = QUIT;
  19.     mapping["+"] = PLUS;
  20.     mapping["-"] = MINUS;
  21.     mapping["*"] = MUL;
  22.     mapping["/"] = DIV;
  23.  
  24.     auto A = 0.0;
  25.     auto B = 0.0;
  26.     auto C = 0.0;
  27.     auto D = 0.0;
  28.     auto E = 0.0;
  29.    
  30.     string cmd;
  31.    
  32.     cout << "Калькулятор с обратной польской записью" << endl
  33.         << "пример вычисления 12+34*56: 34 <enter> 56 <enter> * <enter> 12 <enter> + <enter>" << endl;
  34.    
  35.     while(1)
  36.     {
  37.         cout << "Содержимое стека:" << endl
  38.             << "\t=: " << A << endl
  39.             << "\tB: " << B << endl
  40.             << "\tC: " << C << endl
  41.             << "\tD: " << D << endl
  42.             << "\tE: " << E << endl
  43.             << "Введите число или команду (q - выход): ";
  44.         cin >> cmd;
  45.         switch(mapping[cmd])
  46.         {
  47.             case QUIT  : cout << "пока-пока"; return 0;
  48.             case PLUS  : A = A+B; B = C; C = D; D = E; E = 0.0; break;
  49.             case MINUS : A = A-B; B = C; C = D; D = E; E = 0.0; break;
  50.             case MUL   : A = A*B; B = C; C = D; D = E; E = 0.0; break;
  51.             case DIV   : A = (B != 0) ? A/B : 0; B = C; C = D; D = E; E = 0.0; break;
  52.             default : try {E = D; D = C; C = B; B = A; A = stod(cmd); } catch(...){}; break;
  53.         }
  54.        
  55.         cout << endl;
  56.     }
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement