Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class Expression
- {
- public:
- virtual Expression* diff() = 0;
- virtual void print() = 0;
- };
- class Number : public Expression
- {
- double value;
- public:
- Number(double x)
- {
- value = x;
- }
- Expression* diff()
- {
- return new Number(0);
- }
- void print()
- {
- cout << value;
- }
- };
- class Variable : public Expression
- {
- char value;
- public:
- Variable(char x)
- {
- value = x;
- }
- Expression* diff()
- {
- return new Number(1);
- }
- void print()
- {
- cout << value;
- }
- };
- class Add : public Expression
- {
- Expression* left, * right;
- public:
- Add(Expression* l, Expression* r)
- {
- left = l;
- right = r;
- }
- Expression* diff()
- {
- return new Add(left->diff(), right->diff());
- }
- void print()
- {
- cout << "(";
- left->print();
- cout << ")";
- cout << '+';
- cout << "(";
- right->print();
- cout << ")";
- }
- };
- class Sub : public Expression
- {
- Expression* left, * right;
- public:
- Sub(Expression* l, Expression* r)
- {
- left = l;
- right = r;
- }
- Expression* diff()
- {
- return new Sub(left->diff(), right->diff());
- }
- void print()
- {
- cout << "(";
- left->print();
- cout << ")";
- cout << '-';
- cout << "(";
- right->print();
- cout << ")";
- }
- };
- class Mul : public Expression
- {
- Expression* left, * right;
- public:
- Mul(Expression* l, Expression* r)
- {
- left = l;
- right = r;
- }
- Expression* diff()
- {
- return new Add(new Mul(left->diff(), right), new Mul(left, right->diff()) );
- }
- void print()
- {
- cout << "(";
- left->print();
- cout << ")";
- cout << '*';
- cout << "(";
- right->print();
- cout << ")";
- }
- };
- class Div : public Expression
- {
- Expression* left, * right;
- public:
- Div(Expression* l, Expression* r)
- {
- left = l;
- right = r;
- }
- Expression* diff()
- {
- return new Div(new Sub(new Mul(left->diff(), right), new Mul(left, right->diff())), new Mul(right, right));
- }
- void print()
- {
- cout << "(";
- left->print();
- cout << ")";
- cout << "/";
- cout << "(";
- right->print();
- cout << ")";
- }
- };
- class arctg : public Expression
- {
- Expression* x;
- public:
- arctg(Expression* v)
- {
- x = v;
- }
- Expression* diff()
- {
- return new Mul(x->diff(), new Div(new Number(1),new Add(new Number(1),new Mul(new Variable('x'), new Variable('x')))));
- }
- void print()
- {
- cout << "arctg" << '(';
- x->print();
- cout << ')';
- }
- };
- int main()
- {
- Expression* e = new arctg(new Mul(new Number(2), new Variable('x')));
- Expression* de = e->diff();
- e->print();
- cout << "\n";
- de->print();
- cout << "\n";
- delete e;
- delete de;
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement