[Bài 37] Lý Thuyết Mảng 2 Chiều

[Bài 37] Lý Thuyết Mảng 2 Chiều

Mảng 2 chiều là một mảng kiến thức quan trọng trong các ngôn ngữ lập trình, bài học này các bạn sẽ học cách sử dụng mảng 2 chiều trong C++.

1. Mảng 2 Chiều

Trong ngôn ngữ C++ khi cần giải quyết các bài toán liên quan tới ma trận hoặc bảng số thì mảng 2 chiều là cấu trúc dữ liệu có thể giúp bạn lưu trữ dữ liệu đầu vào.

Mảng 2 chiều tương tự như một bảng số gồm hàng và cột, mảng 2 chiều chính là một mảng các mảng 1 chiều

Để truy cập các phần tử trong mảng 2 chiều ta thông qua chỉ số hàng và cột được đánh số từ 0

Chú ý để truy cập vào phần tử trong mảng 2 chiều ta luôn dùng chỉ số hàng trước, chỉ số cột sau 

Cú pháp khai báo : Data_type array_name[rows][cols];

  • Data_type : Kiểu dữ liệu của phần tử trong mảng như int, float, char, double..
  • array_name : Tên mảng 2 chiều
  • rows : Số hàng của mảng 2 chiều
  • cols : Số cột của mảng 2 chiều 

Ví dụ mảng a[4][4]

Khai báo mảng 2 chiều bạn có thể khai báo thủ công như sau : 

#include <iostream>

using namespace std;

int main() {
int a[3][4] = { {1, 2, 3, 1}, {4, 1, 5, 2}, {3, 7, 9, 0} };
cout << "a[0][2] = " << a[0][2] << endl;
cout << "a[1][3] = " << a[1][3] << endl;
return 0;

}

 

Output : 

a[0][2] = 3
a[1][3] = 2

 

Chú ý : Trong mảng 2 chiều bạn không được truy cập vào các chỉ số hàng hay cột không hợp lệ. Mình thấy có nhiều bạn có thói quen dùng chỉ số hàng và cột từ 1 thay vì từ 0, việc này cũng không có vấn đề gì nếu mảng của bạn đủ lớn để các chỉ số bạn dùng là hợp lệ. Vậy nên khi sử dụng thì nên biết mình làm vậy có đúng không để khai báo kích cỡ mảng 2 chiều cho phù hợp.

 


2. Nhập Xuất Mảng 2 Chiều

Các dạng bài tập về mảng 2 chiều đều cho các biết trước số lượng hàng và cột của mảng 2 chiều, bạn có thể khai báo mảng 2 chiều dựa vào hàng cột mà đề bài cung cấp hoặc sử dụng mảng 2 chiều có kích cố định thước đủ lớn.

Để in ra mảng 2 chiều bạn dùng 2 vòng lặp lồng nhau, vòng lặp ngoài duyệt qua hàng, vòng for trong duyệt qua từng cột của hàng.

Ví dụ 1 : Nhập và xuất mảng 2 chiều với kích thước cố định : 

Chú ý code bên dưới sẽ đúng nếu giới hạn mảng 2 chiều của đề bài không vượt quá 205 hàng và số cột không vượt quá 205.

Nếu đề bài cho số lượng hàng và cột lớn hơn bạn cần khai báo mảng 2 chiều lớn hơn để phù hợp với bài toán

#include <iostream>

using namespace std;

int main() {
int n, m; // n : hang, m : cot
int a[205][205]; // 205 x 205
cout << "Nhap so hang, cot : ";
cin >> n >> m;
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << "a[" << i << "][" << j << "] = ";
        cin >> a[i][j];
    }
}
cout << "Mang vua nhap :\n";
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << a[i][j] << " ";
    }
    cout << endl;
}
return 0;

}

 

Ví dụ 2 : Nhập mảng 2 chiều dựa vào số hàng, cột của đề bài

#include <iostream>

using namespace std;

int main() {
int n, m; // n : hang, m : cot
cout << "Nhap so hang, cot : ";
cin >> n >> m;
int a[n][m];
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << "a[" << i << "][" << j << "] = ";
        cin >> a[i][j];
    }
}
cout << "Mang vua nhap :\n";
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << a[i][j] << " ";
    }
    cout << endl;
}
return 0;

}

 


 

3. Mảng 2 Chiều Và Hàm

Mảng 2 chiều có thể làm tham số của hàm, tuy nhiên khi hàm có tham số là mảng 2 chiều thì bạn cần chỉ định số lượng cột của mảng 2 chiều.

Khi gọi hàm thì đối số truyền vào phải có số cột giống với số cột của mảng 2 chiều trong tham số.

Ví dụ 1: Hàm nhập và xuất mảng

#include <iostream>

using namespace std;

void nhap(int a[][205], int n, int m) {
cout << "Nhap mang : \n";
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << "a[" << i << "][" << j << "] = ";
        cin >> a[i][j];
    }
}

}

void xuat(int a[][205], int n, int m) {
cout << "Mang 2 chieu : \n";
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << a[i][j] << " ";
    }
    cout << endl;
}

}

int main() {
int n, m, a[205][205];
cout << "Nhap so hang, cot : ";
cin >> n >> m;
nhap(a, n, m);
xuat(a, n, m);
return 0;

}

 

Ví dụ 2 : Đếm số lượng số nguyên tố trong mảng 2 chiều 

#include <iostream>
#include <math.h>

using namespace std;

bool nt(int n) {
for (int i = 2; i <= sqrt(n); i++) {
    if (n % i == 0) return false;
}
return n > 1;

}

void nhap(int a[][205], int n, int m) {
cout << "Nhap mang : \n";
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << "a[" << i << "][" << j << "] = ";
        cin >> a[i][j];
    }
}

}

void xuat(int a[][205], int n, int m) {
cout << "Mang 2 chieu : \n";
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << a[i][j] << " ";
    }
    cout << endl;
}

}

int dem(int a[][205], int n, int m) {
int ans = 0;
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        if (nt(a[i][j])) {
            ++ans;
        }
    }
}
return ans;

}

int main() {
int n, m, a[205][205];
cout << "Nhap so hang, cot : ";
cin >> n >> m;
nhap(a, n, m);
xuat(a, n, m);
cout << "So luong so nguyen to : " << dem(a, n, m) << endl;
return 0;

}

Lập trình C++ cơ bản