Не работает программа на нахождение корней в квадратном уравнении. Не выполняются некоторые из условий - 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");
 
}

Объяснение кода листинга программы

  1. Программа предназначена для решения квадратных уравнений.
  2. Пользователю предлагается ввести значения a, b и c.
  3. Если пользователь вводит некорректные значения, программа выдает сообщение об ошибке и вызывает функцию do_armageddon().
  4. Если пользователь вводит корректные значения, программа вызывает функцию calculation_of_the_equation(a, b, c).
  5. Внутри функции calculation_of_the_equation() происходит проверка значений a, b и c.
  6. Если b равно нулю, программа вызывает функцию calculation_of_the_not_normal_quadratic_equation(a, c).
  7. Если a равно нулю и c не равно нулю, программа вычисляет значение x как -c/b и выводит его.
  8. Если c равно нулю и a не равно нулю, программа вычисляет значение x как -a/b и выводит его.
  9. Если a, b и c не равны нулю, программа вызывает функцию calculation_of_the_normal_quadratic_equation(a, b, c).
  10. Внутри функции calculation_of_the_normal_quadratic_equation() происходит вычисление дискриминанта по формуле d = bb - 4a*c.
  11. Затем программа вычисляет значения x1 и x2 по формулам x1 = (-b + sqrt(d)) / (2a) и x2 = (-b - sqrt(d)) / (2a).
  12. Если d больше нуля, программа выводит значения x1 и x2.
  13. Если d равно нулю, программа выводит только x1.
  14. Если d меньше нуля, программа выводит сообщение о том, что корней нет.
  15. Если пользователь вводит некорректные значения, программа вызывает функцию do_armageddon().
  16. Функция do_armageddon() выводит сообщение о том, что Армагеддон завершен.
  17. Функция do_armageddon() использует цикл while для отображения процесса уничтожения вселенной.
  18. В конце программы пользователю предлагается нажать любую клавишу для выхода из программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.556 из 5
Похожие ответы