Не работает программа на нахождение корней в квадратном уравнении. Не выполняются некоторые из условий - C (СИ)
Формулировка задачи:
Хожу на курсы по обучению на С. задали написать программу, для расчета корней в квадратичном уравнении, а в случае нарушения устроить типо "Армагеддон"
Сам армагеддон работает нормально, а вот программа для корней нет. Не выдает результат при b=0, и a=0.
Вот код:
Листинг программы
- #include <stdio.h>
- #include <math.h>
- #include <windows.h>
- #include <conio.h>
- void do_armageddon ();
- int calculation_of_the_equation (double a, double b, double c);
- int calculation_of_the_normal_quadratic_equation (double a, double b, double c);
- int calculation_of_the_not_normal_quadratic_equation (double a, double c);
- int main()
- {
- printf ("Hello, guys! You are students, I know it!\n"
- "And I also know, that you can save one universe!\n"
- "Enter a, b, c for ax^2 + bx + c = 0\n"
- "Or I will destroy one world in the multiverse!"
- "\nEnter please 3 numbers:\n");
- double a = 0, b = 0, c = 0;
- int nVals = scanf ("%lg %lg %lg,", &a, &b, &c);
- if (nVals != 3)
- {
- printf ("Learn the math, MEN! You have destroyed another one universe,"
- " like other guys!\n");
- do_armageddon ();
- getch ();
- return -666;
- }
- else
- {
- calculation_of_the_equation (a, b, c);
- }
- }
- int calculation_of_the_equation (double a, double b, double c)
- {
- if (a != 0)
- if (b != 0)
- if (c != 0)
- {
- calculation_of_the_normal_quadratic_equation (a, b, c);
- }
- else if (b == 0)
- {
- calculation_of_the_not_normal_quadratic_equation (a, c);
- }
- else if (a == 0 && c != 0)
- {
- double x = -c / b;
- printf ("It's linear equation and answer is:\n"
- "x = %lg", x);
- }
- else if (c == 0 && a != 0)
- {
- double x = -a / b;
- printf ("It's linear equation and answer is:\n"
- "x = %lg", x);
- }
- getch ();
- return 0;
- }
- int calculation_of_the_not_normal_quadratic_equation (double a, double c)
- {
- double d = 0 - 4*a*c;
- double x1 = (0 + sqrt(d))/(2*a);
- double x2 = (0 - sqrt(d))/(2*a);
- if (d > 0)
- {
- printf ("Mission complete! Results are:\n");
- printf ("x1 = %lg and ", x1);
- printf ("x2 = %lg\n", x2);
- printf ("Thanks, man!");
- printf ("\nPress any key to exit.");
- }
- else if (d == 0)
- {
- printf ("You entrered the worst set of numbers in the world, "
- "but we have 1 result...\n");
- printf ("This result shows us that:\n");
- printf ("x = %lg", x1);
- printf ("\nThanks, man!");
- printf ("\nPress any key to exit.");
- }
- else if (d < 0)
- {
- printf ("There is nothing... Bad numbers!");
- printf ("\nPress any key to exit.");
- }
- }
- int calculation_of_the_normal_quadratic_equation (double a, double b, double c)
- {
- double d = b*b - 4*a*c;
- double x1 = (-b + sqrt(d))/(2*a);
- double x2 = (-b - sqrt(d))/(2*a);
- if (d > 0)
- {
- printf ("Mission complete! Results are:\n");
- printf ("x1 = %lg and ", x1);
- printf ("x2 = %lg\n", x2);
- printf ("Thanks, man!");
- printf ("\nPress any key to exit.");
- }c5BpMyAp
- else if (d == 0)
- {
- printf ("You entrered the worst set of numbers in the world, "
- "but we have 1 result...\n");
- printf ("This result shows us that:\n");
- printf ("x = %lg", x1);
- printf ("\nThanks, man!");
- printf ("\nPress any key to exit.");
- }
- else if (d < 0)
- {
- printf ("There is nothing... Bad numbers!");
- printf ("\nPress any key to exit.");
- }
- }
- void do_armageddon ()
- {
- int i = 0;
- while (i <= 100)
- {
- printf ("Destroying the universe ... %d%%\r", i);
- Sleep (100);
- i += 1;
- }
- printf ("\nArmagedon done! Thanks!\n");
- printf ("Press any key to leaving the world...\n");
- }
Я проверил еще отдельно каждую функцию. Они все по отдельности работают нормально и выдают требуемый результат. Почему они не работают нормально вместе?
Решение задачи: «Не работает программа на нахождение корней в квадратном уравнении. Не выполняются некоторые из условий»
textual
Листинг программы
- #include <stdio.h>
- #include <math.h>
- #include <windows.h>
- #include <conio.h>
- void do_armageddon();
- void calculation_of_the_equation(double a, double b, double c);
- void calculation_of_the_normal_quadratic_equation(double a, double b, double c);
- void calculation_of_the_not_normal_quadratic_equation(double a, double c);
- void main()
- {
- printf("Hello, guys! You are students, I know it!\n"
- "And I also know, that you can save one universe!\n"
- "Enter a, b, c for ax^2 + bx + c = 0\n"
- "Or I will destroy one world in the multiverse!"
- "\nEnter please 3 numbers:\n");
- double a = 0, b = 0, c = 0;
- int nVals = scanf("%lg %lg %lg,", &a, &b, &c);
- if (nVals != 3)
- {
- printf("Learn the math, MEN! You have destroyed another one universe,"
- " like other guys!\n");
- do_armageddon();
- }
- else
- {
- calculation_of_the_equation(a, b, c);
- }
- getch();
- }
- void calculation_of_the_equation(double a, double b, double c)
- {
- if (a != 0 && b != 0 && c != 0)
- {
- calculation_of_the_normal_quadratic_equation(a, b, c);
- }
- else if (b == 0)
- {
- calculation_of_the_not_normal_quadratic_equation(a, c);
- }
- else if (a == 0 && c != 0)
- {
- double x = -c / b;
- printf("It's linear equation and answer is:\n"
- "x = %lg", x);
- }
- else if (c == 0 && a != 0)
- {
- double x = -a / b;
- printf("It's linear equation and answer is:\n"
- "x = %lg", x);
- }
- getch();
- }
- void calculation_of_the_not_normal_quadratic_equation(double a, double c)
- {
- double d = 0 - 4 * a*c;
- double x1 = (0 + sqrt(d)) / (2 * a);
- double x2 = (0 - sqrt(d)) / (2 * a);
- if (d > 0)
- {
- printf("Mission complete! Results are:\n");
- printf("x1 = %lg and ", x1);
- printf("x2 = %lg\n", x2);
- printf("Thanks, man!");
- printf("\nPress any key to exit.");
- }
- else if (d == 0)
- {
- printf("You entrered the worst set of numbers in the world, "
- "but we have 1 result...\n");
- printf("This result shows us that:\n");
- printf("x = %lg", x1);
- printf("\nThanks, man!");
- printf("\nPress any key to exit.");
- }
- else if (d < 0)
- {
- printf("There is nothing... Bad numbers!");
- printf("\nPress any key to exit.");
- }
- }
- void calculation_of_the_normal_quadratic_equation(double a, double b, double c)
- {
- double d = b*b - 4 * a*c;
- double x1 = (-b + sqrt(d)) / (2 * a);
- double x2 = (-b - sqrt(d)) / (2 * a);
- if (d > 0)
- {
- printf("Mission complete! Results are:\n");
- printf("x1 = %lg and ", x1);
- printf("x2 = %lg\n", x2);
- printf("Thanks, man!");
- printf("\nPress any key to exit.");
- }
- else if (d == 0)
- {
- printf("You entrered the worst set of numbers in the world, "
- "but we have 1 result...\n");
- printf("This result shows us that:\n");
- printf("x = %lg", x1);
- printf("\nThanks, man!");
- printf("\nPress any key to exit.");
- }
- else if (d < 0)
- {
- printf("There is nothing... Bad numbers!");
- printf("\nPress any key to exit.");
- }
- }
- void do_armageddon()
- {
- int i = 0;
- while (i <= 100)
- {
- printf("Destroying the universe ... %d%%\r", i);
- Sleep(100);
- i += 1;
- }
- printf("\nArmagedon done! Thanks!\n");
- printf("Press any key to leaving the world...\n");
- }
Объяснение кода листинга программы
- Программа предназначена для решения квадратных уравнений.
- Пользователю предлагается ввести значения a, b и c.
- Если пользователь вводит некорректные значения, программа выдает сообщение об ошибке и вызывает функцию do_armageddon().
- Если пользователь вводит корректные значения, программа вызывает функцию calculation_of_the_equation(a, b, c).
- Внутри функции calculation_of_the_equation() происходит проверка значений a, b и c.
- Если b равно нулю, программа вызывает функцию calculation_of_the_not_normal_quadratic_equation(a, c).
- Если a равно нулю и c не равно нулю, программа вычисляет значение x как -c/b и выводит его.
- Если c равно нулю и a не равно нулю, программа вычисляет значение x как -a/b и выводит его.
- Если a, b и c не равны нулю, программа вызывает функцию calculation_of_the_normal_quadratic_equation(a, b, c).
- Внутри функции calculation_of_the_normal_quadratic_equation() происходит вычисление дискриминанта по формуле d = bb - 4a*c.
- Затем программа вычисляет значения x1 и x2 по формулам x1 = (-b + sqrt(d)) / (2a) и x2 = (-b - sqrt(d)) / (2a).
- Если d больше нуля, программа выводит значения x1 и x2.
- Если d равно нулю, программа выводит только x1.
- Если d меньше нуля, программа выводит сообщение о том, что корней нет.
- Если пользователь вводит некорректные значения, программа вызывает функцию do_armageddon().
- Функция do_armageddon() выводит сообщение о том, что Армагеддон завершен.
- Функция do_armageddon() использует цикл while для отображения процесса уничтожения вселенной.
- В конце программы пользователю предлагается нажать любую клавишу для выхода из программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д