Bài giảng Phương pháp lập trình: Bài 7 do TS. Ngô Hữu Dũng biên soạn trình bày các nội dung sau: Khai báo kiểu mảng 2 chiều, truy xuất đến một phần tử, gán dữ liệu kiểu mảng, truyền mảng cho hàm, ...Mời các bạn cùng tham khảo!
TRƯỜNG ĐẠI HỌC CƠNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH Phương pháp lập trình Mảng hai chiều TS Ngơ Hữu Dũng Nội dung Mảng hai chiều Vòng lặp lồng Phương pháp lập trình - Mảng hai chiều Ma Trận … n-1 0 m-1 An … … Am,n … n-1 n-1 Phương pháp lập trình - Mảng hai chiều Ma Trận … n-1 0 … n-1 … … n-1 n-1 n-1 dòng = cột dòng > cột dòng < cột 0 … n-1 … n-1 … … n-1 n-1 n-1 dòng + cột = n-1 … n-1 … An … n-1 … An dòng + cột > n-1 dòng + cột < n-1 Phương pháp lập trình - Mảng hai chiều Khai báo kiểu mảng chiều Cú pháp typedef [][]; N1, N2: số lượng phần tử chiều Ví dụ typedef int MaTran[3][4]; Kiểu MaTran Phương pháp lập trình - Mảng hai chiều Khai báo biến mảng chiều Cú pháp Tường minh [][]; Không tường minh (thông qua kiểu) typedef [][]; ; , ; Phương pháp lập trình - Mảng hai chiều Khai báo biến mảng chiều Ví dụ Tường minh int a[10][20], b[10][20]; int c[5][10]; int d[10][20]; Không tường minh (thông qua kiểu) typedef int MaTran10x20[10][20]; typedef int MaTran5x10[5][10]; MaTran10x20 a, b; MaTran11x11 c; MaTran10x20 d; Phương pháp lập trình - Mảng hai chiều Truy xuất đến phần tử Thông qua số [][] Ví dụ Cho mảng chiều sau int a[3][4]; Các truy xuất Hợp lệ: a[0][0], a[0][1], …, a[2][2], a[2][3] Không hợp lệ: a[-1][0], a[2][4], a[3][3] Phương pháp lập trình - Mảng hai chiều Gán liệu kiểu mảng Không sử dụng phép gán thông thường mà phải gán trực tiếp phần tử = ; //sai [][giá trị cs2] = ; Ví dụ int a[5][10], b[5][10]; b = a; // Sai int i, j; for (i = 0; i < 5; i++) for (j = 0; j < 10; j++) b[i][j] = a[i][j]; Phương pháp lập trình - Mảng hai chiều Truyền mảng cho hàm Truyền mảng cho hàm Tham số kiểu mảng khai báo hàm giống khai báo biến mảng void NhapMaTran(int a[50][100]); Tham số kiểu mảng truyền cho hàm địa phần tử mảng Có thể bỏ số lượng phần tử chiều thứ trỏ Mảng thay đổi nội dung sau thực hàm void NhapMaTran(int a[][100]); void NhapMaTran(int (*a)[100]); Phương pháp lập trình - Mảng hai chiều Tìm kiếm phần tử Ma Trận Yêu cầu Tìm xem phần tử x có nằm ma trận a kích thước mxn hay không? Ý tưởng Duyệt phần ma trận a Nếu phần tử xét x trả có (1), ngược lại trả khơng có (0) Phương pháp lập trình - Mảng hai chiều Hàm Tìm Kiếm int TimKiem(int a[][MAXC], int m, int n, int x) { int i, j; for (i=0; i