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 i
B3.1: Cho j=0.
B3.2: Nếu j
B3.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;i
for(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 i
B3.1: Cho j=0.
B3.2: Nếu j
B3.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 i
B3: Cho j=0.
B3.1: Nếu j
B3.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 i
B3: Cho j=0.
B4: Nếu j
B4.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 i
B3: Cho j=0.
B4: Nếu j
B4.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 i
B3: Cho j=0.
B4: Nếu j
B4.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 i
B3: Cho j=0.
B4: Nếu j
B4.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 i
B3: Cho j=0.
B4: Nếu j
B4.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 i
B3: Cho j=0.
B4: Nếu j
B4.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 i
B3: Cho j=0.
B4: Nếu j
B4.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 i
B3: Cho j=0.
B3.1: Nếu j
B3.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 i
B3: Cho j=0.
B3.1: Nếu j
B3.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 i
B3: Cho j=0.
B3.1: Nếu j
B3.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 i
11
B3: Cho j=0.
B3.1: Nếu j
B3.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 i
B3: Cho j=0.
B3.1: Nếu j
B3.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 i
B3: Cho j=0.
B3.1: Nếu j
B3.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 i
B3: Cho j=0.
B3.1: Nếu j
B3.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 j
B3: Cho i=0.
B3.1: Nếu i
B3.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 j
B3: Cho i=0.
B3.1: Nếu i
B3.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 j
B3: Cho i=0.
B3.1: Nếu i
B3.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 j
B3: Cho i=0.
B3.1: Nếu i
B3.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 j
B3: Cho i=0.
B3.1: Nếu i
B3.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 j
B3: Cho i=0.
B3.1: Nếu i
B3.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 i
B2.1: khai báo dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu j
B2.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 i
B2.1: Cho j=0.
B2.1.1: Nếu j
B2.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 i
B2.1: Cho j=0.
B2.1.1: Nếu j
B2.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 i
19
B2.1: Cho j=0.
B2.1.1: Nếu j
B2.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 i
B2.1: Cho j=0.
B2.1.1: Nếu j
B2.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 i
B2.1: Cho j=0.
B2.1.1: Nếu j
B2.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 i
B2.1: Cho j=0.
B2.1.1: Nếu j
B2.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 i
B2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu j
B2.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 i
B2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu j
B2.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 i
B2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu j
B2.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 i
B2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu j
B2.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 i
B2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu j
B2.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 i
24
B2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu j
B2.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 i
B2.1: khai báo biến dem=0;
B2.2: Cho j=0.
B2.2.1: Nếu j
B2.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