#include "library.h" // improved int num_sols_quadratic(double A, double B, double C) { const double determinant = B*B - 4*A*C; if (determinant > 0) return 2; if (determinant == 0) return 1; if (determinant < 0) return 0; } double solve_quadratic_number(double A, double B, double C, int which) { const double determinant = B*B - 4*A*C; if (which == 1) return (-B - sqrt(determinant)) / (2*A); else return (-B + sqrt(determinant)) / (2*A); } double eval_quadratic(double A, double B, double C, double x) { return A*x*x + B*x + C; } double answer_to(string question) { print(question); return read_double(); } double difference(double x, double y) { if (x < y) return y - x; else return x - y; } bool close_enough(double a, double b) { if (difference(a, b) < 0.0000000001) return true; else return false; } void evaluate_solution(double x, double y) { print("solution is "); print(x); print(" giving "); print(y); if (y == 0.0) print(" perfectly correct\n"); else if (close_enough(y, 0.0)) print(" close enough\n"); else print(" WRONG\n"); } void test_quadratic(double A, double B, double C, int which) { const double x = solve_quadratic_number(A, B, C, which); double y = eval_quadratic(A, B, C, x); evaluate_solution(x, y); } void test_it() { const double A = answer_to("A = "); const double B = answer_to("B = "); const double C = answer_to("C = "); const int num_sols = num_sols_quadratic(A, B, C); if (num_sols == 0) print("no solutions\n"); else if (num_sols == 1) test_quadratic(A, B, C, 1); else { test_quadratic(A, B, C, 1); test_quadratic(A, B, C, 1); } } void main() { test_it(); test_it(); test_it(); }