In order to work easily with a complex number, I defined a structure consisting of two doubles, r being for the real part of a complex number and i for the imaginary part.
typedef struct { double r; double i; } double_c;
/* * Description: * Finds the two roots of a quadric ecuation * Parameters: * a - the first coefficient of the ecuation * b - the second coefficient of the ecuation * c - the third coefficient of the ecuation * root1 - the first root of the ecuation * root2 - the second root of the ecuation */ void QuadricEcuation(double a, double b, double c, double_c *root1, double_c *root2) { double discriminant = 0; discriminant = b*b-4*a*c; if ((discriminant == 0) && (a != 0)) //the roots are equal { (*root1).r = -b/2*a; (*root1).i = 0; (*root2).r = (*root1).r; (*root2).i = (*root1).i; } else if ((discriminant > 0) && (a != 0)) //the roots are real numbers { (*root1).r = (-b+sqrt(discriminant))/(2*a); (*root1).i = 0; (*root2).r= (-b-sqrt(discriminant))/(2*a); (*root2).i = 0; } else if (a != 0)//the roots are complex numbers { (*root1).r = -b/(2*a); (*root1).i = sqrt(-discriminant)/(2*a); (*root2).r = -b/(2*a); (*root2).i = -sqrt(-discriminant)/(2*a); } }
Example:
#include<stdio.h> #include<conio.h> #include<math.h> void QuadricEcuation(double a, double b, double c, double_c *root1, double_c *root2); int main(void) { double a = 0, b = 0, c = 0; double_c root1, root2; printf("Enter the three coefficients of the quadric ecuation:\n"); scanf("%lf",&a); scanf("%lf",&b); scanf("%lf",&c); QuadricEcuation(a,b,c,&root1,&root2); printf("\t\tThe roots are:\n"); printf("\t\t\t%.3f+%.3fi and %.3f+%.3fi",root1.r,root1.i,root2.r,root2.i); getch(); return 0; }
Output:
No comments:
Post a Comment