Helllpp!

Nov 13, 2012 at 3:02am
Im in a beginners course of programming for engineers and I am so lost. My teacher doesn't explain properly and doesn't wait for us to understand. Im already a couple assignments behind. Any help and explanation would be greatly appreciated!

One of the assignments is to program this problem
The roots of the quadratic equation (a x squared + b x + c = 0), a not equal to 0 are given by the following formula:
-b +/- sqroot of (b squared - 4 a c) / 2a

In this formula, the term b squared - 4 a c is called the discriminant. if b squared - 4 a c = 0 the the equation has a single (repeated root. if b squared - 54 a c > 0, the equation has two complex roots.

Write a program that prompts the user to input the value of a (the coefficient of x squared) b (the coefficient of x) and c (the constant) and outputs the type of roots of the equation furthermore, if b squared - 4 a c >= 0, the program should output the roots of the quadratic equation.


(Thank you so much in advance! So lost! please explain if possible.)
Nov 13, 2012 at 3:06am
Well, you need to start by doing the bits you do understand. For example, get the values a, b and c from the input. Get as far as you can and post your code for more help.
Nov 13, 2012 at 3:20am
(Im probably dead wrong on this) here goes nothing
#include iostream
int main ( )
cout <<"enter a value"<<endl;
cin>>a>>endl;
cout<<"enter b value"<<endl;
cin>>b>>endl;
cout<<"enter c value"<<endl;
cin>>c>>endl;

(thats what I have so far)
Nov 13, 2012 at 3:26am
You need to declare some variables. For this type of calculation, most of your variables will be of type double. After you declared them (which allocates some storage to hold the value), you can then use cin to get the value.

Function main() needs an opening and closing brace, like this
int main()
{

    // your code
    // goes here

    return 0;
}


I know time is precious, but I think you'd be well advised to go through the tutorial, at least the basics. http://www.cplusplus.com/doc/tutorial/
Last edited on Nov 13, 2012 at 3:30am
Nov 13, 2012 at 3:28am
Knew I was forgetting something

#include iostream
int main ( )
{double a
double b
double c
cout <<"enter a value"<<endl;
cin>>a>>endl;
cout<<"enter b value"<<endl;
cin>>b>>endl;
cout<<"enter c value"<<endl;
cin>>c>>endl;
return 0
}
Last edited on Nov 13, 2012 at 3:30am
Nov 13, 2012 at 3:34am
I always find it useful to compile my program as I add new code. I can see a few errors (trivial ones) with your code, but the compiler will tell you what they are, so you can fix them.
Nov 13, 2012 at 3:36am
Don't forget to use code tags when posting code. Makes it alot easier to read code. When you post or edit a post look to the right of the box and it'll be the <> button.
Nov 13, 2012 at 3:44am
Thank you guys for your help. Im just going to go to school tomorrow and get help from where im at from one of the programming helpers. Thanks again!
Nov 13, 2012 at 7:10pm
So I finished it but it wont run. This is the code I have.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

int main(int argc, char *argv[])
{
    char reply;
    double a;
    double b;
    double c;
    double q1;
    double q2;
    
    do
      {
           cout<<"enter a value:"<<endl;
           cin>>a;
           cout<<"enter b value:"<<endl;
           cin>>b;
           cout<<"enter c value:"<<endl;
           cin>>c;
           
           q1=(-b-sqrt(b*b - 4*a*c)/2/a
           (q2=(-b+sqrt(b*b - 4*a*c)/2/a)
           
           cout<<"The values of x are "<<q1<<"and"<<q2<<endl;         
           cout<<"do you want to find more x values?(Y/N)"<<endl;
           cin>>reply;
      }
  while(reply="y");
    system("PAUSE");
    return EXIT_SUCCESS;
}


It says there is a problem with this part
"cout<<"The values of x are "<<q1<<"and"<<q2<<endl; cout<<"do you want to find more x values?(Y/N)"<<endl;
cin>>reply;"
Nov 13, 2012 at 7:37pm
First, I see you've made good progress since yesterday. Well done.

The compiler message in this case, and quite often in other programs, is due to a problem higher up.

Here it's lines 25 and 26. Neither line ends with a semicolon. That's one of the basics of C and C++. Each statement must end with a semicolon.

When you've done that, you need to re-read the original specification, regarding the "discriminant". In mathematical terms it will indicate whether the roots are real or imaginary.

But purely in the practical sense of writing a computer program, it becomes important too. The issue is, we cannot calculate the square root of a negative number (at least not using ordinary variables). So, before pushing ahead and calculating q1 and q2, it's necessary to test whether (b*b - 4*a*c) is negative. If so, the roots are imaginary. Output a message to that effect. otherwise, you can proceed with the calculation.

Last edited on Nov 13, 2012 at 7:38pm
Nov 13, 2012 at 10:33pm
I wrote this program purely out of personal need, LOL. I had trigonometry, and was not going to do 50 quadratic equations using my brain (that would have taking a least 1.5 hours... :0) so I wrote one.

When the root is imaginary, you should have your program display what ((b^2) - ((4 * a) * c)) equals, that way, the user can construct the simpler equation from it.
Nov 14, 2012 at 1:07am
Oh, and don't use system(). Read here for the reason why not: http://www.cplusplus.com/forum/articles/11153/ There is much better way:
1
2
3
4
5
6
7
8
9
10
11
void PressEnterToContinue()
{
    int c;
    cout << "Press ENTER to continue.";
    fflush(stdout);
    do
    {
        c = getchar();
    }   //end do
    while ((c != '\n') && (c != EOF));
}   //end PressEnterToContinue 

Also, RC so you should #include <complex> . I trust you can derive the rest.
Nov 14, 2012 at 5:41am
@Hotice
I don't do it that way. I just use a function from conio.h:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <conio.h>
#include <windows.h>
#include <iostream>

using namespace std;

void cl()
{
    Sleep(5);
    while(kbhit()) getch();
}

void wait()
{
    cout<< endl<< endl<< endl<< endl;
    cout<< "Press any key to continue..."<< endl;
    cl(); //function i wrote to clear the getch stream
    while(!kbhit()) //while no buttons have been pressed
    {
    }
    cl(); //clear the stream again
}


Easy peasy. :)
Nov 14, 2012 at 10:12am
@IWishIKnew These lines are resource-hungry.
1
2
3
    while(!kbhit()) //while no buttons have been pressed
    {
    }

This empty loop is busily consuming CPU cycles during the time that the program is seemingly doing "nothing". In special cases there may be a use for this, but as a general-purpose function it's something to be avoided.

Use task manager or process explorer on Windows to see the resource usage of a process. http://technet.microsoft.com/en-gb/sysinternals/bb896653
Nov 14, 2012 at 9:24pm
Interesting. I will look into that
Nov 15, 2012 at 11:05am
I learned something here, from both of you. I hope I didn't confuse the living heck out of the original poster with my notation. (I can't help it sometimes...)
Nov 15, 2012 at 11:24am
Regarding the problem I mentioned earlier, with this code:
1
2
3
    while(!kbhit()) //while no buttons have been pressed
    {
    }


Here's a quick solution. Add a Sleep() statement inside the loop. This may make the code ever so slightly less responsive (but I don't think you'd notice), and allow the operating system to make use of the time so released to handle background tasks. Try changing the length of the sleep too. Again, check with Process Explorer or task manager to see the effect.
1
2
3
4
    while(!kbhit()) //while no buttons have been pressed
    {
        Sleep(100);    // Reduces CPU usage
    }


Apologies to Trackett7493, I realise this is very much off topic. Please feel free to step back in, you will be welcome.
Last edited on Nov 15, 2012 at 11:27am
Topic archived. No new replies allowed.