CÁC LƯU Ý KHI THỰC HÀNH VIẾT CHƯƠNG TRÌNH
Xác định input
Xác định Output
Lựa chọn thuật toán
Kiểm thử, tối ưu thuật toán
Nhiệm vụ 1: Viết chương trình nhập từ bàn phím số tự nhiên n, kiểm tra n có phải là số nguyên tố hay không. Nếu n là hợp số thì in ra kết quả phân tích n thành tích các thừa số nguyên tố. (Số 1 không là số nguyên tố, cũng không là hợp số)
Xác định input: Số n
Xác định output:
Nếu n = 1: Thông báo n không là nguyên tố, cũng không là hợp số.
Nếu n > 1: Kiểm tra và in ra kết quả n là số nguyên tố hoặc dãy tích thừa số nguyên tố của n.
Thuật toán:
Tạo list NT để lưu danh sách các phần tử của tích các thừa số nguyên tố của n
Duyệt các số k từ 2 đến căn bậc 2 của n
Nếu n chia hết cho k thì thực hiện chia liên tục cho đến khi không chia hết.
Cập nhật các thừa số vừa tìm được vào NT
Tiếp tục chia cho k với phần còn lại (n//k)
Nếu kết thúc vòng lặp mà n > 1 thì n là số nguyên tố, nếu n = 1 thì in dãy NT
n = int(input("Nhập số tự nhiên n: "))
m = n
k = 2
NT = []
while m > 1:
while m%k != 0:
k = k + 1
NT.append(k)
m = m//k
count = len(NT)
if count == 0:
print(n, "không là số nguyên tố")
elif count == 1:
print(n, "là số nguyên tố")
else:
print(n, "là hợp số")
print(n, "=", end = " ")
for i in range(count):
if i<count -1:
print (NT[i], "x", end = " ")
else:
print (NT[i])
Nhiệm vụ 2: Viết chương trình nhập từ bàn phím 3 số thực a, b, c. Tìm nghiệm của phương trình bậc 2: a*x^2 + b*x + c = 0
Input: 3 số thực a, b, c
Output: Kết quả nghiệm của phương trình
Thuật toán:
Nếu a = b = c = 0: Phương trình vô số nghiệm
Nếu a = b = 0, c ≠ 0: Phương trình vô nghiệm
Nếu a = 0, b ≠ 0: Phương trình trở thành phương trình bậc nhất, có một nghiệm duy nhất
Nếu a ≠ 0: Kết quả phụ thuộc delta = b^2 - 4*a*c
Kết quả phương trình vô nghiệm nếu delta < 0
Kết quả phương trình có nghiệm kép nếu delta = 0
Kết quả phương trình có 2 nghiệm phân biệt nếu delta > 0
# Khai báo hàm tính căn bậc hai
def sqrt(x):
return x**0.5
# Nhập dữ liệu
def NhapDL():
s = input("Nhập ba số a, b, c cách nhau bởi dấu cách: ")
snum = s.split()
return float(snum [0]), float (snum [1]), float (snum [2])
# Giải phương trình bậc 1
def GiaiPT1(b,c):
if b != 0:
print("Phương trình có một nghiệm duy nhất:", round(-c/b,1))
elif c == 0:
print("Phương trình có vô số nghiệm")
else:
print("Phương trình vô nghiệm")
# Giải phương trình bậc 2
def GiaiPT2(a,b,c):
if a == 0:
GiaiPT1(b,c)
else:
delta = b*b - 4*a*c
if delta > 0:
x1 = (-b + sqrt(delta))/(2*a)
x2 = (-b + sqrt(delta))/(2*a)
print("Phương trình có hai nghiệm khác biệt")
print("x1 =", round(x1, 1), "x2 =", round(x2,1))
elif delta == 0:
x = (-b/(2*a))
print("Phương trình có nghiệm kép")
print("x1,2 = ", round(x,1))
else:
print("Phương trình vô nghiệm")
# Chương trình chính
a,b,c = NhapDL()
GiaiPT2(a, b, c)