Download as pdf or txt
Download as pdf or txt
You are on page 1of 47

Trng i hc Khoa hc T nhin

Khoa Cng ngh thng tin


B mn Cng ngh phn mm

NHP MN LP TRNH

ThS. ng Bnh Phng


dbphuong@fit.hcmus.edu.vn

MNG MT CHIU

VC

&
BB

Ni dung

Khi nim

Khai bo

Truy xut d liu kiu mng

Mt s bi ton trn mng 1 chiu

Mng mt chiu

VC

&
BB

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

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

Khai bo bin mng (tng minh)

Tng minh
<kiu c s> <tn bin mng>[<s phn t>];
<kiu c s> <tn bin mng>[<N1>][<N2>][<Nn>];

<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

VC

&
BB

Khai bo bin mng (tng minh)

V d
int Mang1Chieu[10];
0

Mang1Chieu
int Mang2Chieu[3][4];
0

10 11

Mang2Chieu 0
1
2
Mng mt chiu

VC

&
BB

Khai bo bin mng (k tng minh)

C php
Khng tng minh (thng qua khai bo kiu)
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>;

V d
typedef int Mang1Chieu[10];
typedef int Mang2Chieu[3][4];
Mang1Chieu m1, m2, m3;
Mang2Chieu m4, m5;
Mng mt chiu

VC

&
BB

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
int n1 = 10; int a[n1];
const int n2 = 20; int b[n2];

Nn s dng ch th tin x l #define nh


ngha s phn t mng
#define n1 10
#define n2 20
int a[n1];
int b[n1][n2];

// int a[10];
// int b[10][20];
Mng mt chiu

VC

&
BB

Khi to gi tr cho mng lc khai bo

Gm cc cch sau
Khi to gi tr cho mi phn t ca mng
int a[4] = {2912, 1706, 1506, 1904};

2912

1706

1506

1904

Khi to gi tr cho mt s phn t u mng


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

2912

1706

0
Mng mt chiu

VC

&
BB

Khi to gi tr cho mng lc khai bo

Gm cc cch sau
Khi to gi tr 0 cho mi phn t ca mng
int a[4] = {0};

T ng xc nh s lng phn t
int a[] = {2912, 1706, 1506, 1904};

2912

1706

1506

1904
Mng mt chiu

10

VC

&
BB

Truy xut n mt phn t

Thng qua ch s
<tn bin mng>[<gt cs1>][<gt cs2>][<gt csn>]

V d
Cho mng nh sau

int a[4];

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

11

VC

&
BB

Gn d liu kiu mng

Khng c s dng php gn thng thng


m phi gn trc tip gia cc phn t tng
ng
<bin mng ch> = <bin mng ngun>; //sai
<bin mng ch>[<ch s th i>] = <gi tr>;

V d
#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];
Mng mt chiu

12

VC

&
BB

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

13

VC

&
BB

Truyn mng cho hm

Truyn mng cho hm


Tham s kiu mng trong khai bo hm ging
nh khai bo bin mng
void SapXepTang(int a[100]);

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.
void SapXepTang(int a[]);
void SapXepTang(int *a);
Mng mt chiu

14

VC

&
BB

Truyn mng cho hm

Truyn mng cho hm


S lng phn t thc s truyn qua bin khc
void SapXepTang(int a[100], int n);
void SapXepTang(int a[], int n);
void SapXepTang(int *a, int n);

Li gi hm
void NhapMang(int a[], int &n);
void XuatMang(int a[], int n);
void main()
{
int a[100], n;
NhapMang(a, n);
XuatMang(a, n);
}

Mng mt chiu

15

VC

&
BB

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

16

VC

&
BB

Mt s quy c

S lng phn t
#define MAX 100

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

17

VC

&

Th tc HoanVi & Hm LaSNT

BB

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;
}
Mng mt chiu

18

VC

&
BB

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.

n4
-1

MAX - 1

Mng mt chiu

19

VC

&

Hm Nhp Mng

BB

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]);
}
}

Mng mt chiu

20

VC

&
BB

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.

n-1

MAX - 1

Mng mt chiu

21

VC

&

Hm Xut Mng

BB

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);
}

Mng mt chiu

22

VC

&
BB

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.
v tr = 1

n-1

MAX - 1

Mng mt chiu

23

VC

&

Hm Tm Kim (dng while)

BB

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;
}

Mng mt chiu

24

VC

&

Hm Tm Kim (dng for)

BB

int TimKiem(int a[], int n, int x)


{
for (int vt = 0; vt < n; vt++)
if (a[vt] == x)
return vt;
return -1;

Mng mt chiu

25

VC

&
BB

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

26

VC

&

Hm Kim Tra (Cch 1)

BB

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;
}

Mng mt chiu

27

VC

&

Hm Kim Tra (Cch 2)

BB

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;
}

Mng mt chiu

28

VC

&

Hm Kim Tra (Cch 3)

BB

int KiemTra_C3(int a[], int n)


{
for (int i = 0; i < n ; i++)
if (LaSNT(a[i]) == 0)
return 0;
return 1;

Mng mt chiu

29

VC

&
BB

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

30

VC

&

Hm Tch S Nguyn T

BB

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++;
}
}

Mng mt chiu

31

VC

&
BB

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

32

VC

&

Hm Tch 2 Mng

BB

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++;
}
}
Mng mt chiu

33

VC

&
BB

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

34

VC

&

Hm Gp Mng

BB

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];
}
}
Mng mt chiu

35

VC

&
BB

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.
max

8
7
?

n1

MAX - 1

Mng mt chiu

36

VC

&

Hm tm Max

BB

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;
}

Mng mt chiu

37

VC

&
BB

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).
tm

5
8

5
1

1
5

8
6

6
8

n1

MAX - 1

Mng mt chiu

38

VC

&

Hm Sp Xp Tng

BB

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]);
}
}

Mng mt chiu

39

VC

&
BB

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.
x

chn?

n1

vt

MAX - 1

Mng mt chiu

40

VC

&

Hm Thm

BB

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++;
}
}

Mng mt chiu

41

VC

&
BB

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.
xa?
0

vt

n-1 n1

MAX - 1

Mng mt chiu

42

VC

&

Hm Xa

BB

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--;
}
}

Mng mt chiu

43

VC

&
BB

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

44

VC

&
BB

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

45

VC

&
BB

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

46

VC

&
BB

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

47

You might also like