Trả lời nhanh
Bài thực hành lập trình giải bài toán trên máy tính yêu cầu em đi đủ 5 bước: xác định đầu vào – đầu ra, thiết kế thuật toán, viết chương trình bằng Python, chạy thử với nhiều bộ dữ liệu và hiệu chỉnh khi có lỗi. Muốn làm tốt, em cần nắm chắc ba cấu trúc: tuần tự, rẽ nhánh (if) và lặp (for, while).
Lưu ý: các đề và ví dụ dưới đây do chúng tôi tự đặt để minh hoạ cho phương pháp thực hành, em dùng để luyện tập và đối chiếu với bài làm trên lớp.
1. Quy trình giải một bài toán bằng máy tính
Máy tính chỉ thực hiện đúng những gì chương trình viết ra, nên trước khi gõ code em phải hiểu rõ bài toán. Quy trình chuẩn gồm năm bước như sơ đồ sau.

- Xác định bài toán: cho gì (Input), cần tìm gì (Output), có điều kiện ràng buộc nào (ví dụ n là số nguyên dương).
- Thiết kế thuật toán: mô tả các bước bằng liệt kê hoặc sơ đồ khối.
- Viết chương trình: chuyển thuật toán sang ngôn ngữ lập trình (Python).
- Chạy thử, kiểm thử: thử với dữ liệu thường, dữ liệu biên và dữ liệu đặc biệt.
- Hiệu chỉnh: tìm và sửa lỗi cho đến khi kết quả đúng.
2. Kiến thức Python cần nhớ
| Nội dung | Cú pháp | Ghi chú |
|---|---|---|
| Nhập số nguyên | n = int(input()) |
input() luôn trả về chuỗi nên phải ép kiểu |
| Nhập số thực | x = float(input()) |
Dùng khi dữ liệu có phần thập phân |
| Xuất kết quả | print("Tổng =", s) |
Các thành phần cách nhau bằng dấu phẩy |
| Chia lấy phần nguyên / dư | a // b, a % b |
a % b == 0 nghĩa là a chia hết cho b |
| Rẽ nhánh | if … : … else: … |
Nhớ dấu hai chấm và thụt lề |
| Lặp biết trước số lần | for i in range(a, b, bước) |
range(a, b) lấy từ a đến b − 1 |
| Lặp theo điều kiện | while điều_kiện: |
Phải có lệnh làm điều kiện thay đổi, nếu không sẽ lặp vô hạn |
Mẹo nhớ: “range dừng trước b” – muốn chạy tới n thì viết range(1, n + 1).
3. Bốn ví dụ thực hành có lời giải
Ví dụ 1: Tổng các số chẵn từ 1 đến n
Input: số nguyên dương n. Output: tổng 2 + 4 + 6 + … không vượt quá n.
n = int(input("Nhập n: "))
s = 0
for i in range(2, n + 1, 2):
s = s + i
print("Tổng các số chẵn =", s)
Chạy thử: n = 10 cho 2 + 4 + 6 + 8 + 10 = 30. Với n = 1, vòng lặp không chạy lần nào nên s = 0, đây là kết quả hợp lý.
Ví dụ 2: Kiểm tra số nguyên tố
Ý tưởng: số n ≥ 2 là nguyên tố nếu không có ước nào trong khoảng từ 2 đến căn bậc hai của n. Ta kiểm tra điều kiện i * i <= n để tránh dùng căn.
n = int(input("Nhập n: "))
if n < 2:
print("Không phải số nguyên tố")
else:
la_nt = True
i = 2
while i * i <= n:
if n % i == 0:
la_nt = False
break
i = i + 1
if la_nt:
print("Là số nguyên tố")
else:
print("Không phải số nguyên tố")
Kiểm thử: n = 29 → nguyên tố; n = 21 → không (chia hết cho 3); n = 1 → không; n = 2 → nguyên tố (vòng while không chạy vì 2×2 > 2).
Ví dụ 3: Tìm số lớn nhất trong n số
Ý tưởng “đặt kỷ lục”: lấy số đầu tiên làm giá trị lớn nhất tạm thời, rồi so sánh lần lượt với các số còn lại.
n = int(input("Số lượng số: "))
lon_nhat = int(input("Số thứ 1: "))
for i in range(2, n + 1):
x = int(input("Số thứ " + str(i) + ": "))
if x > lon_nhat:
lon_nhat = x
print("Số lớn nhất là", lon_nhat)
Chạy thử với dãy 5, −2, 9, 7 (n = 4) cho kết quả 9. Lưu ý không gán lon_nhat = 0 ngay từ đầu, vì nếu mọi số đều âm thì kết quả sẽ sai.
Ví dụ 4: Ước chung lớn nhất (thuật toán Euclid)
a = int(input("a = "))
b = int(input("b = "))
while b != 0:
a, b = b, a % b
print("UCLN =", a)
Với a = 48, b = 36: (48, 36) → (36, 12) → (12, 0), dừng và in 12. Đây là ví dụ cho thấy vòng while phù hợp khi không biết trước số lần lặp.
4. Cách kiểm thử chương trình
Một chương trình chạy ra kết quả chưa chắc đã đúng. Em nên chuẩn bị ít nhất ba loại dữ liệu:
- Dữ liệu thông thường: trường hợp điển hình, tính nhẩm được kết quả.
- Dữ liệu biên: giá trị nhỏ nhất, lớn nhất cho phép (n = 1, n = 0, n = 2…).
- Dữ liệu đặc biệt: toàn số âm, các số bằng nhau, dãy chỉ có một phần tử.
Python phân biệt ba nhóm lỗi: lỗi cú pháp (SyntaxError – viết sai quy tắc, chương trình không chạy), lỗi thực thi (ví dụ ValueError khi nhập chữ vào int(), ZeroDivisionError khi chia cho 0) và lỗi logic (chạy được nhưng kết quả sai – khó phát hiện nhất, chỉ tìm ra nhờ kiểm thử).
5. Lỗi sai thường gặp
- Quên ép kiểu:
n = input()rồi dùngn + 1gây lỗi vì n là chuỗi. - Thụt lề sai hoặc thiếu dấu
:sauif,for,while,else. - Dùng
=thay cho==khi so sánh. - Viết
range(1, n)nên bỏ sót giá trị n. - Vòng
whilekhông thay đổi biến điều kiện, chương trình chạy mãi (nhấn Ctrl + C để dừng). - Khởi tạo biến tổng bên trong vòng lặp, khiến tổng bị đặt lại về 0 mỗi lần.
6. Bài luyện tập tự giải
Bài 1. Viết chương trình tính n! (với n = 5 thì in ra kết quả nào?).
Gợi ý: gán gt = 1, cho i chạy từ 1 đến n, nhân gt = gt * i. Đáp án với n = 5: 120.
Bài 2. Đếm số ước dương của n. Với n = 36 chương trình in ra bao nhiêu?
Gợi ý: dùng biến đếm, duyệt i từ 1 đến n, nếu n % i == 0 thì tăng đếm. Đáp án: 9 ước (1, 2, 3, 4, 6, 9, 12, 18, 36).
Bài 3. Tính tổng các chữ số của số nguyên dương n. Với n = 2745 kết quả là bao nhiêu?
Gợi ý: lặp khi n > 0: cộng n % 10 vào tổng rồi gán n = n // 10. Đáp án: 2 + 7 + 4 + 5 = 18.
Tóm tắt cần nhớ
- Giải bài toán trên máy tính gồm: xác định bài toán → thuật toán → chương trình → kiểm thử → hiệu chỉnh.
- Biết số lần lặp dùng
for; chưa biết số lần lặp dùngwhile. - Luôn kiểm thử với dữ liệu biên và dữ liệu đặc biệt, không chỉ một bộ dữ liệu.
- Đọc kỹ thông báo lỗi của Python: nó cho biết dòng và loại lỗi để em sửa nhanh hơn.
Cùng chuyên đề: Bài nằm trong mục lục Lý thuyết Tin học 10 Cánh diều: Kiến thức trọng tâm cả năm.
Câu hỏi thường gặp
Tin học 10 bài 17 Cánh Diều học nội dung gì?
Bài này là bài thực hành lập trình giải bài toán trên máy tính: em phân tích bài toán, xây dựng thuật toán, viết chương trình bằng Python, chạy thử và sửa lỗi.
Khi nào dùng vòng lặp for, khi nào dùng while?
Dùng for khi biết trước số lần lặp hoặc duyệt một dãy giá trị. Dùng while khi số lần lặp phụ thuộc vào điều kiện, ví dụ thuật toán Euclid tìm ước chung lớn nhất.
Vì sao phải dùng int() khi nhập dữ liệu bằng input()?
Hàm input() luôn trả về kiểu chuỗi. Muốn cộng, trừ, so sánh như số thì phải đổi sang số nguyên bằng int() hoặc số thực bằng float().
Chương trình chạy ra kết quả nhưng sai thì là lỗi gì?
Đó là lỗi logic. Em tìm lỗi bằng cách chạy thử nhiều bộ dữ liệu (thường, biên, đặc biệt) và theo dõi giá trị các biến qua từng bước.