Cho B = {1, 0, 1, 0, 1, 0, 1, 1, 1, 0}, n=10. Kết quả nào đúng trong số những kết quả dưới đây sau khi thực hiện thuật toán:
Type Mang= array[1..10] of Integer;
Function Test(B:mang; n:integer): mang;
Var i:integer;
Begin
i:=n-1;
While (i>=0) and (B[i]=1) do
Begin B[i]:=0; i:=i-1; End;
B[i]:= 1;
End;
Trả lời:
Đáp án đúng: A
Đề bài cho mảng B gồm 10 phần tử {1, 0, 1, 0, 1, 0, 1, 1, 1, 0} và yêu cầu tìm kết quả sau khi thực hiện đoạn code Pascal.
Đoạn code này thực hiện tăng giá trị của mảng B lên 1 đơn vị, coi mảng B như một số nhị phân. Cụ thể:
1. `i:=n-1;` Khởi tạo i = 9 (vị trí cuối cùng của mảng).
2. `While (i>=0) and (B[i]=1) do` Lặp từ cuối mảng về đầu mảng, nếu gặp phần tử có giá trị 1 thì gán thành 0.
3. `Begin B[i]:=0; i:=i-1; End;` Thực hiện gán B[i] = 0 và giảm i.
4. `B[i]:= 1;` Sau khi vòng lặp kết thúc (do gặp phần tử 0 hoặc đã duyệt hết mảng), gán B[i] = 1.
Áp dụng vào mảng B = {1, 0, 1, 0, 1, 0, 1, 1, 1, 0}:
* B[9] = 0, vòng lặp `while` không thực hiện.
* B[9] = 1.
Vậy mảng B sau khi thực hiện thuật toán là: {1, 0, 1, 0, 1, 0, 1, 1, 1, 1}.
Vậy đáp án đúng là B.