Câu 22: Cho khai báo mảng và đoạn chương trình như sau:
Var a : array[0..50] of …
Var a : array[0..50] of real ;
k := 0 ;
for i := 1 to 50 do
if a[i] > a[k] then k := i ;
Đoạn chương trình trên thực hiện công việc gì dưới đây?
A. Tìm phần tử nhỏ nhất trong mảng.
B. Tìm phần tử lớn nhất trong mảng;
C. Tìm chỉ số của phần tử lớn nhất trong mảng
D. Tìm chỉ số của phần tử nhỏ nhất trong mảng
Câu 23: Cho khai báo mảng như sau: Var a : array[0..10] of integer ;
Phương án nào dưới đây chỉ phần tử thứ 10 của mảng?
A. a(10)
B. a[10];;
C. a[9];
D. a(9);
BÀI TẬP 22
Bước 1: Phân tích khai báo mảng và đoạn chương trình.
Chúng ta có khai báo mảng \(a : array[0..50] of real ;\). Điều này có nghĩa là mảng \(a\) có các chỉ số từ 0 đến 50 và các phần tử trong mảng là kiểu số thực.
Tiếp theo là đoạn chương trình:
\(k := 0 ;\)
\(for i := 1 to 50 do\)
\(if a[i] > a[k] then k := i ;\)
Bước 2: Theo dõi sự thay đổi của biến \(k\) trong vòng lặp.
– Khởi tạo: Biến \(k\) được gán giá trị là 0. Ban đầu, ta coi phần tử đầu tiên của mảng (ở chỉ số 0) là phần tử lớn nhất hoặc có chỉ số của phần tử lớn nhất.
– Vòng lặp \(for i := 1 to 50 do\): Vòng lặp này sẽ duyệt qua các phần tử của mảng \(a\) từ chỉ số 1 đến chỉ số 50.
– Điều kiện \(if a[i] > a[k] then k := i ;\): Bên trong vòng lặp, mỗi lần một phần tử \(a[i]\) (với \(i\) chạy từ 1 đến 50) được so sánh với phần tử có chỉ số là \(k\) hiện tại (\(a[k]\)).
– Nếu \(a[i]\) lớn hơn \(a[k]\), điều này có nghĩa là chúng ta vừa tìm thấy một phần tử lớn hơn phần tử mà chúng ta đang theo dõi (có chỉ số \(k\)). Do đó, chúng ta cần cập nhật \(k\) để nó lưu trữ chỉ số của phần tử lớn hơn này. Vì vậy, ta gán \(k := i\).
– Nếu \(a[i]\) không lớn hơn \(a[k]\), thì \(k\) không thay đổi, nó vẫn giữ chỉ số của phần tử lớn nhất mà chúng ta đã tìm thấy cho đến thời điểm đó.
Bước 3: Rút ra kết luận.
Sau khi vòng lặp kết thúc (duyệt hết các phần tử từ chỉ số 1 đến 50), biến \(k\) sẽ lưu giữ chỉ số của phần tử có giá trị lớn nhất trong mảng \(a\) (từ chỉ số 1 đến 50). Vì chúng ta khởi tạo \(k\) bằng 0, nên \(k\) sẽ lưu chỉ số của phần tử lớn nhất trong toàn bộ mảng từ chỉ số 0 đến 50.
Phân tích các lựa chọn:
A. Tìm phần tử nhỏ nhất trong mảng: Sai, vì điều kiện là \(a[i] > a[k]\), so sánh lớn hơn.
B. Tìm phần tử lớn nhất trong mảng: Sai, đoạn chương trình tìm chỉ số, không phải giá trị của phần tử.
C. Tìm chỉ số của phần tử lớn nhất trong mảng: Đúng, vì biến \(k\) được cập nhật để lưu trữ chỉ số \(i\) khi \(a[i]\) lớn hơn \(a[k]\).
D. Tìm chỉ số của phần tử nhỏ nhất trong mảng: Sai, vì điều kiện là \(a[i] > a[k]\).
Đáp án đúng là: C.
BÀI TẬP 23
Bước 1: Hiểu về cách truy cập phần tử trong mảng trong ngôn ngữ Pascal (hoặc các ngôn ngữ lập trình tương tự).
Trong khai báo mảng \(Var a : array[0..10] of integer ;\), chúng ta có:
– Tên mảng là \(a\).
– Các phần tử của mảng có kiểu số nguyên (\(integer\)).
– Các chỉ số của mảng bắt đầu từ 0 và kết thúc ở 10. Như vậy, mảng này có 11 phần tử.
Bước 2: Xác định cách truy cập phần tử theo chỉ số.
Cách thông thường để truy cập một phần tử cụ thể của mảng là sử dụng tên mảng, theo sau là chỉ số của phần tử đó được đặt trong cặp dấu ngoặc vuông \([]\) hoặc dấu ngoặc đơn \(()\) tùy thuộc vào quy ước của từng ngôn ngữ lập trình.
Trong Pascal, cú pháp chuẩn để truy cập phần tử mảng là \(tên_mảng[chỉ_số]\).
Bước 3: Áp dụng vào yêu cầu tìm phần tử thứ 10.
Chúng ta cần tìm phần tử thứ 10 của mảng. Tuy nhiên, cần lưu ý rằng chỉ số mảng thường bắt đầu từ 0.
– Phần tử thứ 1 là phần tử có chỉ số 0: \(a[0]\).
– Phần tử thứ 2 là phần tử có chỉ số 1: \(a[1]\).
– …
– Phần tử thứ \(n\) sẽ có chỉ số là \(n-1\).
Do đó, phần tử thứ 10 sẽ có chỉ số là \(10 – 1 = 9\).
Vậy, để chỉ phần tử thứ 10 của mảng \(a\), ta sẽ sử dụng cú pháp \(a[9]\).
Phân tích các lựa chọn:
A. a(10): Sai, dấu ngoặc đơn \(()\) thường không dùng để truy cập phần tử mảng trong Pascal, và chỉ số 10 sẽ là phần tử thứ 11.
B. a[10];;: Sai, chỉ số 10 tương ứng với phần tử thứ 11, không phải phần tử thứ 10. Dấu chấm phẩy kép \(;;\) cũng không phải là cú pháp chuẩn.
C. a[9];: Đúng, chỉ số 9 tương ứng với phần tử thứ 10 của mảng, và dấu chấm phẩy \(;\) là dấu kết thúc câu lệnh.
D. a(9);: Sai, dấu ngoặc đơn \(()\) thường không dùng để truy cập phần tử mảng trong Pascal.
Đáp án đúng là: C.
Câu 22 chọn C. Tìm chỉ số của phần tử lớn nhất trong mảng
Câu 23 chọn C. a[9];
Câu 22: Cho khai báo mảng và đoạn chương trình như sau: Var a : array[0..50] of real ; k := 0 ; for i := 1 to 50 do if a[i] > a[k] then k := i ; Đoạn chương trình trên thực hiện công việc gì dưới đây?
A. Tìm phần tử nhỏ nhất trong mảng.
B. Tìm phần tử lớn nhất trong mảng;
C. Tìm chỉ số của phần tử lớn nhất trong mảng
D. Tìm chỉ số của phần tử nhỏ nhất trong mảng
Câu 23: Cho khai báo mảng như sau: Var a : array[0..10] of integer ; Phương án nào dưới đây chỉ phần tử thứ 10 của mảng?
A. a(10)
B. a[10];;
C. a[9];
D. a(9);
Xin hay nhất