
22/04/2011
1
Lập trình C++
nâng cao
22/04/2011
1
Dzoãn Xuân Thanh
22/04/2011
1
KHÁI NIỆM
Mang thực chât la môt biên được câp phat bô nhớ liên
tuc va bao gôm nhiêu biên thanh phân.
Cac thanh phân cua mang la tâp hợp cac biên co
cung kiêu dữ liêu va cung tên. Do đo đê truy xuât cac
biên thanh phân, ta dung cơ chê chi muc.
22/04/2011
2
0123456789
Giá trị
Vịtrí
KHAI BÁO
int a[100]; //Khai bao mang so nguyen a gom 100 phan tu
float b[50]; //Khai bao mang so thuc b gom 50 phan tu
char str[30]; //Khai bao mang ky tu str gom 30 ky tu
22/04/2011
3
< Kiểu dữ liệu > < Tên mảng > [ < Số phần tử tối đa của mảng> ] ;
TRUY XUẤT
Vị trí 01234
A[0] A[1] A[2] A[3] A[4]
22/04/2011
4
GÁN GIÁ TRỊBAN ĐẦU CHO MẢNG
int a[5] = {3, 6, 8, 1, 12};
a[0] = 3, a[1] = 6, a[2] = 8, …
int a[10] = {0};
a[0]=a[1]=a[2]=a[3]=…=a[9]=0
22/04/2011
5
CÁC THAO TÁC TRÊN MẢNG
Nhập
Xuất (liệt kê)
Tìm kiếm
Đếm
Sắp xếp
Kiểm tra mảng thỏa điều kiện cho trước
Tách/ ghép mảng
Chèn / xóa
22/04/2011
6

22/04/2011
2
NHẬP XUẤT MẢNG
#define MAX 100
void NhapMang (int a[], int n)
{for (int i = 0; i < n; i ++)
{cout<<“Nhap phan tu thu “<<i<<“: “;
cin>>a[i];
}
}
22/04/2011
7
void XuatMang (int a[], int n)
{for (int i = 0; i < n; i ++)
cout<<a[i]<<“\t”;
}
void main ( )
{int a[MAX] , n;
cout<<“Nhap kich thuoc mang: “;
cin>>n;
NhapMang (a,n);
cout<<“Cac gia tri cua mang vua nhap: ”<<endl;
XuatMang (a,n);
}
22/04/2011
8
LIỆT KÊ CÁC PHẦN TỬTHỎA ĐK CHO TRƯỚC
Mẫu 1:
void LietKeXXX(int a[], int n)
{
for (int i = 0; i<n; i++)
if (a[i] thỏađiều kiện)
Xuất a[i];
}
Mẫu 2:
void LietKeXXX(int a[], int n, int x)
{
for (int i = 0; i<n; i++)
if (a[i] thỏađiều kiện so với x)
Xuất a[i];
}
22/04/2011
9
Ví dụ1: Liệt kê các phần tửcó giá trịchẵn trong mảng
void LietKeChan(int a[], int n)
{
for (int i = 0; i<n; i++)
if (a[i] %2 ==0)
cout<<a[i]<<“\t”;
}
Ví dụ2: Liệt kê các phần tửcó giá trịlớn hơn x trong mảng
void LietKeLonHonX(int a[], int n, int x)
{
for (int i = 0; i<n; i++)
if (a[i] > x)
cout<<a[i]<<“\t”;
}
22/04/2011
10
ĐẾM
Mẫu 1:
int DemXXX(int a[], int n)
{
int d = 0;
for (int i = 0; i<n; i++)
if (a[i] thỏa điều kiện)
d++;
return d;
}
22/04/2011
11
Mẫu 2:
int DemXXX(int a[], int n, int x)
{
int d = 0;
for (int i = 0; i<n; i++)
if (a[i] thỏa điều kiện so với x)
d++;
return d;
}
22/04/2011
12

22/04/2011
3
Ví dụ1: Đếm các phần tửcó giá trịlà sốnguyên tố
bool LaSNT(int k)
{
int d = 0;
for (int i = 1; i <= k; i++)
if (k % i == 0)
d++;
return (d == 2);
}
int DemSNT(int a[], int n)
{
int d = 0;
for (int i = 0; i<n; i++)
if (LaSNT(a[i]) ==true)
d++;
return d;
}
22/04/2011
13
Ví dụ2: Đếm các phần tửcó giá trịnhỏhơn x có trong mảng
int DemNhoHonX(int a[], int n, int x)
{
int d = 0;
for (int i = 0; i<n; i++)
if (a[i] < x)
d++;
return d;
}
22/04/2011
14
TÌM KIẾM
Mẫu 1: Tìm và trảvềvịtrí phần tửcó giá trịlớn nhất
int TimVTMax(int a[], int n)
{
int vtmax = 0;
for (int i = 0; i < n; i++)
if (a[i] > a[vtmax])
vtmax = i;
return vtmax;
}
22/04/2011
15
Mẫu 2: Tìm vịtrí phần tửcó giá trịx
(nếu x không xuất hiện trong mảng trảvề-1)
int TimVTX(int a[], int n, int x)
{
for (int i = 0; i < n; i++)
if (a[i] == x)
return i;
return -1;
}
22/04/2011
16
KIỂM TRA XEM MẢNG CÓ THỎA ĐIỀU
KIỆN CHO TRƯỚC
TH1:kiểm tra tồn tạimột phần tử
trong mảng thỏađiều kiện nào đó cho
trướctìm phần tửthỏađiều kiệnđể
kết luận.
TH2:kiểm tra tất cảcác phần tửthỏa
điều kiện nào đó cho trướctìm phần
tửkhông thỏađiều kiệnđểkết luận
mảng không thỏađiều kiện.
22/04/2011
17
Mẫu TH1:
bool KiemTraTonTaiXXX(int a[], int n)
{
for (int i = 0; i<n; i++)
if (a[i] thỏađiều kiện)
return true;
return false;
}
Mẫu TH2:
bool KiemTraXXX(int a[], int n)
{
for (int i = 0; i<n; i++)
if (a[i] không thỏa điều kiện)
return false;
return true;
}
22/04/2011
18

22/04/2011
4
Ví dụ1: Kiểm tra xem mảng có tồn tại sốlẻkhông?
bool KiemTraTonTaiLe(int a[], int n)
{
foreach (int giatri in a)
if (giatri % 2 != 0)
return true;
return false;
}
22/04/2011
19
Ví dụ2: Kiểm tra xem mảng có toàn giá trịâm
không? (true: có/ false: không)
bool KiemTraToanAm(int a[], int n)
{
for (int i = 0; i<n; i++)
if (a[i] >= 0)
return false;
return true;
}
22/04/2011
20
TÍNH TỔNG, GIÁ TRỊTRUNG BÌNH CÓ
ĐIỀU KIỆN
Mẫu tính tổng:
int TongXXX(int a[], int n)
{
int s = 0;
for (int i = 0; i<n; i++)
if (a[i] thỏađiều kiện)
s += a[i];
return s;
}
22/04/2011
21
Mẫu tính trung bình:
float TrungBinhXXX(int a[], int n)
{
int s = 0;
int d = 0;
for (int i = 0; i<n; i++)
if (a[i] thỏađiều kiện)
{
s += giatri;
d ++;
}
if (d==0)
return 0;
return (float) s / d;
}
22/04/2011
22
Ví dụ1: Tính tổng các phần tửcó giá trịlẻtrong mảng
int TongLe(int a[], int n)
{
int s = 0;
for (int i = 0; i<n; i++)
if (a[i] %2!=0)
s += a[i];
return s;
}
22/04/2011
23
Ví dụ2: Tính giá trịtrung bình các phần tửcó giá trịâm
trong mảng
float TrungBinhAm(int a[], int n)
{
long s = 0;
int d = 0;
for (int i = 0; i<n; i++)
if (a[i] < 0)
{
s += a[i];
d++;
}
if (d == 0)
return 0;
return (float)s / d;
}
22/04/2011
24

22/04/2011
5
SẮP XẾP
Mẫu phương thức sắp thứtựtăng:
void SapTang(int a[], int n)
{
for (int i = 0; i < n-1; i ++)
for(int j = i+1; j < n; j ++)
if (a[i] > a[j])
HoanVi(a[i], a[j]);
}
void HoanVi(int &a, int &b)
{
int tam = a;
a = b;
b = tam;
}
22/04/2011
25

