C++ Program to Solve the Quadratic Equation

Quadratic Formula and Quadratic Equation

This program will solve quadratic equations. It accepts coefficients of a quadratic equation from the user i.e. a, b and c and displays the roots.

To compile the program name it quadratic_solver.cpp then type

g++ -o quadratic_solver quadratic_solver.cpp

You may need to use math.h like this: #include if you are using  C++ compiler software on Windows. (I tried it without the <math.h>and got an “undeclared identifier” error)

What is Quadratic Equation?

The Quadratic equation is the equation of the form as below:

ax2 + bx +c = 0

Where x represents unknown and a, b and c are coefficients, it’s roots is given by following the formula.

Quadratic Equation – C++ Implementation

Here,

The term b2-4ac is known as the discriminant of a quadratic equation. The discriminant tells the nature of the roots.

  1. If discriminant is greater than 0, the roots are real and different.
  2. If discriminant is equal to 0, the roots are real and equal.
  3. If discriminant is less than 0, the roots are complex and different.

C++ Program to Solve Quadratic Equation

/*
program to find solution to quadratic equation in the standard form ax^+bx+c=0.
Author David Tarsi. The logic portion of this program was developed from instruction.
The coding is by the author. Any questions or comments welcome
at dtarsi@premier1.net
*/
#include <iostream>
#include <math.h>

using namespace std;

void one()
{
    float a = 0.0; //here we declare the variables and use float because we
    float b = 0.0; //are dealing with square roots
    float c = 0.0;
    float x1 = 0.0;
    float x2 = 0.0;
    float x3 = 0.0;
    float x4 = 0.0;

    //this section gets user input and displays message
    cout << "Enter the coefficients a , b , c for equation in the form ax^ + bx + c = 0:\n";
    cout << "Enter value for a:\n";
    cin >> a;
    cout << "Enter value for b:\n";
    cin >> b;
    cout << "Enter value for c:\n";
    cin >> c;

    //are all the coefficients 0? if so both roots are 0
    if (a == 0 && b == 0 && c == 0) {
        x1 = 0;
        x2 = 0;
        cout << "The roots are:"
                "\n"
             << "x1 = " << x1 << " , "
             << "x2 = " << x2 << "\n";
    }

    //is c the only non-zero number? if so tell the user
    if (a == 0 && b == 0 && c != 0) {
        c = c;
        cout << "There are no roots"
                "\n"
             << "c = " << c << "\n";
    }
    //is a zero? if so solve the resulting linear equations and notify user
    if (a == 0 && b != 0 && c != 0) {
        cout << "The values entered do not make a quadratic expression"
                "\n"
             << "x = " << -c / b << "\n";
    }

    //if b is zero and c is zero tell user
    if (a == 0 && b != 0 && c == 0) {
        x1 = 0;
        x2 = 0;
        cout << "The roots are:"
                "\n"
             << "x1 = " << x1 << " , "
             << "x2 = " << x2 << "\n";
    }
    //if b and c are equal to zero then ax^=0 and since a cannot be zero without x being
    // zero also let user know
    if (a != 0 && b == 0 && c == 0) {
        x1 = 0;
        x2 = 0;
        cout << "The values entered result in ax^= 0; so both roots are 0"
                "\n"
             << "x1 = " << x1 << " , "
             << "x2 = " << x2 << "\n";
    }
    //factor out x from ax^+bx=0 and either x = 0 or ax + b =0
    //then solve the linear equation
    if (a != 0 && b != 0 && c == 0) {
        x1 = 0;
        x2 = -b / a;
        cout << "The roots are:"
                "\n"
             << "x1 = " << x1 << " , "
             << "x2 = " << x2 << "\n";
    }

    //now we get to use the square root function and let the user
    //know they have some imaginary numbers to deal with
    if (a < 0 && b == 0 && c < 0) {

        x1 = -b / (2 * a);
        x4 = (b * b) - (4 * a * c);
        x4 = -x4;
        x2 = sqrt(x4) / (2 * a);
        x3 = -sqrt(x4) / (2 * a);

        cout << "The roots are not real numbers:"
                "\n"

             << "x1 =" << x1 << " + " << x2 << " * i "
             << "\n"
             << "x2 =" << x1 << " + " << x3 << " * i "
             << "\n";
    }

    if (a > 0 && b == 0 && c > 0) {

        x1 = -b / (2 * a);
        x4 = (b * b) - (4 * a * c);
        x4 = -x4;
        x2 = sqrt(x4) / (2 * a);
        x3 = -sqrt(x4) / (2 * a);

        cout << "The roots are not real numbers:"
                "\n"

             << "x1 =" << x1 << " + " << x2 << " * i "
             << "\n"
             << "x2 =" << x1 << " + " << x3 << " * i "
             << "\n";
    }
    //now a and c are opposite signs so the answer will be real

    if (a > 0 && b == 0 && c < 0) {

        x1 = (-b + (sqrt(pow(b, 2) - (4 * a * c)))) / (2 * a);
        x2 = (-b - (sqrt(pow(b, 2) - (4 * a * c)))) / (2 * a);

        cout << "The roots are:"
                "\n"
             << "x1 =  " << x1 << " , "
             << "x2 = " << x2 << "\n";
    }
    if (a < 0 && b == 0 && c > 0) {

        x1 = (-b + (sqrt(pow(b, 2) - (4 * a * c)))) / (2 * a);
        x2 = (-b - (sqrt(pow(b, 2) - (4 * a * c)))) / (2 * a);

        cout << "The roots are:"
                "\n"
             << "x1 =  " << x1 << " , "
             << "x2 = " << x2 << "\n";
    }

    //ok now if we end up not having to take the square root of a neg
    // do the math
    if (a != 0 && b != 0 && c != 0 && (4 * a * c) <= pow(b, 2)) {

        x1 = (-b + (sqrt(pow(b, 2) - (4 * a * c)))) / (2 * a);
        x2 = (-b - (sqrt(pow(b, 2) - (4 * a * c)))) / (2 * a);

        cout << "The roots are:"
                "\n"
             << "x1 = " << x1 << " , "
             << "x2 = " << x2 << "\n";
    }

    //here we have to deal with non x intercepts ie: sqrt(-1)
    // alter the formula slightly to give correct output and
    // let the user know
    if (a != 0 && b != 0 && c != 0 && (4 * a * c) > pow(b, 2)) {

        x1 = -b / (2 * a);
        x4 = (b * b) - (4 * a * c);
        x4 = -x4;
        x2 = sqrt(x4) / (2 * a);
        x3 = -sqrt(x4) / (2 * a);

        cout << "The roots are not real numbers"
                "\n"

             << "x1 =" << x1 << " + " << x2 << " * i "
             << "\n"
             << "x2 =" << x1 << " + " << x3 << " * i "
             << "\n";
    }
    return;
}

//keep output from vanishing before we can read it.
void two()
{
    char c;
    cout << "Press c and then Enter to continue...."
            "\n";
    cin >> c;
    for (;;) {
        if (c) {
            break;
        }
    }

    cout << "Done"
            "\n";
}

int main()
{
    one();
    two();
    return 0;
}

Output of C++ Program

Compile: $ g++ -o quadratic_solver quadratic_solver.cpp

Run:

$ ./quadratic_solver
Enter the coefficients a , b , c for equation in the form ax^ + bx + c = 0:
Enter value for a:
6
Enter value for b:
4
Enter value for c:
1
The roots are not real numbers
x1 =-0.333333 + 0.235702 * i
x2 =-0.333333 + -0.235702 * i

$ ./quadratic_solver
Enter the coefficients a , b , c for equation in the form ax^ + bx + c = 0:
Enter value for a:
9
Enter value for b:
24
Enter value for c:
2
The roots are:
x1 = -0.0861142 , x2 = -2.58055

M. Saqib: Saqib is Master-level Senior Software Engineer with over 14 years of experience in designing and developing large-scale software and web applications. He has more than eight years experience of leading software development teams. Saqib provides consultancy to develop software systems and web services for Fortune 500 companies. He has hands-on experience in C/C++ Java, JavaScript, PHP and .NET Technologies. Saqib owns and write contents on mycplus.com since 2004.
Related Post