Выяснить имеет ли уравнение действительные корни - C (СИ)
Формулировка задачи:
ЗАДАНИЕ
Даны действительные числа a, b, c (a ≠ 0, ). , проверить при вводе Выяснить имеет ли
уравнение a*x^2+bx+c=0 действительные корни Если действительные корни .
имеются то найти их В противном случае ответом должно служить сообщение что ,
действительных корней нет .
Уже 100 разпереписывал код, но все равно считает либо неверно либо вообще не считает либо пишет одновременно "действительных корней нет" и "х=... у=" Нужно что бы выводилось одно из двух сообщений
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <windows.h>
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- float a, b, c, x, y,d;
- printf("Введите а,b,c");
- scanf("%f%f%f",&a,&b,&c);
- if
- (d=pow(b,2)-4*a*c)
- (d<0);
- printf ("действительных корней нет");
- if ((pow(b,2)-4*a*c)>=0)
- a != 0;
- else
- {
- ((x= ((-b + sqrt(pow(b,2)-4*a*c))/2*a)) && (y= ((-b - sqrt(pow(b,2)-4*a*c))/2*a)));
- printf("y=%f""x=%f",y,x);
- }
- return 0;
- }
Решение задачи: «Выяснить имеет ли уравнение действительные корни»
textual
Листинг программы
- #include <stdio.h>
- #include <math.h>
- #define EPS 1.0e-4
- int main() {
- float a, b, c;
- scanf("%f%f%f", &a, &b, &c);
- if (abs(a) > EPS) {
- float d = b*b - 4*a*c;
- if (abs(d) < EPS) {
- printf("one solution: %f\n", -b/(2*a));
- } else if (d > 0) {
- float droot = sqrtf(d);
- printf("x1 = %f\nx2 = %f\n", (-b+droot)/(2*a), (-b-droot)/(2*a));
- } else {
- printf("No solutions\n");
- }
- }
- return 0;
- }
Объяснение кода листинга программы
В этом коде:
- Задаются три переменные типа float: a, b, c. Значения этих переменных вводятся с клавиатуры.
- Вычисляется дискриминант: d = bb - 4a*c.
- Если abs(a) > EPS, то есть если a не равно нулю, то выполняются следующие действия:
3.1. Если abs(d) < EPS, то есть если d близко к нулю, то выводится одно решение уравнения: x = -b/(2a).
3.2. Если d > 0, то есть если дискриминант больше нуля, то вычисляется корни уравнения: x1 = (-b+sqrt(d))/(2a) и x2 = (-b-sqrt(d))/(2*a). Выводятся значения корней.
3.3. Если d < 0, то есть если дискриминант меньше нуля, то выводится сообщение
No solutions
, то есть уравнение не имеет действительных корней. - Если abs(a) <= EPS, то есть если a равно нулю, то выводится сообщение
No solutions
, так как в этом случае уравнение имеет бесконечное количество решений. - Возвращается 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д