Tài liệu Bài giảng Các thuật toán trên mảng hai chiều: Các thuật toán trên mảng 
hai chiều
Nguyễn Đông Hà
Khoa CNTT – ĐH KHTN
Sưu tầm bởi: www.daihoc.com.vn 
Nộ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
Sưu tầm bởi: www.daihoc.com.vn 
Duyệt hết các phần tử của mảng
1 1 2 2 5
7 5 4 2 5
7 8 9 3 8
 Mảng a[3][5]:
 so_dong = 3; 
 so_cot = 5;
Sưu tầm bởi: www.daihoc.com.vn 
Duyệ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] */
.... 
}
Sưu tầm bởi: www.daihoc.com.vn 
Duyệ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] */
.... 
}
Sưu tầm bởi: www.daihoc.com.vn 
Đườ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
...
                
              
                                            
                                
            
 
            
                 16 trang
16 trang | 
Chia sẻ: honghanh66 | Lượt xem: 1355 | Lượt tải: 0 
              
            Bạn đang xem nội dung tài liệu Bài giảng Các thuật toán trên mảng hai chiều, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Các thuật toán trên mảng 
hai chiều
Nguyễn Đông Hà
Khoa CNTT – ĐH KHTN
Sưu tầm bởi: www.daihoc.com.vn 
Nộ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
Sưu tầm bởi: www.daihoc.com.vn 
Duyệt hết các phần tử của mảng
1 1 2 2 5
7 5 4 2 5
7 8 9 3 8
 Mảng a[3][5]:
 so_dong = 3; 
 so_cot = 5;
Sưu tầm bởi: www.daihoc.com.vn 
Duyệ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] */
.... 
}
Sưu tầm bởi: www.daihoc.com.vn 
Duyệ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] */
.... 
}
Sưu tầm bởi: www.daihoc.com.vn 
Đườ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] */
.... 
}
Sưu tầm bởi: www.daihoc.com.vn 
Tí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
Sưu tầm bởi: www.daihoc.com.vn 
Tí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
Sưu tầm bởi: www.daihoc.com.vn 
Tí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ụ
Sưu tầm bởi: www.daihoc.com.vn 
Tí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ụ
Sưu tầm bởi: www.daihoc.com.vn 
Đếm các số dương trong phần tam giác phía trên 
đường chéo chính 
int TamGiacTrenDuong (int a[5][5])
{
int dem = 0;
int i,j;
for(i = 0; i < 5; i++)
for(j = 0; j < 5; j++)
{
if(i 0)
dem++;
}
return dem;
}
 Sử dụng 1 biến đếm để ghi nhận số phần tử thỏa điều kiện
 Điều kiện của các phần tử phía trên đường chéo chính là i >j
 Điều kiện số dương là a[i][j] > 0
Sưu tầm bởi: www.daihoc.com.vn 
Tìm kiếm 
#define SIZE 5
int TimTrenCheo2 (int a[SIZE][SIZE], int x)
{
int i,j;
for(i = 0; i < SIZE; i++)
for(j = 0; j < SIZE; j++)
{
if(i+j<=SIZE-1 && a[i][j] == x)
return 1;
}
return 0;
}
 Tìm xem một số x có xuất hiện trong phần tam giác phía 
trên đường chéo phụ của mảng hay không
Sưu tầm bởi: www.daihoc.com.vn 
Tìm phần tử lớn nhất trong mảng 
#define SIZE 5
int LonNhat (int a[SIZE][SIZE])
{
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];
}
return max;
}
 Duyệt qua tất cả các phần tử, dùng một biến max để lưu trữ
giá trị lớn nhất
Sưu tầm bởi: www.daihoc.com.vn 
Tìm phần tử lớn nhất trong mảng 
#define SIZE 5
int LonNhat (int a[SIZE][SIZE])
{
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];
}
return max;
}
 Duyệt qua tất cả các phần tử, dùng một biến max để lưu trữ
giá trị lớn nhất
Sưu tầm bởi: www.daihoc.com.vn 
Bài tập 
 Chương 5: 6,7,8,9
Sưu tầm bởi: www.daihoc.com.vn 
Sưu tầm bởi: www.daihoc.com.vn 
            Các file đính kèm theo tài liệu này:
 thuattoanmang2chieu_1316.pdf thuattoanmang2chieu_1316.pdf