LATEST

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.

bai25 02 png

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.

bai25 03 png

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ả:

bai25 01 png

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ả:

bai25 05 png

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ả:

bai25 06 png

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ả:

bai25 04 png

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é !!!

Cùng chuyên mục:

Danh sách liên kết (Linked List) là gì? Các loại danh sách liên kết

Danh sách liên kết (Linked List) là gì? Các loại danh sách liên kết

Sử dụng đệ quy để giải bài toán tháp Hà Nội

Sử dụng đệ quy để giải bài toán tháp Hà Nội

Đệ quy tương hỗ (Mutual Recursion) trong C / C++

Đệ quy tương hỗ (Mutual Recursion) trong C / C++

Đệ quy lồng (Nested Recursion) trong C / C++

Đệ quy lồng (Nested Recursion) trong C / C++

Đệ quy đa tuyến (Exponential Recursion) trong C / C++

Đệ quy đa tuyến (Exponential Recursion) trong C / C++

Đệ quy nhị phân (Binary Recursion) trong C / C++

Đệ quy nhị phân (Binary Recursion) trong C / C++

Đệ quy đuôi (Tail Recursion) trong C / C++

Đệ quy đuôi (Tail Recursion) trong C / C++

Đệ quy tuyến tính (Linear Recursion) trong C / C++

Đệ quy tuyến tính (Linear Recursion) trong C / C++

Hàm đệ quy là gì? Các loại hàm đệ quy trong C / C++

Hàm đệ quy là gì? Các loại hàm đệ quy trong C / C++

Thuật toán sắp xếp Quick Sort trong C / C++

Thuật toán sắp xếp Quick Sort trong C / C++

Thuật toán sắp xếp trộn (Merge Sort) trong C / C++

Thuật toán sắp xếp trộn (Merge Sort) trong C / C++

Thuật toán sắp xếp chọn (Selection Sort) trong C / C++

Thuật toán sắp xếp chọn (Selection Sort) trong C / C++

Thuật toán sắp xếp chèn (Insertion Sort) trong C / C++

Thuật toán sắp xếp chèn (Insertion Sort) trong C / C++

Thuật toán sắp xếp nổi bọt (Bubble Sort) trong C / C++

Thuật toán sắp xếp nổi bọt (Bubble Sort) trong C / C++

Thuật toán tìm kiếm nội suy (Interpolation Search) trong C / C++

Thuật toán tìm kiếm nội suy (Interpolation Search) trong C / C++

Thuật toán tìm kiếm nhị phần (Binary Search) trong C / C++

Thuật toán tìm kiếm nhị phần (Binary Search) trong C / C++

Thuật toán tìm kiếm tuyến tính (Linear Search) trong C / C++

Thuật toán tìm kiếm tuyến tính (Linear Search) trong C / C++

Thuật toán kiểm tra năm nhuận trong C / C++

Thuật toán kiểm tra năm nhuận trong C / C++

Thuật toán kiểm tra số chẵn lẻ trong C / C++

Thuật toán kiểm tra số chẵn lẻ trong C / C++

Thuật toán tính lũy thừa trong C / C++

Thuật toán tính lũy thừa trong C / C++

Top