From 3f9e0da725963bb27aeccf852bf342a9cce2a34b Mon Sep 17 00:00:00 2001 From: HombreLaser Date: Sun, 17 Apr 2022 11:14:38 -0500 Subject: Añadido código de las reglas, solucionado errores. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- expressions.cpp | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) (limited to 'expressions.cpp') diff --git a/expressions.cpp b/expressions.cpp index c7d80e3..72e1e04 100644 --- a/expressions.cpp +++ b/expressions.cpp @@ -3,6 +3,7 @@ #include #include "include/lexer.hpp" #include "include/expressions.hpp" +#include "include/differentiator.hpp" using std::string, std::to_string; @@ -25,6 +26,10 @@ float Literal::eval(int arg) { return getValue(); } +Expression *Literal::diff(const Differentiator *d) { + return d->visit(this); +} + Expression *Literal::copy() { return new Literal(value); } @@ -39,7 +44,7 @@ Function::~Function() { delTree(); } -const Expression *Function::getArg() const { +Expression *Function::getArg() { return arg; } @@ -47,6 +52,10 @@ trig_functions Function::getFunctionName() const { return function_name; } +Expression *Function::diff(const Differentiator *d) { + return d->visit(this); +} + void Function::delTree() { delete arg; } @@ -123,6 +132,10 @@ float Variable::eval(int arg) { return arg; } +Expression *Variable::diff(const Differentiator *d) { + return d->visit(this); +} + Expression *Variable::copy() { return new Variable(name); } @@ -142,6 +155,10 @@ float AddExpression::eval(int arg) { return right_val + left_val; } +Expression *AddExpression::diff(const Differentiator *d) { + return d->visit(this); +} + Expression *AddExpression::copy() { return new AddExpression(left->copy(), right->copy()); } @@ -161,6 +178,10 @@ float SubExpression::eval(int arg) { return right_val - left_val; } +Expression *SubExpression::diff(const Differentiator *d) { + return d->visit(this); +} + Expression *SubExpression::copy() { return new SubExpression(left->copy(), right->copy()); } @@ -184,6 +205,10 @@ float NegationExpression::eval(int arg) { return -1 * expr_value; } +Expression *NegationExpression::diff(const Differentiator *d) { + return d->visit(this); +} + Expression *NegationExpression::copy() { return new NegationExpression(right->copy()); } @@ -203,6 +228,10 @@ float DivisionExpression::eval(int arg) { return left_val / right_val; } +Expression *DivisionExpression::diff(const Differentiator *d) { + return d->visit(this); +} + Expression *DivisionExpression::copy() { return new DivisionExpression(left->copy(), right->copy()); } @@ -223,6 +252,10 @@ float MultiplicationExpression::eval(int arg) { return left_val * right_val; } +Expression *MultiplicationExpression::diff(const Differentiator *d) { + return d->visit(this); +} + Expression *MultiplicationExpression::copy() { return new MultiplicationExpression(left->copy(), right->copy()); } @@ -242,6 +275,10 @@ float PowerExpression::eval(int arg) { return std::pow(left_val, right_val); } +Expression *PowerExpression::diff(const Differentiator *d) { + return d->visit(this); +} + Expression *PowerExpression::copy() { return new PowerExpression(left->copy(), right->copy()); } -- cgit v1.2.3