Page by Perpetual PC's

A learning tool

Back to Link page | Back to javquad page

A C++ Quadratic equation solver

page last modified    2006-03-19

This program will solve quadratic equations.
You can copy and paste it into an editor, save it and compile from there.I have compiled and run this on a RedHat GNU/Linux machine using kernel 2.4.20-6 and it works. If you are using another system ( windows or mac you may need to change the coding ). To compile:    name it   quadsolv.cpp    then type   < g++ -o quadsolv quadsolv.cpp > (not the < or the >) then hit enter. When your command prompt returns type < ./quadsolv > and hit enter then follow the directions.

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

Thanks to "Shahi" for pointing out some errors in my coding. I have fixed them.

update 2005-03-24: added math.h. The program would not compile on Fedora core 3 without adding this.
Compiled ok on my machine after adding math.h again ( gcc -dumpversion 3.4.2 ; Fedora core 3 )

uname -a:   Linux illiac.perpetualpc.net 2.6.9-1.667 #1 Tue Nov 2 14:41:25 EST 2004 i686 i686 i386 GNU/Linux

Update 2012-11-17: This program compiles and runs on Ubuntu 11.10 (oneiric):
3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:50:42 UTC 2011 i686 i686 i386 GNU/Linux
//copy the part below this

 /*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 equasion 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;
 }



//copy the part above this


Back to Link page | Back to javquad page

Page by: Perpetual PC's
Copyright (c) 2002 David Tarsi. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
A copy of the license is included in the section entitled "GNU GPL".