diff options
Autocommit at 28.05.2022 @ 16:29
3 files changed, 18 insertions, 2 deletions
| -rw-r--r-- | src/Models/CellDouble.cpp | 4 | ||||
| -rw-r--r-- | src/Models/CellDouble.h | 2 | ||||
| -rw-r--r-- | src/Models/CellFormula.cpp | 14 |
diff --git a/src/Models/CellDouble.cpp b/src/Models/CellDouble.cpp index 5c972f2..4673f9f 100644 --- a/src/Models/CellDouble.cpp +++ b/src/Models/CellDouble.cpp @@ -5,6 +5,10 @@ CellDouble::CellDouble(int val) { value = val; } +CellDouble::CellDouble(const String& str) { + value = atof(str.get_cstr()); +} + double CellDouble::getValue() { return value; } diff --git a/src/Models/CellDouble.h b/src/Models/CellDouble.h index 4b6525c..01500f8 100644 --- a/src/Models/CellDouble.h +++ b/src/Models/CellDouble.h @@ -9,7 +9,7 @@ class CellDouble : public Cell<double> { public: CellDouble() = default; CellDouble(int val); - CellDouble(String str); + CellDouble(const String& str); double getValue() override; String getValueForPrint() override; diff --git a/src/Models/CellFormula.cpp b/src/Models/CellFormula.cpp index 2c28d4b..7f45c2e 100644 --- a/src/Models/CellFormula.cpp +++ b/src/Models/CellFormula.cpp @@ -1,9 +1,21 @@ #include "CellFormula.h" +#include "CellDouble.h" #include <cstring> double CellFormula::calculate(unsigned index) { + double lval = CellDouble(formula[index].left->getValue()).getValue(); + switch(formula[index].right) { - case none: return formula[index].left; + plus: return lval + calculate(index++); + minus: return lval - calculate(index++); + mult: return lval * calculate(index++); + div: return lval / calculate(index++); + pow: + double power = calculate(index++); + for (unsigned i = 0; i < power; i++) + lval *= lval; + none: + default: return lval; } } |
