You are on page 1of 47

Trng i hc Khoa hc T nhin

Khoa Cng ngh thng tin


B mn Cng ngh phn mm
1
ThS. ng Bnh Phng
dbphuong@fit.hcmus.edu.vn
NHP MN LP TRNH
MNG MT CHIU
VC
&
BB

2 2
Ni dung
Mng mt chiu
Khi nim 1
Khai bo 2
Truy xut d liu kiu mng 3
Mt s bi ton trn mng 1 chiu 4
VC
&
BB

3 3
t vn
V d
Chng trnh cn lu tr 3 s nguyn?
=> Khai bo 3 bin int a1, a2, a3;
Chng trnh cn lu tr 100 s nguyn?
=> Khai bo 100 bin kiu s nguyn!
Ngi dng mun nhp n s nguyn?
=> Khng thc hin c!
Gii php
Kiu d liu mi cho php lu tr mt dy
cc s nguyn v d dng truy xut.
Mng mt chiu
VC
&
BB

4 4
D liu kiu mng
Khi nim
L mt kiu d liu c cu trc do ngi lp
trnh nh ngha.
Biu din mt dy cc bin c cng kiu. V
d: dy cc s nguyn, dy cc k t
Kch thc c xc nh ngay khi khai bo
v khng bao gi thay i.
NNLT C lun ch nh mt khi nh lin tc
cho mt bin kiu mng.
Mng mt chiu
VC
&
BB

5 5
Khai bo bin mng (tng minh)
Tng minh


<N1>, , <Nn> : s lng phn t ca mi chiu.
Lu
Phi xc nh <s phn t> c th (hng) khi khai bo.
Mng nhiu chiu: <tng s phn t> = N1*N2**Nn
B nh s dng = <tng s phn t>*sizeof(<kiu c s>)
B nh s dng phi t hn 64KB (65536 Bytes)
Mt dy lin tc c ch s t 0 n <tng s phn t>-1
Mng mt chiu
<kiu c s> <tn bin mng>[<s phn t>];
<kiu c s> <tn bin mng>[<N1>][<N2>][<Nn>];
VC
&
BB

6 6
0

1

2

Khai bo bin mng (tng minh)
V d
Mng mt chiu
int Mang1Chieu[10];
0

1

2

3

4

7

8

5

6

9

Mang1Chieu
int Mang2Chieu[3][4];
0

1

2

3

4

7

8

5

6

9

Mang2Chieu
10

11

VC
&
BB

7 7
Khai bo bin mng (k tng minh)
C php
Khng tng minh (thng qua khai bo kiu)



V d
Mng mt chiu
typedef <kiu c s> <tn kiu mng>[<s phn t>];
typedef <kiu c s> <tn kiu mng>[<N1>][<Nn>];

<tn kiu mng> <tn bin mng>;
typedef int Mang1Chieu[10];
typedef int Mang2Chieu[3][4];

Mang1Chieu m1, m2, m3;
Mang2Chieu m4, m5;
VC
&
BB

8 8
S phn t ca mng
Phi xc nh c th s phn t ngay lc khai
bo, khng c s dng bin hoc hng
thng


Nn s dng ch th tin x l #define nh
ngha s phn t mng

Mng mt chiu
int n1 = 10; int a[n1];
const int n2 = 20; int b[n2];
#define n1 10
#define n2 20
int a[n1]; // int a[10];
int b[n1][n2]; // int b[10][20];
VC
&
BB

9 9
Khi to gi tr cho mng lc khai bo
Gm cc cch sau
Khi to gi tr cho mi phn t ca mng



Khi to gi tr cho mt s phn t u mng
Mng mt chiu
int a[4] = {2912, 1706, 1506, 1904};
2912 1706 1506 1904
0

1

2

3

a

int a[4] = {2912, 1706};
2912 1706 0 0
0

1

2

3

a

VC
&
BB

10 10
Khi to gi tr cho mng lc khai bo
Gm cc cch sau
Khi to gi tr 0 cho mi phn t ca mng



T ng xc nh s lng phn t
Mng mt chiu
int a[4] = {0};
0 0 0 0
0

1

2

3

a

int a[] = {2912, 1706, 1506, 1904};
2912 1706 1506 1904
0

1

2

3

a

VC
&
BB

11 11
Truy xut n mt phn t
Thng qua ch s

V d
Cho mng nh sau

Cc truy xut
Hp l: a[0], a[1], a[2], a[3]
Khng hp l: a[-1], a[4], a[5],
=> Cho kt thng khng nh mong mun!
Mng mt chiu
<tn bin mng>[<gt cs1>][<gt cs2>][<gt csn>]
int a[4];
0

1

2

3

VC
&
BB

12 12
Gn d liu kiu mng
Khng c s dng php gn thng thng
m phi gn trc tip gia cc phn t tng
ng


V d
Mng mt chiu
<bin mng ch> = <bin mng ngun>; //sai
<bin mng ch>[<ch s th i>] = <gi tr>;
#define MAX 3
typedef int MangSo[MAX];
MangSo a = {1, 2, 3}, b;

b = a; // Sai
for (int i = 0; i < 3; i++) b[i] = a[i];
VC
&
BB

13 13
Mt s li thng gp
Khai bo khng ch r s lng phn t
int a[]; => int a[100];
S lng phn t lin quan n bin hoc hng
int n1 = 10; int a[n1]; => int a[10];
const int n2 = 10; int a[n2]; => int a[10];
Khi to cch bit vi khai bo
int a[4]; a = {2912, 1706, 1506, 1904};
=> int a[4] = {2912, 1706, 1506, 1904};
Ch s mng khng hp l
int a[4];
a[-1] = 1; a[10] = 0;
Mng mt chiu
VC
&
BB

14 14
Truyn mng cho hm
Truyn mng cho hm
Tham s kiu mng trong khai bo hm ging
nh khai bo bin mng

Tham s kiu mng truyn cho hm chnh l a
ch ca phn t u tin ca mng
C th b s lng phn t hoc s dng con tr.
Mng c th thay i ni dung sau khi thc hin hm.
Mng mt chiu
void SapXepTang(int a[100]);
void SapXepTang(int a[]);
void SapXepTang(int *a);
VC
&
BB

15 15
Truyn mng cho hm
Truyn mng cho hm
S lng phn t thc s truyn qua bin khc


Li gi hm
Mng mt chiu
void SapXepTang(int a[100], int n);
void SapXepTang(int a[], int n);
void SapXepTang(int *a, int n);
void NhapMang(int a[], int &n);
void XuatMang(int a[], int n);
void main()
{
int a[100], n;
NhapMang(a, n);
XuatMang(a, n);
}
VC
&
BB

16 16
Mt s bi ton c bn
Vit hm thc hin tng yu cu sau
Nhp mng
Xut mng
Tm kim mt phn t trong mng
Kim tra tnh cht ca mng
Tch mng / Gp mng
Tm gi tr nh nht/ln nht ca mng
Sp xp mng gim dn/tng dn
Thm/Xa/Sa mt phn t vo mng
Mng mt chiu
VC
&
BB

17 17
Mt s quy c
S lng phn t

Cc hm
Hm void HoanVi(int &x, int &y): hon v gi tr
ca hai s nguyn.
Hm int LaSNT(int n): kim tra mt s c phi
l s nguyn t. Tr v 1 nu n l s nguyn
t, ngc li tr v 0.
Mng mt chiu
#define MAX 100
VC
&
BB

18 18
Th tc HoanVi & Hm LaSNT
Mng mt chiu
void HoanVi(int &x, int &y)
{
int tam = x; x = y; y = tam;
}

int LaSNT(int n)
{
int i, dem = 0;
for (i = 1; i <= n; i++)
if (n % i == 0)
dem++;

if (dem == 2)
return 1;
else return 0;
}
VC
&
BB

19 19
Nhp mng
Yu cu
Cho php nhp mng a, s lng phn t n
tng
Cho trc mt mng c s lng phn t l MAX.
Nhp s lng phn t thc s n ca mng.
Nhp tng phn t cho mng t ch s 0 n n 1.
Mng mt chiu
4

0

1

2

3

MAX - 1

n - 1


VC
&
BB

20 20
Hm Nhp Mng
Mng mt chiu
void NhapMang(int a[], int &n)
{
printf(Nhap so luong phan tu n: );
scanf(%d, &n);

for (int i = 0; i < n; i++)
{
printf(Nhap phan tu thu %d: , i);
scanf(%d, &a[i]);
}
}
VC
&
BB

21 21
Xut mng
Yu cu
Cho trc mng a, s lng phn t n. Hy xut ni
dung mng a ra mn hnh.
tng
Xut gi tr tng phn t ca mng t ch s 0 n n-1.
Mng mt chiu
0

1

2

MAX - 1

n - 1


VC
&
BB

22 22
Hm Xut Mng
Mng mt chiu
void XuatMang(int a[], int n)
{
printf(Noi dung cua mang la: );

for (int i = 0; i < n; i++)
printf(%d , a[i]);

printf(\n);
}
VC
&
BB

23 23
Tm kim mt phn t trong mng
Yu cu
Tm xem phn t x c nm trong mng a kch thc n
hay khng? Nu c th n nm v tr u tin no.
tng
Xt tng phn ca mng a. Nu phn t ang xt bng
x th tr v v tr . Nu k tm c th tr v -1.
Mng mt chiu
x

0

1

2

MAX - 1

n - 1


a

x

b

x

v tr = 1

VC
&
BB

24 24
Hm Tm Kim (dng while)
Mng mt chiu
int TimKiem(int a[], int n, int x)
{
int vt = 0;

while (vt < n && a[vt] != x)
vt++;

if (vt < n)
return vt;
else
return -1;
}
VC
&
BB

25 25
Hm Tm Kim (dng for)
Mng mt chiu
int TimKiem(int a[], int n, int x)
{
for (int vt = 0; vt < n; vt++)
if (a[vt] == x)
return vt;

return -1;
}
VC
&
BB

26 26
Kim tra tnh cht ca mng
Yu cu
Cho trc mng a, s lng phn t n. Mng a c
phi l mng ton cc s nguyn t hay khng?
tng
Cch 1: m s lng s ngt ca mng. Nu s
lng ny bng ng n th mng ton ngt.
Cch 2: m s lng s khng phi ngt ca mng.
Nu s lng ny bng 0 th mng ton ngt.
Cch 3: Tm xem c phn t no khng phi s ngt
khng. Nu c th mng khng ton s ngt.
Mng mt chiu
VC
&
BB

27 27
Hm Kim Tra (Cch 1)
Mng mt chiu
int KiemTra_C1(int a[], int n)
{
int dem = 0;

for (int i = 0; i < n; i++)
if (LaSNT(a[i]) == 1) // c th b == 1
dem++;

if (dem == n)
return 1;
return 0;
}
VC
&
BB

28 28
Hm Kim Tra (Cch 2)
Mng mt chiu
int KiemTra_C2(int a[], int n)
{
int dem = 0;

for (int i = 0; i < n; i++)
if (LaSNT(a[i]) == 0) // C th s dng !
dem++;

if (dem == 0)
return 1;
return 0;
}
VC
&
BB

29 29
Hm Kim Tra (Cch 3)
Mng mt chiu
int KiemTra_C3(int a[], int n)
{
for (int i = 0; i < n ; i++)
if (LaSNT(a[i]) == 0)
return 0;

return 1;
}
VC
&
BB

30 30
Tch cc phn t tha iu kin
Yu cu
Cho trc mng a, s lng phn t na. Tch cc s
nguyn t c trong mng a vo mng b.
tng
Duyt t phn t ca mng a, nu l s nguyn t
th a vo mng b.

Mng mt chiu
VC
&
BB

31 31
Hm Tch S Nguyn T
Mng mt chiu
void TachSNT(int a[], int na, int b[], int &nb)
{
nb = 0;

for (int i = 0; i < na; i++)
if (LaSNT(a[i]) == 1)
{
b[nb] = a[i];
nb++;
}
}
VC
&
BB

32 32
Tch mng thnh 2 mng con
Yu cu
Cho trc mng a, s lng phn t na. Tch mng
a thnh 2 mng b (cha s nguyn t) v mng c
(cc s cn li).
tng
Cch 1: vit 1 hm tch cc s nguyn t t mng a
sang mng b v 1 hm tch cc s khng phi
nguyn t t mng a sang mng c.
Cch 2: Duyt t phn t ca mng a, nu l s
nguyn t th a vo mng b, ngc li a vo
mng c.

Mng mt chiu
VC
&
BB

33 33
Hm Tch 2 Mng
Mng mt chiu
void TachSNT2(int a[], int na,
int b[], int &nb, int c[], int &nc)
{
nb = 0;
nc = 0;

for (int i = 0; i < na; i++)
if (LaSNT(a[i]) == 1)
{
b[nb] = a[i]; nb++;
}
else
{
c[nc] = a[i]; nc++;
}
}
VC
&
BB

34 34
Gp 2 mng thnh mt mng
Yu cu
Cho trc mng a, s lng phn t na v mng b
s lng phn t nb. Gp 2 mng trn theo t t
thnh mng c, s lng phn t nc.
tng
Chuyn cc phn t ca mng a sang mng c
=> nc = na
Tip tc a cc phn t ca mng b sang mng c
=> nc = nc + nb

Mng mt chiu
VC
&
BB

35 35
Hm Gp Mng
Mng mt chiu
void GopMang(int a[], int na, int b[], int nb,
int c[], int &nc)
{
nc = 0;

for (int i = 0; i < na; i++)
{
c[nc] = a[i]; nc++; // c[nc++] = a[i];
}

for (int i = 0; i < nb; i++)
{
c[nc] = b[i]; nc++; // c[nc++] = b[i];
}
}
VC
&
BB

36 36
Tm gi tr ln nht ca mng
Yu cu
Cho trc mng a c n phn t. Tm gi tr ln nht
trong a (gi l max)
tng
Gi s gi tr max hin ti l gi tr phn t u tin a[0]
Ln lt kim tra cc phn t cn li cp nht max.
Mng mt chiu
?
max

7

8

0

1

2

MAX - 1

n 1


7

2

8

8

VC
&
BB

37 37
Hm tm Max
Mng mt chiu
int TimMax(int a[], int n)
{
int max = a[0];

for (int i = 1; i < n; i++)
if (a[i] > max)
max = a[i];

return max;
}
VC
&
BB

38 38
Sp xp mng thnh tng dn
Yu cu
Cho trc mng a kch thc n. Hy sp xp mng a
sao cho cc phn t c gi tr tng dn.
tng
S dng 2 bin i v j so snh tt c cp phn t
vi nhau v hon v cc cp nghch th (sai th t).
Mng mt chiu
0

1

2

MAX - 1

n 1


5

1

8

6

tm

5

i

j

8

1

5

j

j

6

8

j

VC
&
BB

39 39
Hm Sp Xp Tng
Mng mt chiu
void SapXepTang(int a[], int n)
{
int i, j;

for (i = 0; i < n 1; i++)
{
for (j = i + 1; j < n; j++)
{
if (a[i] > a[j])
HoanVi(a[i], a[j]);
}
}
}
VC
&
BB

40 40
Thm mt phn t vo mng
Yu cu
Thm phn t x vo mng a kch thc n ti v tr vt.
tng
y cc phn t bt u ti v tr vt sang phi 1 v tr.
a x vo v tr vt trong mng.
Tng n ln 1 n v.
Mng mt chiu
c

z

z


0

1

2

MAX - 1

n 1


a

b

c

x

chn?

vt

n

3

VC
&
BB

41 41
Hm Thm
Mng mt chiu
void Them(int a[], int &n, int vt, int x)
{
if (vt >= 0 && vt <= n)
{
for (int i = n; i > vt; i--)
a[i] = a[i - 1];

a[vt] = x;
n++;
}
}
VC
&
BB

42 42
Xa mt phn t trong mng
Yu cu
Xa mt phn t trong mng a kch thc n ti v tr vt
tng
Ko cc phn t bn phi v tr vt sang tri 1 v tr.
Gim n xung 1 n v.
Mng mt chiu


b

0

1

2

MAX - 1

n 1


a

x

b

z

xa?

vt

z

n - 1

VC
&
BB

43 43
Hm Xa
Mng mt chiu
void Xoa(int a[], int &n, int vt)
{
if (vt >= 0 && vt < n)
{
for (int i = vt; i < n 1; i++)
a[i] = a[i + 1];

n--;
}
}
VC
&
BB

44 44
Bi tp
1. Cc thao tc nhp xut
a. Nhp mng
b. Xut mng

2. Cc thao tc kim tra
a. Mng c phi l mng ton chn
b. Mng c phi l mng ton s nguyn t
c. Mng c phi l mng tng dn
Mng mt chiu
VC
&
BB

45 45
Bi tp
3. Cc thao tc tnh ton
a. C bao nhiu s chia ht cho 4 nhng khng
chia ht cho 5
b. Tng cc s nguyn t c trong mng
4. Cc thao tc tm kim
a. V tr cui cng ca phn t x trong mng
b. V tr s nguyn t u tin trong mng nu c
c. Tm s nh nht trong mng
d. Tm s dng nh nht trong mng
Mng mt chiu
VC
&
BB

46 46
Bi tp
5. Cc thao tc x l
a. Tch cc s nguyn t c trong mng a a
vo mng b.
b. Tch mng a thnh 2 mng b (cha cc s
nguyn dng) v c (cha cc s cn li)
c. Sp xp mng gim dn
d. Sp xp mng sao cho cc s dng ng
u mng gim dn, k n l cc s m
tng dn, cui cng l cc s 0.
Mng mt chiu
VC
&
BB

47 47
Bi tp
6. Cc thao tc thm/xa/sa
a. Sa cc s nguyn t c trong mng thnh
s 0
b. Chn s 0 ng sau cc s nguyn t
trong mng
c. Xa tt c s nguyn t c trong mng
Mng mt chiu

You might also like