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