Khởi động và phần theo dõi
Một chương trình robot thường có phần **khởi động** để đặt trạng thái ban đầu và phần **lặp** để liên tục nhận tín hiệu, xử lí và điều khiển. Trong ví dụ SGK, khối `forever` giữ việc kiểm cảm biến khi robot còn vận hành. Nhưng không phải mọi nhiệm vụ đều phải lặp vô tận: nhiệm vụ chạy một khoảng thời gian rồi dừng có thể dùng lặp hữu hạn hoặc điều kiện dừng.
Mã giả dưới đây chỉ mô tả ý tưởng, chưa là lệnh của một bộ robot cụ thể:
```text
Khởi động: số_lần = 0
Lặp 3 lần:
Bật còi
Đợi 1 giây
Tắt còi
số_lần = số_lần + 1
```
Sau vòng lặp, còi đã bật rồi tắt ba lần và `số_lần = 3`. Nếu đặt `số_lần = 0` **bên trong** mỗi lần lặp thì cuối mỗi lượt chỉ về 1, không đếm được tổng.
Khi nào cần vòng kiểm liên tục?
Xe tránh vật cản cần quan sát khoảng cách trong lúc chạy. Một sơ đồ rõ là: khởi tạo trạng thái, rồi trong vòng lặp **đọc cảm biến** → **nếu vật gần thì dừng; ngược lại đi**. Dữ liệu có thể thay đổi giữa hai lượt. Nếu chương trình chỉ đọc một lần lúc khởi động, xe có thể bỏ qua vật xuất hiện sau đó.
Khi truy vết, viết một dòng cho mỗi lần đọc: giá trị cảm biến, nhánh được chọn, lệnh gửi ra. Đây là kiểm bằng tay để tìm lỗi lôgic; nó chưa xác nhận cảm biến và động cơ thật hoạt động.
Bài luyện
Trong mã giả bài học, sau “Lặp 3 lần: bật còi; đợi; tắt còi; tăng số_lần”, số_lần bằng bao nhiêu nếu bắt đầu từ 0?
Mới tính một lượt.
Đã đếm thừa một lượt.
Mỗi lượt tăng 1, có ba lượt.
Đó là giá trị trước vòng lặp.
Lời giải
Biến bắt đầu ở 0. Ba lượt tăng lần lượt lên 1, 2, 3; sau mỗi lượt còi được tắt.
Bài luyện
Xe cần tiếp tục kiểm vật cản trong lúc di chuyển. Cách nào phù hợp?
Vật xuất hiện sau lần đọc đầu sẽ bị bỏ qua.
Lặp chuyển động không cập nhật dữ liệu vật cản.
Chạy lâu hơn không thay phép đo đã cũ.
Tín hiệu thay đổi nên cần đọc lại.
Lời giải
Trong nhiệm vụ tránh vật cản, chương trình cần liên tục nhận dữ liệu mới rồi quyết định dừng hoặc đi; đọc một lần lúc khởi động không đủ.
Đang học