-
why doesn't this work?
this is my 1st attempt with pointers and I can't get this program to tell if there not real or to produce roots. Any help would be great... cuz I know its not 0.000 0.000 thanks
Code:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <cmath>
using namespace std;
void readabc(double *a, double *b, double *c, char *real);
void quadroots(double *a,double *b,double *c,double *root1,double *root2, char *real);
int main()
{
double a, b, c, root1, root2;
char real;
readabc( &a, &b, &c, &real);
quadroots(&a, &b, &c, &root1, &root2, &real);
real = b*b-4*a*c<0;
real==1;
root1=(-b+sqrt(b*b-4*a*c)/(2*a));
root2=(-b-sqrt(b*b-4*a*c)/(2*a));
return 0;
}
void readabc(double *a, double *b, double *c,char *real)
{
cout << "Enter a,b,c for a quad: " << endl;
cin >> *a >> *b >> *c;
return;
}
void quadroots(double *a,double *b,double *c,double *root1,double *root2, char *real)
{
if (!*real)
{
printf("roots are not real\n");
}
else
{
printf ("roots are %lf %lf\n", *root1, *root2);
}//check for real roots and calculate root1 and root2
}
-
on line 15 you define 'char real;'
line 35: 'if (!*real)'
breakdown, real is a pointer to line 15.
*real, returns the value pointed to by real.
! <value>
if that value is 0, it will be true, else 1-255 will return false.
You never set the value of real, only the pointer to it.
Line 19 should produce a compiler warning,
You should read it.
Line 16 - 18 are not in the proper logic order for the math your trying to use.
and you might have un-used includes
-
Use std::cout for output instead of printf. There is no need for any type modifiers, just output it as you would any text.
So
printf ("roots are %lf %lf\n", *root1, *root2);
should be
std::cout << "roots are " << *root1 << *root2 << std::endl;
-
ok been working on it and now I just can't get it to give the correct roots.... can anyone help me?
Code:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <cmath>
using namespace std;
void readabc(double *a, double *b, double *c, char *real);
void quadroots(double a,double b,double c,double *root1,double *root2, char *real);
int main()
{
double a, b, c, root1, root2;
char real;
readabc( &a, &b, &c, &real);
quadroots(a, b, c, &root1, &root2, &real);
return 0;
}
void readabc(double *a, double *b, double *c,char *real)
{
cout << "Enter a,b,c for a quad: " << endl;
cin >> *a >> *b >> *c;
return;
}
void quadroots(double a,double b,double c,double *root1,double *root2, char *real)
{
if (b*b-4*a*c < 0)
{
printf("roots are not real\n");
return;
}
else
{
*root1=(-b+sqrt(b*b-4*a*c)/(2*a));
*root2=(-b-sqrt(b*b-4*a*c)/(2*a));
printf ("roots are %lf %lf\n", *root1, *root2);
}//check for real roots and calculate root1 and root2
return;
}
-
ok I got it to work better but it is acting funny with 0 0 1 when it should say "Sorry the roots are not real!!" anyone know why it does that and how I can fix that?
Code:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <cmath>
using namespace std;
void readabc(double *a, double *b, double *c, char *real);
void quadroots(double a,double b,double c,double *root1,double *root2, char *real);
int main()
{
double a, b, c, root1, root2;
char real;
readabc( &a, &b, &c, &real);
quadroots(a, b, c, &root1, &root2, &real);
return 0;
}
void readabc(double *a, double *b, double *c,char *real)
{
cout << "Enter a,b,c for your quadratic you need to calculate:" << endl;
cout << "(note:you must type a enter b enter c enter) " << endl;
cin >> *a >> *b >> *c;
return;
}
void quadroots(double a,double b,double c,double *root1,double *root2, char *real)
{
double realnum = b*b-4*a*c;
if (realnum < 0)
{
printf("Sorry the roots are not real!!\n");
*real = 0;
return;
}
else
{
*real= 1;
*root1=(-b+sqrt(realnum))/(2*a);
*root2=(-b-sqrt(realnum))/(2*a);
printf ("roots are %lf %lf\n", *root1, *root2);
}//check for real roots and calculate root1 and root2
return;
}
-
What result were you expecting to get when dividing by zero? You tend to need to avoid doing that.
-
Why have you not replaced the printfs?