Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<string.h>
- #include<stdio.h>
- #include<iostream>
- using namespace std;
- class Expression
- {
- public:
- virtual void print() = 0;
- virtual Expression *diff() = 0;
- };
- class Number : public Expression
- {
- private:
- double x;
- public:
- Number(double q)
- {
- x = q;
- }
- Expression *diff()
- {
- return new Number(0);
- }
- void print()
- {
- cout << x;
- }
- ~Number()
- {}
- };
- class Variable : public Expression
- {
- private:
- char x,y;
- public:
- Variable(char p, char t)
- {
- x=p;
- y = t;
- }
- Expression *diff()
- {
- if (x == y) return new Number(1); else return new Number(0);
- }
- void print()
- {
- cout << x;
- }
- ~Variable()
- {}
- };
- class Add : public Expression
- {
- private:
- Expression *r1, *r2;
- public:
- Add(Expression*ru, Expression*ri)
- {
- r1 = ru;
- r2 = ri;
- }
- Expression *diff()
- {
- return new Add(r1->diff(), r2->diff());
- }
- void print()
- {
- cout << "(";
- r1->print();
- cout << ")";
- cout << "+";
- r2->print();
- }
- ~Add()
- {}
- };
- class Sub : public Expression
- {
- private:
- Expression *f1, *f2;
- public:
- Sub(Expression *qu, Expression *qi) : f1(qu), f2(qi)
- {}
- Expression *diff()
- {
- return new Sub(f1->diff(), f2->diff());
- }
- void print()
- {
- cout << "(";
- f1->print();
- cout << ")";
- cout << "-";
- f2->print();
- }
- };
- class Mul : public Expression
- {
- private:
- Expression *r1, *r2;
- public:
- Mul(Expression*ru, Expression*ri)
- {
- r1 = ru;
- r2 = ri;
- }
- Expression *diff()
- {
- return new Add(new Mul(r1->diff(), r2), new Mul(r1, r2->diff()));
- }
- void print()
- {
- cout << "(";
- r1->print();
- cout << ")";
- cout << "*";
- r2->print();
- }
- ~Mul()
- {}
- };
- class Div : public Expression
- {
- private:
- Expression *r1, *r2;
- public:
- Div(Expression*ru, Expression*ri)
- {
- r1 = ru;
- r2 = ri;
- }
- Expression *diff()
- {
- return new Div(new Sub(new Mul(r1->diff(), r2), new Mul(r1, r2->diff())), new Mul(r2, r2));
- }
- void print()
- {
- cout << "(";
- r1->print();
- cout << ")";
- cout << "/";
- cout << "(";
- r2->print();
- cout << ")";
- }
- ~Div()
- {}
- };
- class Pow : public Expression
- {
- private:
- Expression *r1, *r2;
- public:
- Pow(Expression*ru, Expression*ri)
- {
- r1 = ru;
- r2 = ri;
- }
- Expression *diff()
- {
- return new Mul(r2, new Pow(r1, new Sub(r2, new Number(1))));
- }
- void print()
- {
- cout << "(";
- r1->print();
- cout << ")";
- cout << "^";
- cout << "(";
- r2->print();
- cout << ")";
- }
- ~Pow()
- {}
- };
- class Ln : public Expression
- {
- private:
- Expression *r1;
- public:
- Ln(Expression*ru)
- {
- r1 = ru;
- }
- Expression *diff()
- {
- return new Mul(r1->diff(), new Div(new Number(1), r1));
- }
- void print()
- {
- cout << "Ln(";
- r1->print();
- cout << ")";
- }
- ~Ln()
- {}
- };
- int main()
- {
- Expression* v = new Add(new Variable('x','y'), new Variable('y', 'y'));
- v->print();
- Expression* f = v->diff();
- cout << endl;
- f->print();
- system("pause");
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement