JavaScript is required

Cho thuật toán:

Procedure Test(x,i,j: Integer);

Var m:integer;

Begin 

m:=trunc(i+j)/2;

If x= a[i] then vt:=m

Else If (x

Else If ( x> a[m] ) and (j>m) then Test(x,m+1,j)

Else vt:=0;

End;

Với A = {5, 2, 9 ,8, 6, 4, 7,1}. Kết quả nào đúng trong số những kết quả dưới đây: 

A.

Test(3,1,8), vt = 0;

B.

Test(4,1,8), vt = 5;

C.

Test(6,1,8), vt = 0;

D.

Test(7,1,8), vt = 8;

Trả lời:

Đáp án đúng: A


Đề 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`

Câu hỏi liên quan