Professional Documents
Culture Documents
Chap2 Array
Chap2 Array
ThS.
Trần Ngọc Bảo Duy
MẢNG
Mảng
Sự cần thiết của mảng
Định nghĩa
Array.1
Array
Tổng quan
ThS.
Trần Ngọc Bảo Duy
1 Mảng
Sự cần thiết của mảng
Định nghĩa Mảng
Sự cần thiết của mảng
Định nghĩa
Array.2
Array
Sự cần thiết của mảng
ThS.
Trần Ngọc Bảo Duy
Bài toán
Một chương trình quản lý bán hàng cần lưu trữ tạm N món Mảng
Sự cần thiết của mảng
hàng trong bộ nhớ, nếu ta chỉ sử dụng các kiểu dữ liệu cơ Định nghĩa
Array.3
Array
Sự cần thiết của mảng
ThS.
Trần Ngọc Bảo Duy
Bài toán
Một chương trình quản lý bán hàng cần lưu trữ tạm N món Mảng
Sự cần thiết của mảng
hàng trong bộ nhớ, nếu ta chỉ sử dụng các kiểu dữ liệu cơ Định nghĩa
Array.3
Array
Sự cần thiết của mảng
ThS.
Trần Ngọc Bảo Duy
Bài toán
Một chương trình quản lý bán hàng cần lưu trữ tạm N món Mảng
Sự cần thiết của mảng
hàng trong bộ nhớ, nếu ta chỉ sử dụng các kiểu dữ liệu cơ Định nghĩa
Array.3
Array
Sự cần thiết của mảng
ThS.
Trần Ngọc Bảo Duy
Giải pháp
Array.4
Array
Sự cần thiết của mảng
ThS.
Trần Ngọc Bảo Duy
Giải pháp
Array.4
Array
Định nghĩa
ThS.
Trần Ngọc Bảo Duy
Định nghĩa
Mảng là một dãy các phần tử cùng một kiểu, nằm liền Mảng
kề nhau trong bộ nhớ. Sự cần thiết của mảng
Định nghĩa
Array.5
Array
Định nghĩa
ThS.
Trần Ngọc Bảo Duy
Định nghĩa
Mảng là một dãy các phần tử cùng một kiểu, nằm liền Mảng
kề nhau trong bộ nhớ. Sự cần thiết của mảng
Định nghĩa
10 20 30 40 50 60
Array.5
Array
Ví dụ
ThS.
Trần Ngọc Bảo Duy
0 1 2 3 4 5
10 20 30 40 50 60 Mảng
Sự cần thiết của mảng
Định nghĩa
Array.6
Array
Ví dụ
ThS.
Trần Ngọc Bảo Duy
0 1 2 3 4 5
10 20 30 40 50 60
Mảng
Sự cần thiết của mảng
Hình: Một mảng gồm 6 phần tử số nguyên Định nghĩa
• Các phần tử trong mảng được đánh chỉ số để truy Đọc và ghi trên mảng 1 chiều
Mảng
0 1 2 3 4 5 Sự cần thiết của mảng
Định nghĩa
Array.6
Array
Địa chỉ của các ô nhớ trong mảng
ThS.
Trần Ngọc Bảo Duy
Mảng
Về lý thuyết, để tính địa chỉ (đ/c) của ô nhớ có chỉ số k, Sự cần thiết của mảng
Định nghĩa
chương trình dùng công thức sau: Mảng một chiều
Khai báo
Địa chỉ = đ/c phần tử đầu tiên + k × (kích thước phần tử) Đọc và ghi trên mảng 1 chiều
chỉ số bất kỳ, ta gọi đó là TRUY CẬP NGẪU NHIÊN. Đọc và ghi trên mảng hai chiều
Array.7
Array
Địa chỉ của các ô nhớ trong mảng
ThS.
Trần Ngọc Bảo Duy
Trong C/C++, trình biên dịch đã biết trước kích thước của Mảng
Sự cần thiết của mảng
phần tử trong mảng. Do đó, công thức lấy địa chỉ của phần Định nghĩa
Array.8
Array
ThS.
Trần Ngọc Bảo Duy
Mảng
Sự cần thiết của mảng
Định nghĩa
Array.9
Array
Khai báo mảng 1 chiều
ThS.
Trần Ngọc Bảo Duy
• <datatype> là kiểu dữ liệu của các phần tử trong mảng Ứng dụng
Khai báo
Đọc và ghi trên mảng hai chiều
• <array_name> là tên mảng, do người lập trình đặt.
• <size> là một hằng thể hiện kích thước của mảng.
Array.10
Array
Ví dụ
ThS.
Trần Ngọc Bảo Duy
Array.11
Array
Ví dụ
ThS.
Trần Ngọc Bảo Duy
Mảng
Sự cần thiết của mảng
Định nghĩa
Số phần tử của mảng phải biết trước thời điểm biên dịch,
do đó phải là một hằng số không âm:
• Sử dụng macro: #define MAX_SIZE
Mảng
• Khai báo hằng số nguyên: const int MAX_SIZE Sự cần thiết của mảng
Định nghĩa
6 int main () {
7 const int max_size = 10;
8 int a [ MAX_SIZE ];
9 int b [ max_size ];
10 return 0;
11 }
Array.13
Array
Số phần tử của mảng
ThS.
Số phần tử của mảng phải biết trước thời điểm biên dịch, Trần Ngọc Bảo Duy
Một số trình biên dịch cho phép khai báo kích thước với biến dữ
liệu, tuy nhiên, đó không phải là quy tắc chuẩn được định nghĩa
bởi ANSI cho C++ (http://www.gotw.ca/iso/).
Array.13
Array
Đọc và ghi trên mảng 1 chiều
ThS.
Trần Ngọc Bảo Duy
Mảng
Sự cần thiết của mảng
Array.14
Array
Dùng chỉ số
ThS.
1 # include < iostream > Trần Ngọc Bảo Duy
2 using namespace std ;
3
4 int main () {
5 int c [6] = {10 , 20 , 30 , 40 , 50 , 60};
6 int id = 0; Mảng
Sự cần thiết của mảng
7 /* Write to element */ Định nghĩa
14 return 0;
15 }
Array.15
Array
Dùng chỉ số
ThS.
1 # include < iostream > Trần Ngọc Bảo Duy
2 using namespace std ;
3
4 int main () {
5 int c [6] = {10 , 20 , 30 , 40 , 50 , 60};
6 int id = 0; Mảng
Sự cần thiết của mảng
7 /* Write to element */ Định nghĩa
14 return 0;
15 }
c[3] = 99
c[1] = 100
Array.15
Array
Tự tính toán địa chỉ và lấy phần tử quan tâm
ThS.
Trần Ngọc Bảo Duy
Array.16
Array
Tự tính toán địa chỉ và lấy phần tử quan tâm
ThS.
1 # include < iostream > Trần Ngọc Bảo Duy
2 using namespace std ;
3
4 int main () {
5 int c [6] = {10 , 20 , 30 , 40 , 50 , 60};
6 int id = 0; Mảng
Sự cần thiết của mảng
7 /* Write to element */ Định nghĩa
13 << *( c + ( id + 1)) << endl ; Đọc và ghi trên mảng hai chiều
14 return 0;
15 }
Array.16
Array
Tự tính toán địa chỉ và lấy phần tử quan tâm
ThS.
1 # include < iostream > Trần Ngọc Bảo Duy
Các bước:
1 Tính toán địa chỉ theo công thức first + k: c + 3
2 Lấy giá trị tại một địa chỉ thông qua toán tử *: *(c + 3)
Array.16
Array
Tự tính toán địa chỉ và lấy phần tử quan tâm
ThS.
1 # include < iostream > Trần Ngọc Bảo Duy
2 using namespace std ;
3
4 int main () {
5 int c [6] = {10 , 20 , 30 , 40 , 50 , 60};
6 int id = 0; Mảng
Sự cần thiết của mảng
7 /* Write to element */ Định nghĩa
8 *( c + 3) = 99;
Mảng một chiều
9 *( c + ( id + 1)) = 100; Khai báo
11 cout << " c [3] ␣ = ␣ " << *( c + 3) << endl ; Mảng hai chiều
Ứng dụng
12 cout << " c [ " << id + 1 << " ] ␣ = ␣ " Khai báo
13 << *( c + ( id + 1)) << endl ; Đọc và ghi trên mảng hai chiều
14 return 0;
15 }
Như vậy first hay địa chỉ phần tử đầu tiên của mảng, có
thể được lấy thông qua hai cách:
1 Tên mảng: như trên, dùng tên c
2 Thông qua truy cập chỉ số: &c[0], với toán tử & là toán tử
lấy địa chỉ. Array.16
Array
Một số kỹ thuật trên mảng một chiều
ThS.
Trần Ngọc Bảo Duy
nhất, trung bình, trung vị, độ lệch chuẩn, ... Định nghĩa
Array.17
Array
ThS.
Trần Ngọc Bảo Duy
Mảng
Sự cần thiết của mảng
Định nghĩa
Array.18
Array
Ứng dụng
ThS.
Trần Ngọc Bảo Duy
• Ảnh được lưu trữ trong máy tính là mảng Khai báo
Đọc và ghi trên mảng 1 chiều
• Đồ thị (mạng của các đối tượng) có thể Đọc và ghi trên mảng hai chiều
Array.19
Array
Mô hình và Lưu trữ vật lý
ThS.
Trần Ngọc Bảo Duy
10 20 30 40
50 60 70 80
Mảng
90 100 110 120 Sự cần thiết của mảng
Định nghĩa
Array.20
Array
Mô hình và Lưu trữ vật lý
ThS.
Trần Ngọc Bảo Duy
10 20 30 40
50 60 70 80
Mảng
90 100 110 120 Sự cần thiết của mảng
Định nghĩa
0 1 2 3 4 5 6 7 8 9 10 11
Hình: Lưu trữ của mảng 2 chiều: tuyến tính hoá mảng 2 chiều
Array.20
Array
Cách lưu trữ mảng 2 chiều
ThS.
Trần Ngọc Bảo Duy
• Các phần tử được lưu trữ liên tục, hết hàng đến hàng: Mảng
Sự cần thiết của mảng
Nếu phần tử đầu tiên (giá trị 10) bắt đầu ở BYTE có Định nghĩa
• Địa chỉ của ô nhớ chứa 30: 108 Mảng hai chiều
• Địa chỉ của ô nhớ chứa 40: 112 Ứng dụng
Khai báo
• Địa chỉ của ô nhớ chứa 50: 116 Đọc và ghi trên mảng hai chiều
Array.21
Array
Cách lưu trữ mảng 2 chiều
ThS.
Trần Ngọc Bảo Duy
• Chỉ số hàng bắt đầu từ 0 đến (Số hàng - 1) Mảng một chiều
• Chỉ số cột bắt đầu từ 0 đến (Số cột - 1) Khai báo
Đọc và ghi trên mảng 1 chiều
1 50 60 70 80
2 90 100 110 120
Array.21
Array
Cách lưu trữ mảng 2 chiều
ThS.
Trần Ngọc Bảo Duy
Array.21
Array
Khai báo mảng hai chiều
ThS.
Trần Ngọc Bảo Duy
Array.22
Array
Đọc và ghi trên mảng hai chiều
ThS.
Trần Ngọc Bảo Duy
1 # include < iostream >
2 using namespace std ;
3
4 int main () {
5 int a [3][4]; Mảng
Sự cần thiết của mảng
6 int r = 0; Định nghĩa
13 return 0;
14 }
Array.23
Array
Đọc và ghi trên mảng hai chiều
ThS.
Trần Ngọc Bảo Duy
1 # include < iostream >
2 using namespace std ;
3
4 int main () {
5 int a [3][4]; Mảng
Sự cần thiết của mảng
6 int r = 0; Định nghĩa
13 return 0;
14 }
a[0][2] = 99
Array.23
Array
Một số kỹ thuật trên mảng hai chiều
ThS.
Trần Ngọc Bảo Duy
Mảng
• Duyệt qua từng phần tử trong mảng Sự cần thiết của mảng
Định nghĩa
• Duyệt qua từng phần tử trong cùng một hàng Mảng một chiều
• Duyệt qua từng phần tử trong cùng một cột Khai báo
Đọc và ghi trên mảng 1 chiều
• Duyệt các phần tử trên đường chéo phụ Đọc và ghi trên mảng hai chiều
Array.24