Làm lại công việc và kiểm tra lại
**Cấu trúc lặp** mô tả công việc được thực hiện lặp lại. Cần xác định công việc lặp, điều kiện tiếp tục hoặc dừng, và lúc kiểm tra điều kiện.
Khác với rẽ nhánh chỉ chọn đường đi ở một lần kiểm tra, vòng lặp có đường quay lại để tiếp tục kiểm tra và thực hiện. Khi đạt điều kiện dừng, phải có đường thoát để chuyển sang công việc phía sau.
Xếp một số thẻ đã có sẵn
Giả sử có một số thẻ nằm ngoài hộp và không thêm thẻ mới trong lúc xếp. Mô tả bằng lời:
1. Kiểm tra còn thẻ chưa xếp hay không.
2. Nếu còn, lấy một thẻ chưa xếp cho vào hộp, rồi quay lại bước 1.
3. Nếu không còn, đóng hộp và kết thúc.
Trong sơ đồ này, điều kiện được kiểm tra **trước** mỗi lần xếp. Mỗi vòng làm số thẻ chưa xếp giảm $1$, nên với số thẻ ban đầu hữu hạn, cuối cùng sẽ hết thẻ. Việc đóng hộp ở ngoài vòng lặp, chỉ thực hiện một lần sau khi xếp xong.
Theo dõi ba thẻ từ đầu đến cuối
Ban đầu có $3$ thẻ chưa xếp:
| Lần kiểm tra | Số thẻ chưa xếp | Việc tiếp theo |
|---|---|---|
| 1 | 3 | Xếp một thẻ |
| 2 | 2 | Xếp một thẻ |
| 3 | 1 | Xếp một thẻ |
| 4 | 0 | Thoát vòng lặp, đóng hộp |
Có $3$ lần xếp nhưng $4$ lần kiểm tra. Lần cuối phát hiện hết thẻ nên không xếp thêm. Nếu ngay từ đầu không có thẻ, lần kiểm tra đầu tiên đã cho kết quả Sai: bỏ qua việc xếp và chuyển đến đóng hộp.
Bài luyện
Theo vòng lặp trong bài, nếu ban đầu có 3 thẻ chưa xếp thì có bao nhiêu lần thực hiện việc xếp một thẻ?
Sau lần đầu vẫn còn 2 thẻ, nên cần tiếp tục.
Mỗi lần xếp một thẻ; 3 thẻ cần 3 lần.
4 là số lần kiểm tra, gồm lần cuối không còn thẻ.
Mỗi thẻ chỉ được xếp một lần trong nhiệm vụ.
Lời giải
Số thẻ chưa xếp giảm lần lượt từ 3 xuống 2, 1, rồi 0. Có ba lần giảm, ứng với ba lần xếp; lần kiểm tra khi còn 0 thẻ không thực hiện xếp.
Bài luyện
Nếu ban đầu không có thẻ nào cần xếp, sơ đồ trong bài thực hiện thế nào?
Sơ đồ kiểm tra trước khi xếp, không xếp khi không còn thẻ.
Điều kiện sai có đường thoát khỏi vòng lặp.
Lần kiểm tra đầu đã cho kết quả Sai.
Đóng hộp nằm sau vòng lặp và vẫn được thực hiện.
Lời giải
Điều kiện “Còn thẻ chưa xếp?” sai ngay từ đầu. Theo đường Sai, bỏ qua bước xếp và đi đến đóng hộp.
Bài luyện
Trong sơ đồ xếp thẻ, việc “Đóng hộp” được thực hiện lúc nào?
Đóng hộp nằm ngoài đường quay lại của vòng lặp.
Sơ đồ bắt đầu bằng kiểm tra còn thẻ.
Còn một thẻ thì vẫn phải xếp thẻ đó.
Nhánh Sai của điều kiện đưa đến bước đóng hộp.
Lời giải
Khi còn thẻ, thuật toán xếp rồi quay lại kiểm tra. Chỉ khi không còn thẻ mới đi theo đường thoát đến “Đóng hộp”, nên việc này không lặp sau từng thẻ.
Bài luyện
Nếu thay bước xếp thẻ bằng “Nhìn các thẻ” mà không chuyển thẻ nào vào hộp, với 3 thẻ ban đầu sẽ có vấn đề gì?
Chỉ nhìn không làm mất đi thẻ chưa xếp, nên vòng lặp không tiến đến hết thẻ.
Không có thao tác làm điều kiện hết thẻ đạt được.
Thuật toán không quy định việc tự giảm thẻ khi nhìn.
Ban đầu còn 3 thẻ nên điều kiện là Đúng.
Lời giải
Với 3 thẻ nằm nguyên ngoài hộp, kiểm tra lần nào cũng còn thẻ. Bước “Nhìn các thẻ” không làm số thẻ giảm, nên vòng lặp không đạt được điều kiện dừng như nhiệm vụ yêu cầu.
Một nhiệm vụ có thể dùng cả ba cấu trúc
Khi kiểm tra một chồng phiếu bài tập đã có sẵn, có thể lấy từng phiếu, kiểm tra đã ghi tên hay chưa; nếu chưa thì đặt vào khay cần bổ sung; sau đó chuyển sang phiếu tiếp theo. Dừng khi hết phiếu.
Lấy phiếu rồi kiểm tra là các bước tuần tự. Chỉ đặt vào khay khi thiếu tên là rẽ nhánh dạng thiếu. Làm lại các bước với phiếu tiếp theo cho đến khi hết phiếu là cấu trúc lặp. Ba cấu trúc tuần tự, rẽ nhánh và lặp có thể phối hợp để mô tả thuật toán.
Bài luyện
Trong ví dụ kiểm tra chồng phiếu, phần nào thể hiện cấu trúc lặp?
Đây là việc lựa chọn theo điều kiện, tức rẽ nhánh.
Đây là thứ tự các bước trong một lần xử lí.
Công việc được làm lại với các phiếu tiếp theo và dừng khi hết.
Mô tả này không lặp với toàn bộ chồng phiếu.
Lời giải
Cấu trúc lặp nằm ở việc xử lí lần lượt nhiều phiếu bằng cùng các bước. Điều kiện dừng là không còn phiếu chưa kiểm tra; điều kiện thiếu tên bên trong là một rẽ nhánh khác.
Đang học