-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOperationSolver.cpp
More file actions
95 lines (82 loc) · 2.34 KB
/
Copy pathOperationSolver.cpp
File metadata and controls
95 lines (82 loc) · 2.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include "OperationSolver.h"
#include <math.h>
#include <stdlib.h>
#include <iostream>
double CalculateGreatestCommonDivisor(double a, double b)
{
if (a < b) {
return CalculateGreatestCommonDivisor(b, a);
}
if (fabs(b) < 0.001) {
return a;
} else {
return (CalculateGreatestCommonDivisor(b, a - floor(a / b) * b));
}
}
double CalculateLeastCommonDenominator(double a, double b) {
return (a * b) / CalculateGreatestCommonDivisor(a, b);
}
double OperationSolver::SolveSingleParameterFormula(FormulaItem* formula, double input) {
if (formula->FormulaType == FormulaType::Function) {
return SolveSingleParameterFunction(formula->SelectedFunction, input);
}
if(formula->FormulaType == FormulaType::Operator) {
return INFINITY;
}
}
double OperationSolver::SolveDoubleParameterFormula(FormulaItem* formula, double leftInput, double rightInput) {
if (formula->FormulaType == FormulaType::Function) {
return SolveDoubleParameterFunction(formula->SelectedFunction, leftInput, rightInput);
}
if (formula->FormulaType == FormulaType::Operator) {
return SolveDoubleParameterOperation(formula->SelectedOperator, leftInput, rightInput);
}
}
double OperationSolver::SolveSingleParameterFunction(FunctionType function, double input) {
switch (function)
{
case Negation:
return -input;
case Sine:
return sin(input);
case Cosine:
return cos(input);
case Tangent:
return tan(input);
case Logarithm:
return log(input);
case Exponential:
return exp(input);
case SquareRoot:
return sqrt(input);
}
return INFINITY;
}
double OperationSolver::SolveDoubleParameterFunction(FunctionType function, double leftInput, double rightInput) {
switch (function)
{
case Minimum:
return fmin(leftInput, rightInput);
case Maximum:
return fmax(leftInput, rightInput);
case GreatestCommonDivisor:
return CalculateGreatestCommonDivisor(leftInput, rightInput);
case LeastCommonDenominator:
return CalculateLeastCommonDenominator(leftInput, rightInput);
}
return INFINITY;
}
double OperationSolver::SolveDoubleParameterOperation(OperatorType op, double leftInput, double rightInput) {
switch (op)
{
case Addition:
return leftInput + rightInput;
case Substraction:
return leftInput - rightInput;
case Multiplication:
return leftInput * rightInput;
case Division:
return leftInput / rightInput;
}
return INFINITY;
}