Решение квадратного уравнения в области действительных чисел (с использованием теоремы Виета) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Решить уравнение ax2+bx+c=0 (a,b,c - заданные коэффициенты) в области действительных чисел (с использованием теор. Виета). Если вводить целые числа, программа считает верно ( для примера ввод 1 5 4) А если вводить -2 5 3, корни должны быть 3 и -0,5, а пишет, что корней нет. Помогите пожалуйста исправить
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include<locale.h>
int main(void) {
    double  a, b, c, x1, x2;
    int k;
    setlocale(LC_ALL, "Russian");
    printf("Программа ...\n");
    printf("Введите значения a,b,c \n");
    scanf("%lf", &a);
    scanf("%lf", &b);
    scanf("%lf", &c);
    k = 0;
    for (x1 = -10; x1 <= 10; x1++)
    {
        for (x2 = -10; x2 <= 10; x2++)
        {
            if ((x1 + x2) == -b / a && (x1*x2) == c / a)
            {
            
            if (x1 == x2) printf("один корень=%.2lf\n", x1);
            else
            {
                printf("korni x1,  %.2lf \n", x1);
                printf("korni x2,  %.2lf \n", x2);
            }
            k = 1;
            break;
            }
        }
        if (k == 1)
            break;
    }
    if (k == 0) printf("kornej net\n");
    return 0;
}

Решение задачи: «Решение квадратного уравнения в области действительных чисел (с использованием теоремы Виета)»

textual
Листинг программы
#include<stdio.h>
#include<math.h>
int main(void)
{
    double a,b,c,x1,x2;
    int fl=0;
    scanf("%lf%lf%lf",&a,&b,&c);
    for(x1=-20;x1<=20;x1+=0.01)
    {
        
        for(x2=-20; x2<=20;x2+=0.01)
        if(fabs(x1+x2+b/a)<=0.001 && fabs(x1*x2-c/a)<=0.001)
        {
        if(x1==x2) printf("%lf\n",x1);
        else printf("%lf %lf\n",x1,x2);
        fl=1;
        
        }
        if(fl) break;
    }
    return 0;
}

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

В этом коде реализуется решение квадратного уравнения в области действительных чисел с использованием теоремы Виета. Список действий:

  1. Ввод значений a, b и c с помощью функции scanf.
  2. Создание переменных x1 и x2 для хранения найденных корней.
  3. Создание переменной fl для отслеживания нахождения корней.
  4. Использование двух вложенных циклов для перебора всех возможных значений x1 и x2 от -20 до 20 с шагом 0.01.
  5. Проверка условия: если модуль (абсолютное значение) разности x1+x2+b/a меньше или равен 0.001, и модуль разности x1*x2-c/a меньше или равен 0.001, то это значит, что найдены корни уравнения.
  6. Если x1 и x2 равны, то выводится значение x1.
  7. Если x1 и x2 не равны, то выводятся значения x1 и x2.
  8. Переменная fl устанавливается в 1, чтобы выйти из внутреннего цикла.
  9. Если fl равно 1, то происходит выход из внешнего цикла с помощью оператора break.
  10. Программа завершается возвратом значения 0.

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

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