1 of 21

BÀI 10: CẤU TRÚC MẢNG

Giáo viên: PHAN THIỆN HUỆ

Gmail: thayhuetnh@gmail.com

SĐT, Zalo: 0382.1682.32

Blog: thayhuetnh.blogspot.com

1

Chương III: NGÔN NGỮ LẬP TRÌNH C++

2 of 21

Sắp xếp dãy số Tên chương trình SORTING1.???

Nhập vào số nguyên dương N và dãy gồm N số nguyên a, a,…, aN­­­­­­. Sắp xếp dãy số thành dãy tăng dần.

Dữ liệu vào từ file SORTING1.INP

- Dòng 1: số nguyên dương N (1<N<106)

- Dòng 2: dãy N số nguyên a, a,…, aN­­­­­­ (0<=a­­­­­i<=109) mỗi số cách nhau một khoảng trắng.

Dữ liệu ra ghi vào file SORTING1.OUT

- Dòng 1: dãy a đã sắp xếp mỗi số cách nhau một khoảng trắng.

🡪 Dùng kiến thức đã học giải quyết bài toán trên?

2

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

SORTING1.INP

SORTING1.OUT

5

5 4 2 1 2

1 2 2 4 5

3 of 21

BÀI 10: CẤU TRÚC MẢNG

10.1 Mảng 1 chiều

10.1.1 Khai báo

Cú pháp: khai báo không khởi tạo

<kiểu dữ liệu> <tên biến mảng> [số phần tử mảng];

Ví dụ:

int a[1000];

double x[10000];

string ds[1000];

long long b[100];

3

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

4 of 21

BÀI 10: CẤU TRÚC MẢNG

10.1 Mảng 1 chiều

10.1.1 Khai báo

Cú pháp: khai báo có khởi tạo

<kiểu dữ liệu> <tên biến mảng> [số phần tử mảng] = {dãy giá trị};

<kiểu dữ liệu> <tên biến mảng> [] = {dãy giá trị};

Ví dụ:

Khai báo mảng v chứa 10 ký tự

char v[10]={'0','1','2','3','4','5','6','7','8','9'};

Khai báo dãy d chứa 5 số thực:

double d[]={0,0,0,0,0}

4

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

5 of 21

BÀI 10: CẤU TRÚC MẢNG

Một số lưu ý:

  1. Số lượng phần tử mảng trong mảng giữa cặp dấu ngoặc vuông [] còn được gọi là kích thước của mảng.
  2. Ô đầu tiên được đánh thứ tự bởi 0, ô tiếp theo bởi 1, và tiếp tục cho đến hết. Như vậy nếu mảng có n thành phần thì ô cuối cùng trong mảng sẽ được đánh số là n - 1.
  3. Khởi tạo mảng bởi dãy giá trị trong cặp dấu {}, mỗi giá trị cách nhau bởi dấu phảy (,), các giá trị này sẽ được gán lần lượt cho các phần tử của mảng bắt đầu từ phần tử thứ 0 cho đến hết dãy.
  4. Dạng khai báo cho phép vắng mặt số phần tử, trường hợp này số phần tử được xác định bởi số giá trị của dãy khởi tạo. Do đó nếu vắng mặt cả dãy khởi tạo là không được phép (chẳng hạn khai báo int a[] là sai).

5

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

6 of 21

BÀI 10: CẤU TRÚC MẢNG

10.1 Mảng 1 chiều

10.1.1 Khai báo

Tham chiếu đến phần tử mảng:

<tên biến mảng>[vị trí phấn tử]

Ví dụ:

A[1]=79; A[3]=68;

Gán tất cả phần tử mảng bằng giá trị nào đó dùng memset

6

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

7 of 21

BÀI 10: CẤU TRÚC MẢNG

10.1 Mảng 1 chiều

10.1.2 Nhập xuất mảng:

- Nhập mảng

int i;

for (i=0; i<10; i++) cin>>a[i];

- Xuất mảng

for (int i=0 ; i<10 ; i++) cout<<a[i];

- Tùy theo bài ta có thể sử dụng

biểu thức 2 là i++, i--, i+=2, i-=2, i*=2…..

7

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

8 of 21

BÀI 10: CẤU TRÚC MẢNG

10.1 Mảng 1 chiều

10.1.3 Ví dụ minh họa

Ví dụ: Sắp xếp dãy số Tên chương trình sorting1.???

Nhập vào số nguyên dương N và dãy gồm N số nguyên a, a,…, aN­­­­­­. Sắp xếp dãy số thành dãy tăng dần.

Dữ liệu vào từ file SORTING1.INP

- Dòng 1: số nguyên dương N (1<N<106)

- Dòng 2: dãy N số nguyên a, a,…, aN­­­­­­ (0<=a­­­­­i<=109) mỗi số cách nhau một khoảng trắng.

Dữ liệu ra ghi vào file SORTING1.OUT

- Dòng 1: dãy a đã sắp xếp mỗi số cách nhau một khoảng trắng.

Giới hạn: - 50% số test ứng với N<=103

- 50% số test ứng với N<106

8

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

SORTING1.INP

SORTING1.OUT

5

2 0 4 9 8

0 2 4 8 9

9 of 21

BÀI 10: CẤU TRÚC MẢNG

  •  

9

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

10 of 21

BÀI 10: CẤU TRÚC MẢNG

10.1 Mảng 1 chiều

10.1.3 Ví dụ minh họa

Ví dụ 2: Hệ đếm nhị phân Tên chương trình NHIPHAN.???

Cho một số nguyên dương n. Hãy in ra biễu diễn nhị phân của n.

Dữ liệu nhập:

- Là số nguyên dương n (0 ≤ n <1018)

Dữ liệu xuất:

- Biểu diễn nhị phân của n.

Ví dụ

10

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

NHIPHAN.INP

NHIPHAN.OUT

29

11101

11 of 21

BÀI 10: CẤU TRÚC MẢNG

10.1 Mảng 1 chiều

10.1.3 Ví dụ minh họa

Ví dụ 3: Hệ cơ số 16 Tên chương trình THAPLUC.???

Hệ thập lục phân là một hệ đếm có 16 ký tự, từ 0 đến 9 và A đến F (A, B, C, D, E, F tương ứng là 10, 11, 12, 13, 14, 15).

Cho một số nguyên dương n. Hãy in ra biễu diễn thập lục của n.

Dữ liệu nhập:

- Là số nguyên dương n (0 ≤ n <1018)

Dữ liệu xuất:

- Biểu diễn thập lục của n.

11

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

THAPLUC.INP

THAPLUC.OUT

923

39B

12 of 21

BÀI 10: CẤU TRÚC MẢNG

10.1 Mảng 1 chiều

10.1.3 Ví dụ minh họa

Ví dụ 4: Đếm số Tên chương trình DEMSO1.???

Nhập vào dãy gồm N số nguyên a1,a2,….,aN. Hãy xuất ra số có số lần xuất hiện nhiều nhất và số lần tương ứng.

Lưu ý: Trong trường hợp có nhiều kết quả đúng theo yêu cầu thì in ra kết quả của số có giá trị lớn nhất

Dữ liệu vào: File DEMSO1.INP gồm

- Dòng 1: số nguyên N (10<=N<=105)

- Dòng 2: gồm N số nguyên a1,a2,….,aN (1<=ai<=106) mỗi giá trị cách nhau một khoảng trắng.

Dữ liệu xuất: File DEMSO1.OUT gồm 2 dòng

- Dòng 1: ghi số có số lần xuất hiện nhiều nhất.

- Dòng 2: số lần xuất hiện.

12

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

DEMSO1.INP

DEMSO1.OUT

12

9 52 11 12 52 13 9 6 11 52 52 6

52

4

13 of 21

BÀI 10: CẤU TRÚC MẢNG

10.2 Mảng 2 chiều

10.2.1 Khai báo

Cú pháp:

<kiểu dữ liệu> <tên biến mảng> [m][n];

Ví dụ: int A[3][4], B[3][4];

int A[2][3] = { {1,2,3}, {2,1,4} };

Trong đó:

- m, n là số hàng, số cột của mảng.

- có thể được khởi tạo bằng dãy các dòng giá trị, các dòng cách nhau bởi dấu phẩy, mỗi dòng được bao bởi cặp ngoặc {} và toàn bộ giá trị khởi tạo nằm trong cặp dấu {}.

- Tương tự mảng một chiều các chiều trong mảng cũng được đánh số từ 0

- Để truy cập phần tử của mảng ta sử dụng tên mảng kèm theo 2 chỉ số chỉ vị trí hàng và cột của phần tử

13

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

14 of 21

BÀI 10: CẤU TRÚC MẢNG

10.2 Mảng 2 chiều

10.2.1 Khai báo

Tham chiếu đến phần tử mảng 2 chiều

- Cú pháp

<tên biến mảng>[hàng tham chiếu][cột tham chiếu]

- Ví dụ: int A[2][3] = { {7,8,9}, {11,39,24} };

A[0][1]=8; A[1][0]=11;

14

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

7

8

9

11

39

24

15 of 21

BÀI 10: CẤU TRÚC MẢNG

10.2 Mảng 2 chiều

10.2.2. Nhập xuất mảng 2 chiều

- Nhập mảng

for (int i=0; i<=5; i++)

{

for (int j=0; j<=5; j++)

cin>>a[i][j];

}

- Xuất mảng

for (int i=0; i<=5; i++){

for (int j=0; j<=5; j++){

cout<<a[i][j];

}

cout<<endl;

}

15

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

16 of 21

BÀI 10: CẤU TRÚC MẢNG

10.2 Mảng 2 chiều

10.2.3 Một số ví dụ

Ví dụ 1: Tên chương trình VD1M2C.???

Nhập N và ma trận NxN sau đó xuất ra ma trận vừa nhập.

Dữ liệu vào: từ file VD1M2C.INP

- Dòng 1: số nguyên dương N (3≤ N ≤103)

- Dòng 2: n dòng tiếp theo mỗi dòng n số nguyên aij (aij <109 )

Dữ liệu ra: ghi vào file VD1M2C.OUT

- Xuất ma trận vừa nhập

16

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

VD1M2C.INP

VD1M2C.OUT

3

2 5 9

8 7 5

4 6 1

2 5 9

8 7 5

4 6 1

17 of 21

BÀI 10: CẤU TRÚC MẢNG

10.2 Mảng 2 chiều

10.2.3 Một số ví dụ

Ví dụ 2: Tên chương trình VD2M2C.???

Nhập số nguyên dương N sau đó xuất ra ma trận theo yêu cầu.

Dữ liệu vào: từ file VD2M2C.INP

- Dòng 1: số nguyên dương N (3≤ N ≤103)

Dữ liệu ra: ghi vào file VD2M2C.OUT

- Ma trận theo yêu cầu.

17

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

VD1M2C.INP

VD1M2C.OUT

5

1 2 3 4

2 4 6 8

3 6 9 12

4 8 12 16

18 of 21

BÀI 10: CẤU TRÚC MẢNG

10.2 Mảng 2 chiều

10.2.3 Một số ví dụ

Ví dụ 3: Tên chương trình VD3M2C.???

Nhập N và ma trận NxN sau đó tính và xuất ra tổng các phần tử trên đường chéo, các dòng, các cột.

Dữ liệu vào: từ file VD3M2C.INP

- Dòng 1: số nguyên dương N (3≤ N ≤103)

- Dòng 2: n dòng tiếp theo mỗi dòng n số nguyên aij (aij <109 )

Dữ liệu ra: ghi vào file VD3M2C.OUT

- Dòng 1: tổng các phần tử trên đường chéo chính, tổng các số trên đường chéo phụ.

- Dòng 2: tổng các phần tử trên các dòng.

- Dòng 3: tổng các phần tử trên các cột.

18

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

VD3M2C.INP

VD3M2C.OUT

3

2 5 9

8 7 5

4 6 1

10 20

16 20 11

14 18 15

19 of 21

BÀI 8: CẤU TRÚC RẼ NHÁNH

10.3. Tóm tắt

- Khai báo mảng 1 chiều

// không khởi tạo

<kiểu dữ liệu> <tên biến mảng> [số phần tử mảng] ;

//có khởi tạo

<kiểu dữ liệu> <tên biến mảng> [số phần tử mảng] = {dãy giá trị};

<kiểu dữ liệu> <tên biến mảng> [] = {dãy giá trị};

- Tham chiếu đến phần tử mảng

<tên biến mảng>[vị trí phấn tử]

- Gán tất cả phần tử mảng bằng giá trị nào đó dùng memset;

19

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

20 of 21

BÀI 8: CẤU TRÚC RẼ NHÁNH

10.3. Tóm tắt

- Khai báo mảng 2 chiều

<kiểu dữ liệu> <tên biến mảng> [m][n];

-> m là số dòng, n là số cột

- Cú pháp truy cập phần tử mảng 2 chiều

<tên biến mảng>[hàng tham chiếu][cột tham chiếu]

20

Trường THPT chuyên Thoại Ngọc Hầu Tin học 10 Chuyên

Tổ Tin học Chương III

21 of 21

21

THE END!