Gỡ lỗi nâng cao
Mục tiêu: Sửa năm chương trình bị lỗi, mỗi lỗi theo nhật ký năm cột: triệu chứng, giả thuyết, thí nghiệm, sửa, kiểm tra lại.
Em sẽ học gì
- Nội dung trong bài: sửa năm chương trình bị lỗi. Mỗi lỗi ghi nhật ký gỡ lỗi gồm năm cột.
- Triệu chứng: chương trình làm sai điều gì. Giả thuyết: đoán khối nào gây ra cái sai đó.
- Thí nghiệm: thử một việc nhỏ để biết giả thuyết đúng hay sai, trước khi sửa.
- Sửa, rồi kiểm tra lại: lỗi đã hết, và không sinh ra lỗi mới.
- Tổng kết năm lỗi. Một: biến không đặt lại. Đặt biến về giá trị đầu ngay dưới khối cờ xanh.
- Hai: nhầm hoặc với và. Muốn nằm trong một khoảng thì dùng và.
- Ba: so sánh chữ với số. Kiểm tra dữ liệu nhập là số rồi mới so sánh.
- Bốn: bản sao không bị xoá. Bản sao xong việc thì phải xoá.
- Năm: thông báo gọi nhau mãi. Phải có điều kiện dừng.
- Về kỹ thuật lập trình, bài này ta học: ghi nhật ký gỡ lỗi năm cột cho mỗi lỗi.
- Thí nghiệm trong Scratch: bấm vào một khối để xem kết quả của nó, hoặc thêm một biến để đếm.
Lỗi 1. Mong muốn: mỗi lần bấm cờ xanh, chơi lại từ 0 điểm; bấm vào mèo được 1 điểm.
Chương trình đang có như sau: biến diem,

khối Khi bấm vào cờ xanh,

nói Bấm vào mèo trong 2 giây,

và khối Khi bấm vào nhân vật này,

gắn khối thay đổi biến một lượng 1, chọn diem.

Chạy thử: bấm cờ xanh, bấm vào mèo ba lần: diem lên 3. Đúng. Chơi lần hai: bấm cờ xanh, bấm mèo một lần. Triệu chứng: diem thành 4, không bắt đầu lại từ 0.

Giả thuyết: khi bấm cờ xanh, không có khối nào đặt diem về 0. Thí nghiệm: chỉ bấm cờ xanh, nhìn ô diem ở góc sân khấu: vẫn là 4. Giả thuyết đúng.

Sửa: gắn khối đặt biến thành ngay dưới khối cờ xanh, chọn diem, giữ số 0.

Kiểm tra lại: bấm cờ xanh, diem về 0. Bấm mèo hai lần: diem là 2. Chơi lần nữa: lại bắt đầu từ 0. Đã sửa xong lỗi thứ nhất.

Lỗi 2. Mong muốn: mèo đi theo chuột; x từ 0 đến 100 thì nói Trong vùng, ngoài ra nói Ngoài vùng.
Chương trình đang có: khối Khi bấm vào cờ xanh,

khối liên tục,

bên trong, đặt x bằng

toạ độ x con trỏ chuột,

khối nếu, nếu không thì,

điều kiện là khối hoặc, ô trái: x lớn hơn, 0,

ô phải: x nhỏ hơn 100.

Nhánh nếu: nói Trong vùng,

nhánh nếu không thì: nói Ngoài vùng.

Chạy thử: bấm cờ xanh. x bằng 50: Trong vùng, đúng. Triệu chứng: x bằng âm 150 vẫn nói Trong vùng.

Giả thuyết: khối hoặc chỉ cần MỘT điều kiện đúng. Âm 150 nhỏ hơn 100, nên cả khối đúng. Thí nghiệm: kéo khối hoặc ra chỗ trống để thử riêng. Chuột ở ngoài sân khấu nên mèo ở x bằng âm 240. Bấm vào khối hoặc: Scratch hiện true, tức là đúng. Kéo khối x lớn hơn 0 ra riêng, bấm vào nó: false, tức là sai. Kéo khối x nhỏ hơn 100 ra riêng, bấm vào: true. Chỉ một điều kiện đúng mà khối hoặc đã đúng. Giả thuyết đúng. Bấm nút đỏ để dừng. Sửa: xoá khối hoặc đã trống.

x phải lớn hơn 0, đồng thời nhỏ hơn 100: lấy khối và, đặt ra chỗ trống, kéo khối x lớn hơn 0 sang ô trái của khối và, kéo khối x nhỏ hơn 100 sang ô phải, rồi kéo khối và vào ô điều kiện.

Kiểm tra lại: x bằng 50: Trong vùng. Âm 150 và 160: Ngoài vùng. Đã sửa xong lỗi thứ hai.

Lỗi 3. Mong muốn: hỏi tuổi; lớn hơn 12 thì nói Đủ tuổi xem phim, ngược lại nói Chưa đủ tuổi.
Chương trình đang có: khối Khi bấm vào cờ xanh,

hỏi Bạn bao nhiêu tuổi và đợi,

khối nếu, nếu không thì,

điều kiện: câu trả lời lớn hơn 12,

nhánh nếu: nói Đủ tuổi xem phim,

nhánh nếu không thì: nói Chưa đủ tuổi.

Chạy thử: bấm cờ xanh, gõ 8: Chưa đủ tuổi. Đúng. Gõ 8 tuổi. Triệu chứng: mèo nói Đủ tuổi xem phim!

Giả thuyết: 8 tuổi không phải là số, Scratch so sánh như chữ, từng ký tự: 8 đứng sau 1, nên lớn hơn 12. Thí nghiệm: câu trả lời vẫn là 8 tuổi. Kéo khối so sánh ra chỗ trống, bấm vào nó: true. 8 tuổi lớn hơn 12 thật. Giả thuyết đúng. Kéo khối so sánh về lại ô điều kiện. Sửa: chỉ nhận câu trả lời là số. Kéo khối nếu ra chỗ trống,

gắn khối lặp lại cho đến khi dưới khối hỏi,

điều kiện là phép so sánh bằng,

ô phải thả câu trả lời,

lấy phép cộng ra chỗ trống, ô phải gõ 0,

ô trái thả câu trả lời, rồi kéo phép cộng vào ô trái: câu trả lời cộng 0 bằng câu trả lời. Vì sao? Số cộng 0 vẫn là chính nó: 8 cộng 0 là 8. Còn chữ cộng 0 thì thành 0, không bằng 8 tuổi.

Bên trong vòng lặp: hỏi lại, gõ: Chỉ gõ chữ số nhé! Bạn bao nhiêu tuổi? Kéo khối nếu về, gắn dưới vòng lặp.

Kiểm tra lại: gõ 8 tuổi, chương trình hỏi lại. Gõ 8: Chưa đủ tuổi. Gõ 15: Đủ tuổi xem phim. Đã sửa xong lỗi thứ ba.

Lỗi 4. Mong muốn: mưa bóng rơi mãi; mỗi quả bóng là một bản sao; dem = số bản sao đang có.
Chương trình đang có: nhân vật quả bóng, thêm từ thư viện, gõ Ball, chọn quả bóng. Biến dem,

khối Khi bấm vào cờ xanh,

ẩn bóng gốc,

đặt dem thành 0,

lặp mãi:

tạo bản sao của chính tôi,

đợi 0,1 giây.

Mỗi bản sao: Khi tôi bắt đầu là một bản sao,

dem tăng 1,

đi tới điểm x y, y bằng 170,

x ngẫu nhiên từ âm 220 đến 220,

hiện,

lặp lại 35 lần:

y giảm 10.

Chạy thử. Triệu chứng: bóng chồng chất ở đáy sân khấu, ô dem tăng mãi.

Giả thuyết: rơi xong, bản sao vẫn còn đó, không bị xoá. Bản sao cứ tích lại, máy chạy chậm dần. Thí nghiệm: nhìn ô dem: số bản sao rất lớn, trong khi trên trời chỉ khoảng 10 quả đang rơi. Giả thuyết đúng. Bấm nút đỏ. Scratch chỉ cho tối đa 300 bản sao: đủ 300 thì không tạo thêm được nữa.

Sửa: dưới vòng lặp, gắn khối thay đổi biến, chọn dem, gõ âm 1,

rồi khối xoá bản sao này: rơi xong thì xoá.

Kiểm tra lại: bóng rơi xong thì biến mất, dem chỉ khoảng 10 và không tăng mãi. Đã sửa xong lỗi thứ tư.

Lỗi 5. Mong muốn: mèo và bóng chào nhau, mỗi bên 3 lần rồi dừng.
Chương trình đang có: mèo ở x bằng âm 120,

quả bóng thêm từ thư viện, gõ Ball, chọn quả bóng, đặt ở x bằng 120. Mèo:

Khi bấm vào cờ xanh,

phát thông báo lượt mèo.

Khi nhận thông báo lượt mèo,

nói Chào bóng trong 1 giây,

phát thông báo lượt bóng.

Quả bóng:

Khi nhận thông báo lượt bóng,

nói Chào mèo trong 1 giây,

phát thông báo lượt mèo.

Chạy thử. Triệu chứng: mèo và bóng chào nhau mãi, quá ba lần mà không dừng.

Bấm nút đỏ để dừng. Giả thuyết: mỗi bên nhận thông báo lại phát thông báo cho bên kia. Không có điều kiện dừng nên gọi nhau mãi. Thí nghiệm: tạo biến luot để đếm số lần mèo chào. Chọn mèo,

dưới khối cờ xanh, đặt luot thành 0,

dưới khối nhận lượt mèo, luot tăng 1. Chạy: luot vượt quá 3 mà vẫn tăng. Giả thuyết đúng: không có gì làm hai bên dừng lại. Bấm nút đỏ.

Sửa: chọn quả bóng, kéo khối phát thông báo ra chỗ trống,

gắn khối nếu dưới khối nói,

điều kiện là phép so sánh nhỏ hơn, bên phải gõ 3,

bên trái thả biến luot, rồi đặt khối phát thông báo vào trong khối nếu: chỉ gọi mèo khi chưa đủ ba lượt.

Kiểm tra lại: mỗi bên chào đúng ba lần rồi dừng, luot dừng ở 3. Đã sửa xong lỗi thứ năm.

Bài tập
Bài tập: mỗi bạn làm một chương trình có một lỗi khó thấy, đưa bạn khác tìm, rồi cùng ghi nhật ký năm cột.