Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #define NOT_FOUND 1
- #define FOUND 2
- #define FOUND_ONE 3
- #define INFINITE_MANY 4
- #define EPS 1e-20
- #define ERR_IO 5
- #define OK 0
- int search_roots(float a, float b, float c, float *x1, float *x2)
- {
- int rc = FOUND;
- float d;
- if ((fabs(a) > EPS) && (abs(c) > EPS)) //??? > 0 // todo fabs
- {
- d = b*b - 4 * a * c;
- if (d > 0)
- {
- printf("1");
- *x1 = (-b + sqrt(d)) / (2 * a);
- *x2 = (-b - sqrt(d)) / (2 * a);
- return rc;
- }
- else if (d == 0)
- {
- printf("2");
- *x1 = (-b / (2 * a));
- rc = FOUND_ONE;
- return rc;
- }
- else
- {
- printf("3");
- rc = NOT_FOUND;
- return rc;
- }
- }
- else if (abs(a) < EPS) // a == 0
- {
- if (abs(b) > EPS) // b !=0
- {
- printf("4");
- *x1 = -c/b;
- rc = FOUND_ONE;
- return rc;
- }
- else if ((abs(b) < EPS) && (abs(c) > EPS)) // b==0 c!=0
- {
- printf("6");
- rc = NOT_FOUND;
- return rc;
- }
- else // b==0 c==0
- {
- printf("7");
- rc = INFINITE_MANY;
- return rc;
- }
- }
- else if (abs(c) < EPS) // c==0
- {
- printf("11");
- *x1 = 0;
- *x2 = -b / a;
- return rc;
- }
- return rc;
- }
- int main (void)
- {
- int rc = OK;
- float x1, x2;
- float a, b, c;
- printf("Input coefficients a, b, c \n");
- if (scanf("%f%f%f", &a, &b, &c) == 3)
- {
- rc = search_roots(a, b, c, &x1, &x2);
- if (rc == FOUND)
- {
- printf("Two roots were found, x1 = %.3f, x2 = %.3f", x1, x2);
- }
- else if (rc == FOUND_ONE)
- {
- printf("One root was found, x = %.3f", x1);
- }
- else if (rc == NOT_FOUND)
- {
- printf("Root were not found");
- }
- else if (rc == INFINITE_MANY)
- {
- printf("There are infinite many roots");
- }
- }
- else
- {
- printf("I/O error");
- rc = ERR_IO;
- }
- return rc;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement