diff --git a/cs658/final/util/Solver.cc b/cs658/final/util/Solver.cc index b68ccd6..07ccc32 100644 --- a/cs658/final/util/Solver.cc +++ b/cs658/final/util/Solver.cc @@ -1,17 +1,43 @@ #include "Solver.h" +#include Solver::Solver(double a, double b, double c, double d, double e) { - m_coef[0] = a; - m_coef[1] = b; - m_coef[2] = c; - m_coef[3] = d; - m_coef[4] = e; + this->a = a; + this->b = b; + this->c = c; + this->d = d; + this->e = e; } +/* solve a quadratic equation */ Solver::Result QuadraticSolver::solve() { + Result res; + double discriminant = b * b - 4 * a * c; + if (discriminant < 0.0) + { + res.numResults = 0; + } + else + { + double sqrt_discriminant = sqrt(discriminant); + double two_a = 2.0 * a; + if (sqrt_discriminant = 0.0) + { + res.numResults = 1; + res.results[0] = (-b) / two_a; + } + else + { + res.numResults = 2; + res.results[0] = (-b - sqrt_discriminant) / two_a; + res.results[1] = (-b + sqrt_discriminant) / two_a; + } + } + + return res; } Solver::Result CubicSolver::solve() diff --git a/cs658/final/util/Solver.h b/cs658/final/util/Solver.h index a62f5e5..916901c 100644 --- a/cs658/final/util/Solver.h +++ b/cs658/final/util/Solver.h @@ -18,8 +18,8 @@ class Solver double e = 0.0); virtual Result solve() = 0; - private: - double m_coef[5]; + protected: + double a, b, c, d, e; }; class QuadraticSolver : public Solver