Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // калькулятор с обратной польской записью
- // https://rextester.com/WECON61229
- #include <iostream>
- #include <map>
- #define QUIT 1
- #define PLUS 2
- #define MINUS 3
- #define MUL 4
- #define DIV 5
- using namespace std;
- int main()
- {
- map <string, int> mapping;
- mapping["q"] = QUIT;
- mapping["+"] = PLUS;
- mapping["-"] = MINUS;
- mapping["*"] = MUL;
- mapping["/"] = DIV;
- auto A = 0.0;
- auto B = 0.0;
- auto C = 0.0;
- auto D = 0.0;
- auto E = 0.0;
- string cmd;
- cout << "Калькулятор с обратной польской записью" << endl
- << "пример вычисления 12+34*56: 34 <enter> 56 <enter> * <enter> 12 <enter> + <enter>" << endl;
- while(1)
- {
- cout << "Содержимое стека:" << endl
- << "\t=: " << A << endl
- << "\tB: " << B << endl
- << "\tC: " << C << endl
- << "\tD: " << D << endl
- << "\tE: " << E << endl
- << "Введите число или команду (q - выход): ";
- cin >> cmd;
- switch(mapping[cmd])
- {
- case QUIT : cout << "пока-пока"; return 0;
- case PLUS : A = A+B; B = C; C = D; D = E; E = 0.0; break;
- case MINUS : A = A-B; B = C; C = D; D = E; E = 0.0; break;
- case MUL : A = A*B; B = C; C = D; D = E; E = 0.0; break;
- case DIV : A = (B != 0) ? A/B : 0; B = C; C = D; D = E; E = 0.0; break;
- default : try {E = D; D = C; C = B; B = A; A = stod(cmd); } catch(...){}; break;
- }
- cout << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement