Nâng cao · Mức E · Bài 6

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.

176

Chương trình đang có như sau: biến diem,

Bước 1
276

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

Bước 2
376

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

Bước 3
476

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

Bước 4
576

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

Bước 5
676
Chạy thử

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.

Bước 6
776

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.

Bước 7
876

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

Bước 8
976
Chạy thử

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.

Bước 9

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.

1076

Chương trình đang có: khối Khi bấm vào cờ xanh,

Bước 10
1176

khối liên tục,

Bước 11
1276

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

Bước 12
1376

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

Bước 13
1476

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

Bước 14
1576

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

Bước 15
1676

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

Bước 16
1776

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

Bước 17
1876

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

Bước 18
1976
Chạy thử

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.

Bước 19
2076

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.

Bước 20
2176

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.

Bước 21
2276
Chạy thử

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.

Bước 22

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.

2376

Chương trình đang có: khối Khi bấm vào cờ xanh,

Bước 23
2476

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

Bước 24
2576

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

Bước 25
2676

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

Bước 26
2776

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

Bước 27
2876

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

Bước 28
2976
Chạy thử

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!

Bước 29
3076

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,

Bước 30
3176

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

Bước 31
3276

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

Bước 32
3376

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

Bước 33
3476

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

Bước 34
3576

ô 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ước 35
3676

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.

Bước 36
3776
Chạy thử

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.

Bước 37

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ó.

3876

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,

Bước 38
3976

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

Bước 39
4076

ẩn bóng gốc,

Bước 40
4176

đặt dem thành 0,

Bước 41
4276

lặp mãi:

Bước 42
4376

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

Bước 43
4476

đợi 0,1 giây.

Bước 44
4576

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

Bước 45
4676

dem tăng 1,

Bước 46
4776

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

Bước 47
4876

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

Bước 48
4976

hiện,

Bước 49
5076

lặp lại 35 lần:

Bước 50
5176

y giảm 10.

Bước 51
5276
Chạy thử

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

Bước 52
5376

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.

Bước 53
5476

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

Bước 54
5576

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

Bước 55
5676
Chạy thử

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ư.

Bước 56

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.

5776

Chương trình đang có: mèo ở x bằng âm 120,

Bước 57
5876

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

Bước 58
5976

Khi bấm vào cờ xanh,

Bước 59
6076

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

Bước 60
6176

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

Bước 61
6276

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

Bước 62
6376

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

Bước 63
6476

Quả bóng:

Bước 64
6576

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

Bước 65
6676

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

Bước 66
6776

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

Bước 67
6876
Chạy thử

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ước 68
6976

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,

Bước 69
7076

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

Bước 70
7176

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 đỏ.

Bước 71
7276

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

Bước 72
7376

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

Bước 73
7476

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

Bước 74
7576

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.

Bước 75
7676
Chạy thử

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ước 76

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.

Khối lệnh tự tạo thứ hai: vẽ ngôi nhà Chương trình: Ôn bảng nhân
ZaloCộng đồng hỗ trợ lập trình ScratchCộng đồng hỗ trợ