Advertisement
punidota

Untitled

Mar 15th, 2016
621
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.33 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <map>
  3. #include <stack>
  4. #include <string>
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. template<class Data, class Argv, class Ch>
  9. class bf{
  10. public:
  11.     Argv N = 0;
  12.     stack<Argv> stack;
  13.     map<Argv, Ch> symbol;
  14.  
  15.     void compile(Data &input, Argv &x)
  16.     {
  17.         for (unsigned int i = 0; i < input.length(); i++)
  18.         {
  19.             switch (input[i])
  20.             {
  21.             case '+':
  22.                 symbol[N]++;
  23.                 break;
  24.             case '-':
  25.                 symbol[N]--;
  26.                 break;
  27.             case '>':
  28.                 N++;
  29.                 break;
  30.             case '<':
  31.                 N--;
  32.                 break;
  33.             case '[':
  34.                 stack.push(i);
  35.                 break;
  36.             case ']':
  37.                 if (symbol[N] != 0)
  38.                 {
  39.                     if (stack.empty())
  40.                     {
  41.                         cout << "Ошибка: различное количество скобок" << endl;
  42.                         break;
  43.                     }
  44.                     i = stack.top();
  45.                 }
  46.                 else
  47.                     stack.pop();
  48.                 break;
  49.             case '.':
  50.                 cout << symbol[N];
  51.  
  52.                 break;
  53.             case ',':
  54.                 cin >> symbol[N];
  55.                 break;
  56.             }
  57.  
  58.         }
  59.         if (stack.empty())
  60.         {
  61.             cout << endl << "f(x) = " <<pow(sin(x), 2);
  62.         }
  63.     }
  64.  
  65. };
  66. void main()
  67. {
  68.     setlocale(0, "");
  69.     string input;
  70.     bf<string,int,char> bf;
  71.     int x = 0;
  72.     input = "+[------->++<]>++.-.++++++++.+[--->+<]>.--[->+++<]>+.----------.+++++.++[++>---<]>.[->+++<]>.[--->+<]>+.+++.++++++.---------.-[-->+++<]>-.";
  73.     cout << "x = "; cin >> x;
  74.     bf.compile(input,x);
  75.     cout << endl;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement