Giải Tin Học 8 trang 87
Lời giải chi tiết SGK Lớp 8 · Môn Tin Há»c · Trang 87–88
Bài 15: GỠ LỖI
Mục tiêu bài học:
- Chạy thử, tìm lỗi và sửa được lỗi cho chương trình.
Hoạt động 1: Đếm số lần đoán
Đề bài:
Trong trò chơi Đoán số ở Bài 14, ai đoán đúng số bí mật với ít lần đoán hơn sẽ là người thắng cuộc. Ở chương trình trong Hình 15.1, biến số lần đoán được bổ sung để đếm số lần người chơi đoán và thông báo giá trị này khi người chơi đoán đúng số bí mật.
Trước khi chia sẻ trò chơi của mình, em quyết định kiểm tra xem trò chơi có hoạt động tốt không. Hãy cho biết kết quả của việc kiểm tra đó bằng cách mô tả tình huống chương trình chạy không đúng kịch bản (nếu có).
Cách giải
a) Kiểm thử
Theo kịch bản, trò chơi sẽ thông báo số lần đoán khi người chơi đoán đúng số bí mật.
Phân tích chương trình Hình 15.1:
- Dòng (1): Khi bấm vào cờ xanh
- Dòng (2): Đặt
số lần đoán= 0 - Dòng (3): Đặt
số bí mật= lấy ngẫu nhiên từ 1 đến 100 - Dòng (4)-(12): Vòng lặp hỏi và kiểm tra đáp án
Kết quả kiểm thử:
Khi chạy thử chương trình, em sẽ thấy số lần đoán mà máy tính hiển thị luôn kém số lần thực tế mà người chơi đã đoán một đơn vị.
Ví dụ: Nếu người chơi đoán 5 lần mới đúng, chương trình chỉ hiển thị là 4 lần.
Nguyên nhân: Chương trình có lỗi logic - biến số lần đoán không được cập nhật đúng cách.
Hoạt động 2: Không làm việc hay làm việc sai?
Đề bài:
Em hãy cho biết, chương trình đã cho trong Hình 15.1 không hoạt động được hay nó có hoạt động nhưng đã thực hiện không đúng kịch bản?
Cách giải
Phân tích:
Khi chạy thử, em nhận ra rằng chương trình vẫn hoạt động vì máy tính vẫn hỏi và trả lời theo sự điều khiển của các khối lệnh.
Tuy nhiên, nó thực hiện không đúng kịch bản vì số lần đoán được hiển thị không đúng với số lần thực tế mà người chơi đã đoán.
Đáp án: Chương trình có hoạt động nhưng thực hiện không đúng kịch bản. Đây là lỗi logic (lỗi ngữ nghĩa) - chương trình viết đúng cú pháp nhưng kết quả sai so với mong muốn.
Câu hỏi trắc nghiệm: Chọn phát biểu đúng nhất về hoạt động gỡ lỗi
Đề bài:
Chọn phát biểu đúng nhất về hoạt động gỡ lỗi.
A. Gỡ lỗi là phát hiện và loại bỏ lỗi. Trong lập trình, không nhất thiết phải gỡ lỗi.
B. Gỡ lỗi là chạy thử chương trình để phát hiện lỗi. Trong lập trình, không nhất thiết phải gỡ lỗi.
C. Gỡ lỗi là chạy thử chương trình để phát hiện lỗi. Gỡ lỗi là một phần quan trọng của lập trình.
D. Gỡ lỗi là phát hiện và loại bỏ lỗi. Gỡ lỗi là một phần quan trọng của lập trình.
Cách giải
Phân tích từng đáp án:
- Đáp án A: Sai phần sau - trong lập trình bắt buộc phải gỡ lỗi để đảm bảo chương trình hoạt động đúng.
- Đáp án B: Sai ở cả hai ý:
- Gỡ lỗi không chỉ là "chạy thử" mà còn bao gồm việc "loại bỏ lỗi"
- Trong lập trình bắt buộc phải gỡ lỗi
- Đáp án C: Sai phần đầu - Gỡ lỗi không chỉ là "chạy thử để phát hiện" mà còn phải "loại bỏ lỗi"
- Đáp án D: Đúng cả hai ý:
- Gỡ lỗi = phát hiện + loại bỏ lỗi ✓
- Gỡ lỗi là phần quan trọng của lập trình ✓
Đáp án: D
Hoạt động 3: Gỡ lỗi
Đề bài:
Xét tình huống máy tính hiển thị số lần đoán không đúng với số lần đoán thực tế của người chơi. Em hãy trả lời các câu hỏi:
- Theo kịch bản, biến
số lần đoánsẽ thay đổi trong tình huống nào? - Những khối lệnh nào làm thay đổi biến
số lần đoán? - Có điều gì khác nhau giữa kịch bản và những khối lệnh tương ứng?
Cách giải
Câu 1: Theo kịch bản, biến số lần đoán sẽ thay đổi trong tình huống nào?
Đáp án: Theo kịch bản, biến số lần đoán phải tăng thêm 1 mỗi khi người chơi nhập một số để đoán (tức là mỗi lần người chơi thực hiện một lượt đoán).
Câu 2: Những khối lệnh nào làm thay đổi biến số lần đoán?
Nhìn vào Hình 15.1:
- Dòng (2):
đặt số lần đoán = 0→ Khởi tạo giá trị ban đầu - Dòng (9):
thay đổi số lần đoán một lượng 1→ Tăng biến lên 1
Đáp án: Có 2 khối lệnh làm thay đổi biến số lần đoán: - Khối lệnh ở dòng (2): đặt giá trị ban đầu = 0 - Khối lệnh ở dòng (9): tăng thêm 1
Câu 3: Có điều gì khác nhau giữa kịch bản và những khối lệnh tương ứng?
Phân tích:
- Theo kịch bản: Biến
số lần đoánphải tăng mỗi khi người chơi nhập số đoán (ngay sau khi hỏi và nhận câu trả lời). - Trong chương trình: Khối lệnh tăng
số lần đoán(dòng 9) chỉ nằm trong nhánh "nếu trả lời < số bí mật" (Quá cao).
Đáp án: Sự khác nhau là: - Kịch bản yêu cầu: Tăngsố lần đoánsau MỖI lần người chơi đoán - Chương trình thực tế: Chỉ tăngsố lần đoánkhi người chơi đoán quá cao (trả lời > số bí mật) → Khi người chơi đoán quá thấp hoặc đoán đúng, biếnsố lần đoánkhông được tăng, dẫn đến kết quả sai.
Kiến thức cần ghi nhớ
🎯 Ghi nhớ: 1. Kiểm thử là gì? - Là việc chạy thử chương trình để phát hiện những tình huống bất thường (lỗi) khi thực hiện chương trình. - Các lỗi cần được loại bỏ trước khi chương trình được coi là sản phẩm hoàn chỉnh. 2. Hai loại lỗi trong lập trình: - Lỗi cú pháp: Lỗi viết câu lệnh sai quy tắc → Chương trình không hoạt động được - Lỗi logic (lỗi ngữ nghĩa): Câu lệnh viết đúng cú pháp nhưng thực hiện sai so với kịch bản 3. Gỡ lỗi: - Là quá trình phát hiện và loại bỏ lỗi - Là một phần quan trọng của lập trình
💡 Mẹo nhớ: - Lỗi cú pháp = Viết sai → Không chạy được (như viết sai chính tả, máy không hiểu) - Lỗi logic = Viết đúng nhưng nghĩ sai → Chạy được nhưng kết quả sai (như làm đúng phép tính nhưng hiểu sai đề bài)
