Tải bản đầy đủ (.docx) (165 trang)

Các thao tác trên mảng hai chiều các số nguyên

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1006.2 KB, 165 trang )

BỘ CÔNG THƯƠNG
TRƯỜNG CAO ĐẲNG CÔNG THƯƠNG TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN

ĐỒ ÁN CƠ SỞ NGÀNH

MẢNG HAI CHIỀU VÀ CÁC THAO TÁC
XỬ LÝ TRÊN MẢNG HAI CHIỀU CÁC
SỐ NGUYÊN

Giảng viên hướng dẫn: Cô Nguyễn Thị Thu Cúc
Thực hiện: Nguyễn Thị Thu Hà
MSSV: 2114110099 – CCQ1411B

TP. Hồ Chí Minh – Tháng 06 năm 2016


MỤC LỤC


DANH MỤC CÁC HÌNH

LỜI MỞ ĐẦU
Trong thời gian được học tập tại trường, với chuyên ngành công nghệ thông tin
em đã đúc kết được số kiến thức và hiểu thêm về chuyên ngành này. Nay em chọn đề
tài “Mảng hai chiều và các thao tác xử lý trên mảng hai chiều các số nguyên” để
làm đồ án cơ sở ngành.
Nội dung của đồ án gồm 3 chương, chương 1 là những thao tác xử lý trên mảng
hai chiều các số nguyên như nhập mảng từ bàn phím và gieo ngẫu nhiên, xuất mảng,
thao tác tìm kiếm, đếm, tính tổng, tính trung bình cộng trên ma trận, trên dòng, cột cho
số chẵn, số lẻ, số âm, số dương….. và thao tác sắp xếp tăng dần, giảm dần cho số


nguyên trong ma trận, thao tác đổi chỗ hai dòng, hai cột bất kì. Chương 2 gồm các
thuật toán xử lý trên ma trận vuông như nhập mảng, xuất mảng, tìm kiếm, đếm, tính
tổng, tính trung bình cộng trên đường chéo chính, chéo phụ, dưới đường chéo chính,
chéo phụ, phía trên, phía dưới đường chéo chính, đường chéo phụ. Chương 3 là
chương trình minh họa với menu lựa chọn cho các thao tác xử lý trên mảng hai chiều
các số nguyên.


Chương 1. MẢNG 2 CHIỀU VÀ CÁC THUẬT TOÁN XỬ LÝ
TRÊN MẢNG 2 CHIỀU CÁC SỐ NGUYÊN
1.1 Nhập mảng
1.1.1 Nhập mảng từ bàn phím
 Yêu Cầu: Nhập mảng hai chiều các số nguyên gồm n dòng, m cột từ bàn phím.
• Input: Nhập m,n và các phần tử trong mảng hai chiều các số nguyên
• Output: Không có.
 Giải thuật:
B1: Nhập giá trị m, n;
B2: Cho i=0;
B3: Nếu iB3.1: Cho j=0.
B3.2: Nếu jB3.2.1: Nhập phần tử a[i][j] từ bàn phím
B3.2.2: j=j+1. Quay lại bước 3.2. Ngược lại sang bước 3.3
B3.3: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void Nhaptubanphim(int a[][100],int &m,int &n)
{
cout<< “ Nhap so dong:”;
cin>>m;

cout<< “ Nhap so cot:”;
cin>>n;
for(int i=0;ifor(int j=0;j{
cout<<"a["<cin>>a[i][j];
}
}
1.1.2 Nhập mảng gieo ngẫu nhiên
 Yều cầu: Nhập mảng hai chiều số nguyên gieo ngẫu nhiên gồm n dòng, m cột.
• Input: Nhập mảng hai chiều gieo ngẫu nhiên n dòng, m cột số nguyên.
4


• Output: Không có.
 Giải thuật:
B1: Nhập giá trị m, n;
B2: Cho i=0;
B3: Nếu iB3.1: Cho j=0.
B3.2: Nếu jB3.2.1: gieo ngẫu nhiên a[i][j]
B3.2.2: j=j+1. Quay lại bước 3.2. Ngược lại sang bước 3.3
B3.3: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void GieoNgauNhien(int a[][50], int &m,int &n)
{
cout << "nhap n:";

cin >> n;
cout << "nhap m:";
cin >> m;
srand((unsigned)(time(NULL)));
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
a[i][j] = -20 + rand() % (50 - (-20) + 1);
cin >> a[i][j];
}
}
1.2 Xuất mảng
 Yêu cầu:
• Input: Nhập m,n và các phần tử trong mảng hai chiều các số nguyên
• Output: xuất mảng hai chiều số nguyên.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B3.1: Nếu jB3.1.1: xuất phần tử a[i][j] từ bàn phím
B3.1.2: j=j+1. Quay lại bước 3.2. Ngược lại sang bước 3.3
B3.3: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void xuat(int a[][50], int m, int n)
{
cout << "ma tran vua nhap la:\n";
for (int i = 0; i < m; i++)
{

for (int j = 0; j < n; j++)
cout << a[i][j] << "\t";
5


cout << "\n";
}
}
1.3 Tìm kiếm
1.3.1 Trên cả ma trận
1.3.1.1 Số dương
 Yêu cầu:
• Input: khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các số là số dương trên cả ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B4: Nếu jB4.1: Nếu a[i][j] là dương in các phần tử dương.
B4.2: j=j+1. Quay lại bước 4.Ngược lại sang B5.
B5: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimDuong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (a[i][j]>0)
cout << "so duong la:" << a[i][j]<

}
1.3.1.2 Số âm
 Yêu cầu:
• Input: khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các số âm trên cả ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B4: Nếu jB4.1: Nếu a[i][j] là âm in các phần tử âm.
B4.2: j=j+1. Quay lại bước 4.Ngược lại sang B5.
B5: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimAm(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (a[i][j]<0)
6


cout << "so Am la:" << a[i][j]<}
1.3.1.3 Số chẵn
 Yêu cầu:
• Input: khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các số chẵn trên cả ma trận
 Giải thuật:

B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B4: Nếu jB4.1: Nếu a[i][j] là chẵn in các phần tử chẵn.
B4.2: j=j+1. Quay lại bước 4.Ngược lại sang B5.
B5: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimChan(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (a[i][j] % 2 == 0)
cout << "so chan la:" << a[i][j]<}
1.3.1.4 Số lẻ
 Yêu cầu:
• Input: khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các số lẻ trên cả ma trận
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B4: Nếu jB4.1: Nếu a[i][j] là lẻ in các phần tử lẻ.
B4.2: j=j+1. Quay lại bước 4.Ngược lại sang B5.
B5: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:

void TimLe(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (a[i][j] % 2 != 0)
cout << "so le la:" << a[i][j] <}
7


1.3.1.5 Số nguyên tố
 Yêu cầu:
• Input: khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các số nguyên tố trên cả ma trận
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B4: Nếu jB4.1: Nếu a[i][j] là nguyên tố in các phần tử số nguyên tố.
B4.2: j=j+1. Quay lại bước 4.Ngược lại sang B5.
B5: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
• Hàm kiểm tra nguyên tố
int KTNT(int x)
{
if (x < 2)
return 0;
for (int i = 2; i <= sqrt(x); i++)

if (x%i == 0)
return 0;
return 1;
}
• Hàm nguyên tố
void TimSNT(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (KTNT(a[i][j]) == 1)
cout << "so nguyen to la:" << a[i][j]<}
1.3.1.6 Số hoàn thiện
 Yêu cầu:
• Input: khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các số hoàn thiện trên cả ma trận
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B4: Nếu jB4.1: Nếu a[i][j] là hoàn thiện in các phần tử số nguyên tố.
B4.2: j=j+1. Quay lại bước 4.Ngược lại sang B5.
B5: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
• Hàm Kiểm tra hoàn thiện
8



int KTHT(int x)
{
long s = 0;
for (int i = 1; i < x; i++)
if (x%i == 0)
s = s + i;
if (s == x)
return 1;
return 0;
}
• Hàm số hoàn thiện
void TimSHT(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (KTHT(a[i][j]) == 1)
cout << "so hoan thien la:" << a[i][j] <}
1.3.1.7 Số chính phương
 Yêu cầu:
• Input: khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các số chính phương trên cả ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B4: Nếu jB4.1: Nếu a[i][j] là chính phương in các phần tử số chính phương.
B4.2: j=j+1. Quay lại bước 4.Ngược lại sang B5.
B5: i=i+1. Quay lại bước 3.

Ngược lại thì thoát.
 Hàm cài đặt:
• Hàm kiểm tra số chính phương
int KTCP(int x)
{
int a = sqrt(x);
if (a*a == x)
return 1;
return 0;
}
• Hàm chính phương
void TimSCP(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (KTCP(a[i][j]) == 1)
cout << "so Chinh phuong la:" << a[i][j] <9


}
1.3.2 Trên dòng
1.3.2.1 Số dương
 Yêu cầu:
• Input: Khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các số dương trên từng dòng của ma trận
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.

B3.1: Nếu jB3.2: Nếu a[i][j] dương thì in các số dương trên dòng i.
B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4
B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimDuongDong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{
cout << "so duong tren dong " << i << ": ";
for (int j = 0; j < n; j++)
{
if (a[i][j]> 0)
cout << a[i][j] << " ";
}
cout << endl;
}
}
1.3.2.2 Số âm
 Yêu cầu:
• Input: Khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các phần tử âm trên từng dòng của ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B3.1: Nếu jB3.2: Nếu a[i][j] âm thì in các số âm trên dòng i.
B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4

B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimAmDong(int a[][MAX], int m, int n)
10


{
for (int i = 0; i < m; i++)
{
cout << "so am tren dong " << i << ": ";
for (int j = 0; j < n; j++)
{
if (a[i][j]< 0)
cout << a[i][j] << " ";
}
cout << endl;
}
}
1.3.2.3 Số chẵn
 Yêu cầu:
• Input: Khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các phần tử chẵn trên từng dòng của ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B3.1: Nếu jB3.2: Nếu a[i][j] chẵn thì in các số chẵn trên dòng i.
B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4

B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimChanDong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{
cout << "so chan tren dong " << i << ": ";
for (int j = 0; j < n; j++)
{
if (a[i][j] % 2 == 0)
cout << a[i][j] << " ";
}
cout << endl;
}
}
1.3.2.4 Số lẻ
 Yêu cầu:
• Input: Khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các phần tử lẻ trên từng dòng của ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu i11


B3: Cho j=0.
B3.1: Nếu jB3.2: Nếu a[i][j] lẻ thì in các số lẻ trên dòng i.
B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4

B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimLeDong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{
cout << "So le tren dong " << i << ": ";
for (int j = 0; j < n; j++)
{
if (a[i][j] % 2 != 0)
cout << a[i][j] << " ";
}
cout << endl;
}
}
1.3.2.5 Số nguyên tố
 Yêu cầu:
• Input: Khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các phần tử số nguyên tố trên từng dòng của ma trận
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B3.1: Nếu jB3.2: Nếu a[i][j] là nguyên tố thì in các số nguyên tố trên dòng i.
B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4
B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:

void TimSNTDong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{
cout << "so nguyen to tren dong " << i << ": ";
for (int j = 0; j < n; j++)
{
if (KTNT(a[i][j])==1)
cout << a[i][j] << " ";
}
cout << endl;
}
}
12


1.3.2.6 Số hoàn thiện
 Yêu cầu:
• Input: Khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các phần tử là số hoàn thiện trên từng dòng ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B3.1: Nếu jB3.2: Nếu a[i][j] là hoàn thiện thì in các số hoàn thiện trên dòng i.
B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4
B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:

void TimSHTDong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{
cout << "so hoan thien tren dong " << i << ": ";
for (int j = 0; j < n; j++)
{
if (KTHT(a[i][j]) == 1)
cout << a[i][j] << " ";
}
cout << endl;
}
}
1.3.2.7 Số chính phương
 Yêu cầu:
• Input: Khai báo mảng 2 chiều có m dòng,n cột số nguyên.
• Output: Tìm các số hoàn thiện trên từng dòng của ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB3: Cho j=0.
B3.1: Nếu jB3.2: Nếu a[i][j] là chính phương thì in các số chính phương trên dòng i.
B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4
B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimSCPDong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)

{
cout << "so chinh phuong tren dong " << i << ": ";
for (int j = 0; j < n; j++)
13


{
if (KTCP(a[i][j]) == 1)
cout << a[i][j] << " ";
}
cout << endl;
}
}
1.3.3 Trên cột
1.3.3.1 Số dương
 Yêu cầu:
• Input: Khai báo mảng hai chiều số nguyên có m dòng,n cột.
• Output: Tìm các phần tử dương trên cột của ma trận.
 Giải thuật:
B1: Cho j=0;
B2: Nếu jB3: Cho i=0.
B3.1: Nếu iB3.2: Nếu a[i][j] dương thì in các số dương trên cột j.
B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4
B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimDuongCot(int a[][MAX], int m, int n)
{

for (int j = 0; j < n; j++)
{
cout << "so duong tren cot" << j << ":";
for (int i = 0; i < m; i++)
{
if (a[i][j]> 0)
cout << a[i][j] << " ";
}
cout << endl;
}
}
1.3.3.2 Số âm
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên gồm m dòng,n cột.
• Output: Tìm các phần tử âm trên từng cột của ma trận.
 Giải thuật:
B1: Cho j=0;
B2: Nếu jB3: Cho i=0.
B3.1: Nếu iB3.2: Nếu a[i][j] âm thì in các số âm trên cột j.
14


B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4
B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimAmCot(int a[][MAX], int m, int n)
{

for (int j = 0; j < n; j++)
{
cout << "so am tren cot" << j << ":";
for (int i = 0; i < m; i++)
{
if (a[i][j]< 0)
cout << a[i][j] << " ";
}
cout << endl;
}
}
1.3.3.3 Số chẵn
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên gồm m dòng,n cột.
• Output: Tìm các số chẵn trên từng cột của ma trận.
 Giải thuật:
B1: Cho j=0;
B2: Nếu jB3: Cho i=0.
B3.1: Nếu iB3.2: Nếu a[i][j] chẵn thì in các số chẵn trên cột j.
B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4
B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimChanCot(int a[][MAX], int m, int n)
{
for (int j = 0; j < n; j++)
{
cout << "so chan tren cot" << j << ":";

for (int i = 0; i < m; i++)
{
if (a[i][j] % 2 == 0)
cout << a[i][j] << " ";
}
cout << endl;
}
}
1.3.3.4 Số lẻ
 Yêu cầu:
15


• Input: khai báo mảng 2 chiều số nguyên gồm m dòng,n cột.
• Output: Tìm các số lẻ trên từng cột của ma trận.
 Giải thuật:
 Hàm cài đặt:
void TimLeCot(int a[][MAX], int m, int n)
{
for (int j = 0; j < n; j++)
{
cout << "so le tren cot" << j << ":";
for (int i = 0; i < m; i++)
{
if (a[i][j] % 2 != 0)
cout << a[i][j] << " ";
}
cout << endl;
}
}

1.3.3.5 Số nguyên tố
 Yêu cầu:
• Input: khai báo mảng hai chiều số nguyên gồm m dòng,n cột
• Output: Tìm các phần tử là số nguyên tố trên từng cột của ma trận.
 Giải thuật:
B1: Cho j=0;
B2: Nếu jB3: Cho i=0.
B3.1: Nếu iB3.2: Nếu a[i][j] là nguyên tố thì in các số nguyên tố trên cột j.
B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4
B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimSNTCot(int a[][MAX], int m, int n)
{
for (int j = 0; j < n; j++)
{
cout << "so nguyen to tren cot" << j << ":";
for (int i = 0; i < m; i++)
{
if (KTNT(a[i][j])==1)
cout << a[i][j] << " ";
}
cout << endl;
}
}
1.3.3.6 Số hoàn thiện
 Yêu cầu:
16



• Input: Khai báo mảng hai chiều số nguyên gồm m dòng,n cột
• Output: Tìm các số hoàn thiện trên từng cột của ma trận.
 Giải thuật:
B1: Cho j=0;
B2: Nếu jB3: Cho i=0.
B3.1: Nếu iB3.2: Nếu a[i][j] là hoàn thiện thì in các số hoàn thiện trên cột j.
B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4
B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimSHTCot(int a[][MAX], int m, int n)
{
for (int j = 0; j < n; j++)
{
cout << "so hoan thien tren cot" << j << ":";
for (int i = 0; i < m; i++)
{
if (KTHT(a[i][j]) == 1)
cout << a[i][j] << " ";
}
cout << endl;
}
}
1.3.3.7 Số chính phương
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên gồm m dòng,n cột.

• Output: Tìm các phần tử là số chính phương trên từng cột của ma trận.
 Giải thuật:
B1: Cho j=0;
B2: Nếu jB3: Cho i=0.
B3.1: Nếu iB3.2: Nếu a[i][j] là chính phương thì in các số chính phương trên cột j.
B3.3: j=j+1. Quay lại bước 3.1. Ngược lại sang bước 3.4
B3.4: i=i+1. Quay lại bước 3.
Ngược lại thì thoát.
 Hàm cài đặt:
void TimSCPCot(int a[][MAX], int m, int n)
{
for (int j = 0; j < n; j++)
{
cout << "so chinh phuong tren cot" << j << ":";
for (int i = 0; i < m; i++)
{
if (KTCP(a[i][j]) == 1)
17


cout << a[i][j] << " ";
}
cout << endl;
}
}
1.4

Đếm


1.4.1 Trên cả ma trận
1.4.1.1 Số chẵn
 Yêu cầu:
• Input: khai báo mảng 2 chiều số nguyên có m dòng,n cột
• Output: Đếm số lượng các số chẵn trên cả ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB2.1: khai báo dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu jB2.2.2: Nếu a[i][j] chẵn thì tăng dem=dem+1.
B2.2.3: j=j+1. Quay lại bước 2.2 Ngược lại sang bước 2.3
B2.3: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là dem và thoát.
 Hàm cài đặt:
int DemChan(int a[][50], int m, int n)
{
int dem = 0;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
{
if (a[i][j]% 2 == 0)
dem++;
}
return dem;
}
1.4.1.2 Số lẻ
 Yêu cầu:

• Input: Khai báo mảng 2 chiều số nguyên có m dòng,n cột
• Output: Đếm số lượng số lẻ trên cả ma trận
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB2.1: Cho j=0.
B2.1.1: Nếu jB2.1.2: Nếu a[i][j] lẻ thì tăng dem=dem+1.
B2.1.3: j=j+1. Quay lại bước 2.1 Ngược lại sang bước 2.2
18


B2.2: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là dem và thoát.
 Hàm cài đặt:
int DemLe(int a[][50], int n, int m)
{
int dem = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (a[i][j]% 2 != 0)
dem++;
}
return dem;
}
1.4.1.3 Số dương
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên có m dòng,n cột
• Output: Đếm số lượng số dương trên cả ma trận.

 Giải thuật:
B1: Cho i=0;
B2: Nếu iB2.1: Cho j=0.
B2.1.1: Nếu jB2.1.2: Nếu a[i][j] dương thì tăng dem len 1.
B2.1.3: j=j+1. Quay lại bước 2.1 Ngược lại sang bước 2.2
B2.2: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là dem và thoát.
 Hàm cài đặt:
int DemDương(int a[][50], int n, int m)
{
int dem = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (a[i][j]> 0)
dem++;
}
return dem;
}
1.4.1.4 Số âm
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên có m dòng,n cột.
• Output: Đếm số lượng số dương trên cả ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu i19



B2.1: Cho j=0.
B2.1.1: Nếu jB2.1.2: Nếu a[i][j] âm thì tăng dem len 1.
B2.1.3: j=j+1. Quay lại bước 2.1 Ngược lại sang bước 2.2
B2.2: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là dem và thoát.
 Hàm cài đặt:
int DemAm(int a[][50], int n, int m)
{
int dem = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (a[i][j]<0)
dem++;
}
return dem;
}
1.4.1.5 Số nguyên tố
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên có m dòng,n cột.
• Output: Đếm số lượng là số nguyên tố trên cả ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB2.1: Cho j=0.
B2.1.1: Nếu jB2.1.2: Nếu a[i][j] là nguyên tố thì tăng dem len 1.
B2.1.3: j=j+1. Quay lại bước 2.1 Ngược lại sang bước 2.2

B2.2: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là dem và thoát.
 Hàm cài đặt:
int DemSoNT(int a[][50], int n, int m)
{
int dem = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (KTNT(a[i][j]==1))
dem++;
}
return dem;
}
1.4.1.6 Số hoàn thiện
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên có m dòng, n cột.
20


• Output: Đếm số lượng là số hoàn thiện trên cả ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB2.1: Cho j=0.
B2.1.1: Nếu jB2.1.2: Nếu a[i][j] là hoàn thiện thì tăng dem len 1.
B2.1.3: j=j+1. Quay lại bước 2.1 Ngược lại sang bước 2.2
B2.2: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là đếm và thoát.

 Hàm cài đặt:
int DemSoHT(int a[][50], int n, int m)
{
int dem = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (KTHT (a[i][j]==1))
dem++;
}
return dem;
}
1.4.1.7 Số chính phương
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên có m dòng,n cột.
• Output:Đếm số lượng số chính phương trên cả ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB2.1: Cho j=0.
B2.1.1: Nếu jB2.1.2: Nếu a[i][j] là nguyên tố thì tăng đếm=dem+1.
B2.1.3: j=j+1. Quay lại bước 2.1 Ngược lại sang bước 2.2
B2.2: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là đếm và thoát.
 Hàm cài đặt:
int DemSoCP(int a[][50], int n, int m)
{
int dem = 0;
for (int i = 0; i < n; i++)

for (int j = 0; j < m; j++)
{
if (chinhphuong (a[i][j]==1))
dem++;
}
return dem;
}
21


1.4.2 Trên dòng
1.4.2.1 Số dương
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên có m dòng,n cột
• Output: Đếm số lượng số dương trên từng dòng của ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu jB2.2.2: Nếu a[i][j] dương thì tăng đếm=dem+1.
B2.2.3: j=j+1. Quay lại bước 2.2. Ngược lại sang bước 2.3
B2.2: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là đếm và thoát.
 Hàm cài đặt:
void DemSoDuongDong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{

int dem = 0;
for (int j = 0; j < n; j++)
if (a[i][j] >0)
dem++;
cout << "\n so luong so duong cua dong "<}
}
1.4.2.2 Số âm
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên có m dòng,n cột.
• Output: Đếm số lượng số âm trên từng dòng của ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu jB2.2.2: Nếu a[i][j] âm thì tăng đếm=dem+1.
B2.2.3: j=j+1. Quay lại bước 2.2. Ngược lại sang bước 2.3
B2.2: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là đếm và thoát.
 Hàm cài đặt:
void DemSoAm(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{
22


int dem = 0;

for (int j = 0; j < n; j++)
if (a[i][j] <0)
dem++;
cout << "\n so luong so am cua dong "<}
}
1.4.2.3 Số chẵn
 Yêu cầu:
• Input: khai báo mảng 2 chiều số nguyên có m dòng,n cột.
• Output: Đếm số lượng số chẵn trên từng dòng của ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu jB2.2.2: Nếu a[i][j] chẵn thì tăng đếm=dem+1.
B2.2.3: j=j+1. Quay lại bước 2.2. Ngược lại sang bước 2.3
B2.2: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là đếm và thoát.
 Hàm cài đặt:
void DemSoChanDong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{
int dem = 0;
for (int j = 0; j < n; j++)
if (a[i][j] % 2 == 0)
dem++;
cout << "\n so luong so chan cua dong "<

}
}
1.4.2.4 Số lẻ
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên gồm m dòng,n cột
• Output: Đếm số lượng số lẻ trên từng dòng của ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu jB2.2.2: Nếu a[i][j] lẻ thì tăng đếm=dem+1.
B2.2.3: j=j+1. Quay lại bước 2.2. Ngược lại sang bước 2.3
B2.2: i=i+1. Quay lại bước 2.
23


Ngược lại thì giá trị trở về là đếm và thoát.
 Hàm cài đặt:
void DemSoLeDong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{
int dem = 0;
for (int j = 0; j < n; j++)
if (a[i][j] % 2!= 0)
dem++;
cout << "\n so luong so le cua dong "<}

}
1.4.2.5 Số nguyên tố
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên có m dòng,n cột
• Output: Đếm số lượng số nguyên tố trên từng dòng của ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu iB2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu jB2.2.2: Nếu a[i][j] là nguyên tố thì tăng đếm=dem+1.
B2.2.3: j=j+1. Quay lại bước 2.2. Ngược lại sang bước 2.3
B2.2: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là đếm và thoát.
 Hàm cài đặt:
void DemSoNTDong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{
int dem = 0;
for (int j = 0; j < n; j++)
if (KTNT(a[i][j])==1)
dem++;
cout << "\n so luong so nguyen to cua dong " << i << "la:" << dem;
}
}
1.4.2.6 Số hoàn thiện
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên có m dòng,n cột

• Output: Đếm số lượng số hoàn thiện trên từng dòng của ma trận.
 Giải thuật:
B1: Cho i=0;
B2: Nếu i24


B2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu jB2.2.2: Nếu a[i][j] là hoàn thiện thì tăng đếm=dem+1.
B2.2.3: j=j+1. Quay lại bước 2.2. Ngược lại sang bước 2.3
B2.2: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là đếm và thoát.
 Hàm cài đặt:
void DemSHTDong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{
int dem = 0;
for (int j = 0; j < n; j++)
if (KTHT(a[i][j]) == 1)
dem++;
cout << "\n so luong so hoan thien cua dong " << i << "la:" << dem;
}
}
1.4.2.7 Số chính phương
 Yêu cầu:
• Input: Khai báo mảng 2 chiều số nguyên có m dòng,n cột
• Output: Đếm số lượng số chính phương treen từng dòng của ma trận.

 Giải thuật:
B1: Cho i=0;
B2: Nếu iB2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu jB2.2.2: Nếu a[i][j] là chính phương thì tăng đếm=dem+1.
B2.2.3: j=j+1. Quay lại bước 2.2. Ngược lại sang bước 2.3
B2.2: i=i+1. Quay lại bước 2.
Ngược lại thì giá trị trở về là đếm và thoát.
 Hàm cài đặt:
void DemSCPDong(int a[][MAX], int m, int n)
{
for (int i = 0; i < m; i++)
{
int dem = 0;
for (int j = 0; j < n; j++)
if (KTCP(a[i][j]) == 1)
dem++;
cout << "\n so luong so chinh phuong cua dong " << i << "la:" <<
dem << endl;
}
}
25


×