Cho một đoạn giả mã như sau. Repeat
………………
Until ((x< >0) and (y>0) or (not ((w>0) and (t=3));
Hãy cho biết với bộ giá trị nào dưới đây thì vòng lặp dừng?
Trả lời:
Đáp án đúng: A
Để vòng lặp dừng, điều kiện `((x <> 0) and (y > 0) or (not ((w > 0) and (t = 3))))` phải đúng.
* **Phương án A:** x = 7, y = 2, w = 5, t = 3
* `(x <> 0)` là `true` (7 <> 0)
* `(y > 0)` là `true` (2 > 0)
* `(w > 0)` là `true` (5 > 0)
* `(t = 3)` là `true` (3 = 3)
* `((w > 0) and (t = 3))` là `true`
* `not ((w > 0) and (t = 3))` là `false`
* `((x <> 0) and (y > 0))` là `true`
* `((x <> 0) and (y > 0) or (not ((w > 0) and (t = 3))))` là `true`. Vậy vòng lặp dừng.
* **Phương án B:** x = 0, y = 2, w = -3, t = 3
* `(x <> 0)` là `false` (0 <> 0)
* `(y > 0)` là `true` (2 > 0)
* `(w > 0)` là `false` (-3 > 0)
* `(t = 3)` là `true` (3 = 3)
* `((w > 0) and (t = 3))` là `false`
* `not ((w > 0) and (t = 3))` là `true`
* `((x <> 0) and (y > 0))` là `false`
* `((x <> 0) and (y > 0) or (not ((w > 0) and (t = 3))))` là `true`. Vậy vòng lặp dừng.
* **Phương án C:** x = 0, y = -1, w = 1, t = 3
* `(x <> 0)` là `false` (0 <> 0)
* `(y > 0)` là `false` (-1 > 0)
* `(w > 0)` là `true` (1 > 0)
* `(t = 3)` là `true` (3 = 3)
* `((w > 0) and (t = 3))` là `true`
* `not ((w > 0) and (t = 3))` là `false`
* `((x <> 0) and (y > 0))` là `false`
* `((x <> 0) and (y > 0) or (not ((w > 0) and (t = 3))))` là `false`. Vậy vòng lặp không dừng.
* **Phương án D:** x = 1, y = -1, w = 1, t = 3
* `(x <> 0)` là `true` (1 <> 0)
* `(y > 0)` là `false` (-1 > 0)
* `(w > 0)` là `true` (1 > 0)
* `(t = 3)` là `true` (3 = 3)
* `((w > 0) and (t = 3))` là `true`
* `not ((w > 0) and (t = 3))` là `false`
* `((x <> 0) and (y > 0))` là `false`
* `((x <> 0) and (y > 0) or (not ((w > 0) and (t = 3))))` là `false`. Vậy vòng lặp không dừng.
Vậy đáp án đúng là A và B. Vì câu hỏi chỉ yêu cầu chọn một đáp án nên có vẻ câu hỏi hoặc các đáp án chưa chính xác. Tuy nhiên, theo phân tích trên, đáp án A đúng trước.





