C/C++

Составить программу для нахождения корней уравнения

Помогите пожалуйста
Написать программу, находящую все корни квадратного уравнения
#include <iostream>
using namespace std;
double coefficient(const char* name) {
cout << name << ": ";
double value;
cin >> value;
return value;
}
bool iszero(double value, double prec = 1e-15) {
return fabs(value) < prec;
}
int main() {
system("chcp 1251 > nul");
const char* message = "Уравнение не имеет действительных корней";
auto a = coefficient("a");
if (!iszero(a)) {
auto b = coefficient("b");
auto c = coefficient("c");
auto d = b * b - 4 * a * c;
if (iszero(d)) {
auto x = -b / (2 * a);
cout << "x1 = x2 = " << x << '\n';
} else if (d > 0) {
d = sqrt(d);
auto aa = 2 * a;
auto x1 = (-b + d) / aa;
auto x2 = (-b - d) / aa;
cout << "x1 = " << x1 << "\nx2 = " << x2 << '\n';
} else puts(message);
} else puts(message);
system("pause > nul");
}
НХ
Николай Хованов
78 652
Лучший ответ
Sil Ver Стоит добавить cmath из-за sqrt и fabs, не везде cmath автоматически подключается.
На Си, рассматриваются все варианты вещественных чисел a, b и c. Решения ищутся в поле комплексных чисел C. Для правильной работы программы в сложном и неприятном случае, когда |4ac/b²|<<1, вводится итерационный цикл.
#include <stdio.h>
double Abs(double x) { return x < 0 ? -x : x; }
double Sqrt(double x) { double y = 1., ynew;
if (x == 0) return 0; while (1) { ynew = (y + x /
y) / 2; if (ynew == y) return y; y = ynew; } }
int main() { double a, b, c, d, h, hp, p, s, x1, x2;
int k, l, m; while (1) { printf("a b c > ");
scanf("%lf%lf%lf", &a, &b, &c); if (a == 0)
if (b == 0) if (c == 0) printf("x є C\n"); else
printf("x є ∅\n"); else printf("x = %.16g\n",
- c / b); else { d = b * b - 4 * a * c; if (d == 0)
printf("x = %.16g\n", -b / 2 / a); else if (d < 0)
printf("x = %.16g±%.16gi\n", -b / 2 / a,
Sqrt(-d) / 2 / Abs(a)); else { h = -4 * a * c / b /
b; if (Abs(h) <= 0.43) { x1 = -b / 2 / a * (1 +
Sqrt(1 + h)); m = 0; k = -1; l = 1; hp = -h / 2;
p = 1; s = 0; while (Abs(p) > 0) { m++; k += 2;
l++; p *= hp * k / l; s += p; } x2 = -c / b * (1+s);
printf("%d\n", m); } else { x1 = (-b - Sqrt(d)) /
2 / a; x2 = (-b + Sqrt(d)) / 2 / a; } printf
("x1 = %.16g, x2 = %.16g\n", x1, x2); } } } }
Роман Гришин
Роман Гришин
66 572