Viết chương trình con giải phương trình bậc 2 tổng quát bằng Python (thêm câu lệ…
Các em còn nhớ phương trình bậc hai tổng quát có dạng như thế nào không? Đó là:
ax^2 + bx + c = 0
Trong đó, a, b, c là các hệ số, và a khác 0.
Chúng ta sẽ cùng nhau đi từng bước để xây dựng chương trình này nhé.
Bước 1: Nhập dữ liệu đầu vào
Đầu tiên, chương trình cần phải nhận được các hệ số a, b, c từ người dùng. Chúng ta sẽ sử dụng hàm \(input()\) để thực hiện việc này. Vì các hệ số này có thể là số thập phân, nên chúng ta sẽ chuyển đổi chúng sang kiểu dữ liệu \(float\).
python
a = float(input(“Nhập hệ số a: “))
b = float(input(“Nhập hệ số b: “))
c = float(input(“Nhập hệ số c: “))
Bước 2: Kiểm tra trường hợp đặc biệt khi a = 0
Theo định nghĩa, phương trình bậc hai yêu cầu hệ số a phải khác 0. Nếu a = 0, thì phương trình trở thành bx + c = 0, đây là phương trình bậc nhất. Chúng ta cần xử lý trường hợp này.
Nếu a = 0 và b cũng bằng 0:
– Nếu c = 0, thì phương trình có vô số nghiệm.
– Nếu c khác 0, thì phương trình vô nghiệm.
Nếu a = 0 và b khác 0:
– Phương trình có một nghiệm duy nhất là \(x = -c/b\).
Bước 3: Tính Delta (Δ)
Đây là bước quan trọng nhất để xác định số nghiệm của phương trình bậc hai. Delta được tính theo công thức:
\[ \Delta = b^2 – 4ac \]
Chúng ta sẽ lưu giá trị này vào một biến tên là \(delta\).
python
delta = b**2 – 4*a*c
Bước 4: Xét các trường hợp dựa vào giá trị của Delta
Dựa vào giá trị của Delta, chúng ta sẽ có các trường hợp sau:
Trường hợp 1: Delta > 0
Phương trình có hai nghiệm phân biệt được tính theo công thức:
\[ x_1 = \frac{-b + \sqrt{\Delta}}{2a} \]
\[ x_2 = \frac{-b – \sqrt{\Delta}}{2a} \]
Để tính căn bậc hai của Delta, chúng ta sẽ sử dụng hàm \(math.sqrt()\). Vì vậy, chúng ta cần nhập thư viện \(math\) ở đầu chương trình.
Trường hợp 2: Delta = 0
Phương trình có nghiệm kép (hai nghiệm bằng nhau):
\[ x = \frac{-b}{2a} \]
Trường hợp 3: Delta < 0
Phương trình vô nghiệm thực. Tuy nhiên, nếu chúng ta học sâu hơn về số phức, phương trình sẽ có hai nghiệm phức liên hợp. Trong phạm vi chương trình lớp 10, chúng ta sẽ thông báo là phương trình vô nghiệm thực.
Bước 5: Xây dựng chương trình con (Hàm)
Để chương trình được gọn gàng và dễ tái sử dụng, chúng ta sẽ đóng gói các bước trên vào một hàm. Tên hàm có thể là \(giai_phuong_trinh_bac_hai\). Hàm này sẽ nhận vào ba tham số là \(a\), \(b\), \(c\).
python
import math
def giai_phuong_trinh_bac_hai(a, b, c):
if a == 0:
# Xử lý trường hợp phương trình bậc nhất
if b == 0:
if c == 0:
print(“Phương trình có vô số nghiệm.”)
else:
print(“Phương trình vô nghiệm.”)
else:
x = -c / b
print(f”Đây là phương trình bậc nhất. Nghiệm là x = {x}”)
else:
delta = b**2 – 4*a*c
print(f”Delta = {delta}”)
if delta > 0:
x1 = (-b + math.sqrt(delta)) / (2*a)
x2 = (-b – math.sqrt(delta)) / (2*a)
print(f”Phương trình có hai nghiệm phân biệt:”)
print(f”x1 = {x1}”)
print(f”x2 = {x2}”)
elif delta == 0:
x = -b / (2*a)
print(f”Phương trình có nghiệm kép:”)
print(f”x = {x}”)
else:
print(“Phương trình vô nghiệm thực.”)
Bước 6: Thêm câu lệnh lặp lại chương trình
Để người dùng có thể giải nhiều phương trình liên tiếp mà không cần chạy lại toàn bộ chương trình, chúng ta sẽ sử dụng câu lệnh lặp \(while\). Chúng ta sẽ sử dụng một biến cờ (ví dụ: \(tiep_tuc\)) để kiểm soát vòng lặp.
python
import math
def giai_phuong_trinh_bac_hai(a, b, c):
if a == 0:
# Xử lý trường hợp phương trình bậc nhất
if b == 0:
if c == 0:
print(“Phương trình có vô số nghiệm.”)
else:
print(“Phương trình vô nghiệm.”)
else:
x = -c / b
print(f”Đây là phương trình bậc nhất. Nghiệm là x = {x}”)
else:
delta = b**2 – 4*a*c
print(f”Delta = {delta}”)
if delta > 0:
x1 = (-b + math.sqrt(delta)) / (2*a)
x2 = (-b – math.sqrt(delta)) / (2*a)
print(f”Phương trình có hai nghiệm phân biệt:”)
print(f”x1 = {x1}”)
print(f”x2 = {x2}”)
elif delta == 0:
x = -b / (2*a)
print(f”Phương trình có nghiệm kép:”)
print(f”x = {x}”)
else:
print(“Phương trình vô nghiệm thực.”)
# Vòng lặp chính của chương trình
tiep_tuc = “yes”
while tiep_tuc.lower() == “yes”:
print(“\n— Giải Phương Trình Bậc Hai —“)
try:
a = float(input(“Nhập hệ số a: “))
b = float(input(“Nhập hệ số b: “))
c = float(input(“Nhập hệ số c: “))
giai_phuong_trinh_bac_hai(a, b, c)
except ValueError:
print(“Lỗi nhập liệu. Vui lòng chỉ nhập số.”)
tiep_tuc = input(“Bạn có muốn giải phương trình khác không? (yes/no): “)
print(“Cảm ơn bạn đã sử dụng chương trình!”)
Trong đoạn mã trên:
– Chúng ta sử dụng \(while tiep_tuc.lower() == “yes”:\) để lặp lại. \(tiep_tuc.lower()\) đảm bảo rằng dù người dùng nhập “Yes”, “YES”, hay “yes” thì chương trình vẫn hiểu.
– Phần \(try…except ValueError\) được thêm vào để bắt lỗi nếu người dùng nhập không phải là số, giúp chương trình không bị dừng đột ngột.
Vậy là chúng ta đã hoàn thành chương trình giải phương trình bậc hai tổng quát bằng Python, có bao gồm cả chức năng lặp lại chương trình. Các em về nhà thực hành và thử với nhiều bộ hệ số khác nhau nhé! Có bất kỳ câu hỏi nào, các em cứ mạnh dạn hỏi thầy.
from math import *
def gpt(a,b,c):
if a == 0 and b == 0 and c == 0:
return 'Phương trình vô số nghiệm'
elif a!=0:
delta = b*b - 4*a*c
if delta == 0:
return f'Phương trình có nghiệm:x = {-b/(2*a)}'
if delta > 0:
return f'Phương trình có hai nghiệm phân biệt:\n x1 = {(-b+sqrt(delta) )/(2*a)}; x2 = { (-b-sqrt(delta) )/(2*a) }'
if delta < 0:
return f'Phương trình vô nghiệm'
elif a == 0 and b == 0:
return 'Phương trình vô nghiệm'
else:
return f'Phương trình có nghiệm duy nhất:\n x = {-c/b}'
while True:
a = float(input('Nhập a='))
b = float(input('Nhập b='))
c = float(input('Nhập c='))
print(gpt(a,b,c))
import math
def tinh(a,b,c):
if a==0:
return "Vo nghiem!" if b==0 else f"Nghiem: x={-c/b:.2f}"
d=b**2-4*a*c
if d<0: return "Vo nghiem!"
if d==0: return f"Nghiem kep: x={-b/(2*a):.2f}"
x1,x2=(-b+math.sqrt(d))/(2*a),(-b-math.sqrt(d))/(2*a)
return f"Nghiem: x1={x1:.2f}, x2={x2:.2f}"
while True:
a,b,c=map(float,input().split())
print(tinh(a,b,c))