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