Tải bản đầy đủ (.pdf) (22 trang)

kỹ thuật lập trình C chuyên nghiệp phần 3 docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (627.24 KB, 22 trang )

MảngMảng
Tì ị tíXt dãTì ị tíXt dã
Mảng

Mảng

––

m v


t
r
í

X

t
rong

y

m v


t
r
í

X


t
rong

y
ầầ
 BàiBài toántoán::TìmTìm vịvị trítrí XXtrêntrên mảngmảng aa đangđang cócó
NN
thànhthành
p
h

n
p
h

n
 GiảiGiải pháppháp::TìmTìm tuầntuầntựtự
//input: dãy (a, N), X
//output: Vị trí của X, -1 nếu không có
intint Search(int a[], int N, int X) Search(int a[], int N, int X)
{{
{{
for (int i = 0; i < N; i ++)for (int i = 0; i < N; i ++)
if (a[i] == X)if (a[i] == X)
return i;return i;
return return 1;1;
}}
}}
MảngMảng
Thê ộtthà h hầ dữ liệThê ộtthà h hầ dữ liệ

MảngMảng
––
Thê
m m
ột

thà
n
h
p
hầ
n
dữ

liệ
u
Thê
m m
ột

thà
n
h
p
hầ
n
dữ

liệ
u

ầầ
ầầ
 BàiBài toántoán::c

nc

nthêmthêm thànhthành
p
h

n
p
h

nd

d

liệuliệuXXvàovào mảngmảng aa
đangđang cócó NN thànhthành phầnphần
HiHi
t ờt ờ
hh
ầầ
étét

H
a
iH
a

i
t


ng
t


ng
h
ợp
h
ợpc

nc

nxemxem x
ét
x
ét
::
 DãyDãy chưachưacócó thứthứ tựtự
ÆÆ
ThêThê
XX
àà
ốiối
ÆÆ
Thê
m

Thê
m
XX
v
à
ov
à
ocu
ối
cu
ối
aa
 DãyDãy đãđãcócó thứthứ tựtự
ÆÆ
ÆÆ
TìmTìm vịvị trítrí thíchthích hợp,hợp, chènchèn XXvàovào
MảngMảng
Thê X à ốidãThê X à ốidã
Mảng

Mảng

––
Thê
m
X
v
à
o cu
ối



y
Thê
m
X
v
à
o cu
ối


y
1
2
3
4
5
6
7
0
Thêm 15 vào (a, 7)
2 8 5 1 6 412
1
2
3
4
5
6
7

0
N=7N=8
a[N] = X;
N ++;
15
N

=

7N

=

8
X
MảngMảng
ChèXàdãtă dầChèXàdãtă dầ
Mảng

Mảng

––
Chè
n
X
v
à
o

y


ng
dầ
n
Chè
n
X
v
à
o

y

ng
dầ
n
1
2
3
4
5
6
7
0
Chèn 6 vào (a, 7)
pos
2 4 5 8
12
15
1

1
2
3
4
5
6
7
0
N=7N=8
6
N

=

7N

=

8
X
Vị trí thích hợp: 4
MảngMảng
ChèXàdãtă dầChèXàdãtă dầ
Mảng

Mảng

––
Chè
n

X
v
à
o

y

ng
dầ
n
Chè
n
X
v
à
o

y

ng
dầ
n
//input: dãy (a, N) tăng dần, X
//output: dãy (a, N) đã có X ở đúng vị trí
voidvoid Insert(int a[], int &N, int X) Insert(int a[], int &N, int X)
{{
int pos;int pos;
for (pos
=
N; (pos>0)&&(a[posfor (pos

=
N; (pos>0)&&(a[pos

1]>X); pos1]>X); pos

))
for

(pos

N;

(pos>0)&&(a[posfor

(pos

N;

(pos>0)&&(a[pos
1]>X);

pos

1]>X);

pos

))
a[pos] = a[pos a[pos] = a[pos –– 1];1];
a[pos] = X;a[pos] = X;

N ++;N ++;
}}
MảngMảng
L ibỏ ộtthà h hầ dữ liệL ibỏ ộtthà h hầ dữ liệ
MảngMảng
––
L
oạ
i

bỏ
m
ột

thà
n
h
p
hầ
n
dữ

liệ
u
L
oạ
i

bỏ
m

ột

thà
n
h
p
hầ
n
dữ

liệ
u
 BàiBài toántoán::loạiloạibỏbỏ thànhthành phầnphầndữdữ liệuliệuXXrara khỏikhỏi
mảngmảng aa đangđang cócó NN thànhthành phầnphần
 HướngHướng giảigiải quyếtquyết::xácxác địnhđịnh vịvị trítrí củacủaX,X, nếunếu tìmtìm
thấythấythìthì dồndồn cáccác phầnphầntửtửởở phíaphía sausau lênlên đểđể lấplấpvàovào
hỗhỗ
ốố
22
ờờ
hh
c
hỗ
c
hỗ
tr

ngtr

ng

22
trư

ngtrư

ng
h
ợp
h
ợp::
 DãyDãy khôngkhông cócó thứthứ tựtự::lấplấpphầnphầntửtử cuốicuốilênlên
ấấ
ầầ
 DãyDãy đãđãth

th

t

t

::dờidờit

tt

tcảcả cáccác
p
h

n

p
h

nt

t

ởở sausau víví
trítrí củacủaXXlênlên trướctrước11vịvị trítrí
MảngMảng
L ibỏ Xkhỏidã tăL ibỏ Xkhỏidã tă
Mảng

Mảng

––
L
oạ
i

bỏ

X
ra
khỏi


y

ng

L
oạ
i

bỏ

X
ra
khỏi


y

ng
Loại5khỏi(a 8)
1
2
3
4
5
6
7
0
Loại

5

khỏi

(a

,
8)
pos
2
4
5
7 8 8 91
1
2
3
4
5
6
7
0
N = 8N = 7
STOP
5
X
Ok, found
Tìm vị trí của 5 Dồn các vị trí 4, 5, 6, 7 lên
MảngMảng
L ibỏ Xkhỏidã tăL ibỏ Xkhỏidã tă
Mảng

Mảng

––
L
oạ

i

bỏ

X
ra
khỏi


y

ng
L
oạ
i

bỏ

X
ra
khỏi


y

ng
//input: dãy (a, N), X
//output: dãy (a, N) đã loại bỏ 1 thành phần X
intint Remove(int a[], int &N, int X) Remove(int a[], int &N, int X)
{{

int pos = Search(a, N, X);int pos = Search(a, N, X);
if (pos == if (pos == 1)1) //không có X trong dãy//không có X trong dãy
return 0;return 0;
return

0;return

0;
N N ;;
for (; (pos < N); pos ++)for (; (pos < N); pos ++)
a[pos] = a[pos + 1];a[pos] = a[pos + 1];
return 1;return 1;
}}
}}
MảngMảng
Sắ ếSắ ế
Mảng

Mảng

––
Sắ
p x
ế
p
Sắ
p x
ế
p
ắắ

ếế
ầầ
ểể
 BàiBài toántoán::S

pS

px
ế
px
ế
p cáccác thànhthành
p
h

n
p
h

ncủacủa(a,(a,
N
)
N
) đ

đ

th
u
th

u
đượcđượcdãydãy tăngtăng dầndần
GiảiGiải
háhá
TìTì
áháh
tiệttiệt
tiêtiê
tấttất
ảả
áá
hị hhị h
thếthế

GiảiGiải
phá
p
phá
p::

m

mc
á
c
h
c
á
c
h

t
r
iệtt
r
iệt
tiê
u
tiê
u
tấttất
c

c

c
á
cc
á
cng
hị
c
h
ng
hị
c
h
thếthế
củacủadãydãy
ÆÆ
ThuậtThuật

toántoán
sắpsắp
xếpxếp
ĐổiĐổi
chổchổ
trựctrực
tiếptiếp
ÆÆ
ThuậtThuật
toántoán
sắpsắp
xếpxếp
ĐổiĐổi
chổchổ
trựctrực
tiếptiếp
MảngMảng
––
Sắpxếp đổichổSắpxếp đổichổ
Mảng

Mảng

Sắp

xếp

đổi

chổSắp


xếp

đổi

chổ
2
3
4
5
6
7
8
1
j
12
1
2 8 5 1 6 4 15
2
3
4
5
6
7
8
1
i
i
MảngMảng
––

Sắpxếp đổichổSắpxếp đổichổ
Mảng

Mảng

Sắp

xếp

đổi

chổSắp

xếp

đổi

chổ
2
3
4
5
6
7
8
1
j
12 8 5 2 6 4 151
2
3

4
5
6
7
8
1
2
i
i
MảngMảng
––
Sắpxếp đổichổSắpxếp đổichổ
Mảng

Mảng

Sắp

xếp

đổi

chổSắp

xếp

đổi

chổ
2

3
4
5
6
7
8
1
j
2 12 8 5 6 4 151
2
3
4
5
6
7
8
1
4
i
i
MảngMảng
––
Sắpxếp đổichổSắpxếp đổichổ
Mảng

Mảng

Sắp

xếp


đổi

chổSắp

xếp

đổi

chổ
2
3
4
5
6
7
8
1
j
2 4 12 8 6 5 151
2
3
4
5
6
7
8
1
5
i

i
MảngMảng
––
Sắpxếp đổichổSắpxếp đổichổ
Mảng

Mảng

Sắp

xếp

đổi

chổSắp

xếp

đổi

chổ
2
3
4
5
6
7
8
1
2 4 5 6 8 12 151

2
3
4
5
6
7
8
1
MảngMảng
––
Sắpxếp đổichổSắpxếp đổichổ
Mảng

Mảng

Sắp

xếp

đổi

chổSắp

xếp

đổi

chổ
void Swap(int &x int &y)
void


Swap(int

&x
,
int

&y)
{
int t = x; x = y; y = t;
}
id I t h S t(i t [] i t N)
v
o
id

I
n
t
erc
h
ange
S
or
t(i
n
t
a
[]
,

i
n
t

N)
{
int i, j;
int

i,

j;
for (i = 0 ; i<N-1 ; i++)
for (j =i+1; j < N ; j++)
if(a[j]< a[i])
Swap(a[i],a[j]);
}
}
Mả hiề hiềMả hiề hiề
Mả
ng n
hiề
u c
hiề
u
Mả
ng n
hiề
u c
hiề

u

CC
khôkhô
hỗhỗ
tt
ảả
hiềhiề
hiềhiề
TT
hiêhiê
óó
thểthể
tiếtiế

CC
khô
ng
khô
ng
hỗhỗ
t
rợ
t
rợ m

ngm

ng n
hiề

un
hiề
uc
hiề
uc
hiề
u
T
uy
T
uy n
hiê
nn
hiê
nc
ó
c
ó
thểthể
tiế
p
tiế
p
cậncậntheotheo hướnghướng::MảngMảng 22chiềuchiềulàlà mảngmảng mộtmộtchiềuchiềumàmà mỗimỗi
thànhthành
phầnphần
củacủa
nónó
làlà
mộtmột

mảngmảng
mộtmột
chiềuchiều

thànhthành
phầnphần
củacủa
nónó
làlà
mộtmột
mảngmảng
mộtmột
chiềuchiều

float rainfall[12][365];
“rainfall” là mảng gồm 12
thành phần, mỗi thành phần là
ồ ố
mảng g

m 365 s

float
short
exam marks[500][10];
“exam_marks” là mảng gồm
500 thà h hầ ỗithà h
short
exam
_

marks[500][10];
500

thà
n
h
p
hầ
n, m
ỗi

thà
n
h

phần là mảng 10 số short
titbiht 7
cons
t

i
n
t

b
r
i
g
ht
on =

7
;
int day_of_year = 238;
rainfall[brighton][day_of_year] = 0.0F;
Mả hiề hiềMả hiề hiề
Mả
ng n
hiề
u c
hiề
u
Mả
ng n
hiề
u c
hiề
u

KhaiKhai
báobáo
mảngmảng
22
chiềuchiều
::

Khai

Khai

báobáo

mảngmảng
2

2

chiềuchiều
::
type name[type name[row_sizerow_size][][column_sizecolumn_size];];
SumSquaresSumSquares
00 11 44
11 22 55
SumSquaresSumSquares
00 11 44 11 22 55
 intint SumSquaresSumSquares[[22][][33]]=={{{{00,,11,,44},}, {{11,,22,,55}}}};;
 intint SumSquaresSumSquares[[22][][33]]=={{00,,11,,44,,11,,22,,55}};;
 intint SumSquaresSumSquares[[22][][33]]=={{{{00,,11,,44}}}};;
 intint SumSquaresSumSquares[[][][33]]=={{{{00,,11,,44},}, {{11,,22,,55}}}};;

intint
SumSquaresSumSquares
[[
][][
33
]]
==
{{
{{
00
,,
11

,,
},},
{{
11
}}
}}
;;

intint
SumSquaresSumSquares
[[
][][
33
]]
{{
{{
00
,,
11
,,
},},
{{
11
}}
}}
;;
 intint SumSquaresSumSquares[[][][33]];;
Nhậ Mả 2hiềNhậ Mả 2hiề
Nhậ
p

Mả
ng
2
c
hiề
u
Nhậ
p
Mả
ng
2
c
hiề
u
11
#define MAX STUDENT 5#define MAX STUDENT 5
1
.
1
.
#define

MAX
_
STUDENT

5#define

MAX
_

STUDENT

5
2.2. #define MAX_SUBJECT 6#define MAX_SUBJECT 6
3.3. intint StudentScoreStudentScore[MAX_STUDENT][MAX_SUBJECT];[MAX_STUDENT][MAX_SUBJECT];
idid
dSdS
((
ii
S [MAX STUDENT][MAX SUBJECT]S [MAX STUDENT][MAX SUBJECT]
4.4. vo
id
vo
id
rea
d
_
S
corerea
d
_
S
core
((
i
nt
i
nt
S
core

[MAX
_
STUDENT][MAX
_
SUBJECT]
,
S
core
[MAX
_
STUDENT][MAX
_
SUBJECT]
,
intint nStudentsnStudents, , intint nSubjectsnSubjects))
5.5.
{{
{{
6.6. intint i,ji,j;;
7.7. for(for(ii=0; =0; ii<<nStudentsnStudents; ; ii++)++)
8.8. for(j=0; j<for(j=0; j<nSubjectsnSubjects; j++); j++)
9.9. scanfscanf(“%d”, &Score[(“%d”, &Score[ii][j]);][j]);
1010
}}
10
.
10
.
}


}

Hà t ậ iMả 2hiềHà t ậ iMả 2hiề

m
t
ruy c

p,
i
n
Mả
ng
2
c
hiề
u

m
t
ruy c

p,
i
n
Mả
ng
2
c
hiề

u
11
voidvoid
print Scoreprint Score
((
intint
Score[MAX STUDENT][MAX SUBJECT]Score[MAX STUDENT][MAX SUBJECT]
1
.
1
.
void

void

print
_
Scoreprint
_
Score
((
intint
Score[MAX
_
STUDENT][MAX
_
SUBJECT]
,
Score[MAX
_

STUDENT][MAX
_
SUBJECT]
,
intint nStudentsnStudents, , intint nSubjectsnSubjects))
2.2. {{
3.3. intint i,ji,j;;
4.4. for(for(ii=0; =0; ii<<nStudentsnStudents; ; ii++)++)
{{
5.5.
{{
6.6. for(j=0; j<for(j=0; j<nSubjectsnSubjects; j++); j++)
77
printfprintf
(

%2d(

%2d
\\
t

&Score[t

&Score[
ii
][j]);][j]);
7
.
7

.
printfprintf
(%2d(%2d
\\
t
,
&Score[t
,
&Score[
ii
][j]);][j]);
8.8. printfprintf(“(“\\n”);n”);
9.9. }}
10.10. } }
Ch tìhCh tìh
Ch
ương
t
r
ì
n
hCh
ương
t
r
ì
n
h
11
main(void)main(void)

1
.
1
.
main(void)main(void)
2.2. {{
3.3. intint nStudentsnStudents
,

,
nScoresnScores
;;
,,
;;
4.4. scanfscanf(“%d %d”, &(“%d %d”, &nStudentsnStudents, &, &nScoresnScores););
5.5. if(if(nStudentsnStudents <= MAX_STUDENT && <= MAX_STUDENT &&
SS
MAX SCORES)MAX SCORES)
n
S
coresn
S
cores <=
MAX
_
SCORES)
<=
MAX
_
SCORES)

6.6. read_Scoreread_Score((StudentScoreStudentScore, , nStudentsnStudents, , nScoresnScores););
77
print Scoreprint Score
((
StudentScoreStudentScore
nStudentsnStudents
nScoresnScores
););
7
.
7
.
print
_
Scoreprint
_
Score
((
StudentScoreStudentScore
, ,
nStudentsnStudents
, ,
nScoresnScores
););
8.8. return 0;return 0;
9.9. } }
BiểuBiểu
diễndiễn
mảngmảng
22

chiềuchiều
BiểuBiểu
diễndiễn
mảngmảng
2

2

chiềuchiều
StudentScoresStudentScores
00 11 44
11 22 55
?? ?? ??
?? ?? ??
Student1Student1
Student2Student2
?? ?? ?? ?? ?? ??
?? ?? ?? ?? ?? ??
Student3Student3
Student4Student4
?? ?? ?? ?? ?? ??Student5Student5
00 11 44 11 22 55?? ?? ?? ?? ?? ??
Student1Student1
Student2Student2
Con Con
trtr
ỏỏ

PointerPointer
Con Con

trtr
ỏỏ
PointerPointer
Phạm Thế Bảo
Trường
Đạihọc Khoa họcTự nhiên Tp HCM
Trường

Đại

học

Khoa

học

Tự

nhiên

Tp
.
HCM

×