Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.93 KB | None | 0 0
  1. #include<string.h>
  2. #include<stdio.h>
  3. #include<iostream>
  4. using namespace std;
  5. class Expression
  6. {
  7. public:
  8.     virtual void print() = 0;
  9.     virtual Expression *diff() = 0;
  10. };
  11. class Number : public Expression
  12. {
  13. private:
  14.     double x;
  15.  
  16. public:
  17.     Number(double q)
  18.     {
  19.         x = q;
  20.     }
  21.     Expression *diff()
  22.     {
  23.         return new Number(0);
  24.     }
  25.     void print()
  26.     {
  27.         cout << x;
  28.     }
  29.     ~Number()
  30.     {}
  31. };
  32. class Variable : public Expression
  33. {
  34. private:
  35.     char x,y;
  36.  
  37. public:
  38.     Variable(char p, char t)
  39.     {
  40.         x=p;
  41.         y = t;
  42.  
  43.     }
  44.     Expression *diff()
  45.     {
  46.         if (x == y) return new Number(1); else return new Number(0);
  47.     }
  48.     void print()
  49.     {
  50.         cout << x;
  51.     }
  52.     ~Variable()
  53.     {}
  54. };
  55. class Add : public Expression
  56. {
  57. private:
  58.     Expression *r1, *r2;
  59.  
  60. public:
  61.     Add(Expression*ru, Expression*ri)
  62.     {
  63.         r1 = ru;
  64.         r2 = ri;
  65.     }
  66.     Expression *diff()
  67.     {
  68.         return new Add(r1->diff(), r2->diff());
  69.     }
  70.     void print()
  71.     {
  72.         cout << "(";
  73.         r1->print();
  74.         cout << ")";
  75.         cout << "+";
  76.         r2->print();
  77.     }
  78.     ~Add()
  79.     {}
  80. };
  81. class Sub : public Expression
  82. {
  83. private:
  84.     Expression *f1, *f2;
  85.  
  86. public:
  87.     Sub(Expression *qu, Expression *qi) : f1(qu), f2(qi)
  88.     {}
  89.     Expression *diff()
  90.     {
  91.         return new Sub(f1->diff(), f2->diff());
  92.     }
  93.     void print()
  94.     {
  95.         cout << "(";
  96.         f1->print();
  97.         cout << ")";
  98.         cout << "-";
  99.         f2->print();
  100.     }
  101. };
  102. class Mul : public Expression
  103. {
  104. private:
  105.     Expression *r1, *r2;
  106.  
  107. public:
  108.     Mul(Expression*ru, Expression*ri)
  109.     {
  110.         r1 = ru;
  111.         r2 = ri;
  112.     }
  113.     Expression *diff()
  114.     {
  115.         return new Add(new Mul(r1->diff(), r2), new Mul(r1, r2->diff()));
  116.     }
  117.     void print()
  118.     {
  119.         cout << "(";
  120.         r1->print();
  121.         cout << ")";
  122.         cout << "*";
  123.         r2->print();
  124.     }
  125.     ~Mul()
  126.     {}
  127. };
  128. class Div : public Expression
  129. {
  130. private:
  131.     Expression *r1, *r2;
  132.  
  133. public:
  134.     Div(Expression*ru, Expression*ri)
  135.     {
  136.         r1 = ru;
  137.         r2 = ri;
  138.     }
  139.     Expression *diff()
  140.     {
  141.         return new Div(new Sub(new Mul(r1->diff(), r2), new Mul(r1, r2->diff())), new Mul(r2, r2));
  142.     }
  143.     void print()
  144.     {
  145.         cout << "(";
  146.         r1->print();
  147.         cout << ")";
  148.         cout << "/";
  149.         cout << "(";
  150.         r2->print();
  151.         cout << ")";
  152.     }
  153.     ~Div()
  154.     {}
  155. };
  156. class Pow : public Expression
  157. {
  158. private:
  159.     Expression *r1, *r2;
  160.  
  161. public:
  162.     Pow(Expression*ru, Expression*ri)
  163.     {
  164.         r1 = ru;
  165.         r2 = ri;
  166.     }
  167.     Expression *diff()
  168.     {
  169.         return new Mul(r2, new Pow(r1, new Sub(r2, new Number(1))));
  170.     }
  171.     void print()
  172.     {
  173.         cout << "(";
  174.         r1->print();
  175.         cout << ")";
  176.         cout << "^";
  177.         cout << "(";
  178.         r2->print();
  179.         cout << ")";
  180.     }
  181.     ~Pow()
  182.     {}
  183. };
  184. class Ln : public Expression
  185. {
  186. private:
  187.     Expression *r1;
  188.  
  189. public:
  190.     Ln(Expression*ru)
  191.     {
  192.         r1 = ru;
  193.     }
  194.     Expression *diff()
  195.     {
  196.         return new Mul(r1->diff(), new Div(new Number(1), r1));
  197.     }
  198.     void print()
  199.     {
  200.         cout << "Ln(";
  201.         r1->print();
  202.         cout << ")";
  203.     }
  204.     ~Ln()
  205.     {}
  206. };
  207. int main()
  208. {
  209.     Expression* v = new Add(new Variable('x','y'), new Variable('y', 'y'));
  210.     v->print();
  211.     Expression* f = v->diff();
  212.     cout << endl;
  213.     f->print();
  214.     system("pause");
  215.     return 1;
  216.  
  217. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement