Điều kiện quyết định đường đi
**Cấu trúc rẽ nhánh** cho phép chọn việc thực hiện tùy vào điều kiện đúng hay sai. Khối hình thoi kiểm tra điều kiện; hai đường ra được ghi Đúng và Sai.
Dạng thiếu có cách diễn đạt: “Nếu điều kiện đúng thì thực hiện công việc”. Khi điều kiện sai, bỏ qua công việc đó rồi tiếp tục sau cấu trúc. Dạng đủ có thêm công việc cho trường hợp sai: “Nếu điều kiện đúng thì làm việc thứ nhất, còn không thì làm việc thứ hai”.
Theo dõi từng nhánh
Ở phần trên của hình, một lượt trả lời đúng được cộng $1$ điểm; trả lời sai thì không cộng. Nếu trước lượt đó có $4$ điểm, trả lời đúng sẽ được $5$ điểm, còn trả lời sai vẫn có $4$ điểm. Đây là rẽ nhánh dạng thiếu.
Ở phần dưới của hình, quy trình giả định của thư viện là: nếu có thẻ thì xuất trình thẻ; còn không thì liên hệ thủ thư. Cả hai kết quả kiểm tra đều có công việc tương ứng, nên đây là rẽ nhánh dạng đủ.
Mỗi lần đi qua một khối điều kiện, chỉ đi theo nhánh ứng với kết quả kiểm tra. Sau khi hai đường nhập lại, tiếp tục công việc chung phía sau.
Bài luyện
Theo quy tắc chỉ cộng 1 điểm khi trả lời đúng, một nhóm đang có 4 điểm và trả lời sai. Điểm sau lượt đó là bao nhiêu?
Chỉ cộng lên 5 khi trả lời đúng.
Điều kiện sai nên bỏ qua việc cộng, điểm vẫn là 4.
Quy tắc không có bước trừ điểm.
Quy tắc không có bước đặt điểm về 0.
Lời giải
Điều kiện “Trả lời đúng?” có kết quả Sai, nên không thực hiện bước cộng 1 điểm. Không có bước trừ hoặc xóa điểm; kết quả vẫn là 4 điểm.
Bài luyện
Câu nào mô tả rẽ nhánh dạng đủ?
Câu này mới nêu việc làm khi điều kiện đúng.
Đây là hai bước tuần tự, chưa có điều kiện.
Đã nêu công việc ở cả trường hợp có thẻ và không có thẻ.
Câu này diễn tả lặp lại công việc đến khi có kết quả.
Lời giải
Rẽ nhánh dạng đủ phải có công việc cho cả hai kết quả kiểm tra. Ở đây có thẻ thì xuất trình; không có thẻ thì liên hệ thủ thư.
Điều kiện sai cũng có thể bao gồm bằng nhau
Xét thuật toán tìm **giá trị lớn nhất** trong hai số $a$, $b$:
1. Nhập $a$ và $b$.
2. Nếu $a>b$ thì thông báo $a$; còn không thì thông báo $b$.
Khi $a=9$, $b=5$, điều kiện đúng nên thông báo $9$. Khi $a=4$, $b=7$, điều kiện sai nên thông báo $7$. Khi $a=b=7$, điều kiện $a>b$ cũng sai; thông báo $b$ vẫn cho giá trị lớn nhất là $7$.
Như vậy, điều kiện $a>b$ sai không nhất thiết có nghĩa $b$ lớn hơn $a$: hai số còn có thể bằng nhau. Nếu nhiệm vụ yêu cầu phân biệt “hai số bằng nhau”, phải có bước kiểm tra trường hợp đó.
Bài luyện
Với a = 7 và b = 7, thuật toán tìm giá trị lớn nhất trong bài đi theo nhánh nào và thông báo gì?
Điều kiện 7 > 7 là sai, nên không đi theo nhánh Đúng.
Hai số bằng nhau nên a > b sai; nhánh còn lại thông báo b, bằng 7.
Nhánh Sai thông báo b, không đặt b về 0.
Một lần kiểm tra chỉ chọn một nhánh.
Lời giải
Hai số bằng nhau nên $7>7$ là sai. Theo nhánh Sai, thuật toán thông báo $b=7$. Giá trị đó đúng là giá trị lớn nhất trong hai số đã cho.
Bài luyện
Trong rẽ nhánh dạng thiếu, khi điều kiện sai thì điều gì xảy ra?
Dạng thiếu không tự bổ sung một công việc khác.
Thuật toán tiếp tục sau cấu trúc, trừ khi đã có chỉ dẫn kết thúc.
Công việc này chỉ làm khi điều kiện đúng.
Đây là đường Sai của rẽ nhánh dạng thiếu.
Lời giải
Dạng thiếu chỉ quy định một công việc khi điều kiện đúng. Nếu sai, bỏ qua công việc đó rồi đi đến bước chung sau cấu trúc.
Bài luyện
Trong quy trình thư viện giả định ở hình, người không có thẻ thực hiện việc nào khi đi qua cấu trúc rẽ nhánh?
Điều kiện “Có thẻ thư viện?” sai nên đi đến việc liên hệ thủ thư.
Đây là công việc của nhánh có thẻ.
Hai công việc nằm ở hai nhánh thay thế nhau.
Sơ đồ không có mũi tên quay lại khối điều kiện.
Lời giải
Không có thẻ làm điều kiện sai. Đi theo nhánh Sai đến “Liên hệ thủ thư”, rồi tiếp tục sau chỗ nhập hai nhánh. Không thực hiện thêm công việc của nhánh Đúng.
Đang học