Từ thuật toán đến các lệnh
Thuật toán nêu cách giải quyết nhiệm vụ. **Chương trình máy tính** mô tả cách đó bằng các lệnh của một ngôn ngữ lập trình để máy tính thực hiện.
Ngôn ngữ lập trình quy định cách viết hoặc ghép các lệnh. Scratch là ngôn ngữ lập trình trực quan: ghép các khối lệnh để tạo chương trình. Python, C và Java là những ngôn ngữ lập trình khác.
Một bản liệt kê hay sơ đồ khối giúp phân tích cách làm. Để thực hiện cách làm ấy trong Scratch, cần chuyển thành các khối lệnh phù hợp; máy tính thực hiện theo chương trình đã tạo, không tùy ý đổi thứ tự theo mong muốn chưa được viết thành lệnh.
Bài luyện
Phát biểu nào mô tả đúng quan hệ giữa thuật toán và chương trình?
Chương trình cần chỉ dẫn cách thực hiện, không chỉ ghi tên.
Các lệnh biểu diễn công việc và cách điều khiển việc thực hiện.
Có thể mô tả thuật toán bằng lời hoặc sơ đồ trước khi lập chương trình.
Thứ tự và cấu trúc lệnh phải thể hiện đúng cách làm đã xác định.
Lời giải
Thuật toán nêu các bước giải quyết nhiệm vụ. Chương trình thể hiện các bước đó bằng ngôn ngữ lập trình để máy tính có thể thực hiện.
Đọc chương trình tính tổng

Ảnh này chụp các khối lệnh của chương trình Scratch 3, giao diện tiếng Anh. Lệnh bắt đầu khi nhấn cờ xanh; các lệnh tiếp theo thực hiện từ trên xuống dưới.
| Bước của thuật toán | Khối lệnh tương ứng |
|---|---|
| Nhập số a | ask … and wait, rồi set a to answer |
| Nhập số b | ask … and wait, rồi set b to answer |
| Tính tổng | set tong to a + b |
| Thông báo kết quả | say join “Tổng = ” tong |
Khối **ask … and wait** hỏi và chờ câu trả lời. Giá trị **answer** là câu trả lời vừa nhập. Khối **set … to …** đặt giá trị cho biến; ở đây $a$, $b$ và tong là các tên dùng để lưu giá trị trong chương trình.
Cần lưu câu trả lời thứ nhất vào $a$ trước khi hỏi tiếp. Sau câu hỏi thứ hai, answer chứa câu trả lời thứ hai. Với hai lần nhập $12$ và $7$, $a=12$, $b=7$, nên tong bằng $19$ và lệnh say tạo thông báo “Tổng = 19”. Khối join ghép phần chữ với kết quả; phép cộng nằm trong khối $a+b$.
Bài luyện
Trong chương trình tính tổng, vì sao cần “set a to answer” ngay sau câu hỏi nhập a?
Khối này chỉ lưu giá trị vào a, chưa nhập b.
Đặt giá trị cho a khác với phép cộng hoặc ghép chữ.
Sau câu hỏi tiếp theo, answer sẽ chứa câu trả lời mới.
Chương trình vẫn còn các bước nhập b, tính và thông báo.
Lời giải
answer chứa câu trả lời gần nhất. Lưu vào a ngay sau câu hỏi đầu giúp giữ giá trị đó; sau khi hỏi b, answer thay đổi nhưng a vẫn giữ giá trị đã lưu.
Bài luyện
Với hai lần nhập lần lượt 12 và 7, đâu là đầu ra cuối của chương trình mẫu?
Khối cộng tính 12 + 7 = 19 rồi khối say thông báo kết quả.
127 là ghép hai phần chữ số, không phải kết quả phép cộng đang dùng.
5 là hiệu 12 − 7, không phải tổng.
7 mới là số thứ hai được nhập.
Lời giải
Chương trình lưu $a=12$, $b=7$, rồi tính tong bằng $12+7=19$. Khối join ghép chữ “Tổng = ” với giá trị 19, nên đầu ra là “Tổng = 19”.
Thực hành tạo, chạy và lưu chương trình
Nhiệm vụ: tạo chương trình nhận hai số và thông báo tổng như mẫu. Dùng Scratch 3 trên trang scratch.mit.edu/projects/editor/, giao diện tiếng Anh; có thể thực hiện mà không đăng nhập.
1. Chọn nhân vật sẽ mang chương trình. Trong nhóm Variables, chọn Make a Variable để tạo ba biến tên a, b, tong; dùng phạm vi For all sprites.
2. Lấy khối when green flag clicked trong Events. Trong Sensing, lấy ask … and wait và answer. Ghép một khối hỏi số a, tiếp đó set a to answer; rồi một khối hỏi số b, tiếp đó set b to answer.
3. Trong Variables, lấy set tong to …; đặt phép cộng ở nhóm Operators vào ô giá trị, đưa biến a và b vào hai ô của phép cộng.
4. Trong Looks, lấy say …; đặt khối join của Operators vào ô lời nói. Ô thứ nhất nhập “Tổng = ”; ô thứ hai dùng biến tong. Ghép khối này dưới bước tính tổng.
5. Nhấn cờ xanh; nhập 12 rồi Enter, nhập 7 rồi Enter. Kết quả cần là “Tổng = 19”. Chạy lại với 0 và 0, kết quả cần là “Tổng = 0”. Nếu sai, kiểm tra hai biến đã nhận đúng câu trả lời, phép cộng và vị trí lệnh thông báo.
6. Chọn File → Save to your computer để lưu tệp .sb3. Lần mở sau, chọn File → Load from your computer rồi chọn tệp; chạy lại để kiểm tra chương trình còn đúng.
Tệp mẫu ở liên kết dùng để mở và đối chiếu các khối sau khi tự ghép. Thay đổi giao diện không làm thay đổi nhiệm vụ nhập, tính và thông báo tổng.
Bài luyện
Chương trình cần thông báo tổng mới tính. Cách sắp xếp nào đúng?
Lệnh thông báo ở trước phép tính chưa dùng kết quả tổng mới.
Cần tính và lưu kết quả trước khi đưa kết quả ra.
Chưa thực hiện nhiệm vụ tính tổng hai số.
answer chỉ là câu trả lời gần nhất, không tự trở thành tổng.
Lời giải
Kết quả mới được tạo ở bước đặt tong bằng $a+b$. Vì vậy lệnh thông báo tong phải đặt sau bước đó. Đổi hai bước có thể làm hiện một giá trị cũ hoặc chưa được tính.
Nhận ra cấu trúc lặp trong chương trình
Một chương trình khác đưa nhân vật về vị trí $x=0$, $y=0$, hướng sang phải, rồi dùng **repeat 4** chứa lệnh **move 15 steps**. Sau khối lặp là lệnh say “Đã đi xong”.
repeat 4 yêu cầu làm lại phần bên trong $4$ lần. Mỗi lần di chuyển $15$ bước, nên nhân vật đi tổng cộng $4\times15=60$ bước sang phải, đến $x=60$, $y=0$. Lệnh nói nằm sau khối lặp nên chỉ thực hiện một lần khi lặp xong.
Có thể mở tệp mẫu, nhấn cờ xanh và kiểm tra giá trị x của nhân vật bằng 60. Nếu kéo lệnh say vào trong repeat, lệnh nói sẽ được thực hiện ở mỗi vòng. Vị trí lệnh thể hiện công việc nào lặp, công việc nào làm sau cùng.
Bài luyện
Một khối repeat 4 chỉ chứa move 15 steps; lệnh say “Đã đi xong” nằm sau khối lặp. Chương trình thực hiện các lệnh này bao nhiêu lần?
Lệnh di chuyển nằm trong repeat 4, còn lệnh nói nằm ngoài.
Lệnh nói nằm sau khối lặp nên không lặp ở mỗi vòng.
15 là số bước di chuyển mỗi lần, không phải số lần lặp.
Lệnh trong repeat làm 4 lần; lệnh sau khối làm một lần.
Lời giải
repeat 4 thực hiện phần chứa bên trong bốn lần, nên move 15 steps chạy bốn lần. Sau khi hoàn thành khối lặp mới đến say, vì vậy lệnh nói chạy một lần.
Đang học