Trong loạt bài mảng (array) trong C++ (phần 1, 2 và 3), Mytour đã giới thiệu về cách khai báo và khởi tạo mảng trong C++. Bài viết này (phần 4) sẽ tiếp tục giới thiệu về mảng 2D (hay mảng 2 chiều) trong C++.
Mục Lục bài viết:
1. Mảng 2D trong C++
1.1. Định nghĩa mảng 2 chiều trong C++
1.2. Khởi tạo mảng 2 chiều trong C++
2. Tại sao sử dụng 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 biết đến là ma trận, bao gồm các hàng và cột. Hãy cùng khám phá cách khai báo và khởi tạo mảng 2D trong C++.
1.1 Khái Niệm Mảng 2 Chiều trong C++
Tương tự như mảng một chiều, chúng ta có thể định nghĩa mảng 2 chiều trong C++ theo cú pháp dưới đây:
int a[2][4];
Trong đó, mảng a là kiểu int, bao gồm 2 hàng và 4 cột.
1.2 Cách 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 phương pháp khác nhau.
Trong phương pháp đầu tiên, chỉ cần gán 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ị mặc định là 0.
Giả sử đã khai báo mảng 2 chiều a[2][2]. Sau đó, để gán giá trị, ta chỉ cần gán giá trị cho từng 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;
Phương pháp thứ hai là khai báo và gán giá trị ngay tại thời điểm khai báo, tương tự như 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ị tại thời điểm khai báo, không cần cung cấp kích thước. Trái lại, trong mảng 2 chiều, cần cung cấp ít nhất kích thước thứ hai.
Khám phá các trường hợp dưới đây để bắt đầu 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 chúng ta cần sử dụng mảng 2 chiều trong C++?
Giả sử có 3 học sinh, mỗi học sinh tham gia 2 môn học (môn 1 và môn 2). Nhiệm vụ là hiển thị điểm của 2 môn học cho 3 học sinh.
#include
Sử dụng namespace std;
int main(){
float grades[3][2];
int i, j;
for( i=0; i<3;>
{
/* Nhập đ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 >> grades[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)=''>< '='' :='' '=''>< grades[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 grades[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 duyệt đầu tiên của vòng lặp bên ngoài, giá trị của i là 0. Với i là 0, khi vòng lặp bên trong thực hiện lặp lại đầu tiên, giá trị của j là 0, nên điểm[i][j] là điểm[0][0]. Sử dụng cin >> mark [i] [j]; để nhập giá trị cho điểm[0][0].
Tiếp theo, vòng lặp for bên trong được thực hiện và giá trị của j là 1, điểm [i][j] là điểm[0][1] và giá trị của nó được nhập từ người dùng. Sau đó, vòng lặp bên ngoài tiếp tục lặp lại lần thứ hai và giá trị của i là 1 và quá trình tiếp tục.
Sau khi gán giá trị cho các phần tử của mảng, chúng ta sẽ in 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.
Dưới đây là một ví dụ khác về mảng 2 chiều trong ngôn ngữ lập trình C++:
Giả sử có 2 xưởng sản xuất, mỗi xưởng sản xuất 4 loại 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 xưởng, tức là tổng số lượng từng loại mặt hàng mà xưởng 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='' xưởng='' 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='' xưởng='' 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 xưởng 1:
18
Tổng số mặt hàng của xưởng 2:
22
Ở đây, s[0][i] tương ứng với số lượng mặt hàng của xưởng 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 xưởng 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 xưởng thứ 1 và s[1][2] tương ứng loại mặt hàng thứ ba của xưởng thứ 2. sum1 là tổng của tất cả các mặt hàng của xưởng 1. Tương tự với tổng của tất cả các mặt hàng của xưởng 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 xưởng 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 xưởng thứ nhất. Như vậy sum1 sẽ là 2 + 5 tức là 7 và tương tự.
Trong phần 4 về mảng (array) trong C++, Mytour đã giới thiệu về khái niệm mảng 2 chiều (mảng 2D) trong C++. Trong những bài viết tiếp theo, Mytour sẽ chia sẻ kiến thức về xử lý chuỗi trong ngôn ngữ lập trình C, một chủ đề mà nhiều lập trình viên quan tâm. Các vấn đề liên quan đến chuỗi trong C sẽ được trình bày chi tiết trong những bài viết sắp tới.