CHNG 12 Chng 4 MNG ARRAY 1 1

  • Slides: 26
Download presentation
CHƯƠNG 12 Chương 4 MẢNG (ARRAY) 1

CHƯƠNG 12 Chương 4 MẢNG (ARRAY) 1

1. Giới thiệu • Mảng là một dãy gồm nhiều phần tử cùng một

1. Giới thiệu • Mảng là một dãy gồm nhiều phần tử cùng một kiểu, được đặt liên tiếp trong bộ nhớ máy tính. • Có 2 loại mảng thông thường: mảng 1 chiều, mảng nhiều chiều.

Một số đặc tính của kiểu array • Số phần tử của kiểu array

Một số đặc tính của kiểu array • Số phần tử của kiểu array là cố định ngay từ khi khai báo. Dù là ta dùng bao nhiêu phần tử thì cũng chiếm đúng số bộ nhớ mà dãy đã khai báo. • Do đó thông thường phải khai báo dư hơn số thường dùng để tránh bị thiếu => lãng phí bộ nhớ. • Các phần tử của dãy được xếp liên tục trong bộ nhớ. Do đó, cần có vùng nhớ trống liên tục đủ lớn khi cấp phát bộ nhớ cho dãy. => khó cấp phát.

Khai báo mảng 1 chiều Cú pháp: Kiểu. DL Tên. Biến. Mảng[SPT]; o SPT

Khai báo mảng 1 chiều Cú pháp: Kiểu. DL Tên. Biến. Mảng[SPT]; o SPT là số phần tử tối đa của mảng, o SPT là kiểu đếm được o Phần tử đầu tiên của mảng có chỉ số là 0 VD: int A[ 10 ]; /* khai báo mảng A gồm 10 phần tử, mỗi phần tử có kiểu int */

Minh họa mảng 1 C Vị trí (Index) … 0 1 2 3 4

Minh họa mảng 1 C Vị trí (Index) … 0 1 2 3 4 5 6 7 8 9 int 3 5 11 -6 8 11 -45 3 4 -2 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] int … Giá trị (Value) 5

Truy xuất một phần tử của mảng • Có thể truy xuất hoặc thay

Truy xuất một phần tử của mảng • Có thể truy xuất hoặc thay đổi giá trị của mảng thông qua tên mảng và chỉ số. • VD: A[0] /*phần tử thứ nhất mảng*/ A[3] /* phần tử thứ 4 của mảng*/ • Chỉ số phần tử cuối cùng của mảng có N phần tử là: N -1

Khởi tạo các giá trị của mảng • Khi khai báo một mảng với

Khởi tạo các giá trị của mảng • Khi khai báo một mảng với tầm hoạt động cục bộ, theo mặc định nó sẽ không được khởi tạo, vì vậy nội dung của nó là không xác định cho đến khi chúng ra lưu các giá trị lên đó. • Nếu chúng ta khai báo một mảng toàn cục (bên ngoài tất cả các hàm) nó sẽ được khởi tạo và tất cả các phần tử được đặt bằng 0

3. Gán giá trị cho phần tử mảng A[ 0 ] = 3; A[

3. Gán giá trị cho phần tử mảng A[ 0 ] = 3; A[ 1 ] = 5; A[ 2 ] = 10; A[ 3 ] = -6; A[ 4 ] = 8; A[ 5 ] = 11; A[ 6 ] = -45; A[ 7 ] =3; A[ 8 ] = 4; A[ 9 ] = -2; • Ngoài ra, ta có thể khởi tạo giá trị mảng dùng vòng lặp: for (int i = 0; i < N; i++) cin>> A[ i ];

Khai báo và khởi tạo mảng một chiều • Cú pháp: Kiểu. DL Array.

Khai báo và khởi tạo mảng một chiều • Cú pháp: Kiểu. DL Array. Name[ ]= { Value 1, Value 2, . . . , Value. N }; • Khi đó: − Ta không cần khai báo kích thước mảng. − Số lượng phần tử trong mảng là số các giá trị được cung cấp trong cặp dấu ngoặc {}, được phân cách nhau bởi dấu phẩy. 9

Ví dụ: int so. Chan[] = {2, 4, 6, 8, 10}; Mảng so. Chan

Ví dụ: int so. Chan[] = {2, 4, 6, 8, 10}; Mảng so. Chan có 5 phần tử lần lượt là: so. Chan[0] có giá trị là 2 so. Chan[1] có giá trị là 4. . . so. Chan[4] có giá trị là 10 10

Ví dụ: Đổi một số nguyên dương thập phân thành số nhị phân void

Ví dụ: Đổi một số nguyên dương thập phân thành số nhị phân void main() { int i , j = 0, n, np[20]; cout<<“n= ”; cin>>n; do { np[j]= n%2; j++; n = n/2; }while(n>0); cout<<“dang nhi phan: ”; for( i = j-1 ; i > 0 ; i - -) cout<<‘t’<<np[i]; getche(); } n%2 n=46 0 2 /2 n n= 23 1 11 2 1 5 1 2 2 2 0 2 1 1 np 0 1 1 1 0 1 np[j] 11 2 0

Sử dụng hàm tạo số ngẫu nhiên • C++ cung cấp hàm rand() để

Sử dụng hàm tạo số ngẫu nhiên • C++ cung cấp hàm rand() để tạo ra các số ngẫu nhiên. • Cú pháp: int rand(); • Kết quả của hàm là tạo ra các số nguyên ngẫu nhiên từ 0 đến rand_max • Khi sử dụng rand() ta gọi srand(time(NULL)) để khởi tạo chế độ tạo số ngẫu nhiên. • Để sử dụng các hàm trên thì trong chương trình phải khai báo thư viện <stdlib. h> và <time. h> 12

Ví dụ : Tạo mảng ngẫu nhiên và in ra màn hình. 13

Ví dụ : Tạo mảng ngẫu nhiên và in ra màn hình. 13

§Õm c¸c phÇn tö trong m¶ng tho¶ m·n ®iÒu kiÖn cho tr ước dem

§Õm c¸c phÇn tö trong m¶ng tho¶ m·n ®iÒu kiÖn cho tr ước dem : =0; For (int i=0; i<n; i++) if ( A[i]>TB) i A[i] Dem=0 dem: =dem+1; 0 1 2 3 4 5 6 17 20 18 21 19 17 19 2 3 0 1 +1 +1 3 4 +1 TB = 18. 7

T×m phÇn tö lín nhÊt cña d·y sè nguyªn n phần tử nÕu d·y

T×m phÇn tö lín nhÊt cña d·y sè nguyªn n phần tử nÕu d·y cã nhiÒu phÇn tö cïng gi¸ trÞ th× ® a ra chØ sè cña phÇn tö lín nhÊt ®Çu tiªn. * INPUT: NhËp sè nguyªn d ¬ngn vµ d·y n sè nguyªn d ương a 1, a 2, . . . , an. * OUTPUT: ChØ sè vµ gi¸ trÞ cña phÇn tö lín nhÊt trong d·y.

ThuËt to¸n t×m max Qu¶ nµy míi lín nhÊt Qu¶ nµy lín nhÊt å!T×m

ThuËt to¸n t×m max Qu¶ nµy míi lín nhÊt Qu¶ nµy lín nhÊt å!T×m Qu¶ranµy qu¶ línnhÊt h¬n råi!

Một số giải thuật trên mảng • Khi tổ chức lưu trữ trên array

Một số giải thuật trên mảng • Khi tổ chức lưu trữ trên array của nhiều phần tử, thao tác thường phải thực hiện là tìm kiếm (search) và sắp xếp (sort) các phần tử trong dãy • Việc tìm kiếm (search) dùng để truy vấn thống tin. • Việc sắp xếp (sort) dùng để trình bày thông tin và giúp cho thao tác search hiệu quả hơn. • Một số giải thuật thông dụng: – Linear search có và chưa sort, Binary search – Buble sort

Xem thuật toán Tìm kiếm Tuần tự (Sequential search) 18

Xem thuật toán Tìm kiếm Tuần tự (Sequential search) 18

Xem thuật toán Tìm kiếm Nhị Phân (Binary Search) 19

Xem thuật toán Tìm kiếm Nhị Phân (Binary Search) 19

Xem thuật toán Sắp xếp Nổi bọt (Buble Sort) 20

Xem thuật toán Sắp xếp Nổi bọt (Buble Sort) 20

2. Mảng hai chiều • Mảng hai chiều là mảng của những mảng một

2. Mảng hai chiều • Mảng hai chiều là mảng của những mảng một chiều Cú pháp: type array. Name[rows][columns]; − rows: số hàng − columns: số cột Ví dụ: Khai báo mảng số nguyên 3 hàng 4 cột int a[3][4] 0 0 1 2 3 0 4 2 9 4 1 5 -1 7 8 2 3 10 -2 12 21

Khai báo và khởi tạo mảng hai chiều • Cú pháp: type array. Name[][columns]

Khai báo và khởi tạo mảng hai chiều • Cú pháp: type array. Name[][columns] = { {value 1, value 2, . . . , value. N}, {. . . . . }, {value 1, value 2, . . . , value. N} }; 22

Như vậy: • Số phần tử của mỗi hàng phải bằng số cột •

Như vậy: • Số phần tử của mỗi hàng phải bằng số cột • Số hàng của khai báo mảng hai chiều để trống. • Số hàng của mảng được xác định dựa vào số hàng trong phần khởi tạo. Giá trị các phần tử trong mỗi hàng được đặt trong cặp {}, các hàng phân cách nhau bằng một dấu phẩy. • Ví dụ: int a[][4] = {{4, 2, 9, 4}, {5, -1, 7, 8}, {3, 10, -2, 12}}; 23

Xem de. Mo khởi tạo mảng 2 C? 24

Xem de. Mo khởi tạo mảng 2 C? 24

Xem de. Mo Tính tổng ĐC chính? 25

Xem de. Mo Tính tổng ĐC chính? 25

THỰC HIỆN BÀI TẬP CHƯƠNG 4 26

THỰC HIỆN BÀI TẬP CHƯƠNG 4 26