Advertisement
Toliak

kavo_calc

Nov 7th, 2018
354
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. float expr();
  4. float skobki();
  5. float factor();
  6.  
  7. float number()
  8. {
  9.     char number[100];
  10.     for (int i = 0; i < 100; i++)
  11.     {
  12.         number[i] = 0;      //обнулям массив из char
  13.     }
  14.     int number_poz = 0;     // на каком месте мы сейчас (куда дописывать char)
  15.     while (1) {
  16.         char c = cin.get();
  17.         if (c >= '0' && c <= '9' || c == '.')
  18.         {
  19.             number[number_poz] = c;
  20.             number_poz = number_poz + 1;
  21.         }
  22.         else
  23.         {
  24.             cin.putback(c);
  25.             return atof(number);
  26.         }
  27.     }
  28. }
  29.  
  30. float expr()
  31. {
  32.     float x = factor();
  33.     while (1) {
  34.         char c = cin.get();
  35.         switch (c) {
  36.         case '+':
  37.             x += factor();
  38.             break;
  39.         case '-':
  40.             x -= factor();
  41.             break;
  42.         default:
  43.             cin.putback(c);
  44.             return x;
  45.         }
  46.     }
  47. }
  48.  
  49. float skobki()
  50. {
  51.     char c = cin.get();
  52.     if (c == '(') {
  53.         float x = expr();
  54.         cin.get();
  55.         return x;
  56.     }
  57.     else
  58.     {
  59.         cin.putback(c);
  60.         return number();
  61.     }
  62. }
  63.  
  64. float factor()
  65. {
  66.     float x = skobki();
  67.     while (1)
  68.     {
  69.         char c = cin.get();
  70.         switch (c)
  71.         {
  72.         case '*':
  73.             x *= skobki();
  74.             break;
  75.         case '/':
  76.             x /= skobki();
  77.             break;
  78.         default:
  79.             cin.putback(c);
  80.             return x;
  81.         }
  82.     }
  83. }
  84.  
  85. int main()
  86. {
  87.     cout << "enter an expression: " << expr() << endl;
  88.     system("pause");
  89.  
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement