Rẽ nhánh theo a và biệt thức
Với `ax²+bx+c=0`, điều kiện `a≠0` mới là phương trình bậc hai. Tính `Δ=b²−4ac`: nếu Δ<0 thì không có nghiệm thực; Δ=0 có nghiệm kép `−b/(2a)`; Δ>0 có hai nghiệm `(−b+√Δ)/(2a)` và `(−b−√Δ)/(2a)`. Ví dụ `x²−3x+2=0` có Δ=1 và hai nghiệm 2, 1. Hai công thức nghiệm phải dùng hai dấu khác nhau; dùng dấu cộng hai lần sẽ lặp cùng một nghiệm.
Hàm trả dữ liệu để chương trình chính trình bày
```python
from math import sqrt
def nghiem_bac_hai(a, b, c):
if a == 0:
raise ValueError("a phải khác 0")
delta = b * b - 4 * a * c
if delta < 0:
return ()
if delta == 0:
return (-b / (2 * a),)
return ((-b + sqrt(delta)) / (2 * a),
(-b - sqrt(delta)) / (2 * a))
```
Gọi `nghiem_bac_hai(1, -3, 2)`, `nghiem_bac_hai(1, 2, 1)` và `nghiem_bac_hai(1, 0, 1)` lần lượt cho `(2.0, 1.0)`, `(-1.0,)` và `()`: hai nghiệm thực phân biệt, một nghiệm kép, không có nghiệm thực. Có thể lưu hàm vào `phuong_trinh.py` rồi để `main.py` nhập và diễn đạt thông báo. Giá trị trả về rỗng chỉ có nghĩa **không có nghiệm thực** trong phạm vi bài; không kết luận không có nghiệm phức.
Bài luyện
`x²−3x+2=0` có hai nghiệm thực nào?
Δ=1, dùng hai dấu được (3+1)/2=2 và (3−1)/2=1.
Dùng dấu cộng hai lần.
Thay vào phương trình không đúng.
Δ dương.
Lời giải
Với a=1,b=-3,c=2, Δ=9−8=1; hai nghiệm là (3±1)/2, tức 2 và 1.
Bài luyện
Khi nào `ax²+bx+c=0` không còn là phương trình bậc hai?
Hệ số của x² phải khác 0.
b có thể 0 mà vẫn có x².
c có thể 0 mà vẫn có x².
Δ=0 vẫn là bậc hai có nghiệm kép.
Lời giải
Bậc của phương trình do hệ số a của x² quyết định; a=0 thì hạng x² biến mất.
Bài luyện
Với Δ<0, hàm trong bài trả `()` để nói điều gì?
Trong số thực không lấy căn bậc hai của Δ âm.
Không suy ra nghiệm 0.
Nghiệm kép khi Δ=0.
a đã được kiểm riêng.
Lời giải
Khi Δ âm, phương trình bậc hai không có nghiệm thực; hàm trả bộ rỗng theo quy ước của mã.
Đang học