Advertisement
SomniP

Калькулятор последовательного вычисления выражения

Dec 4th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <string>
  4. #include <map>
  5. #include <functional>
  6. #include <sstream>
  7. #include <vector>
  8.  
  9. using namespace std;
  10.  
  11. int main()
  12. {
  13.     SetConsoleCP(1251);
  14.     SetConsoleOutputCP(1251);
  15.     system("color 0A");
  16.  
  17.     map<char, function<double(double, double)>> f;
  18.     f.insert(make_pair('+', [](double d1, double d2) { return d1 + d2; }));
  19.     f.insert(make_pair('-', [](double d1, double d2) { return d1 - d2; }));
  20.     f.insert(make_pair('*', [](double d1, double d2) { return d1 * d2; }));
  21.     f.insert(make_pair('/', [](double d1, double d2) { return d1 / d2; }));
  22.     f.insert(make_pair('^', [](double d1, double d2) { return pow(d1, d2); }));
  23.  
  24.     string s;
  25.     cout << "Введите мат выражение" << endl;
  26.     getline(cin, s);
  27.     stringstream ss(s);
  28.     auto flag = true;
  29.     vector<double> values;
  30.     string signals;
  31.     for (;ss;)
  32.     {
  33.         if (flag)
  34.         {
  35.             double value;
  36.             ss >> value;
  37.             values.push_back(value);
  38.             flag = !flag;
  39.         }
  40.         else
  41.         {
  42.             char signal;
  43.             ss >> signal;
  44.             signals.push_back(signal);
  45.             flag = !flag;
  46.         }
  47.     }
  48.  
  49.     auto result = values[0u];
  50.     for (size_t u = 1u; u < values.size(); ++u)
  51.     {
  52.         result = f[signals[u - 1u]](result, values[u]);
  53.     }
  54.     cout << "Результат = " << result << endl;
  55.  
  56.     system("pause");
  57.     return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement