#include "funkcija.hpp" #include using namespace std; double Konstanta::vrednost(double x) const { return _c; } Funkcija* Konstanta::klon() const { return new Konstanta(*this); } void Konstanta::ispis() const { cout << _c; } Funkcija* Konstanta::izvod() const { return new Konstanta(0); } double Promenljiva::vrednost(double x) const { return x; } Funkcija* Promenljiva::klon() const { return new Promenljiva(*this); } void Promenljiva::ispis() const { cout << "x"; } Funkcija* Promenljiva::izvod() const { return new Konstanta(1); } BinOperator::~BinOperator () { delete _levi; delete _desni; } BinOperator::BinOperator(const BinOperator& z) { _levi = z._levi->klon(); _desni = z._desni->klon(); } BinOperator& BinOperator::operator=(const BinOperator& z) { if (this != &z) { delete _levi; delete _desni; _levi = z._levi->klon(); _desni = z._desni->klon(); } return *this; } double Zbir::vrednost(double x) const { return _levi->vrednost(x) + _desni->vrednost(x); } Funkcija* Zbir::klon() const { return new Zbir(*this); } void Zbir::ispis() const { cout << "("; _levi->ispis(); cout << ") + ("; _desni->ispis(); cout << ")"; } Funkcija* Zbir::izvod() const { Funkcija *i1 = _levi->izvod(); Funkcija *i2 = _desni->izvod(); Funkcija *f = new Zbir(i1, i2); delete i1; delete i2; return f; } double Razlika::vrednost(double x) const { return _levi->vrednost(x) - _desni->vrednost(x); } Funkcija* Razlika::klon() const { return new Razlika(*this); } void Razlika::ispis() const { cout << "("; _levi->ispis(); cout << ") - ("; _desni->ispis(); cout << ")"; } Funkcija* Razlika::izvod() const { Funkcija *i1 = _levi->izvod(); Funkcija *i2 = _desni->izvod(); Funkcija *f = new Razlika(i1, i2); delete i1; delete i2; return f; } double Proizvod::vrednost(double x) const { return _levi->vrednost(x) * _desni->vrednost(x); } Funkcija* Proizvod::klon() const { return new Proizvod(*this); } void Proizvod::ispis() const { cout << "("; _levi->ispis(); cout << ") * ("; _desni->ispis(); cout << ")"; } Funkcija* Proizvod::izvod() const { Funkcija *i1 = _levi->izvod(); Funkcija *i2 = _desni->izvod(); Funkcija *i3 = new Proizvod(i1, _desni); Funkcija *i4 = new Proizvod(_levi, i2); Funkcija *f = new Zbir(i3, i4); delete i1; delete i2; delete i3; delete i4; return f; } double Kolicnik::vrednost(double x) const { return _levi->vrednost(x) / _desni->vrednost(x); } Funkcija* Kolicnik::klon() const { return new Kolicnik(*this); } void Kolicnik::ispis() const { cout << "("; _levi->ispis(); cout << ") / ("; _desni->ispis(); cout << ")"; } Funkcija* Kolicnik::izvod() const { Funkcija *i1 = _levi->izvod(); Funkcija *i2 = _desni->izvod(); Funkcija *i3 = new Proizvod(i1, _desni); Funkcija *i4 = new Proizvod(_levi, i2); Funkcija *f1 = new Razlika(i3, i4); Funkcija *f2 = new Proizvod(_desni, _desni); Funkcija *f = new Kolicnik(f1, f2); delete i1; delete i2; delete i3; delete i4; delete f1; delete f2; return f; } UnOperator::~UnOperator () { delete _f; } UnOperator::UnOperator(const UnOperator& z) { _f = z._f->klon(); } UnOperator& UnOperator::operator=(const UnOperator& z) { if (this != &z) { delete _f; _f = z._f->klon(); } return *this; } double Sinus::vrednost(double x) const { return sin(_f->vrednost(x)); } Funkcija* Sinus::klon() const { return new Sinus(*this); } void Sinus::ispis() const { cout << "sin("; _f->ispis(); cout << ")"; } Funkcija* Sinus::izvod() const { Funkcija *i = _f->izvod(); Funkcija *f1 = new Kosinus(_f); Funkcija *f = new Proizvod(f1, i); delete i; delete f1; return f; } double Kosinus::vrednost(double x) const { return cos(_f->vrednost(x)); } Funkcija* Kosinus::klon() const { return new Kosinus(*this); } void Kosinus::ispis() const { cout << "cos("; _f->ispis(); cout << ")"; } Funkcija* Kosinus::izvod() const { Funkcija *i = _f->izvod(); Funkcija *f1 = new Sinus(_f); Funkcija *f2 = new Proizvod(f1, i); Funkcija *k = new Konstanta(-1); Funkcija *f = new Proizvod(k, f2); delete i; delete f1; delete f2; delete k; return f; }