Chỉ số của mảng là một khái niệm quan trọng trong lập trình, và nó chính là cách chúng ta xác định và truy cập các phần tử cụ thể trong mảng. Cú pháp sử dụng chỉ số này là một cách mạnh mẽ để tương tác với dữ liệu trong mảng. Mời các bạn cùng tham khảo bài viết dưới đây.
Mục lục bài viết
1. Phát biểu nào dưới đây về chỉ số của mảng là phù hợp nhất?
A. Là một tập hợp các số nguyên
B. Độ dài tối đa của mảng là 255
C. Là một dãy hữu hạn các phần tử cùng kiểu
D. Mảng không thể chứa kí tự
Đáp án: C
Trả lời: Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu. Mảng được đặt tên và mỗi phần tử của nó có một chỉ số. Để mô tả chính xác, cần xác định kiểu của các phần tử và cách đánh số các phần tử của nó.
2. Lý thuyết về biến mảng và cấu trúc mảng:
Để tìm hiểu và hiểu rõ về biến mảng và cấu trúc mảng, ta cùng nghiên cứu ví dụ sau: Xét bài toán phân tích kết quả học tập cuối năm của lớp 11A gồm 45 học sinh dựa trên bảng điểm tổng kết gồm các cột Họ và tên, Điểm Toán, Điểm Ngữ văn, Điểm Tin học,… Cần viết chương trình máy tính để tính điểm trung bình, điểm cao nhất từng môn học và họ tên học sinh đạt được điểm cao nhất.
– Dữ liệu: Mỗi cột điểm môn học là một mảng chứa 45 số thực.
– Giải pháp: Sử dụng ngôn ngữ lập trình bậc cao có kiểu dữ liệu mảng để tính toán các kết quả.
a) Khai báo mảng một chiều
– Khai báo tức là cung cấp đủ các thông tin: tên biển mảng, kiểu dữ liệu, kích thước. Ví dụ:
+ Tên biến mảng: diemTin.
+ Kiểu dữ liệu của mảng: Số thực.
+ Kích thước: 45.
b) Tổ chức mảng một chiều
– Mảng một chiều trong bộ nhớ là khối các ô nhớ liền kề liên tục, có dung lượng bằng tích kích thước x độ dài kiểu dữ liệu.
– Ví dụ: mảng 4 gồm 10 phần tử kiểu số thực chiếm 40 byte trong bộ nhớ.
– Các phần tử mảng được đánh chỉ số tuần tự từ 0 đến n-1.
– Bộ nhớ RAM là một dãy bit được chia thành nhiều ô nhớ liền nhau, mỗi ô có địa chỉ truy cập riêng.
– Mỗi ô nhớ có thể có độ dài 1 byte, 2 byte hay 4 byte, tùy theo cách tổ chức bộ nhớ.
– Một số nguyên có thể chiếm 1 byte hoặc 2 byte, một số thực có thể chiếm 4 byte hoặc 8 byte.
– Một ô nhớ được coi là chứa đúng một số thực trong mảng số thực.
c) Truy cập ngẫu nhiên
– Các thông tin trong khai báo mảng xác định độ lớn phần bộ nhớ dành cho một biến mảng và tạo thuận lợi cho phép tìm vị trí của từng phần tử trong mảng.
– Một phần tử mảng có chỉ số i được lưu trữ tại ô nhớ cách vị trí bắt đầu của mảng đúng 1 ô nhớ, ví dụ diemTin[3] được lưu trữ tại địa chỉ A+3.
– Mảng được sử dụng nhiều do thời gian truy cập giá trị của phần tử bất kì là hằng số.
d) Mảng một chiều trong Python
– Cú pháp khai báo mảng một chiều trong Python như sau:
+ Khai báo sử dụng mô đun array ở đầu chương trình.
+ Khai báo biến kiểu mảng theo mẫu dưới đây:
mang_1 = array(‘i’, […])
mang_2 = array(‘f’, […])
– Trong đó:
+ Kí tự ‘i’ là viết tắt của integer; kí tự ‘f’ là viết tắt của float.
+ Thay cho dấu “. ” ở dòng thứ nhất là một danh sách các số nguyên trong mảng_1.
+ Thay cho dấu “. ” ở dòng thứ hai là một danh sách các số thực trong mảng_2.
– Hình 2 là một ví dụ khai báo mảng trong Python kèm giải thích câu lệnh.
– Kiểu danh sách của Python có thể dùng làm mảng một chiều. Nó linh hoạt hơn và có thêm nhiều phương thức mà kiểu mảng không có.
– Để sử dụng danh sách làm mảng, ta khai báo và sử dụng nó như một danh sách Python thông thường.
3. Một số câu hỏi liên quan:
Câu 1: Phát biểu nào dưới đây là kiểu mảng một chiều là phù hợp?
A. Là một tập hợp các số nguyên
B. Độ dài tối đa của mảng là 255
C. Là một dãy hữu hạn các phần tử cùng kiểu
D. Mảng không thể chứa kí tự
Đáp án: C
Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu. Mảng được đặt tên và mỗi phần tử của nó có một chỉ số. Để mô tả ta cần xác định kiểu của các phần tử và cách đánh số các phần tử của nó.
A. khai báo một hằng số là số phần tử của mảng
B. khai báo chỉ số bắt đầu và kết thúc của mảng
C. khai báo chỉ số kết thúc của mảng
D. không cần khai báo gì, hệ thống sẽ tự xác định
Trả lời: Để khai báo số phần tử của mảng trong PASCAL ( kiểu chỉ số), người lập trình cần khai báo chỉ số bắt đầu và kết thúc của mảng. Kiểu chỉ số thường là một đoạn số nguyên liên tục có dạng n1..n2 với n1, n2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và cuối (n1 ≤ n2).
Đáp án: B
Câu 3: Phát biểu nào dưới đây về chỉ số của mảng là phù hợp nhất?
A. Dùng để truy cập đến một phần tử bất kì trong mảng
B. Dùng để quản lí kích thước của mảng
C. Dùng trong vòng lặp với mảng
D. Dùng trong vòng lặp với mảng để quản lí kích thước của mảng
Trả lời: Chỉ số của mảng dùng để tham chiếu (truy cập) đến một phần tử bất kì trong mảng. Cú pháp: [chỉ số];
Đáp án: A
Câu 4: Phát biểu nào sau đây về mảng là không chính xác?
A. Chỉ số của mảng không nhất thiết bắt đầu từ 1
B. Có thể xây dựng mảng nhiều chiều
C. Xâu kí tự cũng có thể xem như là một loại mảng
D. Độ dài tối đa của mảng là 255
Trả lời: Chỉ số của mảng không nhất thiết bắt đầu từ 1 tùy theo người lập trình. Xâu kí tự cũng có thể xem như mảng một chiều, mỗi phần tử là một kí tự. Trong lập trình có thể xây dựng mảng nhiều chiều. Và không có giới hạn cụ thể về độ dài của mảng.
Đáp án: D
Câu 5: Thế nào là khai báo biến mảng gián tiếp?
A. Khai báo mảng của các bản ghi
B. Khai báo mảng xâu kí tự
C. Khai báo mảng hai chiều
D. Khai báo thông qua kiểu mảng đã có
Trả lời: Khai báo biến mảng gián tiếp là khai báo thông qua kiểu mảng đã có. Cấu trúc khai báo mảng gián tiếp:
Type < tên kiểu mảng> = array [kiểu chỉ số] of ;
Var : < tên kiểu mảng>;
Đáp án:D
Câu 6: Phương án nào dưới đây là khai báo mảng hợp lệ?
A. Var mang : ARRAY[0..10] OF INTEGER;
B. Var mang : ARRAY[0..10] : INTEGER;
C. Var mang : INTEGER OF ARRAY[0..10];
D. Var mang : ARRAY(0..10) : INTEGER;
Trả lời:
Cấu trúc khai báo mảng trực tiếp:
Var : array [kiểu chỉ số] of ;
Trong đó:
+ Kiểu chỉ số thường là một đoạn số nguyên liên tục có dạng n1..n2 với n1, n2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và cuối (n1 ≤ n2).
+ Kiểu phần tử là kiểu của các phần tử trong mảng.
Đáp án: A
Câu 7: 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
Trả lời: ý nghĩa của câu lệnh
Var a : array[0..50] of real ; {khai báo mảng a}
k := 0 ; {gán chỉ số 0 cho k}
for i := 1 to 50 do { vòng lặp chạy từ 1 đến 50}
if a[i] > a[k] then k := i ; { kiểm tra từ phần tử thứ 2 đến phần tử 50 so sánh với phần tử đầu và đưa ra chỉ số lớn nhât}
Đáp án:C
Câu 8: 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);
Trả lời: Tham chiếu (truy cập) đến một phần tử bất kì trong mảng.
Cú pháp: Tên mảng[chỉ số];
Đáp án: A
Câu 9: Khai báo mảng hai chiều nào sau đây là sai?
A. var m : array[1..10] of array[0..9] of integer;
B. var m : array[1..20,1..40] of real;
C. var m : array[1..9;1..9] of integer;
D. var m : array[0..10,0..10] of char;
Trả lời: Khai báo mảng hai chiều:
+ Cách 1: trực tiếp
Var : array [kiểu chỉ số hàng, kiểu chỉ số cột] of < kiểu phần tử>;
+ Cách 2: gián tiếp
Type : array [kiểu chỉ số hàng, kiểu chỉ số cột] of < kiểu phần tử>;
Var : < tên kiểu mảng>;
Đáp án: B
Câu 10: Mảng là kiểu dữ liệu biểu diễn một dãy các phần tử thuận tiện cho:
A. chèn thêm phần tử
B. truy cập đến phần tử bất kì
C. xóa một phần tử
D. chèn thêm phần tử và xóa phần tử
Trả lời: Mảng là kiểu dữ liệu biểu diễn một dãy các phần tử thuận tiện cho truy cập đến phần tử bất kì. Theo cú pháp Tên mảng[chỉ số];
Đáp án: B