#include "funkcije.hpp" #include using namespace std; Funkcija::~Funkcija() { } void Konstanta::ispisi() const { cout << _v; } Funkcija* Konstanta::izvod() const { return new Konstanta(0); } Funkcija* Konstanta::kopija() const { return new Konstanta(_v); } void Identicka::ispisi() const { cout << "x"; } Funkcija* Identicka::izvod() const { return new Konstanta(1); } Funkcija* Identicka::kopija() const { return new Identicka(); } BinOp::~BinOp() { delete _leva; delete _desna; } void Zbir::ispisi() const { cout << "("; _leva->ispisi(); cout << ") + ("; _desna->ispisi(); cout << ")"; } Funkcija* Zbir::izvod() const { return new Zbir( _leva->izvod(), _desna->izvod() ); } Funkcija* Zbir::kopija() const { return new Zbir(_leva->kopija(), _desna->kopija()); } void Razlika::ispisi() const { cout << "("; _leva->ispisi(); cout << ") - ("; _desna->ispisi(); cout << ")"; } Funkcija* Razlika::izvod() const { return new Razlika( _leva->izvod(), _desna->izvod() ); } Funkcija* Razlika::kopija() const { return new Razlika(_leva->kopija(), _desna->kopija()); } void Proizvod::ispisi() const { cout << "("; _leva->ispisi(); cout << ") * ("; _desna->ispisi(); cout << ")"; } Funkcija* Proizvod::kopija() const { return new Proizvod(_leva->kopija(), _desna->kopija()); } Funkcija* Proizvod::izvod() const { return new Zbir( new Proizvod(_leva->izvod(), _desna->kopija()), new Proizvod(_leva->kopija(), _desna->izvod()) ); } void Kolicnik::ispisi() const { cout << "("; _leva->ispisi(); cout << ") / ("; _desna->ispisi(); cout << ")"; } Funkcija* Kolicnik::izvod() const { return new Kolicnik ( new Razlika( new Proizvod(_leva->izvod(), _desna->kopija()), new Proizvod(_leva->kopija(), _desna->izvod()) ), new Proizvod(_desna->kopija(), _desna->kopija()) ); } Funkcija* Kolicnik::kopija() const { return new Kolicnik(_leva->kopija(), _desna->kopija()); } UnOp::~UnOp() { delete _f; } void Sin::ispisi() const { cout << "sin("; _f->ispisi(); cout << ")"; } Funkcija* Sin::izvod() const { return new Proizvod(new Cos(_f->kopija()), _f->izvod()); } Funkcija* Sin::kopija() const { return new Sin(_f->kopija()); } void Cos::ispisi() const { cout << "cos("; _f->ispisi(); cout << ")"; } Funkcija* Cos::izvod() const { return new Proizvod(new Konstanta(-1), new Proizvod(new Sin(_f->kopija()), _f->izvod())); } Funkcija* Cos::kopija() const { return new Cos(_f->kopija()); }