125.92K
Category: programmingprogramming

Применение вложенных инструкций if-else. Решение квадратного уравнения

1.

Применение вложенных
инструкций if-else.
Решение квадратного уравнения
Задача из курса “Основы разработки на C++: белый пояс”
www.coursera.org
Факультет электротехники и автоматики

2.

Задание
На вход вашей программы в стандартном
потоке ввода подаются действительные
коэффициенты A, B и C уравнения Ax² + Bx +
C = 0. Гарантируется, что хотя бы один из
коэффициентов уравнения не равен нулю.
Выведите все различные действительные
корни в поток вывода в любом порядке, при
этом разделяя корни пробелами.
2

3.

Подсказка
Для
вычисления
квадратного
корня
используйте функцию sqrt из библиотеки
cmath. Чтобы подключить библиотеку, в
начале программы напишите
#include <cmath>
3

4.

4
Блок-схема
Начало
Ввод
А, B, C
Вычисляем
дискриминант
D=B*B-4*A*C
Нет
Нет
D>0
D == 0
Да
Вывод
(-B + sqrt(D)) / (2 * A)
(-B - sqrt(D)) / (2 * A)
Да
A == 0
Да
Вывод
-B / (2 * A)
Нет
B != 0
Да
Вывод
-C / B
Конец

5.

Решение
Достаточно аккуратно рассмотреть и решить
уравнения, получающиеся в зависимости от
значений
коэффициентов
A,B,C
(квадратное
уравнение, линейное уравнение).
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double A, B, C;
//ввод исходных данных
cin >> A >> B >> C;
// найдём дискриминант
double D = B * B - 4 * A * C;
5

6.

Решение (Продолжение 2)
// если A равно нулю,
// то уравнение линейное: Bx + C = 0
if (A == 0) {
// Bx = -C => x = -C / B
if (B != 0) {
cout << -C / B << endl;
}
// если B равно нулю, корней нет
} else
6

7.

Решение (Продолжение 3)
// случай с нулевым дискриминантом
if (D == 0) {
// корень один
cout << -B / (2 * A) << endl;
} else
7

8.

Решение (Продолжение 4)
// в случае с положительным дискриминантом
// корня два
if (D > 0) {
double r1 = (-B + sqrt(D)) / (2 * A);
double r2 = (-B - sqrt(D)) / (2 * A);
cout << r1 << " " << r2 << endl;
}
// если дискриминант отрицателен,
// действительных корней нет
return 0;
}
8

9.

9
Примеры для тестирования
stdin
252
242
212
0 4 10
stdout
-0.5 -2
-1
-2.5
English     Русский Rules