Mảng hai chiều - mảng đa chiều trong C / C++
Trong bài viết này, codehow sẽ giới thiệu đến các bạn mảng hai chiều - mảng đa chiều trong C / C++. Ở bài viết trước chúng ta đã tìm hiểu về mảng một chiều trong C / C++, các bạn có thể xem lại trước khi đi vào bài này nhé.
Về định nghĩa thì nó cũng tương tự như mảng một chiều, được sử dụng để lưu trữ các phần tử cùng một kiểu dữ liệu. Nhưng về hình thức lưu trữ thì khác nhau, các bạn cùng mình tìm hiểu thôi nhé.
Cách khai báo mảng hai chiều - mảng đa chiều trong C / C++
Tương tự như mảng một chiều, mảng hai chiều - đa chiều trong C / C++ được sử dụng để lưu trữ nhiều phần tử có cùng kiểu dữ liệu.
Vậy cú pháp khai báo của mảng hai chiều - đa chiều như thế nào các bạn hãy xem dưới đây.
Cú pháp mảng hai chiều:
<type><name>[<size 1>][<size 2>];
Cú pháp mảng đa chiều:
<type><name>[<size 1>][<size 2>...<size n>];
Trong đó:
- type: Là kiểu dữ liệu của mảng.
- name: Là tên mảng.
- size: là kích thước chiều của mảng.
Ví dụ: Mình khai báo mảng hai chiều với kích thước là 3 và 4 như sau:
int array[3][4];
Ví dụ: Mình khai báo mảng 4 chiều với kích thước lần lượt là 4, 6, 2, 3 như sau:
int array[4][6][2][3];
*Lưu ý:
- Đối với mảng hai chiều có thể lưu trữ tối đa m x n (m là số dòng và n là số cột). Ví dụ có mảng arr[3][4] thì lưu trữ tối đa là 3 x 4 = 12 phần tử.
- Đối với mảng đa chiều cũng tương tự như vậy. Ví dụ mảng ba chiều arr[3][4][5] thì số phần tử lưu trữ tối đa là 3 x 4 x 5 = 60 phần tử.
Khởi tạo mảng hai chiều - mảng đa chiều trong C / C++
Khi khai báo mảng hai chiều - mảng đa chiều, chúng ta có thể gán giá trị trực tiếp cho các phần tử trong mảng.
Khởi tạo mảng hai chiều trong C / C++.
Để khởi tạo mảng hai chiều, ta có hai cách khởi tạo như sau:
int array[2][3] = {2, 4, 5, 9, 0, 19};
Hoặc:
int array[2][3] = { {2, 4, 5}, {9, 0, 19}};
Các phần tử này được lưu dưới dạng hai hàng và ba cột như hình dưới đây.
Khởi tạo mảng đa chiều trong C / C++.
Để khởi tạo mảng đa chiều, ta cũng có hai cách khởi tạo. Dưới đây mình lấy ví dụ khởi tạo mảng ba chiều làm minh họa nhé.
int array[2][3][4] = {3, 4, 2, 3, 0, -3, 9, 11, 23, 12, 23, 2, 13, 4, 56, 3, 5, 9, 3, 5, 5, 1, 4, 9};
Hoặc:
int array[2][3][4] = { { {3, 4, 2, 3}, {0, -3, 9, 11}, {23, 12, 23, 2} }, { {13, 4, 56, 3}, {5, 9, 3, 5}, {3, 1, 4, 9} } };
Nhập xuất các phần tử mảng hai chiều trong C / C++
Trong phần này mình sẽ thực hiện viết một chương trình nhập xuất mảng hai chiều trong C / C++.
Cụ thể mình sẽ yêu cầu người dùng nhập vào kích thước hai chiều m và n của mảng. Sau đó sử dụng hàm rand()
để nhập các phần tử ngẫu nhiên cho mảng rồi hiển thị các phần tử đó ra màn hình dưới dạng ma trận.
#include <iostream> using namespace std; #define ROW 100 #define COL 100 void nhapMang(int mt[][COL], int &m, int &n) { // khởi tạo số ngẫu nhiên srand(time(NULL)); cout << "Nhập số dòng m: "; cin >> m; cout << "Nhập số cột n: "; cin >> n; // khởi tạo mảng ngẫu nhiên từ [0][0] đến [m-1][n-1]. for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { mt[i][j] = rand() % 100; } } } void xuatMang(int mt[][COL], int m, int n) { // xuất từng phần tử cho mảng for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cout << mt[i][j] << "\t"; } cout << endl; } } int main() { int mt[ROW][COL]; // mảng myArray có MAX phần tử int nRow, nCol; // số phần tử dòng và cột được sử dụng // nhập xuất mảng tự động nhapMang(mt, nRow, nCol); xuatMang(mt, nRow, nCol); cout<<"\n--------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; }
Kết quả:
Ví dụ mảng hai chiều - đa chiều trong C / C++
Trong phần này mình sẽ thực hiện các chương trình sử dụng mảng hai chiều - mảng đa chiều trong C / C++ để các bạn tham khảo.
Ví dụ mảng hai chiều trong C / C++
Ví dụ 1: Tính tổng các phần tử theo dòng và theo cột được nhập bởi người dùng trong mảng hai chiều.
#include <iostream> using namespace std; // định nghĩa số phần tử mảng #define ROW 100 #define COL 100 // khai báo prototype void nhapMang(int mt[][COL], int &m, int &n); void xuatMang(int mt[][COL], int m, int n); int tongDong(int mt[][COL], int n, int d); int tongCot(int mt[][COL], int m, int c); int main() { int mt[ROW][COL]; // mảng myArray có MAX phần tử int nRow, nCol; // số phần tử dòng và cột được sử dụng // nhập xuất mảng tự động nhapMang(mt, nRow, nCol); xuatMang(mt, nRow, nCol); // tính tổng dòng d, cột c int d; cout << "Nhập dòng cần tính tổng: "; cin >> d; cout << "Tổng dòng: " << tongDong(mt, nCol, d) << endl; // tính tổng cột c int c; cout << "Nhập cột cần tính tổng: "; cin >> c; cout << "Tong cột: " << tongCot(mt, nRow, c) << endl; cout<<"\n--------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; } // hàm nhập mảng void nhapMang(int mt[][COL], int &m, int &n) { // khởi tạo số ngẫu nhiên srand(time(NULL)); cout << "Nhập số dòng : "; cin >> m; cout << "Nhập số cột : "; cin >> n; // khởi tạo mảng ngẫu nhiên từ [0][0] đến [m-1][n-1]. for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { mt[i][j] = rand() % 100; } } } // hàm xuất mảng void xuatMang(int mt[][COL], int m, int n) { // xuất từng phần tử cho mảng for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cout << mt[i][j] << "\t"; } cout << endl; } } // tính tổng trên dòng d int tongDong(int mt[][COL], int n, int d) { int sum(0); for (int j = 0; j < n; j++) // Duyệt các cột sum += mt[d][j]; return sum; } // tính tổng trên cột c int tongCot(int mt[][COL], int m, int c) { int sum(0); for (int i = 0; i < m; i++) // Duyệt các dòng sum += mt[i][c]; return sum; }
Kết quả:
Ví dụ 2: Tìm giá trị lớn nhất của mảng hai chiều.
#include <iostream> using namespace std; // định nghĩa số phần tử mảng #define ROW 100 #define COL 100 // khai báo prototype void nhapMang(int mt[][COL], int &m, int &n); void xuatMang(int mt[][COL], int m, int n); int timMax(int mt[][COL], int m, int n); int main() { int mt[ROW][COL]; // mảng myArray có MAX phần tử int nRow, nCol; // số phần tử dòng và cột được sử dụng // nhập xuất mảng tự động nhapMang(mt, nRow, nCol); xuatMang(mt, nRow, nCol); // tìm max int max = timMax(mt, nRow, nCol); cout << "Max = " << max << endl; cout<<"\n--------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; } // hàm nhập mảng void nhapMang(int mt[][COL], int &m, int &n) { // khởi tạo số ngẫu nhiên srand(time(NULL)); cout << "Nhập số dòng : "; cin >> m; cout << "Nhập số cột : "; cin >> n; // khởi tạo mảng ngẫu nhiên từ [0][0] đến [m-1][n-1]. for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { mt[i][j] = rand() % 100; } } } // hàm xuất mảng void xuatMang(int mt[][COL], int m, int n) { // xuất từng phần tử cho mảng for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cout << mt[i][j] << "\t"; } cout << endl; } } // tìm giá trị max của mảng 2 chiều int timMax(int mt[][COL], int m, int n) { int i, j, max; max = mt[0][0]; for (i = 0; i < m; i++) for (j = 0; j < n; j++) if (mt[i][j] > max) max = mt[i][j]; return max; }
Kết quả:
Ví dụ mảng đa chiều trong C / C++
Viết chương trình khai báo và khởi tạo giá trị cho các phần tử trong mảng ba chiều array[2][3][2], sau đó hiển thị các phần tử ra màn hình.
Chương trình C:
#include <stdio.h> int main(void) { // Mảng này có thể lưu trữ tối đa 12 phần tử (2x3x2) int array[2][3][2] = { { {1, 2}, {3, 4}, {5, 6} }, { {7, 8}, {9, 10}, {11, 12} } }; for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) { for (int k = 0; k < 2; ++k) { printf("array[%d][%d][%d] = %d\n",i,j,k,array[i][j][k]); } } } printf("\n--------------------------------\n"); printf("Chương trình này được đăng tại codehow.net"); return 0; }
Chương trình C++:
#include <iostream> using namespace std; int main() { // Mảng này có thể lưu trữ tối đa 12 phần tử (2x3x2) int array[2][3][2] = { { {1, 2}, {3, 4}, {5, 6} }, { {7, 8}, {9, 10}, {11, 12} } }; for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) { for (int k = 0; k < 2; ++k) { cout << "array[" << i << "][" << j << "][" << k << "] = " << array[i][j][k] << endl; } } } cout<<"\n--------------------------------\n"; cout<<"Chương trình này được đăng tại codehow.net"; return 0; }
Kết quả:
Lời kết
Như vậy là chúng ta đã cùng nhau tìm hiểu về mảng hai chiều - mảng đa chiều trong C / C++. Ở bài tiếp theo mình sẽ hướng dẫn các bạn giải một số bài tập về mảng trong C / C++, hãy chú ý theo dõi nhé !!!