#include <iostream>
#include <cassert>
#include <cmath>

bool solve_quadratic(double a, double b, double c, double& x1, double& x2)
{
    assert(a != 0);

    const double delta = b * b - 4 * a * c;
    if (delta < 0) {
        return false;
    }
    if (delta == 0) {
        x1 = -b / (2 * a);
        x2 = x1;
    } else {
        const double sqrt_delta = sqrt(delta);
        x1 = (-b + sqrt_delta) / (2 * a);
        x2 = (-b - sqrt_delta) / (2 * a);
    }
    return true;
}

void output_result_of_quadratic(double a, double b, double c)
{
    double x1;
    double x2;

    std::cout << "For : " << a << " x^2 + " << b << " x + " << c << " = 0" << std::endl;
    if (solve_quadratic(a, b, c, x1, x2)) {
        if (x1 == x2) {
            std::cout << "The only solution is x: " << x1 << std::endl;
        } else {
            std::cout << "The solutions are : "<< x1 << " and " << x2 << std::endl;
        }
    } else {
        std::cout << "No real solution." << std::endl;
    }
}

int main()
{
    output_result_of_quadratic(1, -2, 1); // 1
    output_result_of_quadratic(1, 0, 1);  // complex
    output_result_of_quadratic(1, -5, 6);  // 2, 3

    return 0;
}
