/
pstoday71
/
quadratic_plot
Обзор
Документация
Войти
/
pstoday71
/
quadratic_plot
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
quadratic_plot.py
104 строки
3 KB
pstoday71
fix: support comma as decimal separator and add terminal output for roots and vertex
30 июл 2026, 17:14
30 июл 2026, 17:14
09aa79b
Код
Авторство
О чём код?
import numpy as np import matplotlib.pyplot as plt def parse_float(s): """Парсинг float с поддержкой запятой и точки как десятичного разделителя.""" s = s.replace(",", ".").strip() return float(s) def main(): # --- Ввод коэффициентов --- a = parse_float(input("Введите a: ")) b = parse_float(input("Введите b: ")) c = parse_float(input("Введите c: ")) # --- Математика --- def func(x): return a * x**2 + b * x + c vertices = [] # (x, y) — корни и вершина для определения диапазона # Корни (пересечение с y=0) roots_x = [] discriminant = None if a != 0: discriminant = b**2 - 4 * a * c if discriminant > 0: roots_x = [float((-b - np.sqrt(discriminant)) / (2 * a)), float((-b + np.sqrt(discriminant)) / (2 * a))] elif discriminant == 0: roots_x = [float(-b / (2 * a))] elif b != 0: # Линейный случай: bx + c = 0 roots_x = [float(-c / b)] # Вершина параболы x_vertex = None y_vertex = None if a != 0: x_vertex = float(-b / (2 * a)) y_vertex = float(func(x_vertex)) vertices.append((x_vertex, y_vertex)) # --- Вывод информации в терминал --- print() if roots_x: for i, rx in enumerate(roots_x, 1): print(f"Корень {i}: x = {rx:.4f}") else: print("Корни: отсутствуют (D < 0)") if x_vertex is not None: extremum_type = "Минимум" if a > 0 else "Максимум" print(f"{extremum_type}: x = {x_vertex:.4f}, y = {y_vertex:.4f}") else: print("Экстремум: отсутствует (a = 0)") print() # --- Диапазон графика --- all_x = roots_x + [v[0] for v in vertices] if all_x: x_min = min(all_x) - 5 x_max = max(all_x) + 5 else: x_min, x_max = -10, 10 x_vals = np.linspace(x_min, x_max, 500) y_vals = func(x_vals) # --- Построение --- fig, ax = plt.subplots(figsize=(10, 6)) ax.plot(x_vals, y_vals, label=f"y = {a}x² + {b}x + {c}", linewidth=2) # Оси ax.axhline(0, color="black", linewidth=0.8) ax.axvline(0, color="black", linewidth=0.8) # Точки пересечения с y=0 (корни) for i, rx in enumerate(roots_x): label = f"Корень: ({rx:.2f}, 0)" if i == 0 else "" ax.plot(rx, 0, "go", markersize=9, label=label, zorder=5) # Вершина (мин/макс) if x_vertex is not None: extremum_label = "Минимум" if a > 0 else "Максимум" ax.plot(x_vertex, y_vertex, "r^", markersize=12, label=f"{extremum_label}: ({x_vertex:.2f}, {y_vertex:.2f})", zorder=5) ax.set_xlabel("x") ax.set_ylabel("y") ax.set_title(f"График функции y = {a}x² + {b}x + {c}") ax.legend() ax.grid(True, alpha=0.3) plt.tight_layout() plt.savefig("quadratic_plot.png", dpi=150) plt.show() print("\nГрафик сохранён в quadratic_plot.png") if __name__ == "__main__": main()