Nối tiếp chuỗi bài học C++ về chủ đề mảng (array) trong C++, trong bài viết dưới đây Taimienphi.vn sẽ giới thiệu tiếp cho bạn về mảng 2D (hay mảng 2 chiều) trong C++ là gì. Ngoài ra bạn đọc có thể tham khảo thêm một số bài viết đã có trên Taimienphi.vn để tìm hiểu thêm về hàm và Number trong C++ là gì nhé.
Trong các bài viết mảng (array) trong C++ (phần 1, 2 và 3) trước Taimienphi.vn đã giới thiệu cho bạn về khai báo và khởi tạo mảng trong C++. Trong bài viết mảng (array) trong C++ (phần 4) tiếp theo dưới đây Taimienphi.vn sẽ giới thiệu tiếp cho bạn về mảng 2D (hay mảng 2 chiều) trong C++.
1. Mảng 2 chiều (2D) trong C++
Mảng 2 chiều (2D) trong C++ còn được gọi là ma trận, mảng này bao gồm các hàng và các cột. Trước hết chúng ta sẽ cùng tìm hiểu cách khai báo và khởi tạo mảng 2D trong C++ như thế nào.
1.1 Định nghĩa mảng 2 chiều trong C++
Tương tự như mảng một chiều, chúng ta định nghĩa mảng 2 chiều trong C++ bằng cú pháp dưới đây:
int a[2][4];
Trong đó, a là mảng 2 chiều kiểu int, bao gồm 2 hàng và 4 cột.
1.2 Khởi tạo mảng 2 chiều trong C++
Tương tự như mảng một chiều, chúng ta có thể gán giá trị cho mảng 2 chiều theo 2 cách.
Trong cách đầu tiên, chỉ cần gán một giá trị cho các phần tử của mảng. Nếu không có giá trị nào được gán cho bất kỳ phần tử nào, thì giá trị được gán là 0 theo mặc định.
Giả sử chúng ta đã khai báo mảng 2 chiều a[2][2]. Sau đó, để gán giá trị cho nó, chúng ta cần gán một giá trị cho các phần tử của nó.
int a[2][2];
a[0][0]=1;
a[0][1]=2;
a[1][0]=3;
a[1][1]=4;
Cách thứ 2 là khai báo và gán các giá trị đồng thời như trong mảng một chiều.
int a[2][3] = { 1, 2, 3, 4, 5, 6 };
Ở đây, giá trị của a[0][0] là 1, a[0][1] là 2, a[0][2] là 3, a[1][0] là 4, a[1][1 ] là 5 và a[1][2] là 6.
Chúng ta có thể viết đoạn mã trên như sau:
int a[2][3] = {
{1, 2, 3},
{4, 5, 6 }
};
Trong mảng một chiều khi gán giá trị cho một mảng tại thời điểm khai báo, chúng ta không cần cung cấp kích thước, nhưng trong mảng 2 chiều, chúng ta cần cung cấp ít nhất kích thước thứ hai.
Xem xét các trường hợp dưới đây để khởi tạo một mảng:
int a[2][2] = { 1, 2, 3, 4 }; /* hợp lệ */
int a[ ][2] = { 1, 2, 3, 4 }; /* hợp lệ */
int a[2][ ] = { 1, 2, 3, 4 }; /* không hợp lệ */
int a[ ][ ] = { 1, 2, 3, 4 }; /* không hợp lệ */
2. Tại sao sử dụng mảng 2 chiều trong C++?
Giả sử có 3 học sinh, mỗi học sinh học 2 môn học (môn 1 và môn 2), yêu cầu là chúng ta phải hiển thị điểm 2 môn học của 3 học sinh này.
#include
Sử dụng namespace std;
int main(){
float điểm[3][2];
int i,j;
for( i=0; i<3;>
{
/* đầu ra của điểm từ người dùng */
cout < "nhập="" số="" điểm="" của="" học="" sinh="">< (i+1)=""><>
for( j=0; j<2;>{C}{C}{C}
{
cout < "môn="" học"="">< (j+1)=""><>
cin >> điểm [i][j];
}
}
/* in điểm của các học sinh */
for( i=0; i<3;>{C}{C}{C}
{
cout < "điểm="" của="" học="" sinh="" "="">< (i+1)=""><>
for( j=0; j<2;>{C}{C}{C}
{
cout < "môn="" học="" "="">< (j+1)="">< "="" :="" "="">< marks[i][j]=""><>
}
}
Trả về 0;
}
Kết quả đầu ra có dạng:
Nhập số điểm của học sinh 1
Môn học 1
78
Môn học 2
94
Nhập số điểm của học sinh 2
Môn học 1
87
Môn học 2
91
Nhập số điểm của học sinh 3
Môn học 1
62
Môn học 2
56
Điểm số của học sinh 1
Môn học 1 : 78
Môn học 2 : 94
Điểm số của học sinh 2
Môn học 1 : 87
Môn học 2 : 91
Điểm số của học sinh 3
Môn học 1 : 62
Môn học 2 : 56
Trong ví dụ trên, trước tiên chúng ta định nghĩa mảng, bao gồm 3 hàng và 2 cột là float điểm[3][2];
Ở đây, các phần tử của mảng chứa điểm 2 môn học của 3 học sinh như sau:
Trong ví dụ này, chúng ta lấy giá trị của từng phần tử của mảng bằng cách sử dụng vòng lặp for bên trong vòng lặp for khác.
Trong lần lặp đầu tiên của vòng lặp for bên ngoài, giá trị của i là 0. Với giá trị i là 0, khi vòng lặp for bên trong lặp lại đầu tiên, giá trị của j là 0, vì vậy điểm[i][j] là điểm[0][0]. Bằng cách viết cin >> mark [i] [j]; để lấy giá trị của các điểm[0][0].
Sau đó, vòng lặp for bên trong lặp lại và giá trị của j là 1, điểm [i][j] là điểm[0][1] và giá trị của nó được lấy từ người dùng. Tiếp theo, vòng lặp bên ngoài lặp lại lần thứ hai và giá trị của i là 1 và toàn bộ quá trình tiếp tục.
Sau khi gán các giá trị cho các phần tử mảng, chúng ta sẽ in các giá trị của các phần tử của mảng bằng cách sử dụng vòng lặp for bên trong vòng lặp for khác.
Dưới đây là ví dụ khác về mảng 2 chiều trong C++:
Giả sử có 2 nhà máy và mỗi nhà máy này sản xuất 4 loại mặt hàng khác nhau, bao gồm một số mặt hàng loại 1, một số mặt hàng loại 2, ... . Nhiệm vụ của chúng ta làtính tổng sản phẩm của từng nhà máy, tức là tổng các mặt hàng của từng loại mà nhà máy sản xuất.
#include
Sử dụng namespace std;
int main(){
int s[2][4];
s[0][0] = 2;
s[0][1] = 5;
s[0][2] = 7;
s[0][3] = 4;
s[1][0] = 9;
s[1][1] = 3;
s[1][2] = 2;
s[1][3] = 8;
cout < "tổng="" số="" mặt="" hàng="" của="" nhà="" máy="" 1="" :"=""><>
int sum1 = 0, sum2 = 0;
for(int i = 0; i < 4;="">
{
sum1 += s[0][i];
}
cout < sum1=""><>
cout < "tổng="" số="" mặt="" hàng="" của="" nhà="" máy="" 2="" :"=""><>
for(int j = 0; j < 4;="">
{
sum2 += s[1][j];
}
cout < sum2=""><>
trả về 0;
Kết quả đầu ra:
Tổng số mặt hàng của nhà máy 1:
18
Tổng số mặt hàng của nhà máy 2:
22
Ở đây, s[0][i] tương ứng với số lượng mặt hàng của nhà máy 1 và kiểu i, trong đó chúng ta lấy giá trị từ 0 đến 3 bằng cách sử dụng vòng lặp for và s[1][i] tương ứng số lượng các mặt hàng của nhà máy thứ 2 thuộc kiểu i. Ví dụ. - s[0][2] tương ứng cho loại mặt hàng thứ ba của nhà máy thứ 1 và s[1][2] tương ứng loại mặt hàng thứ ba của nhà máy thứ 2. sum1 là tổng của tất cả các mặt hàng của nhà máy 1. Tương tự với tổng của tất cả các mặt hàng của nhà máy thứ hai.
Ban đầu sum1 là 0. Trong lần lặp đầu tiên, s[0][i] là s[0][0], tương ứng số lượng mặt hàng đầu tiên của nhà máy thứ 1. Vì vậy, sum1 += s[0][i] sẽ là sum1 + = s[0][0]. Vì vậy, sum1 sẽ là 2. Tương tự trong lần lặp thứ hai, s[0][i] sẽ là s[0][1], tương ứng cho loại mặt hàng thứ 2 của nhà máy thứ nhất. Như vậy sum1 sẽ là 2 + 5 tức là 7 và tương tự.
https://thuthuat.taimienphi.vn/mang-array-trong-c-phan-4-45808n.aspx
Trong bài viết mảng (array) trong C++ (phần 4) trên đây Taimienphi.vn vừa giới thiệu cho bạn về mảng 2D (tức mảng 2 chiều) trong C++ là gì. Trong các bài viết tiếp theo Taimienphi.vn sẽ giới thiệu tiếp cho bạn về chuỗi trong C - một nội dung được rất nhiều người lập trình quan tâm, rất nhiều vấn đề liên quan đến chuỗi trong C sẽ được trình bày chi tiết trong bài viết.
2;>3;>2;>3;>