Website Summary Files Commits Branches @commit @diff @stats
path: root / src / Models
diff options
context:
space:
mode:
Commitac9e433244625ada36978276258ae85616bacd7e (patch)
Author
 Syndamia <kamen@syndamia.com>
2022-05-28 16:29:05 +0300
Committer
 Syndamia <kamen@syndamia.com>
2022-05-28 16:29:05 +0300
Files65032a4399eb674409eec7f85db5d7f0dfc41851 /src/Models
FMI-OOP-P2_Tables-ac9e433244625ada36978276258ae85616bacd7e.tar
FMI-OOP-P2_Tables-ac9e433244625ada36978276258ae85616bacd7e.tar.gz
FMI-OOP-P2_Tables-ac9e433244625ada36978276258ae85616bacd7e.zip
Parent02cb3becf3fc66e217e907b8a1c79fde3f41d153 (diff)
Autocommit at 28.05.2022 @ 16:29
3 files changed, 18 insertions, 2 deletions
-rw-r--r--src/Models/CellDouble.cpp4
-rw-r--r--src/Models/CellDouble.h2
-rw-r--r--src/Models/CellFormula.cpp14
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;
}
}