Các phần tử trong mảng hai chiều trong Lập trình C ++
Tóm Tắt
Xuất các phần tử mảng 2 chiều
Để truy xuất giá trị của phần tử trong mảng, ta sử dụng cú pháp:
<tên biến mảng>[<chỉ số dòng thứ x>][<chỉ số cột thứ y>];
Ví dụ: Cho mảng như sau:
int a[2][3] // 2 dòng, 3 cột
Các truy xuất:
-
Hợp lệ:
a[0][0], a[0][1], …, a[1][1], a[1][2]
-
Không hợp lệ:
a[-1][0], a[0][-1], a[2][3], … => cho kết quả không như mong muốn (có thể gây chết chương trình).
Chú ý: khi truy xuất một phần tử mảng, luôn đảm bảo chỉ số của phần tử đó là hợp lệ trong phạm vi của mảng.
1.Nhập và xuất mảng 2 chiều
Bên dưới là ví dụ về nhập, xuất dữ liệu cho mảng:
#include <iostream>
#include <cstdlib> // for srand() and rand()
#include <ctime> // for time()
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 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);
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 << "Nhap so dong : ";
cin >> m;
cout << "Nhap so cot : ";
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;
}
}
Output:
Nhap so dong : 2
Nhap so cot : 3
61 63 46
37 92 40
2.Tính tổng các phần tử trong mảng
Yêu cầu: cho trước ma trận mt, kích thước mxn. Tính tổng các phần tử trên dòng d, cột c.
Ý tưởng: duyệt ma trận và cộng dồn các phần tử có tọa độ (dòng, cột) thỏa yêu cầu.
#include <iostream>
#include <cstdlib> // for srand() and rand()
#include <ctime> // for time()
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 << "Nhap dong can tinh tong: ";
cin >> d;
cout << "Tong dong: " << tongDong(mt, nCol, d) << endl;
// tính tổng cột c
int c;
cout << "Nhap dong can tinh tong: ";
cin >> c;
cout << "Tong dong: " << tongCot(mt, nRow, c) << endl;
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 << "Nhap so dong : ";
cin >> m;
cout << "Nhap so cot : ";
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;
}
Ouput
Nhap so dong : 2
Nhap so cot : 3
83 40 14
47 22 65
Nhap dong can tinh tong: 1
Tong dong: 134
Nhap dong can tinh tong: 2
Tong dong: 79
3.Tìm giá trị lớn nhất của mảng 2 chiều
Yêu cầu: Cho trước ma trận mt, kích thước mxn. Tìm giá trị lớn nhất trong ma trận mt (gọi là max)
Ý tưởng:
- Giả sử giá trị
max
hiện tại là giá trị phần tử đầu tiên
mt[0][0]
- Lần lượt kiểm tra các phần tử còn lại để cập nhật
max.
#include <iostream>
#include <cstdlib> // for srand() and rand()
#include <ctime> // for time()
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;
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 << "Nhap so dong : ";
cin >> m;
cout << "Nhap so cot : ";
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;
}
Ouput:
Nhap so dong : 2
Nhap so cot : 3
25 37 41
95 53 53
Max = 95