Решение квадратного уравнения в области действительных чисел (с использованием теоремы Виета) - 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;
}
Объяснение кода листинга программы
В этом коде реализуется решение квадратного уравнения в области действительных чисел с использованием теоремы Виета. Список действий:
- Ввод значений a, b и c с помощью функции scanf.
- Создание переменных x1 и x2 для хранения найденных корней.
- Создание переменной fl для отслеживания нахождения корней.
- Использование двух вложенных циклов для перебора всех возможных значений x1 и x2 от -20 до 20 с шагом 0.01.
- Проверка условия: если модуль (абсолютное значение) разности x1+x2+b/a меньше или равен 0.001, и модуль разности x1*x2-c/a меньше или равен 0.001, то это значит, что найдены корни уравнения.
- Если x1 и x2 равны, то выводится значение x1.
- Если x1 и x2 не равны, то выводятся значения x1 и x2.
- Переменная fl устанавливается в 1, чтобы выйти из внутреннего цикла.
- Если fl равно 1, то происходит выход из внешнего цикла с помощью оператора break.
- Программа завершается возвратом значения 0.