Если заданное квадратное уравнение не имеет корней, то в выходной файл нужно вывести слово NO - C (СИ)
Формулировка задачи:
Вот условие.
Если заданное квадратное уравнение не имеет корней, то в выходной файл нужно вывести
слово NO.
Если корней бесконечное множество, то вывести MANY.
Если уравнение не имеет смысла, то вывести ERROR.
Если корень один, то в первую строку выходного файла нужно вывести число 1, а во
вторую – значение этого корня с точностью до 5 знаков после десятичной точки.
Если у уравнения два корня, то в первую строку нужно вывести число 2, а во вторую –
найденные корни в порядке возрастания их значений с точностью до 5 знаков после десятичной
точки.
Когда их бесконечное множество я так и не понял. Программа не работает. При числах 1 12 36 он выдает Integer division by zero, я так понимаю это деление на 0, а где оно, я не вижу. При отрицательном дискриминанте работает нормально. При числах 0 12 37 выдает
12.000000
2
-1.#IND0-1.#INF0
В общем я не понимаю, что не нравится. Помогите пожалуйста.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int a,b,c;
float d,x1,x2;
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%d %d %d ",&a,&b,&c);
x1=0; x2=0;
d=b*b-4*a*c;
if(d<0)
printf("No");
if (a=0)
{
if(b=0)
printf("ERROR");
else
{
x1=-c/b;
printf("1\n");
printf("%.5f",x1);
}
}
else
if (d==0)
{
x1=-b/(2*a);
printf("1\n");
printf("%.5f",x1);
}
if (d>0)
{
d=sqrt(d);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
printf("%f\n",d);
printf("2\n");
printf("%.5f",x1);
printf("%.5f",x2);
}
}
Нашел кучу ошибок, исправил, вроде работает, но некоторые тесты не проходит.
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
float a,b,c,d,x1,x2;
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%f %f %f ",&a,&b,&c);
d=b*b-4*a*c;
if(d<0)
printf("No");
if (a==0)
{
if(b==0)
printf("ERROR");
else
{
x1=-c/b;
printf("1\n");
printf("%.5f",x1);
}
}
else
{
if (d==0)
{
x1=-b/(2*a);
printf("1\n");
printf("%.5f",x1);
}
if (d>0)
{
d=sqrt(d);
x1=(-b+d)/(2*a);
x2=(-b-d)/(2*a);
printf("2\n");
printf("%.5f %.5f",x1,x2);
}
}
}
Тему можно закрывать.
Решение задачи: «Если заданное квадратное уравнение не имеет корней, то в выходной файл нужно вывести слово NO»
textual
Листинг программы
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
unsigned int k;
unsigned int d;
double p;
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%d",&k);
d=1+4*(k-1)*2;
p=sqrt((double)d);
if ((p - ((int)p)) == 0)
printf("1");
else
printf("0");
}
Объяснение кода листинга программы
В этом коде задача заключается в проверке наличия корней у заданного квадратного уравнения. Вот список действий, которые происходят в коде:
- Включаем необходимые библиотеки:
Для выполнения математических операций нам понадобятся функции из библиотеки
, и . - Открываем входной файл для чтения и выходной файл для записи: Мы используем функцию freopen() для открытия файлов input.txt и output.txt соответственно.
- Считываем значение переменной k: С помощью функции scanf() мы считываем значение переменной k из стандартного ввода.
- Вычисляем значение переменной d: Мы вычисляем значение переменной d на основе значения k. Здесь d = 1 + 4(k-1)2.
- Вычисляем значение переменной p:
Мы используем функцию sqrt() из библиотеки
для вычисления квадратного корня из значения переменной d. Значение переменной p будет содержать этот квадратный корень. - Проверяем наличие корней у квадратного уравнения:
Мы сравниваем значение переменной p с целым значением ((int)p). Если они совпадают, это означает, что корень является целым числом, и мы выводим
1. В противном случае, если разница между p и (int)p не равна нулю, это означает, что корень является десятичной дробью, и мы выводим0. - Закрываем программу: После выполнения всех действий программа завершается.