Đề bài cho một thuật toán `Test` và một mảng `A`. Ta cần tìm kết quả đúng khi gọi thuật toán `Test` với các tham số khác nhau. Mảng A ban đầu là {5, 2, 9, 8, 6, 4, 7, 1}. Do các chỉ số mảng trong thuật toán bắt đầu từ 1, ta cần sắp xếp lại mảng A theo thứ tự tăng dần để dễ theo dõi. Mảng A sau khi sắp xếp là: A = {1, 2, 4, 5, 6, 7, 8, 9} và chỉ số tương ứng từ 1 đến 8.
*
A. Test(3, 1, 8), vt = 0: * x = 3, i = 1, j = 8.
* m = trunc((1 + 8) / 2) = 4.
* x = 3 != a[4] = 5. (Sai)
* x = 3 < a[4] = 5 và i = 1 < m = 4, gọi Test(3, 1, 3).
* m = trunc((1 + 3) / 2) = 2.
* x = 3 != a[2] = 2. (Sai)
* x = 3 > a[2] = 2 và j = 3 > m = 2, gọi Test(3, 3, 3).
* m = trunc((3 + 3) / 2) = 3.
* x = 3 != a[3] = 4. (Sai)
* x = 3 < a[3] = 4 và i = 3 < m = 3, gọi Test(3, 3, 2). Điều này không thể xảy ra vì i > j. Vì vậy, theo code, `vt` := 0.
* Kết quả vt = 0. Vậy A đúng.
*
B. Test(4, 1, 8), vt = 5: * x = 4, i = 1, j = 8.
* m = trunc((1 + 8) / 2) = 4.
* x = 4 != a[4] = 5. (Sai)
* x = 4 < a[4] = 5 và i = 1 < m = 4, gọi Test(4, 1, 3).
* m = trunc((1 + 3) / 2) = 2.
* x = 4 != a[2] = 2. (Sai)
* x = 4 > a[2] = 2 và j = 3 > m = 2, gọi Test(4, 3, 3).
* m = trunc((3 + 3) / 2) = 3.
* x = 4 != a[3] = 4. (Sai)
* Else If ( x
* Else If ( x> a[m] ) and (j>m) then Test(x,m+1,j)
* Else vt:=0;
* Kết quả vt = 3. Vậy B sai.
* C. Test(6, 1, 8), vt = 0:
* x = 6, i = 1, j = 8.
* m = trunc((1 + 8) / 2) = 4.
* x = 6 != a[4] = 5. (Sai)
* x = 6 > a[4] = 5 và j = 8 > m = 4, gọi Test(6, 5, 8).
* m = trunc((5 + 8) / 2) = 6.
* x = 6 = a[6] = 7. (Sai)
* Kết quả vt = 6. Vậy C sai.
* D. Test(7, 1, 8), vt = 8:
* x = 7, i = 1, j = 8.
* m = trunc((1 + 8) / 2) = 4.
* x = 7 != a[4] = 5. (Sai)
* x = 7 > a[4] = 5 và j = 8 > m = 4, gọi Test(7, 5, 8).
* m = trunc((5 + 8) / 2) = 6.
* x = 7 = a[6] = 7. vt := 6
* Kết quả vt = 6. Vậy D sai.
Vậy đáp án đúng là A.
Lưu ý: Có một lỗi nhỏ trong đoạn code gốc, cụ thể là `x= a[i] then vt:=m` nên sửa thành `x= a[m] then vt:=m`