Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.07 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. class Expression
  4. {
  5. public:
  6.     virtual Expression* diff() = 0;
  7.     virtual void print() = 0;
  8. };
  9.  
  10. class Number : public Expression
  11. {
  12.     double value;
  13. public:
  14.     Number(double x)
  15.     {
  16.         value = x;
  17.     }
  18.     Expression* diff()
  19.     {
  20.         return new Number(0);
  21.     }
  22.     void print()
  23.     {
  24.         cout << value;
  25.     }
  26. };
  27.  
  28. class Variable : public Expression
  29. {
  30.     char value;
  31. public:
  32.     Variable(char x)
  33.     {
  34.         value = x;
  35.     }
  36.     Expression* diff()
  37.     {
  38.         return new Number(1);
  39.     }
  40.     void print()
  41.     {
  42.         cout << value;
  43.     }
  44. };
  45.  
  46. class Add : public Expression
  47. {
  48.     Expression* left, * right;
  49. public:
  50.     Add(Expression* l, Expression* r)
  51.     {
  52.         left = l;
  53.         right = r;
  54.     }
  55.     Expression* diff()
  56.     {
  57.         return new Add(left->diff(), right->diff());
  58.     }
  59.     void print()
  60.     {
  61.         cout << "(";
  62.         left->print();
  63.         cout << ")";
  64.         cout << '+';
  65.         cout << "(";
  66.         right->print();
  67.         cout << ")";
  68.     }
  69. };
  70.  
  71. class Sub : public Expression
  72. {
  73.     Expression* left, * right;
  74. public:
  75.     Sub(Expression* l, Expression* r)
  76.     {
  77.         left = l;
  78.         right = r;
  79.     }
  80.     Expression* diff()
  81.     {
  82.         return new Sub(left->diff(), right->diff());
  83.     }
  84.     void print()
  85.     {
  86.         cout << "(";
  87.         left->print();
  88.         cout << ")";
  89.         cout << '-';
  90.         cout << "(";
  91.         right->print();
  92.         cout << ")";
  93.     }
  94. };
  95.  
  96. class Mul : public Expression
  97. {
  98.     Expression* left, * right;
  99. public:
  100.     Mul(Expression* l, Expression* r)
  101.     {
  102.         left = l;
  103.         right = r;
  104.     }
  105.     Expression* diff()
  106.     {
  107.         return new Add(new Mul(left->diff(), right), new Mul(left, right->diff()) );
  108.     }
  109.     void print()
  110.     {
  111.         cout << "(";
  112.         left->print();
  113.         cout << ")";
  114.         cout << '*';
  115.         cout << "(";
  116.         right->print();
  117.         cout << ")";
  118.     }
  119. };
  120.  
  121. class Div : public Expression
  122. {
  123.     Expression* left, * right;
  124. public:
  125.     Div(Expression* l, Expression* r)
  126.     {
  127.         left = l;
  128.         right = r;
  129.     }
  130.     Expression* diff()
  131.     {
  132.         return new Div(new Sub(new Mul(left->diff(), right), new Mul(left, right->diff())), new Mul(right, right));
  133.     }
  134.     void print()
  135.     {
  136.         cout << "(";
  137.         left->print();
  138.         cout << ")";
  139.         cout << "/";
  140.         cout << "(";
  141.         right->print();
  142.         cout << ")";
  143.     }
  144. };
  145.  
  146.  
  147. class arctg : public Expression
  148. {
  149.     Expression* x;
  150. public:
  151.     arctg(Expression* v)
  152.     {
  153.         x = v;
  154.     }
  155.     Expression* diff()
  156.     {
  157.         return new Mul(x->diff(), new Div(new Number(1),new Add(new Number(1),new Mul(new Variable('x'), new Variable('x')))));
  158.     }
  159.     void print()
  160.     {
  161.         cout << "arctg" << '(';
  162.         x->print();
  163.         cout << ')';
  164.     }
  165. };
  166.  
  167.  
  168. int main()
  169. {
  170.     Expression* e = new arctg(new Mul(new Number(2), new Variable('x')));
  171.     Expression* de = e->diff();
  172.     e->print();
  173.     cout << "\n";
  174.     de->print();
  175.     cout << "\n";
  176.     delete e;
  177.     delete de;
  178.     system("pause");
  179.     return 0;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement