Các thuật toán trên mảng hai chiều Nguyễn Đông Hà Khoa CNTT – ĐH KHTN.
Trang 1Các thuật toán trên mảng
hai chiều
Nguyễn Đông Hà
Khoa CNTT – ĐH KHTN
Trang 2Nội dung
Duyệt mảng 2 chiều
Tính tổng số, tích số
Đếm
Tìm kiếm
Tìm phần tử lớn nhất, nhỏ nhất
Trang 3Duyệt hết các phần tử của mảng
Mảng a[3][5]:
so_dong = 3;
so_cot = 5;
Trang 4Duyệt hết các phần tử của mảng
for (i = 0; i < so_dong; i++)
for (j = 0; j < so_cot; j++) {
/* Xử lý phần tử a[i][j] */
}
Trang 5Duyệt các phần tử trên cùng dòng hoặc cột
for (j = 0; j < so_cot; j++)
{
/* Xử lý phần tử a[k][j] */
}
Duyệt các phần tử trên dòng có chỉ số k
Duyệt các phần tử trên cột có chỉ số k
for (i = 0; i < so_dong; i++)
{
/* Xử lý phần tử a[i][k] */
}
Trang 6Đường chéo của ma trận vuông
for (i = 0; i < n; i++)
{
/* Xử lý phần tử a[i][i] */
}
Đường chéo chính
Đường chéo phụ
for (i = 0; i < n; i++)
{
/* Xử lý phần tử a[n-1-i][i] */
}
Trang 7Tính tổng các phần tử trên 1 dòng
int tong = 0;
for (j = 0; j < so_cot; j++)
{
tong = tong + a[k][j]
}
Tính tổng các phần tử trên dòng chỉ số k
Trang 8Tính tổng các số chẵn trên đường chéo chính
int Cheo1Chan (int a[5][5])
{
int tong = 0;
for (i = 0; i < 5; i++) {
if(a[i][i]%2 == 0)
tong = tong + a[i][i];
} return tong;
}
Tính tổng các số chẵn trên đường chéo chính
Trang 9Tính tích các số lẻ trên đường chéo phụ
int Cheo2Phu (int a[5][5])
{
int tong = 0;
for (i = 0; i < 5; i++) {
if (a[i][i]%2 == 1)
tong = tong + a[5-1-i][i]; }
return tong;
}
Tính tổng các số lẻ trên đường chéo phụ
Trang 10Tính tích các số lẻ trên đường chéo phụ
int Cheo2Phu ( int a[5][5])
{
int tong = 0;
int i,j;
for (i = 0; i < 5; i++) {
if (a[i][i]%2 == 1)
tong = tong + a[5-1-i][i]; }
return tong;
}
Tính tổng các số lẻ trên đường chéo phụ
Trang 11Đếm các số dương trong phần tam giác phía trên
đường chéo chính
{
int dem = 0;
int i,j;
for (i = 0; i < 5; i++)
for (j = 0; j < 5; j++) {
if (i <= j && a[i][j] > 0)
dem++;
}
}
Trang 12Tìm kiếm
{
int i,j;
for (i = 0; i < SIZE; i++)
for (j = 0; j < SIZE; j++) {
if (i+j<=SIZE-1 && a[i][j] == x)
}
}
Trang 13Tìm phần tử lớn nhất trong mảng
{
int i,j;
int max = a[0][0];
for (i = 0; i < SIZE; i++)
for (j = 0; j < SIZE; j++) {
if (a[i][j] > max)
max = a[i][j];
}
}
Trang 14Tìm phần tử lớn nhất trong mảng
{
int i,j;
int max = a[0][0];
for (i = 0; i < SIZE; i++)
for (j = 0; j < SIZE; j++) {
if (a[i][j] > max)
max = a[i][j];
}
}
Trang 15Bài tập