Đáp án đúng: BĐề bài cho một mảng B gồm các số nguyên (0 hoặc 1) và yêu cầu thực hiện một thuật toán trên mảng này. Thuật toán này có vẻ như đang thực hiện phép cộng 1 vào một số nhị phân được biểu diễn bởi mảng B.
Chúng ta hãy xem xét từng bước của thuật toán:
1. Khởi tạo: `i := n - 1;` (i = 9 trong trường hợp này, vì n = 10). i là chỉ số của phần tử cuối cùng trong mảng.
2. Vòng lặp `while`: `While (i >= 0) and (B[i] = 1) do Begin ... End;` Vòng lặp này duyệt từ cuối mảng về đầu mảng, miễn là chỉ số i còn hợp lệ (lớn hơn hoặc bằng 0) và phần tử tại vị trí i bằng 1.
- Bên trong vòng lặp, `B[i] := 0;` đặt phần tử tại vị trí i thành 0.
- `i := i - 1;` giảm chỉ số i để duyệt sang phần tử kế tiếp về phía đầu mảng.
3. Gán `B[i] := 1;`: Sau khi vòng lặp `while` kết thúc (hoặc là i trở thành âm, hoặc là B[i] khác 1), dòng lệnh này đặt phần tử tại vị trí i thành 1.
Bây giờ, hãy áp dụng thuật toán này vào mảng B đã cho: B = { 1, 0, 1, 0, 1, 0, 1, 1, 1, 0}
- Bước 1: i = 9, B[9] = 0. Vòng lặp `while` không được thực hiện vì B[9] không bằng 1.
- Bước 2: B[9] được gán thành 1. Vậy B[9] = 1.
Kết quả cuối cùng của mảng B là: { 1, 0, 1, 0, 1, 0, 1, 1, 1, 1}
Vậy đáp án đúng là: Test(B,n) = { 1, 0, 1, 0, 1, 0, 1, 1, 1, 1}