C++ and solving quadratic Equations

In summary, I tried to translate the very basic "solve quadratic equations" program I made a while back in Python to C++, but I'm having some difficulty. I am having trouble with the declaration and the difficulty to use exponential with variables. Any help is greatly appreciated.
  • #1
Mattara
348
1
Today, I tried to translate the very basic "solve quadratic equations" program I made a while back in Python to C++.

#Solving quadratic equations
import math
print
print "Please enter information in accordance with ax^2 + bx + c = 0"
a = input("What is a?")
b = input("What is b?")
c = input("what is c?")

b = float(b) / float(a)
c = float(c) / float(a)

before_the_square = 0.5 * b * -1
the_square = (0.5 * b)**2 - c
if the_square < 0:
print "Imaginary" #fail-safe for imaginary numbers.
else:
value_of_square = math.sqrt(the_square)
x1 = before_the_square + value_of_square
x2 = before_the_square - value_of_square
print
print "x(1) is:"
print x1
print
print "x(2) is:"
print x2


I tried something like this in C++:

// Solving quadratic equations

#include <iostream>
#include <string>
#include <math.h>
using namespace std;

main ()
{
float a, b, c, before_sqrt, inside_sqrt, after_sqrt, x1, x2;
cout << "Solving quadratic equation" << endl << endl;
cout << "ax^2 + bx + c = 0";
cin >> a, b, c;

b = b / a;
c = c / a;

before_sqrt = (b/2)*-1;
inside_sqrt = pow(0.5b,2) - c;
if (inside_sqrt < 0)
{
cout << "Error";
}
else
after_sqrt = sqrt (inside_sqrt);

x1 = before_sqrt + after_sqrt;
x2 = before_sqrt - after_sqrt;

cout "x1 =" << endl << endl << x1;
cout "x2 =" << endl << endl << x2;
system("pause");
return 0;
}

The indent is wrong due to copy/pasting and I have not removed the scaffolding.

I'm pretty sure I made some mistakes with the declaration in the beginning as well as the difficulty to use exponential with variables (red), altohugh I'm not sure how to solve it. Any help is greatly appreciated.

Thank you for your time :smile:
 
Technology news on Phys.org
  • #2
whhat is "0.5b" suppose to do? What other errors do you get?
 
  • #3
It is suppose to do 0.5*b.

Oh, by writing 0.5*b, that particular error goes away. I've alos missed to add int to main()

The only error messages I am getting now is:

Expected ";" before string constant

on line 30 and 31.

Edit: as it turns out I forgot the ">>" in "
cout >> "x1 =" << endl << endl << x1;"

problem solved.
 
Last edited:
  • #4
This is the corrected way of writing the program...
I've not really checked the logic, but this is the corrected way of writing what you want to.
Try and avoid spaces.


#include<iostream.h>
#include<conio.h> //I've put this for the clrscr() function.
#include<string.h>
#include<math.h>

int main () {

clrscr(); //It makes sure the screen becomes clear when you run the program again.

float a, b, c, before_sqrt, inside_sqrt, after_sqrt, x1, x2;
cout<<"Solving quadratic equation";
cout<<"ax^2 + bx + c = 0";
cin>>a>>b>>c; //You have to take the parameters like this

b=b/a;
c=c/a;

before_sqrt = (b/2)*(-1);
inside_sqrt = pow(0.5*b,2)-c;

if (inside_sqrt < 0)
cout<<"Error";
else
after_sqrt=sqrt (inside_sqrt);

x1=before_sqrt+after_sqrt;
x2=before_sqrt-after_sqrt;

cout<<"x1 ="<<endl<<endl<<x1;
cout<<"x2 ="<<endl<<endl<<x2;

return 0; //You need int main() for this statement

}
 
  • #5
Pratibha_S said:
Try and avoid spaces.

Sorry, but that is bad advice. Sure, you can't add spaces just anywhere you want, but things should be spaced out to make it more readable. Squishing everything together like you did is not good.

Although the unportable system("pause") does hint he's using Windows, I suggest not even using that. Why write unportable programs when it's no harder to write it portably (in this case)? No need to clear the screen, and something like cin.get() at the end should work as well as the pause. Adding Windows conio stuff makes it more unportable and more non-standard.

Matara, this line still isn't quite right:

cout >> "x1 =" << endl << endl << x1;

It should be:

cout << "x1 =" << endl << endl << x1;

All the operators should be <<, not >>. They go the other way for input. For example:

Code:
char c;
cin >> c;

That's formatting it like you seemed to want to, but I'm not sure why you want two newlines between "x1 = " and the variable value. Right now, if x1 is 42, you'll end up printing:

x1 =

42

Most people would stick to:

cout << "x1 = " << x1 << endl;

But that's up to you.

As Pratibha_S pointed out, this is wrong:

cin >> a, b, c;

And should be:

cin >> a >> b >> c;

When you enter them, they should be separated by spaces. Might not be a bad idea to point that out in a prompt.

And I guess you know about the missing "int " in front of your main function.

Lastly, when you post code, to preserve the rather important indentation, put your code between CODE tags. Put [ CODE] in front and [ /CODE] at the end, removing the spaces I put in after the opening square brackets.
 
  • #6
Some additional comments...

1. The way you did input in your python version is better than how you did it in your C++ version.

python version:
Code:
print "Please enter information in accordance with ax^2 + bx + c = 0"
a = input("What is a?")
b = input("What is b?")
c = input("what is c?")

C++ version:
Code:
cout << "ax^2 + bx + c = 0";
cin >> a, b, c;
Aside from the errors already noted, the python version is superior, from the perspective of a naive user of your program, because each variable has its own prompt. The prompt in the C++ version, "ax^2 + bx + c = 0" might be decipherable for you, the author of the program, but it doesn't offer much information for someone who isn't as familiar with your program.

2. You are calculating the roots of the quadratic in a nonintuitive way.
Code:
b = b / a;
c = c / a;

before_sqrt = (b/2)*-1;
inside_sqrt = pow(0.5b,2) - c;
if (inside_sqrt < 0)
{
   cout << "Error";
}
else
after_sqrt = sqrt (inside_sqrt);

x1 = before_sqrt + after_sqrt;
x2 = before_sqrt - after_sqrt;
If someone enters 0 for a, you are going to have a divide-by-zero error right off the bat.
Instead of resetting b and c as you are doing, why not leave them as they are?

The thing inside the square root is called the discriminant. It's useful to calculate it before taking its square root.
Code:
disc = b * b - 4 * a * c;
Then your code can check to see if disc is less than zero and handle complex roots or not. Notice that I used b * b instead of the pow() function.

Assuming the discriminant was nonnegative, the two roots are:
Code:
x1 = 1/(2a)*(-b + sqrt(disc));
x2 = 1/(2a)*(-b - sqrt(disc));

One other thing - your variables are of type float. For better precision I would use double.
 

1. What is C++ and how does it relate to solving quadratic equations?

C++ is a high-level programming language used for creating software and applications. It is commonly used in scientific and mathematical applications, making it useful for solving quadratic equations. C++ provides a set of tools and functions that allow for efficient and accurate calculations of quadratic equations.

2. How do you write a C++ program to solve a quadratic equation?

To write a C++ program to solve a quadratic equation, you would need to use the quadratic formula and include the necessary input and output statements. You would also need to declare variables to store the coefficients and use the appropriate mathematical operators to perform the calculations.

3. What are the benefits of using C++ to solve quadratic equations?

C++ provides a fast and efficient way to solve quadratic equations, making it a popular choice for scientists and mathematicians. It also allows for the use of complex data types and user-defined functions, making it easier to write and organize complex equations. Additionally, C++ is a widely used language, meaning there is a large community of support and resources available.

4. Can C++ solve all types of quadratic equations?

Yes, C++ can solve all types of quadratic equations, including those with complex solutions. However, the accuracy of the solutions may depend on the precision of the data types used in the program. It is important to choose the appropriate data types and use proper error-handling techniques to ensure accurate results.

5. Are there any limitations to using C++ for solving quadratic equations?

One limitation of using C++ to solve quadratic equations is that it requires a basic understanding of programming concepts and syntax. This may be a barrier for those without prior programming experience. Additionally, C++ may not be the most efficient language for solving extremely large or complex equations, as it may require more time and resources to execute.

Similar threads

  • Programming and Computer Science
Replies
5
Views
2K
  • Programming and Computer Science
3
Replies
89
Views
4K
  • Engineering and Comp Sci Homework Help
Replies
2
Views
2K
  • Programming and Computer Science
Replies
2
Views
3K
  • Programming and Computer Science
Replies
1
Views
3K
  • Programming and Computer Science
Replies
29
Views
9K
  • Programming and Computer Science
Replies
7
Views
1K
  • Programming and Computer Science
Replies
9
Views
8K
  • Engineering and Comp Sci Homework Help
Replies
5
Views
2K
  • STEM Educators and Teaching
2
Replies
36
Views
3K
Back
Top