Составь программу и начерти блок-схему решения квадратного уравнения в питон
Ответ нейросети
30 сентября 2025 19:43
Ниже полноte подробное решение задачи: программа на Python для решения квадратного уравнения ax^2 + bx + c = 0, а также блок-схема решения (текстовая и в формате Graphviz DOT).
Цель: понять принцип и получить рабочий код.
- Пошаговый разбор алгоритма
- Введение: рассматриваем уравнение ax^2 + bx + c = 0.
- Шаг 1. Проверяем коэффициент a:
- Если a ≠ 0, уравнение квадратичное. Вычисляем дискриминант Δ = b^2 − 4ac.
- Если a = 0, это линейное уравнение bx + c = 0.
- Шаг 2. Если квадратичное (a ≠ 0):
- Если Δ > 0: два действительных корня x1 = (-b − √Δ) / (2a) и x2 = (-b + √Δ) / (2a).
- Если Δ = 0: один корень x = -b / (2a).
- Если Δ < 0: корни комплексные: x1, x2 = (-b ± √Δ) / (2a) (√Δ берём как комплексное число).
- Шаг 3. Если линейное (a = 0, b ≠ 0): один корень x = -c / b.
- Шаг 4. Если линейное и b = 0:
- если c = 0: бесконечно много решений (0 = 0);
- иначе: решений нет.
Программа на Python (для чистоты и понятности, с обработкой комплексных корней):
import cmath
def solve_quadratic(a, b, c):
tol = 1e-12
# Если a близко к нулю, линейное или degenerate
if abs(a) < tol:
if abs(b) < tol:
if abs(c) < tol:
return {"type": "infinite"} # 0x^2 + 0x + 0 = 0 -> любое x
else:
return {"type": "none"} # противоречие
else:
x = -c / b
return {"type": "linear", "roots": [x]}
# Квадратное уравнение
delta = b * b - 4 * a * c
sqrt_delta = cmath.sqrt(delta)
x1 = (-b - sqrt_delta) / (2 * a)
x2 = (-b + sqrt_delta) / (2 * a)
if abs(delta) < tol:
return {"type": "double", "roots": [x1]}
else:
return {"type": "quadratic", "roots": [x1, x2]}
def fmt_root(x):
# Красиво печатать комплексные корни
if isinstance(x, complex):
if abs(x.imag) < 1e-9:
return f"{x.real:.6f}"
else:
sign = '+' if x.imag >= 0 else '-'
return f"{x.real:.6f} {sign} {abs(x.imag):.6f}i"
else:
return f"{x:.6f}"
if __name__ == "__main__":
try:
a, b, c = map(float, input("Введите a, b и c через пробел: ").split())
except Exception:
print("Неверный ввод.")
exit(1)
res = solve_quadratic(a, b, c)
if res["type"] == "infinite":
print("Бесконечное множество решений (a=0, b=0, c=0).")
elif res["type"] == "none":
print("Уравнение не имеет решений.")
elif res["type"] == "linear":
print(f"Единственный корень: x = {fmt_root(res['roots'][0])}")
elif res["type"] == "double":
print(f"Двойной корень: x = {fmt_root(res['roots'][0])}")
elif res["type"] == "quadratic":
x1, x2 = res["roots"]
print(f"Корни: x1 = {fmt_root(x1)}, x2 = {fmt_root(x2)}")
- Блок-схема решения (текстовая версия)
- Start
- Ввод a, b, c
- Проверка: a ≠ 0?
- Да:
- Δ = b^2 − 4ac
- Δ > 0?
- Да: x1 = (-b − √Δ)/(2a), x2 = (-b + √Δ)/(2a); вывести x1, x2
- Нет: Δ = 0?
- Да: x = -b/(2a); вывести x
- Нет: вывести комплексные корни x1, x2
- Нет (a = 0):
- b ≠ 0?
- Да: x = -c/b; вывести x
- Нет (b = 0):
- c = 0?
- Да: вывести "любое x" (бесконечное множество решений)
- Нет: вывести "нет решений"
- c = 0?
- b ≠ 0?
- Да:
- End
ASCII-версия блок-схемы (упрощённая):
Start
|
Input a, b, c
|
[a != 0?]
/
Yes No
|
Δ = b^2-4ac линейное
| (a=0)
Δ > 0? | [b != 0?]
/ \ | /
Yes No Yes No
| | | |
x1,x2 Δ=0? x=-c/b x = -c/b нет решений / бесконечность
| | | |
Output x Output Output
| | | |
End End End End
- Блок-схема в формате Graphviz DOT (для визуализации в Graphviz) Диаграмма описывает тот же алгоритм более формально.
digraph QuadraticFlow { node [shape=box]; Start -> Input; Input -> Acheck [label="a != 0?"]; Acheck -> Quad [label="Yes"]; Acheck -> Lin [label="No"];
// Квадратное Quad -> Delta [label="Δ = b^2 - 4ac"]; Delta -> Dcheck [label="Δ > 0?"]; Dcheck -> Roots2 [label="Yes"]; Roots2 -> Out [label="print x1, x2"]; Dcheck -> D0 [label="No"]; D0 -> D0eq [label="Δ = 0?"]; D0eq -> OneRoot [label="Yes"]; OneRoot -> Out [label="print x"]; D0eq -> Complexes [label="No"]; Complexes -> Out [label="print x1, x2 (complex)"];
// Линейное Lin -> LinDelta [label="b != 0?"]; LinDelta -> LinRoot [label="Yes"]; LinRoot -> Out [label="print x"]; LinDelta -> LinNo [label="No"]; LinNo -> InfiniteOrNone [label="c=0?"]; InfiniteOrNone -> Out [label="print бесконечно/нет решений"];
// Концовка Out -> End; End -> [shape=point]; }
Чтобы сгенерировать изображение, сохраните текст DOT в файл, например, quadratic_flow.dot, и выполните:
- Graphviz: dot -Tpng quadratic_flow.dot -o quadratic_flow.png
- Как использовать на практике
- Введите коэффициенты a, b, c через пробел.
- Программа распознает случаи a = 0 (линейное уравнение) и выдаёт корни или состояние («нет решений», «бесконечность»).
- При Δ < 0 корни будут выведены как комплексные числа.
- Корни выводятся с аккуратным форматированием (появляется вещественная часть или комплексное число).
Если хочешь, могу адаптировать решение под конкретный класс (объяснения полегче/пошире, примеры с натуральными числами, без комплексных корней, и т. п.) или сделать интерфейс с вводом через диалоговое окно.
Понравился ответ?
Задай свой вопрос
Напиши любую задачу или вопрос, а нейросеть её решит



