Solving Quadratic Equations C++

I am having issues creating a working stringstream and gettingthe correct outputs for when there is no x intercept and when theroots are complex.

• Modular Programming, • Implementing Value-returning Functions,• and Implementing Void Functions

Generating a String Representation of a Quadratic Equation

Your program will have a value-returning function that returns astring rep-

resentation of a quadratic equation in standard form. Togenerate a string

representation of the equation, a stringstream object can beused. A string

stream object is similar to the iostream cout object. However,it does not

output to the monitor but to a string. Suppose a stringstreamvariable ss is

declared for a string stream. You can then use ss just as youwould use cout.

To retrieve the string stored in ss, ss.str() is used. To usestring stream, you

must use the sstream preprocessor include directive. Theinsertion operator

≪ can be used with a string stream object just as it is usedwith cout.

1. When inserting the quadratic term in the string stream, ifits coefficient

is 1, do not insert the coefficient; insert the term as xˆ2. Ifits coefficient

is -1, insert the term as -xˆ2. For any other coefficient a,insert the

term as axˆ2, where the positive sign is not inserted when a ispositive.

2. When inserting the linear term, if its coefficient is 0, donot insert the

term. If its coefficient is -1, insert the term as – x. If itscoefficient is

1, insert the term as + x. For any other coefficient b, insertthe term

as ± |b|x, where |b|, the absolute value of b, is inserted alongwith its

sign.

3. Finally, insert the constant term, ±|c|, along with its signonly when

it is non-zero.

For example when a = −3, b = 0 and c = 7 the string “-3xˆ2 + 7 =0”

would be returned and when the parameters for a quadraticequation are

a = 3, b = −4.2 and c = 0,“3xˆ2 – 4.2x = 0” would bereturned.

/** * Gives a string representation of a quadratic equaition *in standard form.

* @param qCoef the coefficient of the quadratic term.

* @param linCoef the coefficient of the linear term

* @param cTerm the constant term

* @return a string representing a quadratic equation in

* standard form.

*/ string quadToString(double qCoef, double linCoef, doublecTerm)

1. When the solution is real (not complex) and the irrationalpart of the solution is 0, the equation has only one root,rationalPart. The equation has only one x-intercept whosex-coordinate is rationalPart.

2. When the solutions are real and the irrational part of thesolution is positive, the equation has two real roots, rationalPart+ irrationalPart and rationalPart−irrationalPart. 3. When thesolutions are complex, the roots of the equation are rationalPart +irrationalParti and rationalPart−irrationalParti, whererationalPart should be displayed only when it is non-zero. Also,the equation has no x-intercepts.

To solve the quadratic equation, you will define two additionalsub-functions between the using directive and the mainfunctions:

/** * Computes the discriminant of a quadratic equation with

* the specified parameters. * @param qCoef the coefficient ofthe quadratic term.

* @param linCoef the coefficient of the linear term

* @param cTerm the constant term

* @return the discriminant of a quadratic equation

*/ double discriminant(double qCoef, double linCoef, doublecTerm)

/** * Computes the rational and irrational parts of thesolutions

* of a quadratic equation with the specified parameters

* @param qCoef the coefficient of the quadratic term.

* @param linCoef the coefficient of the linear term

* @param cTerm the constant term

* @param rat the rational part of the solution

* @param irrat the irrational part of the solution

* @param cmplx indicates whether or not the roots arecomplex;

* true when the roots are complex and false if they arereal.

*/ void solve(double qCoef, double linCoef, double cTerm,double& rat, double& irrat, bool& cmplx)

Write a C++ program call QuadraticSolver that prompts the userfor the coefficient of the quadratic term, the coefficient of thelinear term, and the constant term of a quadratic equation. Theprogram then invokes the quadToString function with the relevantarguments to display the quadratic equation and determines itsdiscriminant, roots, axis of symmetry, vertex, x-intercepts andy-intercept, invoking the appropriate sub-functions, whereapplicable. It also determines whether the parabola is concaveupward or downward. A parabola is concave upward if the coefficientof its quadratic term is positive and concave downward when thecoefficient of the quadratic term is negative.

Write the program incrementally. Write a preliminary version ofthe program so that it prints a message indicating that theequation is not quadratic if the input for the quadratic coefficientis 0 and calls the quadToString function with the relevantarguments to print the quadratic equation in standard form when anon-zero coefficient is entered for the quadratic term. You can thendefine the discriminant and solve sub-functions and add code tocompute the roots and all the properties of the equation, callingthe appropriate sub-functions where applicable. You may also wantto incrementally add the code for solving the equation: First, thecode to solve an equation whose irrational part is 0, second, thecode to solve the equation when it has two real roots and, finally,the code to solve the equation when its roots are complex. Typicalsample runs of the program should appear as shown below:

Listing 1: Sample Run 1 Enter the coefficient of the quadraticterm -> 1 2 Enter the coefficient of the linear term -> -6 3Enter the constant term -> 9 4 5 For the quadratic equation x^2- 6x + 9 = 0: 6 7 Discriminant: 0.000 8 Axis of Symmetry: x = 3.0009 Vertex: (3.000, 0.000) 10 y-intercept: (0.000, 9.000) 11x-intercept: (3.000, 0.000) 12 Shape: Concave upward 13 Root: x ={3.00000}

Listing 2: Sample Run

1 Enter the coefficient of the quadratic term -> -4

2 Enter the coefficient of the linear term -> 0

3 Enter the constant term -> 64

4

5 For the quadratic equation -4x^2 + 64 = 0:

6

7 Discriminant: 1024.000

8 Axis of Symmetry: x = 0.000

9 Vertex: (0.00000, 64.000)

10 y-intercept: (0.00000, 64.000)

11 x-intercepts: (4.000, 0.000) and (-4.000, 0.000)

12 Shape: Concave downward

13 Roots: x = {-4.000, 4.000}

Listing 3: Sample Run

1 Enter the coefficient of the quadratic term -> 3

2 Enter the coefficient of the linear term -> 45

3 Enter the constant term -> 0

4

5 For the quadratic equation 3x^2 + 45x = 0:

6

7 Discriminant: 2025.00000

8 Axis of Symmetry: x = -7.500

9 Vertex: (-7.500, -168.750)

10 y-intercept: (0.000, 0.000)

11 x-intercepts: (-15.000, 0.000) and (0.000, 0.000)

12 Shape: Concave upward 13 Roots: x = {0.000, -15.000}

Listing 4: Sample Run

1 Enter the coefficient of the quadratic term -> 0

2 Enter the coefficient of the linear term -> 9

3 Enter the constant term -> 2.5

4

5 ERROR: The quadratic term must be nonzero.

Listing 5: Sample Run

1 Enter the coefficient of the quadratic term -> 12

2 Enter the coefficient of the linear term -> -7

3 Enter the constant term -> -12

4

5 For the quadratic equation 12x^2 – 7x – 12 = 0:

6

7 Discriminant: 625.000

8 Axis of Symmetry: x = 0.292

9 Vertex: (0.292, -13.021)

10 y-intercept: (0.000, -12.000)

11 x-intercepts: (-0.750, 0.000) and (1.333, 0.000)

12 Shape: Concave upward

13 Roots: x = {1.333, -0.750}

Listing 6: Sample Run 1 Enter the coefficient of the quadraticterm -> 9 2 Enter the coefficient of the linear term -> 0 3Enter the constant term -> 16 4 5 For the quadratic equation9x^2 + 16 = 0: 6 7 Discriminant: -576.000 8 Axis of Symmetry: x =-0.000 9 Vertex: (-0.000, 16.000) 10 y-intercept: (0.000, 16.000)11 x-intercepts: none 12 Shape: Concave upward 13 Roots: x ={1.333i, -1.333i}

Listing 7: Sample Run

1 Enter the coefficient of the quadratic term -> 4

2 Enter the coefficient of the linear term -> -12

3 Enter the constant term -> 25

4

5 For the quadratic equation 4x^2 – 12x + 25 = 0:

6

7 Discriminant: -256.000

8 Axis of Symmetry: x = 1.500

9 Vertex: (1.500, 16.000)

10 y-intercept: (0.000, 25.000)

11 x-intercepts: none

12 Shape: Concave upward 13 Roots: x = {1.500+2.000i,1.500-2.000i}