22/04/2011
1
Lp trình C++
nâng cao
22/04/2011
1
Dzoãn Xuân Thanh
22/04/2011
1
KHÁI NIM
Mang thc ct lat biên đưc câp phat bô nh liên
tuc va bao gôm nhiêu biên thanh phân.
Cac thanh pn cua mang la tâp hp 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
Vtrí
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
< Kiu dliu > < Tên mng > [ < Sphn ttối đa của mảng> ] ;
TRUY XUT
Vị trí 01234
A[0] A[1] A[2] A[3] A[4]
22/04/2011
4
GÁN GIÁ TRBAN ĐU CHO MNG
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 MNG
Nhp
Xut (lit kê)
Tìm kiếm
Đếm
Sp xếp
Kim tra mng tha điu kin cho trước
Tách/ ghép mng
Chèn / xóa
22/04/2011
6
22/04/2011
2
NHP XUT MNG
#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
LITCÁC PHN TTHA ĐK CHO TRƯỚC
Mu 1:
void LietKeXXX(int a[], int n)
{
for (int i = 0; i<n; i++)
if (a[i] thađiu kin)
Xut a[i];
}
Mu 2:
void LietKeXXX(int a[], int n, int x)
{
for (int i = 0; i<n; i++)
if (a[i] thađiu kin so vi x)
Xut a[i];
}
22/04/2011
9
d1: Lit kê các phn tcó giá trchn trong mng
void LietKeChan(int a[], int n)
{
for (int i = 0; i<n; i++)
if (a[i] %2 ==0)
cout<<a[i]<<“\t”;
}
d2: Lit kê các phn tcó giá trln hơn x trong mng
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
Mu 1:
int DemXXX(int a[], int n)
{
int d = 0;
for (int i = 0; i<n; i++)
if (a[i] tha điu kin)
d++;
return d;
}
22/04/2011
11
Mu 2:
int DemXXX(int a[], int n, int x)
{
int d = 0;
for (int i = 0; i<n; i++)
if (a[i] tha điu kin so vi x)
d++;
return d;
}
22/04/2011
12
22/04/2011
3
d1: Đếm các phn t giá trlà snguyê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
d2: Đếm các phn t giá trnhhơn x có trong mng
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 KIM
Mu 1: m và trvvtrí phn tcó giá trln nht
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
Mu 2: m vtrí phn tcó giá trx
(nếu x không xut hin trong mng trv-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
KIM TRA XEM MNG THA ĐIU
KIN CHO TRƯỚC
TH1:kim tra tn timt phn t
trong mng thađiu kin nào đó cho
trướctìm phn tthađiu kinđ
kết lun.
TH2:kim tra tt ccác phn ttha
điu kin nào đó cho trướctìm phn
tkhông thađiu kinđkết lun
mng không thađiu kin.
22/04/2011
17
Mu TH1:
bool KiemTraTonTaiXXX(int a[], int n)
{
for (int i = 0; i<n; i++)
if (a[i] thađiu kin)
return true;
return false;
}
Mu TH2:
bool KiemTraXXX(int a[], int n)
{
for (int i = 0; i<n; i++)
if (a[i] không tha điu kin)
return false;
return true;
}
22/04/2011
18
22/04/2011
4
d1: Kim tra xem mng có tn ti slkhông?
bool KiemTraTonTaiLe(int a[], int n)
{
foreach (int giatri in a)
if (giatri % 2 != 0)
return true;
return false;
}
22/04/2011
19
d2: Kim tra xem mng 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 TNG, GIÁ TRTRUNG BÌNH
ĐIU KIN
Mu tính tng:
int TongXXX(int a[], int n)
{
int s = 0;
for (int i = 0; i<n; i++)
if (a[i] thađiu kin)
s += a[i];
return s;
}
22/04/2011
21
Mu 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] thađiu kin)
{
s += giatri;
d ++;
}
if (d==0)
return 0;
return (float) s / d;
}
22/04/2011
22
d1: nh tng các phn tcó giá trltrong mng
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
d2: nh giá trtrung bình các phn tcó giá trâm
trong mng
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
SP XP
Mu phương thc sp thttă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