You are on page 1of 111

Th.s.

NGUYN VN LINH









NGN NG LP TRNH

c bin son trong khun kh d n ASVIET002CNTT
Tng cng hiu qu o to v nng lc t o to ca sinh vin
khoa Cng ngh Thng tin - i hc Cn th














I HC CN TH - 12/2003
Ngn ng lp trnh Mc lc

CHNG 0: TNG QUAN ................................................................................................. i
0.1 MC CH YU CU...............................................................................................i
0.2 I TNG S DNG............................................................................................i
0.3 NI DUNG CT LI.................................................................................................i
0.4 KIN THC TIN QUYT......................................................................................ii
0.5 DANH MC TI LIU THAM KHO ...................................................................ii
CHNG 1: M U........................................................................................................ 1
1.1 TNG QUAN ............................................................................................................ 1
1.2 KHI NIM V NGN NG LP TRNH ............................................................ 1
1.3 VAI TR CA NGN NG LP TRNH .............................................................. 2
1.4 LI CH CA VIC NGHIN CU NNLT............................................................ 3
1.5 CC TIU CHUN NH GI MT NGN NG LP TRNH TT............... 4
1.6 CU HI N TP .................................................................................................... 7
CHNG 2: KIU D LIU.............................................................................................. 8
2.1 TNG QUAN ............................................................................................................ 8
2.2 I TNG D LIU............................................................................................. 8
2.3 BIN V HNG ..................................................................................................... 10
2.4 KIU D LIU........................................................................................................ 10
2.5 S KHAI BO ........................................................................................................ 13
2.6 KIM TRA KIU V BIN I KIU................................................................. 14
2.7 CHUYN I KIU............................................................................................... 17
2.8 GN V KHI TO .............................................................................................. 17
2.9 CU HI N TP .................................................................................................. 20
CHNG 3: KIU D LIU S CP............................................................................. 22
3.1 TNG QUAN .......................................................................................................... 22
3.2 NH NGHA KIU D LIU S CP................................................................ 22
3.3 S C T CC KIU D LIU S CP ......................................................... 22
3.4 CI T CC KIU D LIU S CP .............................................................. 23
3.5 KIU D LIU S ................................................................................................. 24
3.6 KIU LIT K......................................................................................................... 27
3.7 KIU LOGIC ........................................................................................................... 28
3.8 KIU K T........................................................................................................... 29
3.9 CU HI N TP .................................................................................................. 29
CHNG 4: KIU D LIU C CU TRC................................................................ 30
4.1 TNG QUAN .......................................................................................................... 30
4.2 NH NGHA KIU D LIU C CU TRC................................................... 30
4.3 S C T KIU CU TRC D LIU............................................................ 30
4.4 S CI T CC CU TRC D LIU............................................................ 32
4.5 VCT..................................................................................................................... 34
4.6 MNG NHIU CHIU........................................................................................... 36
4.7 MU TIN................................................................................................................. 39
4.8 MU TIN C CU TRC THAY I ................................................................. 41
4.9 CHUI K T: ....................................................................................................... 45
4.10 CU TRC D LIU C KCH THC THAY I ........................................ 47
4.11 CON TR................................................................................................................. 48
4.12 TP HP.................................................................................................................. 50
4.13 TP TIN................................................................................................................... 52
4.14 CU HI N TP .................................................................................................. 54
CHNG 5: KIU DO NGI DNG NH NGHA.................................................. 58
5.1 TNG QUAN .......................................................................................................... 58
5.2 S PHT TRIN CA KHI NIM KIU D LIU......................................... 58
Ngn ng lp trnh Mc lc

5.3 TRU TNG HA.............................................................................................. 58
5.4 NH NGHA KIU................................................................................................ 60
5.5 CU HI N TP .................................................................................................. 62
CHNG 6: CHNG TRNH CON.............................................................................. 63
6.1 TNG QUAN .......................................................................................................... 63
6.2 NH NGHA CHNG TRNH CON................................................................. 63
6.3 C CH GI CHNG TRNH CON .................................................................. 65
6.4 CHNG TRNH CON CHUNG........................................................................... 68
6.5 TRUYN THAM S CHO CHNG TRNH CON............................................. 68
6.6 CU HI N TP ................................................................................................. 70
CHNG 7: IU KHIN TUN T............................................................................. 71
7.1 TNG QUAN .......................................................................................................... 71
7.2 KHI NIM IU KHIN TUN T.................................................................. 71
7.3 IU KHIN TUN T TRONG BIU THC................................................... 71
7.4 IU KHIN TUN T GIA CC LNH ........................................................ 75
7.5 S NGOI L V X L NGOI L................................................................. 78
7.6 CU HI N TP .................................................................................................. 80
CHNG 8: LP TRNH HM....................................................................................... 81
8.1 TNG QUAN .......................................................................................................... 81
8.2 NGN NG LP TRNH HM............................................................................. 81
8.3 NGN NG LISP ................................................................................................... 83
CHNG 9: LP TRNH LOGIC.................................................................................... 95
9.1 TNG QUAN .......................................................................................................... 95
9.2 GII THIU V LP TRNH LOGIC ................................................................... 95
9.3 NGN NG PROLOG............................................................................................ 96
Ngn ng lp trnh Tng quan

i
TNG QUAN
MC CH YU CU
Mc ch ca mn hc Ngn ng lp trnh l cung cp cho sinh vin mt khi lng
kin thc tng i hon chnh v nguyn l ca ngn ng lp trnh. Cng vi mn
hc Tin hc l thuyt, Ngn ng lp trnh s l mn hc tin quyt hc mn Trnh
bin dch. Sau khi hc xong mn hc ny, sinh vin cn:
- Nm c cc khi nim v i tng d liu v kiu d liu. Cc kha
cnh cn nghin cu khi c t v ci t mt kiu d liu. Vn kim tra
kiu v chuyn i kiu cng cn c quan tm.
- Nm c cc kiu d liu s cp v c cu trc. Vi mi kiu d liu cn
nm nh ngha, c t v cch ci t kiu d liu.
- Nm c khi nim tru tng ho trong lp trnh th hin trn hai kha
cnh l tru tng ho d liu bng cch s dng cc kiu d liu t nh
ngha v tru tng ho chng trnh bng cch chia chng trnh thnh
cc chng trnh con. Vn truyn tham s cho chng trnh con cng cn
c lu tm.
- Nm c khi nim iu khin tun t, nguyn tc iu khin tun t trong
biu thc v gia cc cu lnh.
I TNG S DNG
Mn hc ngn ng lp trnh c dng ging dy cho cc sinh vin nm th 4
chuyn ngnh Tin hc.
NI DUNG CT LI
Trong khun kh 45 tit, gio trnh c cu trc thnh 9 chng
Chng 1: M u. Chng ny trnh by khi nim v ngn ng lp trnh, li ch
ca vic nghin cu ngn ng lp trnh v cc tiu chun nh gi mt ngn ng
lp trnh tt.
Chng 2: Kiu d liu. Chng ny trnh by cc khi nim v i tng d liu
v kiu d liu; cc phng php kim tra kiu v chuyn i kiu; Php gn tr cho
bin v s khi to bin.
Chng 3: Kiu d liu s cp. Chng ny trnh by khi nim v kiu d liu s
cp, s c t v nguyn tc ci t mt kiu d liu s cp ni chung. Phn ch yu
ca chng trnh by mt s kiu d liu s cp ph bin nh cc kiu s, kiu min
con, kiu lit k, kiu k t v kiu logic.
Chng 4: Kiu d liu c cu trc. Chng ny trnh by khi nim v kiu d
liu c cu trc, s c t cc thuc tnh, c t php ton, c bit l php ton la
chn mt phn t; cc phng php lu tr mt cu trc d liu trong b nh v
phng php la chn phn t. Ni dung ch yu ca chng trnh by cc cu trc
c th nh mng, mu tin, chui k t, tp hp
Chng 5: Kiu d liu t nh ngha. Chng ny trnh by v s tru tng ho,
nh ngha kiu d liu v s tng ng ca cc kiu d liu c nh ngh.
Ngn ng lp trnh Tng quan

ii
Chng 6: Chng trnh con. Chng ny trn by v s nh ngha v c ch gi
thc hin chng trnh con, cc phng php truyn tham s cho chng trnh con.
Chng 7: iu khin tun t. Chng ny trnh by cc loi iu khin tun t
v vn x l ngoi l.
Chng 8: Lp trnh hm. Chng ny trnh by khi nim, bn cht ca lp trnh
hm v gii thiu mt ngn ng lp trnh hm in hnh l LISP.
Chng 9: Lp trnh logic. Chng ny trnh by khi nim, bn cht ca lp trnh
logic v gii thiu mt ngn ng lp trnh hm in hnh l PROLOG.
KIN THC TIN QUYT
hc tt mn hc ngn ng lp trnh cn phi c cc kin thc v k nng lp trnh
cn bn.
DANH MC TI LIU THAM KHO
[1] Terrence W. Pratt, Marvin V. Zelkowitz; Programming Languages: Design
and Implementation; Prentice-Hall, 2000.
[2] Doris Appleby, Julius J. VandeKopple; Programming Languages; McGraw-
Hill; 1997.
[3] Ryan Stensifer; The Study of Programming Languages; Prentice Hall, 1995.
[4] Maryse CONDILLAC; Prolog fondements et applications; BORDAS, Paris
1986.
[5] Website v XLISP
http://webmaker.web.cern.ch/WebMaker/examples/xlisp/www/cldoc_1.html
[6] Website v Turbo Prolog
http://www.csupomona.edu/%7Ejrfisher/www/prolog_tutorial/contents.html



Ngn ng lp trnh Chng I: M u

1
CHNG 1: M U
1.1 TNG QUAN
1.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v phn loi cc ngn ng lp trnh.
- Vai tr ca ngn ng lp trnh trong cng ngh phn mm.
- Li ch ca vic nghin cu ngn ng lp trnh.
- Cc tiu chun nh gi ngn ng lp trnh.
1.1.2 Ni dung ct li
- Khi nim v ngn ng lp trnh.
- Vai tr ca ngn ng lp trnh.
- Li ch ca vic nghin cu ngn ng lp trnh.
- Cc tiu chun nh gi mt ngn ng lp trnh tt.
1.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn
1.2 KHI NIM V NGN NG LP TRNH
Nh chng ta bit, my tnh bao gm phn cng l cc thit b in t trong
thng tin c biu din di dng s nh phn v phn mm bao gm cc chng
trnh c to ra bng cch s dng cc ngn ng lp trnh.
Nh vy ngn ng lp trnh (NNLT) l ngn ng dng vit cc chng trnh cho
my tnh. Cng nh cc ngn ng thng thng, NNLT cng c t vng, c php v
ng ngha. Theo tin trnh lch s pht trin, ngn ng lp trnh c th c chia ra
lm ba loi ch yu nh sau:
Ngn ng my (machine language): L cc ch th di dng nh phn, can thip trc
tip vo trong cc mch in t. Chng trnh c vit bng ngn ng my th c th
c thc hin ngay khng cn qua bc trung gian no. Tuy nhin chng trnh vit
bng ngn ng my d sai st, cng knh v kh c, kh hiu v ton nhng con s 0
v 1.
Hp ng (assembly language):
Hp ng l mt bc tin vt bc a ngn ng lp trnh thot ra khi ngn ng my
kh hiu. Ngn ng ny xut hin vo nhng nm 1950, n c thit k my tnh
tr nn thn thin hn vi ngi s dng. Hp ng a ra khi nim bin (variable),
nh m ta c th gn mt k hiu cho mt v tr no trong b nh m khng phi
vit li a ch ny di dng nh phn mi ln s dng. Hp ng cng cha vi "php
ton gi", tc l ta c th biu bin m php ton di dng pht biu (hay cn gi l
cu lnh) thay v di dng nh phn. Cc cu lnh bao gm hai phn: phn m lnh
Ngn ng lp trnh Chng I: M u

2
(vit ta ting Anh) ch php ton cn thc hin v phn tn bin ch a ch cha ton
hng ca php ton .
my thc hin c mt chng trnh vit bng hp ng th chng trnh phi
c dch sang ngn ng my. Cng c thc hin vic dch c gi l Assembler.
Ngn ng cp cao (High level language): L ngn ng c to ra v pht trin
nhm phn nh cch thc ngi lp trnh ngh v lm. Ngn ng cp cao rt gn vi
ngn ng con ngi (Anh ng) nhng chnh xc nh ngn ng ton hc. Nh ngn
ng cp cao m lnh vc lp trnh tr nn ph bin, rt nhiu ngi c th vit c
chng trnh, v nh th m cc phn mm pht trin nh v bo, phc v nhiu lnh
vc ca cuc sng. Cng vi s pht trin ca cc th h my tnh, ngn ng lp trnh
cp cao cng c pht trin rt a dng v phong ph, vic lp trnh cho my tnh v
th m cng c nhiu khuynh hng khc nhau: lp trnh cu trc, lp trnh hng i
tng, lp trnh logic, lp trnh hm... Mt chng trnh vit bng ngn ng cp cao
c gi l chng trnh ngun (source programs). my tnh "hiu" v thc hin
c cc lnh trong chng trnh ngun th phi c mt chng trnh dch dch
chng trnh ngun (vit bng ngn ng cp cao) thnh chng trnh ch.
Trong khun kh ti liu ny, thut ng ngn ng lp trnh dng ch ngn ng lp
trnh cp cao.
1.3 VAI TR CA NGN NG LP TRNH
thy r vai tr ca ngn ng lp trnh trong cng ngh phn mm chng ta hy xt
cc giai on ch yu xy dng mt phn mm. Cc giai on bao gm:
- Xc nh: Mc tiu ca giai an xc nh l hiu r cc yu cu ca khch
hng. Kt qu ca giai an ny l m hnh th gii thc c phn nh thng
qua mt ti liu c t yu cu.
- Phn tch: Mc tiu ca giai on ny l xc nh chnh xc h thng s lm
nhng g theo quan im ca ngi s dng. Kt qu ca giai on phn tch l
mt ti liu c t chc nng m t h thng s c nhng chc nng g.
- Thit k: Mc tiu ca giai an thit k l xc nh chnh xc h thng s lm
vic nh th no. Kt qu ca giai an ny l mt ti liu c t thit k. y
l mt ti liu k thut m nhng ngi thc hin s cn c vo m to ra
phn mm.
- Ci t: L vic thc hin cch gii quyt vn c xut bi ngi
thit k bng mt NNLT. Kt qu ca giai an ny l mt h chng trnh
my tnh.
- Tch hp v kim th h thng: Do cc chuyn vin tin hc thc hin nhm
ghp ni cc b phn ca h thng v kim tra xem h thng c c thc hin
ng theo thit k khng.
- Chp nhn: Do cc chuyn vin tin hc cng vi khch hng tin hnh nhm
xc nhn h thng chng trnh bo m cc yu cu ca ngi s dng.
- Vn hnh khai thc: H thng c trin khai s dng.
Ngn ng lp trnh Chng I: M u

3
trn ch trnh by mt m hnh lm phn mm, gi l m hnh thc nc (water fall),
ngoi ra cn c nhiu m hnh khc. Tuy nhin trong tt c cc m hnh y u phi c
giai on ci t. Trong NNLT ng vai tr l mt cng c gip con ngi thc
hin bc ci t ny. Cng c ngy cng c ci tin hon thin v c th ni
mi tin b trong tin hc u th hin ra trong NNLT. NNLT va l cng c gip cc
nh tin hc gii quyt cc vn thc t nhng ng thi cng l ni m nhng
nghin cu mi nht ca tin hc c a vo. Lnh vc ny va mang tnh truyn
thng va mang tnh hin i.
1.4 LI CH CA VIC NGHIN CU NNLT
Trc khi nghin cu v NNLT, chng ta cn tho lun xem v sao cc sinh vin tin
hc v cc nh lp trnh chuyn nghip cn phi nm cc khi nim tng qut v
NNLT. Vic nghin cu tt NNLT s t c cc li ch nh sau:
1.4.1 Cho php la chn mt NNLT ph hp vi d n thc t
Hin nay c rt nhiu d n cng ngh thng tin ng dng vo nhiu lnh vc khc
nhau ca cuc sng. Do tnh cht ca tng d n m phn mm c th c ci t
bng cc NNLT khc nhau. Vi mt vn kin thc rng v NNLT, nhng ngi lm
d n c th la chn nhanh chng mt NNLT ph hp vi n thc t. Chng hn
c th la chn ngn ng lp trnh Java cho cc d n lp trnh truyn thng, hay
hng lp trnh logic cho cc d n v tr tu nhn to.
1.4.2 S dng mt cch c hiu qu cc cng c ca ngn ng
Cc ngn ng ni chung u cung cp nhng cng c c bit to ra cc tin ch
cho lp trnh vin, nhng khi s dng chng khng ng n c th s gy ra nhng
sai lm ln. Mt v d in hnh l php quy (recursion) - mt cng c lp trnh c
bit c hiu lc trong nhiu ngn ng. Khi s dng quy mt cch ng n th c
th ci t mt gii thut p v c hiu qu. Nhng trong trng hp khc n c
th gy ra mt s lng ph thi gian chy my rt ln cho mt gii thut n gin.
iu ny c th trnh c nu nh lp trnh vin c mt s hiu bit su sc v ngn
ng lp trnh v cc ci t bn trong n.
1.4.3 Lm tng vn kinh nghim khi xy dng cc chng trnh
Nu ngi lp trnh c s nghin cu mt cch rng ri nhiu ngn ng m mt
trong chng c ci t sn nhng cng c no th anh ta c th t thit lp nhng
cng c tng t khi phi vit chng trnh bi mt ngn ng m trong cc cng
c nh th cha c ci t.
1.4.4 To s d dng hc mt ngn ng mi
Mc d c nhiu NNLT khc nhau nhng chng u c nhng nguyn tc chung ca
NNLT. Rt nhiu ngn ng c chung c php (sai khc nhau cht t v cch vit), c
chung cc kiu d liu (sai khc nhau cht t v tn gi). Vic nm vng cc nguyn l
c bn ca NNLT s l mt iu kin thun li ln tip cn mt cch nhanh chng
vi mt ngn ng lp trnh c th mi. Thc t cho thy rng vi nhng ngi nm
vng NNLT, khi gp mt ngn ng lp trnh c th mi, h c th va nghin cu
ngn ng mi ny va p dng lp trnh gii quyt mt bi ton theo yu cu.
Ngn ng lp trnh Chng I: M u

4
1.4.5 To tin thit k mt ngn ng mi
Vic thit k ngn ng mi l mt i hi ca khoa hc pht trin NNLT. Nu chng
ta khng nghin cu v NNLT th khng th no c kin thc xy dng mt ngn
ng mi.
1.5 CC TIU CHUN NH GI MT NGN NG LP TRNH TT
Nhng yu t sau to nn mt ngn ng tt, n cng l nhng tiu chun ngi lp
trnh nh gi ngn ng ny tt hn ngn ng kia khi la chn mt ngn ng s
dng. Ngoi ra khi thit k mt ngn ng lp trnh mi, ta cng phi quan tm n cc
tiu chun ny c c mt ngn ng tt.
1.5.1 Tnh d c
Tnh d c ca mt NNLT l s d dng c hiu mt chng trnh c vit bng
ngn ng . Tnh d c c c trng bi cc thuc tnh sau:
1.- S gin d. Mt ngn ng c gi l c tnh gin d nu ngn ng c t cc
thnh phn c s, tc l t cc yu t c nh ngha trc. Cc ngn ng m chng
ta c th t c mt php ton bng nhiu cch khc nhau th khng phi l mt
ngn ng gin d. Chng hn trong ngn ng C tng thm mt n v cho bin
count ta c th s dng nhiu cch nh count = count + 1, count += 1, count++ hoc
++count. Cc php ton chng (overload) cng lm cho ngn ng tr nn phc tp.
Chng hn ton t + c th hiu l cng hai s nguyn, cng hai s thc, hp hai tp
hp hay ghp ni hai chui k t...
2.- Cu trc iu khin. Cc lnh c cu trc cho php vit cc chng trnh sng
sa, d c, d hiu. Chng ta c th nhn thy iu ny trong cc ngn ng thuc
thp nin 1960 nh BASIC, FORTRAN trong do thiu cc cu trc iu khin nn
chng trnh phi s dng nhiu lnh GOTO, rt kh theo di hiu chng trnh.
Ta hy so snh hai on chng trnh in ra mn hnh 10 s t nhin u tin c vit
bng ngn ng BASIC (khng c lnh cu trc FOR) v ngn ng Pascal.






3.- Kiu d liu v cu trc d liu. Xem xt kiu d liu v cu trc d liu ca mt
ngn ng cng gp phn nh gi mt ngn ng c d c hay khng. Chng hn
trong cc ngn ng khng c kiu d liu logic th phi s dng kiu s thay th v
do m chng trnh tr nn kh c. V d ta hay s dng bin found trong cc
chng trnh tm kim mt phn t x trong mt mng a gm n phn t. Nu ngn ng
s dng c kiu logic th ta c th gn cho found gi tr TRUE hoc FALSE biu
din trng thi tm thy phn t cn tm hay khng, ngc li i vi cc ngn ng
khng c kiu logic th ta phi dng kiu s v gn cho found gi tr 1 hoc 0. Ta hy
so snh hai on chng trnh sau xem on chng trnh no d hiu hn.
Vit bng BASIC
10 i=1;
20 IF i>10 THEN GOTO 60;
30 PRINT i ;
40 i=i+1;
50 GOTO 20;
60 PRINT In xong;
Vit bng Pascal

FOR i:=1 TO 10 DO
Writeln(i);
Writeln(In xong);

Ngn ng lp trnh Chng I: M u

5





4.- C php. C php ca ngn ng c nh hng ln n s d c hiu ca chng
trnh. Chng ta xt mt s th d sau thy r vn ny.
Mt s ngn ng quy nh di ti a ca danh biu qu ngn, chng hn trong
FORTRAN 77 di ti a ca danh biu l 6, do tn bin nhiu khi phi vit
tt nn kh c hiu.
Vic s dng t kha cng gp phn lm cho ngn ng tr nn d c. Chng hn
trong ngn ng Pascal ch s dng mt t kha end kt thc mt khi, kt thc
mt lnh case hay kt thc mt lnh hp thnh do chng trnh tr nn kh c,
trong khi Ada dng cc t kha end if kt thc lnh if, end loop kt thc lnh
vng lp th chng trnh d c hn.
1.5.2 Tnh d vit
Tnh d vit ca mt ngn ng l kh nng s dng ngn ng vit mt chng
trnh cho mt vn no mt cch d dng hay khng. Thng thng cc ngn ng
d c th u d vit. Tnh d vit phi c xem xt trong ng cnh ca vn m
ngn ng c s dng gii quyt. Theo khng th so snh tnh d vit ca hai
ngn ng cho cng mt bi ton m mt trong hai c thit k dnh ring gii
quyt bi ton . V d gii quyt bi ton qun tr d liu, chng ta khng th so
snh Pascal vi mt h qun tr c s d liu nh Foxpro, Access hay Oracle.
Sau y l mt s yu t quan trng nht nh hng ti tnh d vit ca ngn ng.
1.- S gin d. Nu mt ngn ng c qu nhiu cu trc th mt s ngi lp trnh s
khng quen s dng ht tt c chng. Tt nht l c mt s nh cc cu trc ban u
v mt quy tc kt hp chng thnh cc cu trc phc tp hn.
2.- H tr cho tru tng. Mt cch ngn gn, tru tng (abstraction) l kh nng
nh ngha v s dng cc cu trc hoc cc php ton phc tp theo cch thc m
n cho php b qua cc chi tit. Mt v d v tru tng l chng trnh con, t
chng trnh gi, chng ta gi chng trnh con thc hin mt tc v no m
khng cn bit cc ci t chi tit bn trong chng trnh con . Thc cht tru tng
ha chnh l lm cho chng trnh sng sa hn.
3.- Kh nng din t. L nhng cng c ca ngn ng m ngi lp trnh c th s
dng din t gii thut mt cch d dng. Ni cch khc, mt ngn ng c kh
nng din t l ngn ng cung cp cho ngi lp trnh nhng cng c sao cho ngi
lp trnh c th ngh sao th vit chng trnh nh vy. Chng hn lnh lp FOR trong
Pascal d s dng cho cu trc lp vi s ln lp xc nh hn l lnh WHILE.
found := 0;
i := 1;
While (i<=n)and (found=0) do
IF a[i]=x THEN found := 1
ELSE i := i+1;
found := FALSE;
i := 1;
While(i<=n)and(NOT found) do
IF a[i]=x THEN found:= TRUE
ELSE i:=i+1;
Ngn ng lp trnh Chng I: M u

6
1.5.3 tin cy
tin cy ca mt ngn ng lp trnh l kh nng ca ngn ng h tr ngi lp
trnh to ra cc chng trnh ng n. tin cy c th hin bi cc c trng sau:
1.- Kim tra kiu. L kim tra li v kiu ca chng trnh trong giai on dch hoc
trong khi thc hin. Kim tra kiu l mt yu t quan trng m bo tin cy ca
ngn ng. Kim tra kiu s bo cho ngi lp trnh bit cc li v kiu v yu cu h
c cc sa cha cn thit c mt chng trnh ng.
2.- X l ngoi l (Exception Handing). L mt cng c cho php chng trnh pht
hin cc li trong thi gian thc hin, to kh nng sa cha chng v sau tip
tc thc hin m khng phi dng chng trnh.
3.- S lm tn (Aliasing): Khi c hai hay nhiu tn cng lin kt ti mt nh ta gi
l s lm tn. Chng hn cc bin con tr trong ngn ng Pascal cng tr n mt
nh. S lm tn c th lm gim tin cy do ngi lp trnh khng kim sot c
gi tr c lu tr trong nh. Hy xt v d sau trong Pascal

Kt qu thc hin on chng trnh ny l in ra hai dng:
50 v 50
20 v 20
Trong khi nhiu ngi lm tng hai dng s in ra l:
50 v 50
50 v 20
1.5.4 Chi ph
Chi ph ca mt ngn ng cng thng c quan tm nh l mt tiu chun nh
gi ngn ng. Chi ph y phi c hiu l c tin bc v thi gian. Chi ph ny bao
gm:
- Chi ph o to lp trnh vin s dng ngn ng. Chi ph ny ph thuc vo s gin
d ca ngn ng.
- Chi ph ci t chng trnh. Chi ph ny ph thuc vo tnh d vit ca ngn ng.
- Chi ph dch chng trnh.
- Chi ph thc hin chng trnh.
- Chi ph bo tr chng trnh.
Var p, q: ^integer;
Begin
New(p);
p^ := 50;
q:= p; {C q v p cng tr n mt nh}
writeln(p^, v , q^);
q^ := 20;
writeln(p^, v , q^);
end;
Ngn ng lp trnh Chng I: M u

7
- Chi ph mua trnh bin dch
1.6 CU HI N TP
1. Vai tr ca ngn ng lp trnh trong cng ngh phn mm l g?
2. Nu cc li ch ca vic nghin cu ngn ng lp trnh.
3. Nu tn cc tiu chun nh gi mt ngn ng lp trnh tt.
4. Nu tn cc yu t nh hng n tnh d c.
5. Nu tn cc yu t nh hng n tnh d vit.
6. Nu tn cc yu t nh hng n tin cy.
7. Th no l s lm tn?
8. Chi ph ca ngn ng lp trnh bao gm nhng chi ph no?

Ngn ng lp trnh Chng II: Kiu d liu

8
CHNG 2: KIU D LIU
2.1 TNG QUAN
2.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v i tng d liu, bin, hng.
- Khi nim v kiu d liu.
- Cc phng php kim tra kiu v bin i kiu.
2.1.2 Ni dung ct li
- Cc khi nim v i tng d liu, kiu d liu.
- S khai bo cc i tng d liu trong chng trnh.
- Kim tra kiu, bin i kiu d liu.
- Vn gn gi tr v khi to bin.
2.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn
2.2 I TNG D LIU
2.2.1 Khi nim i tng d liu
Trong my tnh thc d liu c lu tr b nh trong v b nh ngoi. Trong d
liu c t chc thnh cc bit, cc byte hoc word. Tuy nhin trong my tnh o ca
mt NNLT no , d liu c t chc phc tp hn vi cc mng, ngn xp, s, chui
k t ...
Ngi ta s dng thut ng i tng d liu (TDL) ch mt nhm ca mt hoc
nhiu mu d liu trong my tnh o.
Khc vi tnh cht tnh tng i ca cc vng nh trong my tnh thc, cc TDL
v cc mi lin h ni ti ca chng li thay i mt cch ng trong qu trnh thc
hin chng trnh.
2.2.2 Cc loi TDL
Xt v mt cu trc th ngi ta phn TDL lm hai loi l TDL s cp v TDL
c cu trc hay cu trc d liu.
TDL s cp l mt TDL ch cha mt gi tr d liu n. Hng hn nh mt s,
mt k t,
TDL c cu trc hay cu trc d liu l mt tch hp ca cc TDL khc. Mi
TDL thnh phn ca TDL c cu trc c gi l mt phn t. Mi phn t ca
cu trc d liu c th l mt TDL s cp hay cng c th l mt TDL c cu trc
khc. V d mt chui k t, mt tp hp cc s, mt vct, mt ma trn,u l cc
TDL c cu trc.
Ngn ng lp trnh Chng II: Kiu d liu

9
Xt v mt ngun gc th c th phn TDL lm hai loi: TDL tng minh v
TDL n.
TDL tng minh l mt TDL do ngi lp trnh to ra chng hn nh cc bin,
cc hng, c ngi lp trnh vit ra trong chng trnh.
TDL n l mt TDL c nh ngha bi h thng nh cc ngn xp lu tr cc
gi tr trung gian, cc mu tin kch hot chng trnh con, cc nh m ca tp tin...
Cc TDL ny c pht sinh mt cch t ng khi cn thit trong qu trnh thc
hin chng trnh v ngi lp trnh khng th truy cp n chng c.
2.2.3 Thuc tnh ca TDL
Thuc tnh ca mt TDL l mt tnh cht c trng ca TDL .
Mi TDL c mt tp hp cc thuc tnh phn bit TDL ny vi TDL khc.
Cc TDL s cp ch c mt thuc tnh duy nht l kiu d liu ca i tng . Cc
TDL c cu trc c thm cc thuc tnh nhm xc nh s lng, kiu d liu ca
cc phn t v cc thuc tnh khc.
2.2.4 Gi tr d liu
Gi tr d liu (GTDL) ca mt TDL s cp c th l mt s, mt k t hoc l mt
gi tr logic ty thuc vo kiu ca TDL .
Mi GTDL thng c biu din bi mt dy cc bit trong b nh ca my tnh.
Cn phn bit hai khi nim TDL v GTDL. Mt TDL lun lun c biu din
bi mt khi nh trong b nh ca my tnh trong khi mt GTDL c biu din bi
mt dy cc bit. Khi ni rng mt TDL A cha mt GTDL B c ngha l: khi nh
biu din cho A cha dy bit biu din cho B.
GTDL ca mt TDL c cu trc l mt tp hp cc GTDL ca cc phn t ca
TDL c cu trc .
2.2.5 Thi gian tn ti
Thi gian tn ti (lifetime) ca mt TDL l khong thi gian TDL chim gi b
nh ca my tnh. Thi gian ny c tnh t khi TDL c to ra cho n khi n b
hy b trong qu trnh thc hin chng trnh.
2.2.6 Cc mi lin kt
Mt TDL c th tham gia vo nhiu mi lin kt trong thi gian tn ti ca n. Cc
lin kt quan trng nht l:
S lin kt ca TDL vi mt hoc nhiu gi tr. S lin kt ny c th b thay
i bi php gn tr.
S lin kt ca mt TDL vi mt hoc nhiu tn c tham chiu trong qu
trnh thc hin chng trnh. Cc lin kt ny c thit lp bi s khai bo v
thay i bi vic gi v tr chng trnh con.
Ngn ng lp trnh Chng II: Kiu d liu

10
S lin kt ca mt TDL vi mt s TDL khc gi l cc hp thnh
(component). Cc lin kt ny thng c biu din bi gi tr con tr v n
c th b thay i bi vic thay i con tr.
S lin kt ca mt TDL vi nh trong b nh. S lin kt ny thng
khng th thay i mt cch trc tip bi ngi lp trnh m n c thit lp
v c th b thay i bi cc thng trnh (routine) qun l b nh ca my tnh
o.
2.3 BIN V HNG
2.3.1 Bin
Bin l mt TDL c ngi lp trnh nh ngha v t tn mt cch tng minh
trong chng trnh. Gi tr ca bin c th b thay i trong thi gian tn ti ca n.
Tn bin c dng xc nh v tham kho ti bin. Trong cc NNLT, tn bin
thng c quy nh di dng mt dy cc ch ci, du gch di v cc ch s,
bt u bng mt ch ci v c chiu di hu hn.
2.3.2 Hng
Hng l mt TDL c tn v gi tr ca hng khng thay i trong thi gian tn ti
ca n.
Hng trc kin (literal constant) l mt hng m tn ca n l s m t gi tr ca n
(chng hn "27" l s m t s thp phn ca TDL gi tr 27). Ch s khc bit
gia 2 gi tr 27. Mt ci l mt s nguyn c biu din thnh mt dy cc bit trong
b nh trong qu trnh thc hin chng trnh v ci tn "27" l mt chui 2 k t "2"
v "7" m t mt s nguyn nh n c vit trong chng trnh.
2.4 KIU D LIU
2.4.1 nh ngha kiu d liu
Kiu d liu l mt tp hp cc TDL v tp hp cc php ton thao tc trn cc
TDL .
Mi NNLT u xy dng cho mnh mt tp cc kiu d liu nguyn thu. Chng hn
ngn ng LISP, kiu d liu chnh l cc cy nh phn vi cc php ton CAR, CDR
v CONS cn i vi cc ngn ng cp cao khc th cc kiu d liu nguyn thy
thng l: integer, real, character v boolean. Hn na cc ngn ng cn cung cp
phng tin cho php ngi lp trnh nh ngha cc kiu d liu mi.
Kiu d liu trong ngn ng c nghin cu trn hai phng din khc nhau: S c
t v s ci t kiu d liu.
2.4.2 S c t kiu d liu
Khi c t mt kiu d liu chng ta thng quan tm n cc thnh phn c bn sau:
Cc thuc tnh nhm phn bit cc TDL ca kiu.
Cc gi tr m cc TDL ca kiu c th c.
Ngn ng lp trnh Chng II: Kiu d liu

11
Cc php ton c th thao tc trn cc TDL ca kiu.
V d, xt s c t kiu d liu mng ta thy:
1.- Cc thuc tnh c th bao gm: s chiu, min xc nh ca ch s i vi mi
chiu v kiu d liu ca cc phn t.
2.- Cc gi tr c th nhn ca cc phn t mng.
3.- Cc php ton c th bao gm: php la chn mt phn t mng thng qua vic
s dng ch s ca phn t , php gn mt mng cho mt mng khc
Php ton
Cc php ton thao tc trn cc TDL l mt b phn khng th thiu ca kiu d
liu. Khi ni n kiu d liu m chng ta khng quan tm n cc php ton l cha
hiu y v kiu d liu . M dng nh khim khuyt ny li hay xy ra. V d
khi ni n kiu integer trong ngn ng Pascal, chng ta ch ngh rng l kiu s
nguyn, c cc gi tr t -32768 n 32767, m t khi quan tm n cc php ton nh
+, -, *, hay ni chnh xc hn chng ta c ngh cc php ton ny l mc nhin phi
c. Trong tin hc khng c ci g t nhin m c c, mi ci hoc do chng ta t to ra
hoc s dng ci c sn do ngi khc to ra. Nhn mnh vic c mt cc php
ton trong kiu d liu l lu chng ta khi nh ngha mt kiu d liu mi, phi
trang b cho n cc php ton cn thit.
C hai loi php ton l cc php ton nguyn thy c ngn ng nh ngha v cc
php ton do ngi lp trnh nh ngha nh l cc chng trnh con.
Php ton trong NNLT v phng din lgic l mt hm ton hc: i vi mt i s
(argument) cho n c mt kt qu duy nht v xc nh.
Mi mt php ton c mt min xc nh (domain) l tp hp cc i s v mt min
gi tr (range) l tp hp cc kt qu c th to ra. Hot ng ca php ton xc nh
kt qu c to ra i vi tp hp bt k cc i s cho. Gii thut ch r lm th
no xc nh kt qu i vi tp hp bt k cc i s cho l phng php ph
bin xc nh hot ng ca php ton. Ngoi ra cn c nhng cch xc nh khc
chng hn xc nh hot ng ca php ton nhn chng ta c th cho mt "bng
nhn" thay v cho gii thut ca php nhn hai s.
ch r min xc nh ca php ton, s lng, th t v kiu d liu ca cc i s,
tng t min gi tr, s lng, th t v kiu d liu ca cc kt qu ngi ta thng
s dng cc k hiu ton hc.
Tn php ton: Min xc nh -> Min gi tr
Trong Min xc nh = Kiu i s X Kiu i s X
(Min xc nh l tp tch -cc ca cc kiu i s)
Min gi tr = Kiu kt qu X Kiu kt qu X ...
(Min gi tr l tp tch -cc ca cc kiu kt qu)
Khi nghin cu cc php ton trn cc kiu d liu chng ta cn lu cc vn sau:
1.- Cc php ton khng c xc nh u vo mt cch chc chn.
Ngn ng lp trnh Chng II: Kiu d liu

12
Mt php ton c xc nh trn nhiu hn mt min xc nh thng cha ng cc
li. V d cc php ton s hc c th xc nh trn nhiu tp hp s khc nhau c th
gy ra s trn s hoc mt kt qu sai lch m ta khng th kim sot c.
V d trong ngn ng Pascal, php cng c th xc nh trn nhiu min xc nh khc
nhau nh integer, real, nn c th c nhng kt qu sai lch nh trong v d sau:
var a, b : integer;
begin
{1} a:= 32767;
{2} b:= 30000;
{3} writeln(32767+30000);
{4} writeln(a+b);
end.
Kt qu ca chng trnh trn l 62767 v -2769.
Trong 62767 l kt qu ca php cng 32767+30000. y l mt kt qu ng, do
my tnh hiu cc s 32767 v 30000 l cc s thc (real) v php + trong lnh
{3} l php cng cc s thc. Ngc li -2769 l kt qu sai ca php ton a+b. V
mt ton hc th kt qu ca a+b l 62767, nhng kt qu ca chng trnh my tnh
li l -2769! S d chng trnh my tnh (ngn ng Pascal) li c kt qu ny l do
hai bin a v b c khai bo l cc bin thuc kiu integer nn php + trong lnh
{4} c hiu l php cng cc s nguyn. V nguyn tc th tng a+b phi c gi
tr thuc kiu integer nhng do tp gi tr ca kiu integer l cc s nguyn t -32768
n 32767 nn mi sinh chuyn.
2.- Cc i s n
Cc php ton trong chng trnh thng thng s c gi vi mt tp hp cc i s
tng minh (explicit arguments). Tuy nhin cc php ton c th truy cp n nhng
i s n (implicit arguments) thng qua vic s dng cc bin ton cc hoc tham
chiu cc bin khng cc b khc. Nhng i s n nh th s gy kh khn cho vic
kim sot gi tr d liu v do c th nh hng n kt qu ca chng trnh.
V d:
Var x: Integer;
Procedure P;
Begin
x:= 0;
End;
Begin
{1} x:=10;
{2} P;
{3} Writeln(x);
End.
Trong v d trn, chng trnh con P thc hin vic gi tr 0 cho bin ton cc x.
Trong chng trnh chnh, mc d ta mi gn 10 cho x (lnh 1), nhng sau khi gi th
tc P (lnh 2) th lnh 3, x li c gi tr 0. Vic chng trnh con s dng bin khng
cc b nh vy s d gy ng nhn cho ngi lp trnh rng x c gi tr 10, c bit
khi th tc P c nh ngha mt on no , xa on chng trnh chnh.
3.- Hiu ng l
Ngn ng lp trnh Chng II: Kiu d liu

13
Mt php ton c th tr v mt kt qu n, v cc kt qu n nh vy s gy ra hiu
ng l (side effect) lm thay i gi tr c lu tr ca cc TDL khc m ngi lp
trnh kh lng kim sot. Cc php ton c th gy nn hiu ng l l php gn (c tr
v mt gi tr) v cc chng trnh con m tham s c truyn bng quy chiu.
Chng hn xt v d sau trong Pascal:
var m,n: integer;
function f(var a: integer): integer;
begin
a := 2*a;
f := 5;
end;
begin
m := 10;
n := m + f(m);
writeln(n);
readln;
end.
Vi mi s integer a hm f lun tr v mt kt qu tng minh l 5 v mt kt qu n
l 2a, chnh kt qu n ny lm thay i gi tr ca TDL m do n s c gi tr l 25
ch khng phi l 15 nh chng ta lm tng.
2.4.3 S ci t kiu d liu
Khi xt s ci t kiu d liu ta phi quan tm n hai yu t sau:
T chc lu tr gi tr d liu ca kiu d liu trong b nh ca my tnh hay
cn gi l s biu din trong b nh.
Gii thut thc hin cc php ton thao tc trn cc gi tr d liu ca kiu.
Hai yu t ny lin quan cht ch n nhau, ni chnh xc hn l tu thuc vo cch
thc t chc lu tr m c cc gii thut thao tc tng ng.
2.5 S KHAI BO
2.5.1 Khi nim khai bo
Khai bo l mt lnh trong chng trnh dng chuyn ti b dch, thng tin v s
lng v kiu ca TDL cn thit trong qu trnh thc hin chng trnh.
Nh v tr ca khai bo trong chng trnh, chng hn u chng trnh con, s khai
bo c th ch r thi gian tn ti ca TDL.
S khai bo cn xc nh s lin kt ca cc TDL vi cc tn ca n.
C hai loi khai bo l khai bo tng minh v khai bo n. Khai bo tng minh l s
khai bo do ngi lp trnh vit ra trong chng trnh, nh trong cc khai bo ca
Pascal. Khai bo n nh trong trng hp cc TDL c dng mt cch mc nhin
m khng cn mt s khai bo tng minh no. V d trong ngn ng FORTRAN
bin INDEX c th dng m khng cn khai bo tng minh v n c trnh bin
dch FORTRAN hiu mt cch mc nhin l mt bin nguyn bi v tn ca n c
bt u bi mt trong cc ch ci t I n N.
Ngn ng lp trnh Chng II: Kiu d liu

14
Ngn ng lp trnh c chia lm hai loi: ngn ng khai bo, trong cc TDL
phi c khai bo trc khi s dng v ngn ng khng khai bo, trong TDL
c th s dng m khng cn phi khai bo. Vi ngn ng khai bo, TDL sau khi
khai bo phi s dng ng nh n c khai bo, trong khi i vi ngn ng
khng khai bo, mt TDL c th s dng mt cch tu thch. y l mt trong
nhng l do lm cho ngn ng khng khai bo tr nn mm do hn.
2.5.2 Mc ch ca s khai bo
Vic khai bo c cc mc ch quan trng sau:
Chn mt t chc lu tr tt nht cho TDL. Chng hn trong ngn ng Pascal
lu tr ngy trong thng ta c th khai bo bin ngay c kiu l integer c
lu tr trong b nh bi 2 byte. Tuy nhin trong mt thng ch c ti a 31
ngy nn ta c th khai bo bin ngay c kiu min con 1..31 c lu tr trong
b nh ch vi 1 byte.
Qun l b nh: S khai bo cho php xc nh thi gian tn ti ca TDL m
cc chng trnh qun l b nh s dng cp pht v gii phng b nh cho
TDL.
Cc php ton chung. Hu ht cc ngn ng u dng cc k hiu c bit nh
"+" ch mt php ton no ph thuc vo kiu d liu ca i s. V d
trong Pascal, "A+B" c ngha l "php cng cc s nguyn" nu A v B thuc
kiu Integer, "php cng cc s thc" nu A v B thuc kiu real v l "php
hp" nu A v B thuc kiu tp hp. Cc php ton nh th c gi l cc
php ton chung bi v n khng ch r mt php ton nht nh no. S khai
bo cho php b dch xc nh mt php ton c th c ch nh bi k hiu
php ton chung. V d trong Pascal, t s khai bo hai bin A v B, trnh bin
dch s xc nh c php ton c th trong ba php ton, theo nu A, B l
cc bin integer th "A+B" l php cng hai s nguyn, nu A, B l hai bin
real th "A+B" l php cng hai s thc Ngc li trong SNOBOL4 v khng
c khai bo kiu cho bin nn s xc nh php "+" no thc hin phi c
lm ti thi im m mt php "+" b bt gp trong qu trnh thc hin chng
trnh.
Kim tra kiu. Mc ch quan trng nht ca vic khai bo l chng cho php
kim tra kiu ca bin. V tnh cht quan trng ca vic kim tra kiu nn
chng ta s xem xt n trong mc sau.
2.6 KIM TRA KIU V BIN I KIU
2.6.1 Khi nim kim tra kiu
Kim tra kiu l kim tra xem kiu thc nhn c ca cc i s trong mt php ton
c ng vi kiu d liu m cc i s cn c hay khng.
V d trc khi thc hin lnh gn X := A * B vic kim tra phi c xc nh i
vi 2 php ton nhn v php gn. Trc ht php nhn phi nhn c 2 tham s A,
B c kiu s, nu c A v B ng l c kiu s (chng hn s nguyn) th tip tc kim
tra cho php ton gn. Tch A*B s l mt s nguyn nn X cng phi l mt bin
thuc kiu nguyn, nu khng ng nh vy th c s sai kiu.
Ngn ng lp trnh Chng II: Kiu d liu

15
Kim tra kiu c th c tin hnh trong lc chy chng trnh (kim tra kiu ng)
hoc trong lc bin dch chng trnh (kim tra kiu tnh).
2.6.2 Kim tra kiu ng
Khi nim:
Kim tra kiu ng l kim tra kiu c thc hin trong khi thc hin chng trnh.
Thng thng kim tra kiu ng c thc hin mt cch tc th trc khi thc hin
mt php ton.
Phng php thc hin:
kim tra kiu ng ngi ta phi lu tr thng tin v kiu ca mi mt TDL cng
vi TDL . Trc khi thc hin mt php ton thng tin v kiu ca mi mt i s
c kim tra. Nu kiu ca cc i s l ng th php ton s c thc hin v kiu
ca kt qu s c ghi li dng kim tra cho cc php ton sau, ngc li s c
mt thng bo li v kiu .
Ngn ng s dng:
Kim tra kiu ng c s dng trong cc ngn ng khng khai bo nh
SNOBOL4, LISP, APL. Trong cc ngn ng ny khng c s khai bo kiu cho bin.
Kiu d liu ca cc bin A v B trong biu thc "A+B" c th thay i trong qu
trnh thc hin chng trnh. Trong nhng trng hp nh vy, kiu ca A v B phi
c kim tra ng ti mi ln php cng c gi thc hin. Trong cc ngn ng
khng khai bo, cc bin i khi c gi l khng nh kiu v chng khng c kiu
c nh.
u im:
u im ch yu ca kim tra kiu ng l tnh mm do trong khi vit chng trnh:
khng yu cu khai bo kiu v kiu ca TDL c th thay i trong qu trnh thc
hin chng trnh. Ngi lp trnh khng phi lo lng v kiu d liu.
Nhc im:
Tuy nhin kim tra kiu ng cng c mt s yu im nh sau:
C kh nng b st li v kiu. Bi v vic kim tra ng ch kim tra ti thi
im thc hin php ton do cc php ton nm trong nhnh chng trnh
khng c thc hin th s khng c kim tra. Bt k mt nhnh cha c
kim tra no u c th cha cc i s c li v kiu v do cc li ny c
th xut hin ti thi im sau . V d ta c mt on chng trnh sau c
vit trong mt ngn ng kim tra kiu ng:
Nhp s a t bn phm;
Nhp s b t bn phm;
Nu a > b Th x := a + b
Ngc li x := a + titi;
Nu khi thc hin on chng trnh ny, ngi s dng lun lun nhp s a
ln hn s b th iu kin a>b lun lun ng nn khng bao gi chng trnh
Ngn ng lp trnh Chng II: Kiu d liu

16
thc hin lnh x := a + titi do khng bao gi pht hin li v kiu: a l mt
s, khng th cng vi titi l mt chui.
Kim tra kiu ng i hi thng tin v kiu phi c lu gi cho mi mt
TDL trong qu trnh thc hin chng trnh do yu cu v b nh phi ln.
Kim tra kiu phi c tin hnh tc th trc mi khi thc hin mt php
ton nn tc thc hin chng trnh chm.
2.6.3 Kim tra kiu tnh
Khi nim:
Kim tra kiu tnh l s kim tra kiu c thc hin trong qu trnh dch chng
trnh.
Phng php thc hin:
Theo nguyn tc kim tra kiu tnh, thng tin v kiu ca TDL phi c cung cp
cho b dch. Thng tin ny mt phn c cung cp bi php khai bo ca ngi lp
trnh v mt phn bi ngn ng .
Cc thng tin bao gm:
i vi mi mt php ton th l s lng, th t v kiu d liu ca i s
v kiu ca kt qu. i vi cc php ton nguyn thu th vic nh ngha
ngn ng s cung cp cc thng tin ny cn i vi chng trnh con th ngi
lp trnh phi xc nh mt cch tng minh.
i vi mi mt bin th l kiu ca bin.
i vi mi mt hng, th l kiu ca i tng d liu hng. Ng ngha ca
mt hng trc kin s ch ra kiu ca n, chng hn "2" l mt s nguyn, "2.3"
l mt s thc.
Kim tra kiu tnh c thc hin nh sau: Thng qua on u ca chng trnh, b
bin dch tp hp thng tin t s khai bo trong chng trnh vo trong bng danh biu
(symbol table) ni cha thng tin v kiu ca cc bin v chng trnh con. B bin
dch cng s c thng tin v cc php ton nguyn thu c nh ngha bi ngn ng,
cc hng...Khi gp mt php ton th phi tra trong bng danh biu xc nh kiu
ca mi mt i s c hp l hay khng. Ch rng nu php ton l php ton chung
nh ni trn th c th c nhiu kiu hp l cho mt i s. Nu kiu ca i s l
hp l th kiu kt qu c xc nh v b bin dch ghi li thng tin ny kim tra
cc php ton sau.
Ngn ng s dng:
Kim tra kiu tnh thng c s dng trong cc ngn ng khai bo tc l khi vit
chng trnh, cc bin phi c khai bo kiu trc khi s dng nh Pascal, C
u im:
Do php kim tra kiu tnh kim tra tt c cc php ton c th xut hin trong
bt k mt lnh no ca chng trnh, tt c cc nhnh ca chng trnh u
c kim tra nn khng th c s st li v kiu.
Ngn ng lp trnh Chng II: Kiu d liu

17
Mt khc thng tin v kiu khng gn vi TDL ti thi im thc hin
chng trnh nn tit kim c b nh v tng tc thc hin chng trnh.
Nhc im:
Yu im ch yu ca kim tra kiu tnh l chng trnh khng mm do, ngi lp
trnh lun phi lo lng v vic s dng bin khng ng kiu.
2.7 CHUYN I KIU
Trong qu trnh kim tra kiu, nu c s khng tng thch gia kiu thc ca i s
v kiu ang c monng i ca php ton y th c hai la chn c th:
S khng tng thch kiu b bo li hoc
Mt s chuyn i kiu t ng c thi hnh i kiu ca i s thc t
thnh kiu ng vi yu cu.
Chuyn i kiu l mt php ton c nh ngha nh sau:
S chuyn i: Kiu1 -> Kiu2 ngha l s chuyn i ly TDL ca mt kiu v sn
sinh ra mt TDL "tng ng" ca mt kiu khc. Hu ht cc ngn ng u cung
cp hai phng php chuyn i kiu:
Trang b mt tp hp cc hm c xy dng m ngi lp trnh c th gi
trong chng trnh to ra s chuyn i kiu. V d Pascal trang b hm
ROUND i mt TDL s thc thnh mt i tng d liu nguyn vi gi
tr bng phn nguyn ca s thc.
Nh l mt s chuyn i t ng (cn gi l p kiu) do ngn ng thc hin
trong mt s trng hp khng tng thch kiu no . V d trong Pascal cc
i s ca php ton s hc "+" c ln s thc v s nguyn hoc khi gn mt
s nguyn cho mt bin s thc th s nguyn phi c i mt cch t ng
thnh kiu thc.
i vi kim tra kiu ng th s chuyn i kiu t ng c din ra ti im m s
khng tng thch kiu c tm thy trong qu trnh thc hin chng trnh. i vi
s kim tra kiu tnh th mt m ph s c xen vo trong chng trnh ch dng
gi ti hm bin i kiu ti im thch hp trong qu trnh thc hin.
Chuyn i kiu t ng gip ngi lp trnh khi mi lo lng v s sai kiu v trnh
vic gi ti mt s lng ln cc php bin i kiu tng minh trong chng trnh.
Tuy nhin chng ta nn trnh vic chuyn i kiu bng cch vit cc php ton ng
kiu. Chng hn trong lp trnh thay v vit lnh x := 1 (vi x l bin s thc) ta nn
vit x := 1.0, vi lnh trc th khi thc hin phi c mt s chuyn i kiu t ng
cn vi lnh sau th khng cn nn thi gian thc hin s nhanh hn.
2.8 GN V KHI TO
2.8.1 Php gn
Gn tr cho bin l s lu tr gi tr d liu vo trong nh ca bin .
Gn tr l mt php ton c bn trong cc NNLT. N dng thay i s lin kt ca
gi tr vi TDL.
Ngn ng lp trnh Chng II: Kiu d liu

18
Ni chung cc ngn ng khc nhau th php gn cng khc nhau.
S khc nhau u tin l khc nhau v c php, chng hn ta c mt s c php lnh
gn nh sau:
A := B (Pascal hay Ada)
A = B (C, C++, Fortran, PL/1 v SNOBOL4)
MOVE B TO A (COBOL)
A <- B (APL)
(SETQ A B) (LISP)
S khc nhau th hai l kt qu tr v ca php gn tr. Ni chung trong cc ngn
ng, lnh gn tr khng tr v kt qu. Chng hn trong Pascal, c t php gn l
Php gn (:=) Type1 x Type2 -> Void vi s hot ng: t gi tr c cha trong
i tng d liu Type1 thnh bn sao ca gi tr c cha trong i tng d liu
Type2 v tr v mt kt qu c kiu void (c th hiu l khng c kt qu tr v).
Trong mt s ngn ng nh C, C++ v LISP, php gn tr v trc tip mt kt qu l
mt bn sao ca gi tr c gn. Chng hn trong C, s c t php gn l
Php gn (=) Type1 x Type2 -> Type3 vi s hot ng: t gi tr c cha trong
i tng d liu Type1 thnh bn sao ca gi tr c cha trong i tng d liu
Type2 v to ra mt TDL mi Type3 cha bn sao gi tr ca Type2, tr v Type3
nh l mt kt qu.
V php gn trong Pascal khng tr v mt kt qu nn chng ta ch s dng chc
nng gn tr ca n m thi. V khng c kt qu tr v nn mi mt lnh ta ch c
th vit mt php gn, chng hn gn gi tr 10 cho hai bin A v B ta phi vit hai
lnh B := 10; A := B; hoc A := 10; B := 10;
Ngc li khi lp trnh bng ngn ng C, v php gn c tr v mt kt qu nn ta c
th vit: A = B = 10; Trong php gn B =10 va thc hin chc nng gn tr gi
tr 10 cho B va tr v 1 gi tr gn tip cho A. Gi tr c tr v nh l mt kt
qu ca php gn B cho A b b qua v lnh khng cha mt php ton no sau
na.
Php gn trong ngn ng C++ cng c cng c ch nh trong C, v vy khi thit k
ton t gn cho mt i tng no (Overloading ton t = trong khi xy dng mt
lp no ) ta phi vit:
<tn lp> & operator= (const <tn lp> & Obj)
{
// Thc hin vic gn d liu;
return *this;
}
Trong tn lp l tn ca lp chng ta ang nh ngha. Phng thc ny nhn vo
mt i tng Obj, thc hin vic gn Obj cho i tng hin hnh v tr i tng
hin hnh ny v nh mt kt qu.
V d ta to mt class c tn l point biu din cho mt im trong mt phng c
c trng bi hai ta x v y. Trong chng trnh ta mun gn cc im cho nhau,
nn trong khi nh ngha class point, ta phi nh ngha ton t gn. C th nh sau:
class point {
Ngn ng lp trnh Chng II: Kiu d liu

19
float x;
float y;
public:
point() {x=0.0 ; y=0.0;} // Phng thc xy dng mc nhin
point (float a, float b) {x=a; y=b;} // Phng thc xy dng bnh thng
point & operator= (const point & p ) // nh ngha ton t gn
{
x = p.x; y = p.y; // Gn d liu
return * this;
}
}; // term
S khc nhau cui cng ca php gn l cch thc tin hnh gn tr. Xt lnh gn
ca Pascal "A := B", Pascal cng nh mt s ngn ng khc, iu ny c ngha l:
"Gn bn sao ca gi tr ca bin B cho bin A". By gi ta li xt lnh gn "A = B"
ca SNOBOL4. Trong SNOBOL4 th n c ngha l: "To mt bin tn A tham chiu
ti TDL m B tham chiu". Trong SNOBOL4 c A v B cng tr ti mt TDL.
Pascal A := B (Sao chp TDL khi gn)
Trc Sau



SNOBOL4 A = B (Sao chp s tr n TDL khi gn)





Cch thc hin lnh gn ca SNOBOL4 r rng l to ra mt s lm tn.
2.8.2 S khi to bin
Khi to mt bin l gn cho bin mt gi tr u tin.
Mt bin khi c to ra th s c cp pht nh nhng n vn cha c khi to.
Khi n c gn mt gi tr u tin th mi c khi to.
Cc bin cha c khi to l ngun gc ca cc li lp trnh. Khi mt bin c cp
pht nh m cha c khi to th trong nh ca n cng c mt gi tr ngu
nhin no . Thng l mt gi tr rc (Khi mt TDL no trc b hy b
nhng gi tr ca TDL ny trong nh vn cn, gi tr ny gi l gi tr rc). iu
nguy him l gi tr rc ny vn l mt gi tr hp l. V th chng trnh c th x l
trn gi tr rc ny mt cch bnh thng v chng ta khng th kim sat c kt
qu x l .
17.2
8.4
8.4
8.4
A: A:
B: B:
17.2
8.4
8.4
A: A:
B: B:
Trc khi gn Sau khi gn
Ngn ng lp trnh Chng II: Kiu d liu

20
V tnh cht nghim trng nh ni trn ca bin cha c khi to, cc ngn ng
lp trnh c th s dng cc gii php sau khc phc:
1.- Nu bin cha c kh to th s c gi tr NULL: Khi mt bin mi c to
ra, nh cp pht cho n phi cha mt dy cc bit biu din cho mt gi tr NULL.
Ty thuc vo kiu ca bin m gi tr NULL ny s c mt gi tr c th, v d nu l
bin s th NULL l 0, nu l bin chui k t th NULL l chui rng, nu bin l
logic th NULL l FALSE...
2.- Khi to bin ngay sau khi n va c to ra l mt cch lp trnh tt v trong
mt s ngn ng mi u cung cp phng tin lm iu ny mt cch d dng.
Trong ngn ng Pascal mt bin c khi to ng thi vi vic khai bo c gi l
bin c gi tr u hay cn gi l hng nh kiu.
V d:
const i:integer=10;
a: ARRAY[1..3,1..2] Of Integer = ((11, 12), (21, 22), (31, 32));
var j:integer;
begin
writeln(i); i:= i+1; writeln(i);
for i:=1 to 3 do begin
for j:=1 to 2 do write(a[i,j]:5);
writeln;
end; end.
2.9 CU HI N TP
1. Xt v mt cu trc th c cc loi i tng d liu no?
2. Th no l mt i tng d liu s cp?
3. Th no l mt i tng d liu c cu trc?
4. i tng d liu tng minh l g?
5. i tng d liu n l g?
6. K tn cc mi lin kt ca i tng d liu.
7. Th no l mt bin?
8. Th no l mt hng?
9. Kiu d liu l g?
10. Khi c t mt kiu d liu, chng ta phi c t nhng iu g?
11. Cho v d v mt php ton gy ra hiu ng l.
12. Khi ci t mt kiu d liu, chng ta phi ch r nhng iu g?
13. Mc ch ca s khai bo l g?
14. Th no l kim tra kiu?
15. Khi c s khng tng thch v kiu th chng trnh dch phi lm g?
16. K tn cc phng php kim tra kiu.
Ngn ng lp trnh Chng II: Kiu d liu

21
17. Kim tra kiu tnh c tin hnh trong lc no?
18. Kim tra kiu ng c tin hnh trong lc no?
19. Nu cc im mnh ca kim tra kiu tnh.
20. Nu cc im yu ca kim tra kiu tnh.
21. Nu cc im mnh ca kim tra kiu ng.
22. Nu cc im yu ca kim tra kiu ng.
23. Thng tin v kiu trong kim tra kiu tnh c lu tr u?
24. Thng tin v kiu trong kim tra kiu ng c lu tr u?
25. Kim tra kiu ng c thc hin trong ngn ng no?
26. Kim tra kiu tnh c thc hin trong ngn ng no?
27. Php gn tr c tr v mt kt qu khng?
28. Th no l khi to mt bin?
29. Nu trong mt biu thc c s dng mt bin cha c khi to th c th
nh gi (nh tr) c biu thc khng?
Ngn ng lp trnh Chng III: Kiu d liu s cp

22
CHNG 3: KIU D LIU S CP
3.1 TNG QUAN
3.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v kiu d liu s cp.
- c t v phng php ci t kiu d liu s cp trong cc ngn ng lp
trnh.
- Mt s kiu d liu s cp c th nh: kiu s, k t, logic
3.1.2 Ni dung ct li
- Kin thc tng quan v kiu d liu s cp.
- Mt vi kiu d liu s cp: kiu s, lit k, logic, k t.
3.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn, kin thc chng 2.
3.2 NH NGHA KIU D LIU S CP
Kiu d liu s cp l mt kiu d liu m cc TDL ca n l cc TDL s cp.
Ni chung cc ngn ng lp trnh u c cc kiu d liu s cp sau: s nguyn
(integer, int), s thc (real, float, double), k t (char, character), logic (bool,
boolean) v kiu lit k.
3.3 S C T CC KIU D LIU S CP
3.3.1 Thuc tnh ca kiu d liu s cp
Thuc tnh c bn nht ca bt k mt TDL s cp no chnh l kiu d liu ca n.
i vi mt s kiu d liu c th th c th c thm cc thuc tnh b sung c
trng cho kiu .
3.3.2 Gi tr ca kiu d liu s cp
Tp hp cc gi tr ca mt kiu d liu s cp lun l mt tp hp c th t v c
mt gi tr nh nht v mt gi tr ln nht.
Chnh nh tnh cht c th t ca tp gi tr s cp nn trong thao tc sp xp d liu,
kha sp xp thng thuc kiu d liu s cp.
V d kiu d liu integer l mt tp hp hu hn cc s nguyn (d nhin l c th
t), t mt s nguyn nh nht n mt s nguyn ln nht. S nguyn nh nht v s
nguyn ln nht l cc s nguyn tng ng vi cc gi tr nguyn nh nht v ln
nht c th biu din mt cch thun tin trong b nh ca my tnh.
Ngn ng lp trnh Chng III: Kiu d liu s cp

23
3.3.3 Php ton trn kiu d liu s cp
Do tp gi tr s cp c th t, nn trong tt c cc kiu d liu s cp u c cc php
ton quan h. Ngoi ra cn c cc php ton nhn vo mt s i s thuc kiu s cp
v tr v mt gi tr s cp cng kiu. Tuy nhin cn ht sc lu rng tp cc gi tr
s cp c gi tr nh nht v gi tr ln nht, cho nn i khi gi tr tr v ca php
ton khng nm trong gii hn ca tp gi tr s cp, iu ny s gy ra s sai st
trong chng trnh.
3.4 CI T CC KIU D LIU S CP
3.4.1 T chc d liu trong b nh
Ngi ta thng s dng vic t chc d liu di phn cng ca my tnh biu
din cho cc gi tr d liu ca kiu d liu s cp.
L do ca vic la chn ny rt n gin: Nu biu din b nh ca phn cng c
s dng th cc php ton c bn trn d liu ca kiu ny c th c thc hin bi
cc php ton do phn cng cung cp. M cc php ton c thit k bi phn cng
s c tc thc hin nhanh. Ngc li, nu ta s dng s biu din bi phn mm th
phi s dng cc php ton m phng bi phn mm m tc thc hin s chm hn.
Tuy nhin, vic s dng biu din bi phn cng cng c yu im l tp cc gi tr s
b hn ch.
V d biu din mt s nguyn trong b nh, ta c th s dng hai phng php:
1.- S dng cch biu din mt s nguyn ca phn cng, chng hn s dng 16 bit
biu din cho mt s nguyn. Vi phng php ny th ta c th s dng lun cc
php tnh s hc trn s nguyn (+, -, *, DIV, MOD) c thit k cho phn cng.
u im ca phng php ny l cc php tnh s hc c tc thc hin nhanh.
Nhc im ca phng php l tp gi tr cc s nguyn ch c 65535 s (t -32768
n 32767).
2.- S dng mt cu trc d liu no biu din cho mt s nguyn, chng hn s
dng mt chui k t, trong mi k t lu tr mt ch s. u im ca phng
php l tp cc gi tr nguyn s rt ln (s cc ch s trong mt nguyn c th bng
chiu di ca chui k t biu din cho n). Nhc im ca phng php l chng ta
phi xy dng cc chng trnh con thc hin cc php tnh s hc v d nhin tc
thc hin ca cc chng trnh con ny s chm hn cc php tnh c xy dng
trong phn cng.
Cc thuc tnh (ch yu l kiu d liu) ca TDL s cp c x l bng 2 cch
chnh nh sau:
1.- Cc thuc tnh ca TDL c th c xc nh trong khi bin dch bi trnh bin
dch. Cc thuc tnh ny s c lu tr trong b dch ca ngn ng (chng hn bng
danh biu) v khi cn s tm li cc thuc tnh ny s dng. l phng php
thng dng trong cc ngn ng bin dch nh FORTRAN, C v Pascal, ni m tnh
hiu qu ca vic s dng b nh v tc thc hin chng trnh l nhng mc tiu
trn ht.
Ngn ng lp trnh Chng III: Kiu d liu s cp

24
2.- Cc thuc tnh c th c lu tr trong b m t nh l mt phn ca TDL ti
thi gian thc hin. y l phng php thng dng trong cc ngn ng thng dch
nh LISP v SNOBOL4, ni m tnh linh hot mm do l mc tiu trc ht ch
khng phi l tnh hiu qu.
3.4.2 Ci t php ton
Mi mt php ton thao tc trn cc TDL ca mt kiu d liu s cp cho c th
c ci t bng mt trong 3 cch nh sau:
1.- Nh l mt php ton phn cng trc tip, nu s biu din b nh ca TDL l s
biu din ca phn cng. V d nu cc s nguyn c lu tr bng cch dng biu
din phn cng cho s nguyn th cc php ton nh php cng, tr v cc php ton
s hc khc ca s nguyn c th c thc hin bng cch dng cc php ton s hc
cho s nguyn c xy dng trong phn cng.
2.- Nh l mt th tc hoc hm thc hin cc php ton. V d php ton ly cn bc
hai thng thng khng c cung cp mt cch trc tip nh l mt php ton trong
phn cng ngay c khi cc s c biu din bng s biu din ca phn cng v v
vy n c ci t nh l mt chng trnh con tnh cn bc hai. Nu cc TDL
khng c biu din bng s biu din xc nh bi phn cng th tt c cc php
ton phi c m phng bi phn mm.
3.- Nh l mt chui cc dng m lnh dng thc hin php ton nh l mt dy
cc php ton phn cng. V d hm ly tr tuyt i ca mt s c nh ngha l:
ABS(x) =

<

0 nu x x -
0 nu x x
thng c ci t nh l mt chui cc m lnh:
1.- Nhn gi tr x t b nh
2.- Nu x>=0 th b qua ch th k tip
3.- t x = -x
4.- Lu x vo b nh
Trong mi mt dng m lnh c thc hin bi mt php ton trong phn cng.
3.5 KIU D LIU S
Hu ht cc ngn ng lp trnh u c cc kiu d liu s, nhng cc chi tit ca s
c t v php ci t cc kiu ny c nhiu im khc nhau. Kiu s nguyn v kiu
s thc l ph bin nht bi v chng da mt cch trc tip vo phn cng ca my
tnh.
3.5.1 S nguyn
S c t
c t cc thuc tnh: Mt TDL ca kiu s nguyn khng c thuc tnh no khc
ngoi kiu ca n.
c t gi tr: Tp hp cc gi tr nguyn c xc nh theo dng l mt tp hp con
c th t hu hn ca tp v hn cc s nguyn c nghin cu trong ton hc.
Ngn ng lp trnh Chng III: Kiu d liu s cp

25
Gi tr nguyn ln nht i khi c biu din nh l mt hng xc nh. V d trong
Pascal l hng MaxInt. Min gi tr ca kiu s nguyn l tp cc s nguyn t -
MaxInt n MaxInt. Gi tr MaxInt c la chn phn nh gi tr nguyn ln nht c
th biu din c trong phn cng.
c t cc php ton: Trn TDL nguyn thng c cc nhm php ton chnh nh
sau:
1.- Cc php tnh s hc
Cc php tnh s hc hai ngi thng c nh ngha l:
Bin_Op: Integer x Integer -> Integer.
y Bin_Op c th l cng (+), tr (-), nhn (*), chia (/ hoc DIV), ly phn d
(MOD) hoc mt s php ton tng t khc.
Cc php tnh s hc mt ngi c nh ngha: Unary_Op : Integer -> Integer
y Unary_Op c th l m (-), dng (+).
Cc php ton s hc ph bin khc thng c cha trong th vin chng trnh
con.
2.- Cc php ton quan h
Cc php ton quan h c nh ngha l: Rel_Op : Integer x Integer -> Boolean
y Rel_Op c th l bng, khc, nh hn, ln hn, nh hn hoc bng, ln hn
hoc bng. Php ton quan h so snh hai gi tr d liu i s v tr v kt qu l mt
i tng d liu logic (ng hoc sai).
3.- Gn tr
Cng nh php gn tng qut, php gn ca s nguyn c th tr v (vi nh ngha:
Assignment : Intger x Integer -> Integer) hoc khng tr v mt gi tr (vi inh
ngha: Assignment : Integer x Intger -> Void) .
S ci t
Kiu d liu nguyn hu ht c ci t mt cch trc tip bng cch dng s biu
din b nh c xc nh bi phn cng v tp hp cc php tnh s hc, cc php
ton quan h nguyn thu trong phn cng cho cc s nguyn. Thng thng s biu
din ny s dng mt t trong b nh hoc mt dy cc bytes lu tr mt s
nguyn. Chng hn ngn ng Pascal s dng biu din s nguyn bi 1 t (word)
trong phn cng ca my tnh biu din cho mt s integer.
3.5.2 Min con ca s nguyn
S c t
Kiu min con ca kiu d liu nguyn l mt kiu d liu m tp cc gi tr ca n l
mt dy cc gi tr nguyn trong mt khong gii hn nh.
Cc dng khai bo sau thng c s dng:
A : 1..10 (Pascal)
Ngn ng lp trnh Chng III: Kiu d liu s cp

26
A : Integer Range 1..10 (Ada)
Nh vy v thuc tnh, kiu min con ca kiu s nguyn, c thuc tnh ca kiu s
nguyn. V gi tr, tp cc gi tr ca kiu min con c xc nh r trong php khai
bo v cui cng, kiu min con cho php s dng tp hp php ton nh trong kiu
s nguyn bnh thng.
S ci t
Kiu min con c ci t tng t nh ci t kiu s nguyn.
Li ch ca vic s dng kiu min con
Kiu min con c mt u im ni bt l kim tra kiu tt hn kiu s nguyn.
Vic khai bo mt bin kiu min con cho php kim tra kiu mt cch nghim ngt
hn khi thc hin lnh gn tr cho bin. V d lu tr cc thng trong mt nm ta c
th s dung bin MONTH vi khai bo kiu min con l MONTH: 1..12 th lnh gn
MONTH := 0 l khng hp l v li c t ng tm thy khi bin dch. Nhng
nu MONTH c khai bo l Integer th lnh gn trn l hp l v li ch c th c
tm ra bi ngi lp trnh trong qu trnh chy th.
3.5.3 S thc du chm ng
S c t
Tp hp cc gi tr thc du chm ng c xc nh l mt dy s c th t t mt
s m nh nht ti mt s ln nht c xc nh trong phn cng ca my tnh,
nhng cc gi tr khng c phn b ri rc u trong gii hn ny.
Cc php tnh s hc, cc php ton quan h, php gn i vi s thc cng ging nh
i vi s nguyn. Mt s php ton khc cng c cc ngn ng trang b nh l cc
hm, chng hn:
SIN : Real -> Real (Hm SIN)
COS : Real -> Real (Hm COSIN)
SQRT: Real -> Real (Hm ly cn bc hai)
MAX : Real x Real -> Real (Hm ly gi tr ln nht)
S ci t
S biu din b nh cho kiu d liu thc du chm ng da trn c s biu din
phn cng trong mt nh c chia thnh mt phn nh tr (mantissa) v mt s
m (exponent).
Cc php tnh s hc v cc php ton quan h trn kiu s thc c h tr bi phn
cng. Cc php ton khc phi c ngn ng ci t nh l cc chng trnh con.
Ngn ng lp trnh Chng III: Kiu d liu s cp

27
3.6 KIU LIT K
3.6.1 t vn
Trong lp trnh, c mt iu ph bin l mt bin c th ly mt hoc mt s nh cc
gi tr. Chng hn bin NGAY_TRONG_TUAN ch ly 7 gi tr biu din cho ch
nht, th hai, th ba,...th by. Tng t bin GIOI_TINH ch c hai gi tr
biu din l "nam" v "n". Trong cc ngn ng nh FORTRAN hay COBOL mt
bin nh vy phi c kiu s nguyn v cc gi tr c biu din bi cc s nguyn
chng hn "ch nht" c biu din bi s 1, "th hai" c biu din bi s 2,...
"nam" c biu din bi s 0 v "n" c biu din bi s 1.
Chng trnh s dng cc gi tr ny nh l cc s nguyn v ngi lp trnh phi nh
s tng ng gia cc gi tr nguyn vi "ngha" ca chng trong ng dng. Qu thc
y l mt iu bt tin v d gy ra sai st.
Nhiu ngn ng mi nh Pascal hay Ada cho php ngi lp trnh t t ra mt kiu
d liu bng cch lit k ra mt danh sch cc gi tr ca kiu . Kiu ny gi l kiu
lit k.
3.6.2 S c t
Ngi lp trnh nh ngha kiu lit k bng cch lit k ra mt danh sch cc tn trc
kin thng qua s khai bo. Cc tn trc kin trong danh sch l cc gi tr ca kiu v
th t ca chng cng c xc nh nh th t chng xut hin trong danh sch.
Chng hn, ta c khai bo bin trong Pascal:
VAR
NGAY_TRONG_TUAN : (Chu_nhat, Hai, Ba, Tu, Nam, Sau, Bay);
V c nhiu bin c cng mt kiu lit k c dng trong mt chng trnh nn
ngi ta thng nh ngha mt lit k nh l mt kiu c tn, sau s dng n
xc nh kiu cho nhiu bin nh trong Pascal:
TYPE
NGAY = (Chu_nhat, Hai, Ba, Tu, Nam, Sau, Bay);
sau khai bo bin:
VAR
NGAY_TRONG_TUAN, NGAY_LAM_VIEC: NGAY;
Trong s khai bo trn, cc tn trc kin nh Chu_nhat, Hai, Ba, chnh l cc gi tr
ca kiu v cc gi tr ny c sp th t nh chng c ghi ra, tc l Chu_nhat
< Hai < Ba < < Bay.
Ch rng kiu NGAY c nh ngha th c th c dng nh mt tn kiu
nguyn thu (Integer chng hn) v cc hng trc kin nh Chu_nhat, Hai, Ba, Tu,..
cng c s dng nh l cc hng trc kin nguyn thu (chng hn "27"). V th ta
c th vit:
IF NGAY_TRONG_TUAN = Hai THEN ...
Cc php ton c bn trong kiu lit k l cc php ton quan h (bng, nh hn, ln
hn...), php gn tr, php ton cho gi tr ng sau v gi tr ng trc mt gi tr
trong dy cc hng trc kin ca lit k.
Ngn ng lp trnh Chng III: Kiu d liu s cp

28
3.6.3 S ci t
Biu din b nh cho mt TDL kiu lit k thng l khng phc tp. Mi gi tr
trong lit k c biu din bng mt s nguyn 0, 1, 2,... V d kiu NGAY trn ch
cn s dng 7 gi tr t 0 n 6, trong 0 biu din cho Chu_nhat, 1 biu din cho
Hai, 2 biu din cho Ba,...
S ci t cc php ton c bn cng khng phc tp. Cc php quan h c ci t
bng cch s dng cc php ton quan h di phn cng cho s nguyn nh "=", "<",
">",... Php ton ly gi tr ng sau mt gi tr c ci t bng cch ly s nguyn
biu din cho gi tr cng thm 1 v c s kim tra thy c kt qu khng
vt qu gii hn cho php. Chng hn xc nh gi tr sau Hai, ta ly 1 (biu din
cho Hai) cng vi 1 c 2, m 2 biu din cho Ba, nn sau Hai l Ba, nhng sau Bay
th khng c gi tr no v tng ca 6 (biu din cho Bay) vi 1 c 7, vt qu gii
hn cho php ca kiu. Tng t cho php ton ly gi tr ng trc ca mt gi tr.
3.6.4 Li ch ca vic s dng kiu lit k
Kiu lit k c a vo trong ngn ng lp trnh nhm gii quyt vn c
nu ra trong phn t vn . T ta c th thy r vic s dng kiu lit k lm cho
chng trnh sng sa, trc quan, ngi lp trnh khng cn phi nh ngha ca gi
tr s v do vy chng trnh s c chnh xc cao hn. Ni cch khc, kiu lit k
lm tng tnh d c, tnh d vit v tin cy ca ngn ng.
3.7 KIU LOGIC
Kiu logic (bool, boolean hoc logical) l kiu d liu ph bin trong hu ht cc ngn
ng.
3.7.1 S c t
Kiu d liu logic gm cc TDL c mt trong hai gi tr ng hoc sai. Trong Pascal
v Ada, kiu d liu logic c xem mt cch n gin nh l mt lit k c nh
ngha bi ngn ng. BOOLEAN = (FALSE, TRUE) trong xc nh cc tn
"FALSE" v "TRUE" cho cc gi tr ca kiu v xc nh th t FALSE < TRUE. Cc
php ton ph bin trn kiu logic gm c:
AND: Boolean X Boolean -> Boolean
OR: Boolean X Boolean -> Boolean
NOT: Boolean -> Boolean
3.7.2 Php ci t
Ch cn mt bit ca b nh lu tr mt tng d liu logic. Tuy nhin v cc bit
n c th khng c a ch ring trong b nh nn ta phi s dng mt n v nh c
a ch nh l byte hoc word do cc gi tr FALSE v TRUE c th c biu din
bng hai cch khc nhau:
1.- Bit c trng (thng thng l bit du ca s biu din s) vi 0 biu din cho
FALSE v 1 biu din cho TRUE, cc bits cn li trong byte hoc word s b b qua.
Ngn ng lp trnh Chng III: Kiu d liu s cp

29
2.- S dng ton b n v nh ghi gi tr zero (tt c cc bit bng 0) biu din
cho FALSE cn gi tr khc zero biu din cho TRUE.
3.8 KIU K T
Hu ht d liu xut v nhp u c dng k t v c s chuyn i sang dng d liu
khc trong qu trnh nhp xut. Chng hn khi ta nhp mt ch s (hoc mt chui
ch s) t bn phm vo mt bin s trong chng trnh th c mt s chuyn i
ch s (chui ch s) thnh s. Hay khi ta ghi mt s ra my in hoc ra mt tp tin vn
bn th c mt s chuyn i t s thnh ch s (chui ch s). Tuy nhin vic x
l mt s d liu trc tip di dng k t cng cn thit trong mt s ng dng no
, chng hn trong x l vn bn. D liu chui k t c th c cung cp mt cch
trc tip thng qua kiu chui k t (nh trong SNOBOL4, PL/1 v cc ngn ng mi
khc) hoc thng qua kiu k t v chui k t c xem nh l mt mng cc k t
(nh trong APL, Pascal v Ada. Ch Turbo Pascal c kiu chui k t).
3.8.1 S c t
Kiu k t l mt lit k c nh ngha bi ngn ng tng ng vi mt tp hp k
t chun c cho bi phn cng v h iu hnh nh tp cc k t ASCII chng hn.
Cc php ton trn d liu k t bao gm: cc php ton quan h, php gn, v i khi
c php kim tra xem mt k t c thuc mt lp c bit "ch ci", "ch s" hoc lp
k t xc nh no .
3.8.2 Php ci t
Cc gi tr d liu hu nh lun c ci t mt cch trc tip bi phn cng v h
iu hnh. Do cc php ton quan h cng c biu din mt cch trc tip bi
phn cng.
3.9 CU HI N TP
1. Nu nh ngha kiu d liu s cp.
2. Tp cc gi tr ca mt kiu s cp c c im g?
3. C phi cc ngn ng lp trnh thng s dng biu din trong phn cng
biu din cho kiu s nguyn?
4. ci t cc php ton s hc trn kiu d liu s nguyn, c phi ngi ta
phi thit lp cc chng trnh con trong ngn ng?
5. Ti sao ngi ta li s dng kiu lit k?
6. Ti sao ngi ta li s dng kiu min con?

Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

30
CHNG 4: KIU D LIU C CU TRC
4.1 TNG QUAN
4.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v kiu d liu c cu trc.
- c t v phng php ci t kiu d liu c cu trc.
- Cc c t, phng php t chc lu tr, ci t cc php ton ca mt s
kiu d liu c cu trc nh: vecto, mng nhiu chiu, mu tin, chui k t
4.1.2 Ni dung ct li
- Kiu d liu c cu trc.
- Cc c t, phng php lu tr, hnh thc truy xut, ci t cc php ton
ca mt s kiu d liu c cu trc.
4.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn, kin thc chng 2.
4.2 NH NGHA KIU D LIU C CU TRC
Kiu d liu c cu trc hay cn gi l cu trc d liu (CTDL) l mt kiu d liu m
cc TDL ca n l cc TDL c cu trc.
Nh vy CTDL l mt tp hp cc TDL c cu trc cng vi tp hp cc php ton
thao tc trn cc TDL . Cc kiu d liu nh mng, mu tin, chui, ngn xp
(stacks), danh sch, con tr, tp hp v tp tin l cc CTDL.
4.3 S C T KIU CU TRC D LIU
4.3.1 S c t cc thuc tnh
Cc thuc tnh ch yu ca CTDL bao gm:
S lng phn t
S lng cc phn t ca mt CTDL cho bit kch thc ca CTDL, s lng ny c
th c nh hoc thay i tu loi CTDL.
Mt CTDL c gi l c kch thc c nh nu s lng cc phn t khng thay
i trong thi gian tn ti ca n.
V d cc kiu mng, mu tin l cc CTDL c kch thc c nh.
Mt CTDL c gi l c kch thc thay i nu s lng cc phn t thay i mt
cch ng trong thi gian tn ti ca n.
V d ngn xp, danh sch, tp hp, chui k t v tp tin l cc CTDL c kch thc
thay i. Cc php ton cho php thm hoc bt cc phn t ca cu trc lm thay i
kch thc ca cu trc.
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

31
Kiu ca mi mt phn t
Mi mt phn t ca CTDL c mt kiu d liu no , ta gi l kiu phn t. Kiu
phn t c th l mt kiu d liu s cp hoc mt CTDL. Cc phn t trong cng mt
CTDL c th c kiu phn t ging nhau hoc khc nhau.
Mt CTDL c gi l ng nht nu tt c cc phn t ca n u c cng mt
kiu.
V d mng, chui k t, tp hp v tp tin l cc CTDL ng nht .
Mt CTDL c gi l khng ng nht nu cc phn t ca n c kiu khc nhau.
V d mu tin l CTDL khng ng nht.
Tn dng cho cc phn t c la chn
la chn mt phn t ca CTDL cho mt x l no ngi ta thng s dng
mt tn. i vi cu trc mng, tn c th l mt ch s nguyn hoc mt dy ch s;
i vi mu tin, tn l mt tn trng. Mt s kiu cu trc d liu nh ngn xp v
tp tin cho php truy nhp n ch mt phn t c bit (phn t u tin hoc phn t
hin hnh).
S lng ln nht cc phn t
i vi CTDL c kch thc thay i nh chui k t hoc ngn xp, i khi ngi ta
quy nh thuc tnh kch thc ti a ca cu trc gii hn s lng cc phn t ca
cu trc.
T chc cu trc
T chc ph bin nht l mt dy tun t ca cc phn t. Vector (mng mt chiu),
mu tin, chui k t, ngn xp, danh sch v tp tin l cc CTDL c t chc kiu ny.
Mt s cu trc cn c m rng thnh dng "nhiu chiu" v d mng nhiu chiu,
mu tin m cc phn t ca n l cc mu tin, danh sch m cc phn t ca n l
danh sch.
4.3.2 Cc php ton trn cu trc d liu
Mt s cc php ton c th ca CTDL:
Php ton la chn phn t ca cu trc
Php ton la chn mt phn t l php ton truy nhp n mt phn t ca CTDL v
lm cho n c th c x l bi mt php ton khc.
C hai loi la chn:
La chn ngu nhin (hay cn gi l la chn trc tip) l s la chn mt phn t
ty ca cu trc d liu c truy nhp thng qua mt ci tn.
V d la chn mt phn t no ca mng, ta ch ra ch s ca phn t , la
chn mt phn t ca mu tin ta s dng tn ca phn t .
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

32
La chn tun t l s la chn trong phn t c la chn l mt phn t ng
sau cc phn t c la chn khc theo tun t ca vic x l hoc l la chn
mt phn t c bit no .
V d la chn tun t cc phn t trong mt tp tin hay la chn mt phn t trn
nh ca ngn xp.
Cc php ton thao tc trn ton b cu trc d liu
L cc php ton c th nhn cc CTDL lm cc i s v sn sinh ra kt qu l cc
CTDL mi. Chng hn php gn mt mu tin cho mt mu tin khc hoc php hp hai
tp hp.
Thm / bt cc phn t
L cc php ton cho php thm vo CTDL hoc loi b khi CTDL mt s phn t.
Cc php ton ny s lm thay i s lng cc phn t trong mt CTDL. Vic thm
vo hay loi b mt phn t thng phi ch nh mt v tr no .
To / hy CTDL
L cc php ton to ra hoc xa b mt CTDL.
4.4 S CI T CC CU TRC D LIU
4.4.1 Biu din b nh
S biu din b nh cho mt CTDL bao gm:
- B nh cho cc phn t ca cu trc.
- B m t lu tr mt s hoc tt c cc thuc tnh ca cu trc.
C hai phng php biu din b nh l:
Biu din tun t
Biu din tun t l s biu din, trong CTDL c lu tr nh mt khi cc nh
lin tip nhau, bt u bng b m t sau l cc phn t.
y l phng php c dng cho cc CTDL c kch thc c nh hoc c kch
thc thay i nhng ng nht. Chng hn c th dng biu din tun t biu din
cho mng, mu tin,
Biu din lin kt
Biu din lin kt l s biu din, trong CTDL c lu tr trong nhiu khi nh
ti cc v tr khc nhau trong b nh, mi khi lin kt vi khi khc thng qua mt
con tr gi l con tr lin kt.
Phng php ny thng c s dng cho cc CTDL c kch thc thay i. Chng
hn c th dng biu din lin kt biu din cho danh sch, ngn xp,


Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

33

B m t

Phn t
Phn t










Phn t


4.4.2 Ci t cc php ton trn cu trc d liu
Php ton la chn mt phn t l php ton c bn nht trong cc php ton trn
CTDL. Nh trn trnh by, c hai cch la chn l la chn ngu nhin v la chn
tun t v hai cch biu din b nh l biu din tun t v biu din lin kt. V vy
y chng ta s xt cch thc hin mi mt phng php la chn vi mi mt
phng php biu din b nh.
i vi biu din tun t
Nh trn trnh by, trong cch biu din tun t, mt khi nh lin tc s c
cp pht lu tr tan b CTDL. Trong , v tr u tin ca khi nh c gi l
a ch c s. Khong cch t a ch c s n v tr ca phn t cn la chn c
gi l di ca phn t.
Cch thc truy xut, c cho bi tn hoc ch s ca phn t (chng hn ch s ca
mt phn t ca mng), s xc nh cch tnh di ca phn t nh th no.
la chn ngu nhin mt phn t cn phi xc nh v tr thc ca phn t (tc l
a ch ca nh lu tr phn t ) theo cng thc:
V tr thc ca phn t = a ch c s + di ca phn t.
La chn tun t mt dy cc phn t ca cu trc c th theo cc bc:
- chn phn t u tin ta dng cch tnh a ch c s cng vi di nh ni
trn.
B m t
Phn t
Phn t
Phn t

Biu din tun t
Biu din lin kt
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

34
- i vi cc phn t tip theo trong dy, cng kch thc ca phn t hin hnh vi v
tr ca phn t hin hnh c v tr ca phn t k tip.
i vi biu din lin kt
Nh trn trnh by, cc khi nh trong biu din lin kt c b tr ri rc nhau,
khi ny ni vi khi kia bng con tr v lc u ch nm c con tr ti khi u
tin. Do vic i n cc khi lun phi xut pht t khi u tin.
la chn ngu nhin mt phn t trong cu trc lin kt cn phi duyt mt dy
cc khi, t khi u tin n khi cn la chn.
La chn tun t mt dy cc phn t c thc hin bng cch la chn phn t u
tin nh ni trn v sau t phn t hin hnh, duyt theo con tr n phn
t k tip.
4.5 VCT
4.5.1 nh ngha vct
Vct (cn gi l mng mt chiu) l mt CTDL bao gm mt s c nh cc phn t
c kiu ging nhau c t chc thnh mt dy tun t cc phn t.
Nh vy vct l mt CTDL c kch thc c nh v ng nht.
4.5.2 S c t v c php
c t thuc tnh ca vct
Cc thuc tnh ca mt vct l:
- S lng cc phn t, lun c ch r bng cch cho tp ch s. Tp ch s ny
thng thng c cho bi mt min con cc s nguyn, trong trng hp , s
lng cc phn t bng s nguyn cui cng - s nguyn u tin + 1. Mt cch
tng qut th tp ch s c th l kiu lit k no , trong trng hp ny, s lng
phn t bng s gi tr trong kiu lit k. Cng c nhng ngn ng ch nh r s
lng cc phn t nh ngn ng C chng hn.
- Kiu d liu ca mi mt phn t, thng c vit r trong khai bo.
- Ch s c s dng la chn mi mt phn t. Nu tp ch s c cho bi
mt min con ca tp cc s nguyn th s nguyn u tin ch nh phn t u tin
s nguyn th 2 ch nh phn t th 2 ...Nu tp ch s l mt lit k th gi tr u
tin trong lit k l ch s ca phn t u tin. Nu ngn ng ch nh r s lng cc
phn t th 0 l ch s ca phn t u tin.
Khai bo vct trong Pascal l ARRAY [<tp ch s>] OF <kiu phn t>.
V d VAR a: ARRAY[1..10] OF real;
Khai bo ny xc nh 1 vct a c 10 phn t l cc s real. Cc phn t ny c la
chn bi cc ch s t 1 n 10.
Min gi tr ca ch s khng nht thit bt u t 1, v d
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

35
Var b: ARRAY [-5..10] OF integer; Vi khai bo ny th b l mt vct c 16 phn t
(10 (-5) + 1 = 16). Cc phn t c la chn nh cc ch s t -5 n 10.
Min gi tr ca ch s khng nht thit l min con ca s nguyn, n c th l mt
lit k bt k (hoc 1 min con ca mt lit k). V d:
Type
Ngay = (Chu_nhat, Hai, Ba, Tu, Nam, Sau, Bay);
var
c : ARRAY [Ngay] OF Integer ;
Khai bo ny xc inh vct c c 7 phn t l cc s integer, cc phn t ca c c
la chn nh cc ch s t Chu_nhat n Bay.
Khai bo vct trong ngn ng C l <kiu phn t> <tn bin> [<s lng phn
t>].
V d int d[10];
Khai bo ny xc nh vct d c 10 phn t cc s int, cc phn t ny c la chn
nh cc ch s t 0 n 9.
c t cc php ton trn vct
Cc php ton trn vct bao gm:
Php ton la chn mt phn t ca vct l php ly ch s, c vit bng tn ca
vct theo sau l ch s ca phn t c la chn t trong cp du []. Nh vy php
la chn mt phn t ca vct l php la chn trc tip.
V d, vi cc khai bo trong cc v d thuc phn c t thuc tnh ni trn,
Cc phn t ca vct a c la chn bng cch vit a[1], a[2], , a[10].
Cc phn t ca vct b c la chn bng cch vit b[-5], b[-4], , b[10].
Cc phn t ca vct c c la chn bng cch vit c[Chu_nhat], c[Hai], , c[Bay].
Cc phn t ca vct d c la chn bng cch vit d[0], d[1], , d[9].
Ch s c th l mt hng hoc mt bin (ni chung l mt biu thc), v d a[i] hay
a[i+2]. Nh ch s l mt biu thc nn vic lp trnh tr nn n gin hn nhiu nh
tnh khi qut ca ch s.
V d in ra gi tr ca 10 phn t trong vct a, thay v ta phi vit 10 lnh in cc
phn t c th theo kiu writeln(a[1]); writeln(a[2]); writeln(a[3]); ta ch cn vit
mt lnh for i:=1 to 10 do writeln(a[i]);
Cc php ton khc trn vct bao gm cc php ton to v hy b vct, gn hai
vct cho nhau v cc php ton thc hin nh cc php ton s hc trn tng cp 2
vct c cng kch thc. Chng hn php cng 2 vct (cng cc phn t tng ng).
Ty thuc vo ngn ng m cc php ton ny c hoc khng c.
4.5.3 Ci t mt vct
Biu din b nh
Biu din b nh tun t c s dng biu din cho mt vct.
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

36
M hnh sau minh ha cho s biu din b nh ca vct A : ARRAY[LB..UB] OF
<kiu phn t>.

a ch c s Vct A Kiu d liu
LB Cn di ca tp ch s
B m t UB Cn trn ca tp ch s
Kiu phn t Kiu d liu ca phn t
E Kch thc mi phn t
A[LB]
A[LB+1]
B nh cho cc
phn t ca vct
...


A[UB]
Khi nh lu tr mt vct c hai phn: b m t v b nh dnh cho cc phn
t ca vct. Trong b m t lu tr kiu d liu ca cu trc (vct A), cn di ca
tp ch s (LB - Lower Bound), cn trn ca tp ch s (UB - Upper Bound), kiu d
liu ca phn t v kch thc mi phn t (E). B nh dnh cho cc phn t ca
vct lu tr lin tip cc phn t, t phn t u tin (A[LB]) cho n phn t cui
cng (A[UB]). Do cc phn t c cng mt kiu nn cc nh dnh cho cc phn t
c kch thc bng nahu.
a ch ca nh u tin trong khi gi l a ch c s.
Gii thut thc hin cc php ton
Php ton la chn mt phn t c thc hin bng cch tnh v tr ca phn t
cn la chn theo cng thc:
V tr ca phn t th i = + D + (i - LB) * E
Trong i l ch s ca phn t cn la chn, l a ch c s ca khi nh (a
ch word hoc byte u tin ca khi nh dnh cho vct) D l kch thc ca b m
t, LB l cn di ca tp ch s v E l kch thc ca mi mt i tng d liu
thnh phn (s word hoc byte cn thit lu tr mt phn t).
Nu ch s l mt gi tr ca kiu lit k ch khng phi s nguyn th hiu i-LB phi
c tnh ton mt cch thch hp (chng hn s dng hiu ca hai s th t tng
ng ca i v LB trong lit k).
Php gn mt vct cho mt vct khc c cng thuc tnh c thc hin bng cch
sao chp ni dung trong khi nh biu din vct th nht sang khi nh biu din
vct th hai.
Cc php ton trn ton b vct c thc hin bng cch s dng cc vng lp x l
tun t cc phn t ca vct.
4.6 MNG NHIU CHIU
Ma trn (mng hai chiu) c xem nh l mt vct ca cc vct. Mt mng 3 chiu
c xem nh l mt vct ca cc ma trn...
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

37
4.6.1 S c t v c php
c t thuc tnh
Mng nhiu chiu tng t nh vct nhng ch c mt thuc tnh khc vct l mi
mt chiu phi c mt tp ch s tng ng.
Chng hn khai bo cho mt mng hai chiu c th c vit di dng
ARRAY[LB1..UB1, LB2..UB2] OF <Kiu phn t>
Trong tp ch s 1 c cc gi tr t LB1 n UB1, tp ch s 2 c cc gi tr t LB2
n UB2.
Nh vy s lng cc phn t ca mng hai chiu s l (UB1-LB1+1)*(UB2-LB2+1)
V d s khai bo ca Pascal:
M= array [1..3, -1..2] of Integer;
S khai bo ny cho ta thy mng M c hai chiu, chiu th nht c xc nh bi
tp ch s 1..3 v chiu th hai c xc nh bi tp ch s -1..2. C th xem y l
mt ma trn c 3 dng v 4 ct, nh vy s c 12 phn t, mi phn t c th lu tr
mt s integer.
i vi cc mng c s chiu nhiu hn hai th cch lm cng tng t nh mng hai
chiu.
c t php ton
Php la chn mt phn t c thc hin bng cch ch ra tn mng v ch s ca
mi mt chiu.
Chng hn la chn mt phn t ca ma trn ta vit tn ma trn, theo sau l cp ch
s dng, ct phn cch nhau bi du phy v t trong cp du [], v d M[2,0].
Nh vy php la chn mt phn t ca mng nhiu chiu l php la chn trc tip.
4.6.2 S ci t
S biu din b nh
S biu din b nh i vi mng nhiu chiu tng t nh s biu din b nh i
vi vct. Ngha l cng s dng s biu din tun t v kh nh c chia lm
hai phn: b m t v b nh cho cc phn t. B m t ca mng ging b m t ca
vct ngoi tr mi mt chiu c mt cn di v cn trn ca tp ch s ca chiu .
Trong b nh dnh cho cc phn t ta cng lu tr lin tip cc phn t theo mt trt
t no .
Vi ma trn, v mt logic th ma trn l mt bng gm m dng v n ct, mi mt l
mt phn t, nhng b nh li ch gm cc lin tip nhau, v th ta phi lu tr ma
trn theo trt t dng hoc theo trt t ct.
Lu tr theo trt t dng c ngha l trong b nh dnh cho cc phn t ta lu tr
tun t cc phn t trong dng th nht, tip n l cc phn t trong dng th hai...
cho n dng cui cng.
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

38
Lu tr theo trt t ct ngha l trong b nh dnh cho cc phn t ta lu tr tun t
cc phn t trong ct th nht, tip n l cc phn t trong ct th hai... cho n ct
cui cng.
Chng hn vi khai bo M: ARRAY [1..3,-1..2] OF Integer; ta c hnh nh biu din
trong b nh nh cc hnh sau:
Cu trc logic ca ma trn M Lu tr ma trn M theo trt t dng
M[1,-1] M[1,0] M[1,1] M[1,2] Ma trn M Kiu d liu
M[2,-1] M[2,0] M[2,1] M[2,2] LB1 (= 1) Cn di ca tp ch s th nht
M[3,-1] M[3,0] M[3,1] M[3,2] B m t UB1 (= 3) Cn trn ca tp ch s th nht
LB2 (= -1) Cn di ca tp ch s th hai
UB2 (= 2) Cn trn ca tp ch s th hai
M[1,-1]
M[1,0] Dng th nht
B nh cho M[1,1]
Cc phn t M[1,2]
M[2,-1] Dng th hai
M[2,0]
...

...........
M[3,2]

Cu trc logic ca ma trn M Lu tr ma trn M theo trt t ct
M[1,-1] M[1,0] M[1,1] M[1,2] Ma trn M Kiu d liu
M[2,-1] M[2,0] M[2,1] M[2,2] LB1 (= 1) Cn di ca tp ch s th nht
M[3,-1] M[3,0] M[3,1] M[3,2] B m t UB1 (= 3) Cn trn ca tp ch s th nht
LB2 (= -1) Cn di ca tp ch s th hai
UB2 (= 2) Cn trn ca tp ch s th hai
M[1,-1]
M[2,-1] Ct th nht
B nh cho M[3,-1]
Cc phn t M[1,0]
M[2,0] Ct th hai
M[3,0]
...

...........
M[3,2]

Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

39
Gii thut thc hin php ton
thc hin php ton la chn phn t, ta s dng cng thc tnh v tr ca phn t
trong b nh.
Vi cch lu tr theo trt t dng ca ma trn M, tnh v tr ca M[i,j], u tin ta
xc nh s dng cn nhy qua: (i-LB1) nhn vi di ca mi dng xc nh v
tr bt u ca dng th i v sau tm v tr th J trong dng ny nh i vi 1 vct.
Nh vy, v tr ca phn t M[i,j] c tnh bi:
V tr ca M [i,j] = + D + (i-LB1) x S + (j-LB2) x E
Trong : l a ch c s.
D l ln ca b m t.
S l ln ca mi dng = (UB2 - LB2 +1) x E.
LB1 l cn di ca ch s th nht.
LB2,UB2 tng ng l cn di v cn trn ca ch s th hai.
Tng t ta c th thnh lp cng thc tnh v tr ca phn t M[i,j] trong trng hp
ma trn M c t chc lu tr theo trt t ct.
Tng qut ha cng thc ny cho mng nhiu chiu hn l mt iu n gin.
4.7 MU TIN
4.7.1 nh ngha mu tin
Mu tin l mt CTDL bao gm mt s c nh cc phn t c kiu khc nhau.
Nh vy, mu tin l mt CTDL c kch thc c nh v khng ng nht. Cc
phn t ca mu tin c gi l cc trng.
4.7.2 S c t v c php
c t thuc tnh
Cc thuc tnh ca mt mu tin phi c ch r trong php khai bo, chng bao gm:
1. S lng cc phn t.
2. Kiu d liu ca cc phn t (Cc phn t c th c kiu khc nhau).
3. Mi phn t c cho bi tn phn t (tn trng).
C php khai bo mu tin ca Pascal:
Nhan_vien: RECORD
Ma: Integer; {M nhn vin}
Ho_ten: String[25];
Tuoi: Integer; {Tui}
Luong: Real; {H s lng}
END
Vic khai bo ny c t mt mu tin c 4 phn t ca cc kiu Integer, Real v String.
Mi phn t c mt tn: Ma, Ho_ten, Tuoi v Luong. chn mt phn t ca mu
tin ta s dng tn ca phn t (trng) , chng hn trong Pascal, Nhan_vien.Luong
l truy xut ti phn t Luong ca mu tin Nhan_vien.
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

40
22901
Ma

Nguyen Van A


Ho_ten
20
Tuoi
2.18
Luong
c t php ton
La chn mt phn t l php ton c bn cu mu tin. Php ton ny c thc hin
bng cch ch ra tn trc kin ca phn t.
V d la chn phn t th 4 ca mu tin Nhan_vien ta vit: Nhan_vien.Luong.
Php ton la chn mt phn t ca mu tin l s la chn trc tip.
Mc d u l la chn trc tip, nhng c khc bit so vi cch la chn phn t ca
vct. im khc bit y l: i vi vct, ta c th s dng gi tr ca mt biu
thc lm ch s, chng hn VECTO[i+1], cn i vi mu tin th bt buc phi ch r
tn trc kin, ch khng th l biu thc.
Ngoi php ton la chn phn t, php gn cc mu tin c cng cu trc l mt php
ton ph bin c cc ngn ng a vo. Chng hn Nhan_vien := InputRec trong
InputRec c cc thuc tnh ging ht Nhan_vien.
4.7.3 S ci t
Biu din b nh
Biu din b nh tun t c s dng lu tr mt mu tin. Mt khi lin tc cc
nh c dng lu tr cho mt mu tin, trong khi , mi biu din cho mt
trng. C th cng cn s dng b m t ring cho tng trng lu tr thuc tnh
ca cc trng . Do cc trng c kiu khc nhau nn nh dnh cho chng cng
c kch thc khc nhau.
Gii thut thc hin php ton
Vic la chn phn t c thc hin mt cch d dng v tn trng c bit n
thng qua vic dch ch khng phi c tnh ton thng qua vic thc hin nh i
vi vct. Vic khai bo mu tin cn cho php xc nh kch thc v v tr ca n
trong nh thng qua vic dch. Kt qu l di ca phn t bt k c th c tnh
thng qua vic dch.
Chng hn vi mu tin Nhan_vien, cc phn t ca n c lu tr trong b nh nh
sau:
V tr ca mt phn t bt k c tnh mt cch d
dng. Chng hn
V tr ca Tuoi = + Kch thc ca Ma + Kch
thc ca Ho_ten.
Trong l a ch c s ca khi nh biu din
cho Nhan_vien.
Php ton gn ton b mt mu tin cho mt mu tin
khc c cng cu trc c thc hin mt cch n
gin l copy ni dung khi nh biu din cho mu
tin th nht sang khi nh biu din cho mu tin th 2.

Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

41
4.8 MU TIN C CU TRC THAY I
4.8.1 c t v khai bo
Trc ht ta xt v d sau:
Gi s trong mt x nghip c hai loi cng nhn l cng nhn trong bin ch v cng
nhn hp ng. i vi cng nhn trong bin ch th lng s c tnh bng s ngy
cng * mc lng ti thiu * h s /20, nhng ngy ngh bo him x hi, h c tr
lng bo him x hi. Ngc li cng nhn hp ng ch c tr lng bng s
ngy cng * n gi cng nht v h khng c tr lng bo him x hi.
Ta thy, hai loi cng nhn ny c nhng thng tin chung l h tn, s ngy cng, tin
lng v loi cng nhn (bin ch hay hp ng). Mi loi cng nhn li c cc thng
tin ring. i vi cng nhn trong bin ch, ta cn thm cc thng tin: h s lng v
s ngy ngh bo him x hi. i vi cng nhn hp ng, ta cn thm thng tin v
n gi cng nht.
Nu s dng mu tin bnh thng lu tr thng tin v hai loi cng nhn ny, ta cn
tt c 7 trng lu tr 4 thng tin chung v 3 thng tin ring. Khi nh cn cp
pht phi lu tr c 7 trng nhng vic s dng khi nh li b d, do i vi
cng nhn bin ch ta ch cn 6 trng, i vi cng nhn hp ng ta ch cn 5
trng!
c t thuc tnh
gii quyt vn lng ph b nh, trong mt s ngn ng lp trnh c mt loi
CTDL gi l mu tin c cu trc thay i.
Mi mt cu trc s c mt s trng ging nhau cho mi loi mu tin v mt s
trng khc nhau cho tng loi mu tin. Cc trng ging nhau gi l phn chung hay
phn tnh, cc trng khc nhau ny gi l phn ng hay phn thay i ca mu tin.
Chng hn i vi bi ton nu trn th mi cng nhn c lu trong mt mu tin, c
cc trng thuc phn chung l Ho_Ten, Ngay_Cong, Tien_Luong. Ngoi ra ty
thuc vo loi cng nhn l bin ch hay hp ng m c cc trng ring. i vi
cng nhn trong bin ch ta cn thm cc trng He_So v Nghi_Bhxh lu tr h
s lng v s ngy ngh bo him x hi. i vi cng nhn hp ng ta ch cn
thm mt trng l Gia_Cong_Nhat lu tr gi cng nht cho mi ngi.
Khai bo trong Pascal nh sau:
TYPE
loai_cong_nhan = (bien_che,hop_dong);
VAR
Cong_Nhan : RECORD
ho_ten: String[20];
ngay_cong: Real;
luong: Real;
CASE loai: loai_cong_nhan OF
bien_che:
(he_so: Real;
nghi_bhxh:Real);
hop_dong:
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

42
(gia_cong_nhat: Real);
END;
Khai bo trn nh ngha mt mu tin c cu trc thay i. Mu tin lun lun c cc
trng Ho_Ten, Ngay_Cong, Luong v Loai. Khi gi tr ca Loai = "bien_che" th
mu tin cn c cc trng He_So v Nghi_Bhxh, trong khi nu gi tr ca Loai =
"hop_dong" th n li c trng Gia_Cong_Nhat.
c t php ton
Php ton la chn cc phn t ca mu tin c cu trc thay i cng ging nh mu
tin bnh thng. Chng hn ta c th s dng Cong_Nhan.Luong, Cong_Nhan.He_So
hay Cong_Nhan.Gia_Cong_Nhat. Tuy nhin cc trng thuc phn ng ch tn ti
trong mt thi im nht nh do khi chng ta truy xut ti mt tn trng m n
khng tn ti th s b li. Trng Loai trong v d trn l rt quan trng v n ch ra
phn ng no ca mu tin c s dng trong qu trnh thc hin chng trnh.
Ngi c c th tham kho v d tng i hon chnh vit bng Pascal.
uses crt;
Const luong_toi_thieu = 290000;
Type
Loai_cong_nhan = (bien_che, hop_dong);
Cong_nhan = Record
ho_ten : String[20];
Ngay_cong : real;
luong : real;
Case loai: Loai_cong_nhan of
bien_che: (He_so, so_ngay_nghi_BHXH : real);
hop_dong: (don_gia: real);
end;
danh_sach_cong_nhan = Array[1..10] of cong_nhan;
Var
n : integer; ho_so : danh_sach_cong_nhan;

{Nhp danh sch cng nhn, v cc thng tin lin quan n lao ng}
Procedure Nhap (var ho_so: danh_sach_cong_nhan; var n: integer);
Var
i: integer;
loaicn : char;
Begin
write('So cong nhan: '); readln(n);
For i:=1 to n do with ho_so[i] do begin
Writeln('Cong nhan ',i);
Write('Ho va Ten: '); readln(ho_ten);
Write('Loai cong nhan: A la bien che, B la hop dong ');
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

43
readln(loaicn);
If Upcase(loaicn) ='A' then loai := bien_che else loai := hop_dong;
write('So ngay cong: '); readln(ngay_cong);
if loai = bien_che then begin
write('He so: '); readln(he_so);
write('So ngay nghi bao hiem: '); readln(so_ngay_nghi_BHXH);
end else begin
write('Don gia hop dong: '); readln(don_gia);
end;
end; { with Ho_so[i] }
end; {nhap}
{Tnh lng cho tng cng nhn, theo cng thc ca tng loi cng nhn}
Procedure Tinh_luong (var ho_so: danh_sach_cong_nhan; n: integer);
Var
i : integer; luong_binh_quan: real;
begin
for i:=1 to n do with ho_so[i] do begin
if loai = bien_che then begin {tnh lng ca cng nhn bin ch}
luong_binh_quan := he_so * luong_toi_thieu/20;
luong := ngay_cong * luong_binh_quan +
so_ngay_nghi_BHXH * luong_binh_quan*0.80;
end else {tnh lng ca cng nhn hp ng}
luong := ngay_cong * don_gia;
end; { with Ho_so[i] }
end; {Tinh_luong }

Procedure In_luong (ho_so: danh_sach_cong_nhan; n: integer);
Var
i : integer;
begin
for i:=1 to n do with ho_so[i] do begin
Write(ho_ten:25);
If loai = bien_che then write('Bien che':10)
else write('Hop dong':10);
write(ngay_cong:5:1);
if loai = bien_che then begin
write(he_so:5:1);
write(so_ngay_nghi_BHXH:5:1);
end else
write(don_gia:10:2);
writeln(luong:10:2);
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

44
end; { with Ho_so[i] }
end; { In_luong }
begin {Chuong trinh chinh}
nhap(ho_so,n);
tinh_luong(ho_so,n);
in_luong(ho_so,n);
readln;
end.
4.8.2 Ci t mu tin c cu trc thay i
Biu din b nh
Biu din tun t s c s dng biu din cho mt mu tin c cu trc thay i.
Thng qua vic dch, tng b nh cn lu cc phn t ca mi mt phn ng c
xc nh v b nh c cp pht lu tr mu tin vi phn ng ln nht. Chng
hn vi mu tin cong_nhan ta c m hnh lu tr nh trong hnh v sau:

Ho_ten




Ho_ten
Ngay_cong

Ngay_cong
Luong

Luong
Loai Loai
He_so

Gia_cong_nhat
Nghi_bhxh

Khng s dng
Cng nhn bin ch Cng nhn hp ng

V khi nh ln lu tr phn ng ln nht nn c ch cho bt k mt
phn ng no nhng i vi nhng phn ng nh hn s khng s dng ti mt s
nh c cp pht.
Vi mu tin c cu trc thay i, r rng ta tit kim c mt s nh so vi mu
tin bnh thng.
Gii thut thc hin php ton
La chn mt phn t ca phn ng cng ging nh la chn mt phn t bnh
thng, qua vic dch th di ca phn t c la chn s c tnh ton v qua
vic thc hin th di c cng vo a ch c s ca khi xc nh v tr ca
phn t.
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

45
4.9 CHUI K T:
Chui k t l cu trc d liu bao gm mt dy cc k t.
Nh vy, kiu chui k t l mt kiu ng nht, cn v kch thc th c th c nh
hoc thay i ty theo ngn ng. Kiu d liu chui k t l mt kiu quan trng m
hu ht cc ngn ng u c.
4.9.1 c t v c php:
c t thuc tnh
Ty ngn ng, c th c 3 cch c t i vi kiu chui k t:
a/ di c khai bo c nh: Chui k t c th c di (kch thc) c nh
c khai bo trong chng trnh. Mi gi tr c gn cho i tng d liu chui
u c cng di nh vy. Khi mt chui thc c gn cho i tng d liu m
di ca chui thc khc di c khai bo th s c s iu chnh di ca chui
thc bng cch ct bt cc k t d hoc thm vo cc k t trng c c mt
chui c di ng nh khai bo.
y l k thut c bn c dng trong COBOL trong t kha PICTURE c
dng xc nh s lng k t, v d: Last_Name PICTURE X(20) khai bo bin
chui k t Last_Name cha mt chui 20 k t.
Trong Pascal (chun) kiu d liu chui k t khng c. Thay vo kiu chui k t
c biu din nh l mt vct ca cc k t Last_Name: PACKED ARRAY [1..20]
OF Char.
b/ di thay i trong mt gii hn c khai bo: Chui k t c th c
di cc i c khai bo trc trong chng trnh nhng gi tr thc ca i tng
d liu c lu tr c th l chui c di ngn hn, thm ch c th l chui rng.
Trong qu trnh thc hin di ca gi tr chui ca i tng d liu c th thay
i, n cng s b ct nu vt gii hn khai bo.
y l k thut c dng trong PL/1 (v c trong Turbo Pascal).
c/ di khng gii hn: Chui k t c th c di bt k v di c th thay
i mt cch ng thng qua qu trnh thc hin.
y l k thut c dng trong SNOBOL4.
Trong ba phng php ni trn th hai phng php u cho php cp pht b nh cho
mi mt i tng d liu chui c xc nh ti thi gian dch. i vi phng
php th ba th s dng cp pht b nh ng ti thi gian thc hin. Cc phng
php khc nhau cng i hi cc php ton khc nhau trn chui. Sau y l mt s
php ton ch yu.
c t php ton
Trn chui k t, thng c cc php ton sau:
a/ Php ghp ni (concatennation)
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

46
Ghp l php ton nhp hai chui k t to ra mt chui mi v d nu "//" l k hiu
ca php ghp th "BLOCK"//"HEAD" cho ra "BLOCKHEAD". Turbo Pascal s dng
ton t + cho php ton ghp chui.
b/ Cc php ton quan h trn chui
Cc php ton quan h thng thng nh bng, nh hn, ln hn... trn kiu k t c
th c m rng cho chui k t. Tp hp cc k t c bn lun lun c mt th t.
M rng th t ny cho chui k t thnh th t alphabe trong chui A nh hn
chui B nu k t u tin ca A nh hn k t u tin ca B hoc hai k t u tin
tng ng ca chng bng nhau v k t th hai ca A nh hn k t th hai ca B...
Nu chui A ngn hn chui B th A c m rng bng cch thm vo cc k t
trng cho di bng B so snh.
c/ Chn chui con dng ch s ch v tr ca k t
Nhiu ngn ng cung cp mt php ton chn chui con ca mt chui bng cch cho
v tr ca k t u tin v k t cui cng ca n (hoc v tr ca k t u tin v
chiu di ca chui con). V d trong FORTRAN, lnh NEXT = STR(6:10) l gn 5
k t, bt u t v tr th 6 n v tr th 10 ca chui STR cho bin chui NEXT.
d/ nh dng nhp - xut
nh dng nhp xut l php ton dng thay i dng nhp vo hoc xut ra ca cc
chui k t. Nhp xut c nh dng l nt ni bt ca FORTRAN v PL/1.
e/ Chn chui con dng so mu
Thng thng ngi ta khng bit v tr ca mt chui con cn chn trong mt chui
ln hn nhng quan h ca n vi mt chui con khc th c th bit. V d chui cc
ch s sau du chm thp phn hay chui ng sau mt khong trng. Php so mu c
mt i s th nht xc nh dng ca chui con cn chn (chng hn di ca
n). i s th hai ca php ton so mu l chui k t dng tm trong chui
(chng hn du chm thp phn). Nh vy kt qu ca php ton so mu l chn c
mt chui con bt u t sau du chm thp phn v c di cho.
4.9.2 Ci t
Biu din b nh
Mi mt phng php c t chui c mt cch biu din b nh tng ng.
i vi chui c di c khai bo c nh th dng vct ca cc k t. V d
chui c khai bo c di 8 v c dng lu tr chui EINSTEIN (cng c 8
k t):

E I N S T E I N

i vi chui c di thay i trong mt gii hn c khai bo th vn dng
vct ca cc k t, trong s dng hai lm b m t cha gi tr th hin di
ln nht c khai bo v di hin hnh ca chui. V d chui c khai bo
c di 12 v c dng lu tr chui EINSTEIN (c 8 k t):
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

47

12 8 E I N S T E I N
di khai
bo
di
thc
Cc d khng
s dng
i vi chui c di khng gii hn th s dng biu din b nh lin kt vi b
m t cha di hin ti ca chui.

8 E I N
S
T E I N #

di thc ca chui
Gii thut thc hin cc php ton
Thng thng phn cng h tr cho vic biu din chui c di c nh nhng i
vi cc biu din khc cho chui th phi c m phng bi phn mm. Cc php
ton ghp, chn chui con v so mu phi m phng bi phn mm.
4.10 CU TRC D LIU C KCH THC THAY I
CTDL c kch thc thay i l mt cu trc m trong s lng cc phn t c th
thay i mt cch ng trong qu trnh thc hin chng trnh.
Mt s kiu ch yu ca cu trc d liu c kch thc thay i l:
4.10.1 Danh sch v cu trc danh sch
Danh sch l mt CTDL tuyn tnh vi s lng thay i ca cc phn t c kiu
ging nhau.
Nu cc phn t ca mt danh sch li l mt danh sch th c gi l cu trc danh
sch (list structures).
Cc phn t c th c thm vo hoc xa khi mt danh sch. Cc phn t c th
c la chn t mt danh sch nhng v v tr ca phn t trong danh sch c th b
thay i do php thm v xa cc phn t nn khng th s dng ch s xc nh
phn t. Thay vo , vic la chn da trn c s ca mi quan h ca v tr ca phn
t vi danh sch chng hn phn t u, hai, ba, k hc cui. Biu din b nh lin kt
cho danh sch v cu trc danh sch c dng mt cch ph bin ph hp vi s
thay i s lng cc phn t.
4.10.2 Ngn xp v hng i
Ngn xp l mt danh sch m trong vic la chn, thm, xa phn t c thc
hin 1 u ca danh sch.
Do vic thm, xa phn t ch c thc hin mt u ca ngn xp, nn phn t
c a vo sau, s c ly ra trc. Do vy ngn xp cn c gi l cu trc d
liu kiu LIFO (Last In, First Out).
Hng i l mt danh sch m trong vic la chn, v xa phn t c thc hin
mt u cn vic thm phn t c thc hin u khc ca danh sch.
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

48
Do vic xa phn t c thc hin mt u (u ca hng) cn vic thm phn t
c thc hin cui hng, nn phn t c a vo trc, s c ly ra trc.
Do vy hng i cn c gi l cu trc d liu kiu FIFO (First In, First Out).
C hai phng php biu din tun t v lin kt u c dng cho ngn xp v hng
i.
4.11 CON TR
4.11.1 Cp pht tnh, cp pht ng v con tr
Cp pht b nh (gi tt l cp pht) l s dnh ring cc nh ca b nh cho
chng trnh s dng.
Thng thng cc nh c cp pht lu tr gi tr d liu ca bin. C hai
phng php cp pht l cp pht tnh v cp pht ng.
Cp pht tnh l s cp pht nh cho TDL c thc hin trong qu trnh dch.
Trong khi bin dch, thng qua s khai bo bin, b dch xc nh c kiu d liu
ca TDL nn s dnh sn mt khi nh ln lu tr TDL ca kiu ny.
Ngi lp trnh s dng nh c cp pht thng qua tn bin.
Khi khi chng trnh, ni khai bo bin kt thc th nh c cp pht s c
t ng gii phng.
u im
u im ca cp pht tnh l ngi lp trnh d s dng, c th l ngi lp trnh ch
cn khai bo bin, chng trnh dch s t ng cp pht v sau t ng gii phng.
Nhc im
Nhc im ca cp pht tnh l vic s dng b nh khng ti u, c th l c th
cp pht nhiu nh nhng s dng khng ht hoc cp pht thiu.
Cp pht ng l s cp pht trong khi thc hin chng trnh.
Ngi lp trnh phi vit lnh cp pht trong chng trnh, khi thc hin lnh ny th
b nh mi c cp pht.
S dng cp pht ng, ngi lp trnh c th ra lnh gii phng thu hi nh.
c th cp pht ng, ta cn c mt bin con tr hay cn gi l bin kiu tham
chiu. Bin con tr l mt TDL s cp cha a ch ca khi nh c cp pht.
Ngi lp trnh s dng nh c cp pht thng qua bin con tr.
u im
u im ni bt ca cp pht ng l s dng b nh mt cch ti u.
Nhc im
Nhc im ca cp pht ng l s lm tn, c th c nhiu tn bin con tr cng
tham chiu n mt nh v do vy lm gim tin cy ca chng trnh. Ngoi ra
cng gp kh kn khi s dng cp pht ng.
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

49
4.11.2 S c t
c t thuc tnh
C hai loi con tr khc nhau:
Con tr ch c th tham chiu ti cc TDL cng kiu
y l phng php c dng trong Pascal v Ada.
V d trong Pascal:
Var p: ^integer ch ra rng p l mt bin con tr cha a ch ca nh lu tr c
mt s integer.
Var q: ^VECT ch ra rng q l mt bin con tr cha a ch ca khi nh ca TDL
thuc kiu vct VECT no .
Con tr c th tham chiu ti cc TDL khc kiu nhau
y l cch c dng trong cc ngn ng nh SNOBOL4, ni m i tng d liu
mang b m t kiu trong qu trnh thc hin v php kim tra kiu ng c s
dng.
c t php ton
Cc php ton bao gm:
Php ton cp pht nh ng: Php ton ny dng cp pht nh cho i tng
d liu mi v tr a ch ca nh v trong bin con tr. y l php ton quan
trng nht ca kiu con tr. Php ton ny c hai im khc bit vi vic to ra i
tng d liu tnh (bng cch khai bo) l: i tng d liu c to ra khng cn c
tn v n c truy xut thng qua con tr v i tng d liu c th c to ra mt
cch ng trong qu trnh thc hin chng trnh. Trong Pascal v Ada th php ton
ny c tn l NEW. V d NEW(p).
Php ton truy xut nh c cp pht ng: truy xut n gi tr d liu lu
trong khi nh cp pht ng ta phi s dng a ch ca khi nh thng qua tn
con tr (v khi nh ny khng c tn). V d q^[5] l phn t th 5 ca vct Vect
c tr bi q.
Php ton thu hi nh c cp pht ng: Php ton ny cho php gii phng
nh cp pht. Trong Pascal, dng php ton DISPOSE.
V d sau trong Pascal minh ho tng hp cc iu ni trn:
Type
Vect = ARRAY[1..10] of Integer;
{Lc ny b nh cho Vect cha c cp pht}
VAR
p: ^Vect;
{Khai bo p l mt bin con tr cha a ch ca khi
nh lu tr TDL thuc kiu vct Vect. Khi dch n y
th nh cho p s c cp pht}
Begin
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

50
NEW(p);
{Cp pht nh cho vct v tr a ch ca nh ny cho
bin con tr p (hay cn ni p tr ti khi nh ny)}
p^[5] := 20; {Truy xut n phn t th 5 ca vct}
writeln(p^[5]);
Dispose(p); {Gii phng nh cp cho vct}
End.
4.11.3 S ci t
C hai phng php biu din b nh c s dng biu din cho mt gi tr con
tr:
a ch tuyt i
Gi tr con tr l a ch nh thc ca khi nh ca TDL.
Phng php ny rt hiu qu, bi v gi tr con tr t n quy nh s truy xut trc
tip ti i tng d liu bng cch dng php ton truy xut b nh ca phn cng.
a ch tng i
y l phng php cp pht mt vng nh rng vi a ch c s ca n. Gi tr con
tr l di ca TDL. a ch ca TDL c tnh bng cch ly a ch c s +
di ca TDL (tc l gi tr ca con tr).
Phng php ny thun tin cho vic qun l b nh nhng truy xut n TDL chm
v phi tnh a ch ca khi nh biu din cho TDL.
4.12 TP HP
4.12.1 c t
c t thuc tnh
Tp hp l mt cu trc d liu ng nht v c kch thc thay i.
Trong mt tp hp ngi ta khng quan tm n th t ca cc phn t; gi tr cc
phn t khc nhau.
c t php ton
Cc php ton c bn trn tp hp l:
1/ Kim tra s tn ti ca mt phn t
Php ton ny dng xc nh xem mt gi tr X no c phi l mt phn t ca
tp hp S hay khng.
2/ Thm v bt cc phn t cho tp hp
Thm gi tr X vo trong tp S, vi iu kin n cha l mt phn t ca tp hp. Xa
mt gi tr d liu X ca tp S nu n l mt phn t ca S. Hai php ton ny s lm
thay kch thc ca tp hp.
3/ Php hp, giao v hiu ca 2 tp hp
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

51
y l cc php ton c nh ngha tng t nh trong ton hc.
4.12.2 Ci t
ci t mt tp hp, ta c th s dng mt trong hai phng php sau:
Vct bit
Biu din b nh
Tp hp c biu din bi mt chui cc bit. Cch tip cn ny ph hp cho mt
khng gian nh. Chng hn ta c mt khng gian gm n phn t c nh s th t
e
1
, e
2
, ... e
n
. Mt tp hp cc phn t c chn t khng gian ny c biu din bi
mt vct c n bit, trong nu bit th i c gi tr 1 th phn t e
i
thuc vo tp hp,
ngc li bit th i c gi tr 0 th e
i
khng thuc tp hp.
Gii thut thc hin cc php ton
Vi cch biu din ny, vic thm mt phn t vo trong tp hp c thc hin bng
cch cho bit tng ng gi tr bng 1. Vic xa mt phn t trong tp hp c thc
hin bng cch cho bit tng ng gi tr bng 0. Php kim tra mt phn t c thuc
tp hp hay khng c thc hin bng cch kim tra bit tng ng c gi tr l 1 hay
0. Php hp ca hai tp hp tng ng vi php ton logic OR ca hai vct bit. Php
giao ca hai tp hp tng ng vi php ton logic AND ca hai vct bit. Hiu ca
hai tp hp tng ng vi php ton logic AND ca vct bit th nht vi phn b
ca vct bit th hai. Cc php ton logic trn cc vct bit u c h tr bi phn
cng.
V d Ta c mt khng gian bao gm 5 phn t 1,2,3,4,5. Khi
Tp hp A = {1,2,4,5} c biu din bi vct (1,1,0,1,1)
Tp hp B = {2,3,4} c biu din bi vct (0,1,1,1,0)
Do AU B s l tp {1,2,3,4,5} bi v (1,1,0,1,1) OR (0,1,1,1,0) = (1,1,1,1,1)
AI B s l tp hp {2,4} bi v (1,1,0,1,1) AND (0,1,1,1,0) = (0,1,0,1,0)
A\B s l tp hp {1,5} bi v phn b ca (0,1,1,1,0) l (1,0,0,0,1) v
(1,1,0,1,1) AND (1,0,0,0,1) = (1,0,0,0,1)
u im
D dng ci t cc php ton trn tp hp vi tc thc hin nhanh nh s dng cc
php ton ca phn cng.
Nhc im
Khng th biu din cho tp hp m cc phn t ca n c th ly t mt khng gian
ln, c s lng cc phn t bt k.
Bng bm
Biu din b nh
Phng php ny thch hp cho cc khng gian ln. Theo mi tp hp c biu
din bi mt bng bm (bng bm m). Mi phn t ca tp hp c lu tr trong
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

52
cc l (bucket) ca bng bm nh vo hm bm (mi l l mt danh sch lin kt, mi
phn t ca danh sch cha mt phn t ca tp hp).
Gii thut thc hin cc php ton
Php ton kim tra s tn ti ca mt phn t trong tp hp c thc hin bng cch
s dng php tm kim mt phn t trong bng bm.
Cc php ton thm v bt mt phn t ca tp hp c thc hin bng cch s dng
cc php ton tng ng l xen v xo mt phn t ca bng bm.
Cc php ton hp, giao v hiu ca hai tp hp i hi phi c mt s ci t cng
phu hn.
u im
C th biu din cho tp hp bt k, khng gii hn v kch thc.Cc php ton kim
tra mt phn t thuc tp hp, thm v bt mt phn t thc hin d dng v kh hiu
qu.
Nhc im
Kh khn trong vic ci t cc php ton hp, giao v hiu ca hai tp hp.
4.13 TP TIN
Tp tin l mt CTDL c 2 tnh cht c bit.
1/ Lu tr trong b nh ngoi nh a hay bng t do c th ln hn hu ht cc
CTDL khc.
2/ Thi gian tn ti ca n lu di.
Tp tin tun t l mt kiu ph bin nht ca tp tin nhng nhiu ngn ng cn cung
cp tp tin truy xut trc tip v tp tin tun t c ch mc.
4.13.1 Tp tin tun t
S c t
Tp tin tun t l mt CTDL bao gm mt dy tuyn tnh cc phn t c cng kiu.
di ca tp tin l khng gii hn. Kiu phn t c th l kiu s cp hoc kiu cu
trc c kch thc c nh nh mng hoc mu tin. Kiu cu trc c kch tc thay i
thng thng khng th l phn t ca tp tin (do khng c tp tin ca tp tin hay
tp tin ca ngn xp).
Mt cch ph bin, tp tin c th c truy nhp theo mt trong hai mode: READ
hoc WRITE. Trong c hai mode ny u c mt con tr tp tin (file position pointer)
dng xc nh v tr ca phn t no hoc sau phn t cui cng. Trong mode
WRITE, con tr tp tin lun lun ch vo sau phn t cui cng v php ton duy nht
c th l ghi mt phn t mi vo v tr . Trong mode READ, con tr tp tin c th
ch vo bt k v tr no trong tp tin v php ton duy nht l c phn t . Trong
c hai mode, php ton READ hoc WRITE u di chuyn con tr tp tin n phn t
k tip. Nu con tr tp tin ch ti sau phn t cui cng ca tp tin th tp tin c gi
l c ch ti cui tp tin (end-of-file).
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

53
Cc php ton ch yu i vi tp tin tun t l:
1/ OPEN
Thng thng mt tp tin phi c m trc khi s dng. Php ton OPEN ch ra tn
ca tp tin v mode truy xut tp tin (READ hoc WRITE). Nu mode l READ th
tp tin phi chc chn l tn ti. H diu hnh cung cp c tnh ca tp tin, cp
pht nh cn thit cho vng nh m v t con tr tp tin vo phn t u tin. Nu
mode l WRITE th h iu hnh to mt tp tin rng, nu tp tin tn ti th xa tt
c cc phn t ca tp tin n rng, con tr tp tin ch vo v tr u tp tin rng.
V d trong Pascal th tc RESET m mt tp tin READ v th tc REWRITE m
mt tp tin WRITE.
2/ READ
Php ton READ chuyn ni dung ca phn t hin hnh ca tp tin (c ch nh
bi con tr tp tin) vo bin c ch nh trong chng trnh.
3/ WRITE
Php ton WRITE to ra mt phn t mi ca tp tin ti v tr hin hnh v chuyn ni
dung ca bin chng trnh c ch nh vo phn t mi.
4/ Kim tra cui tp tin
L php ton xc nh xem v tr ca con tr tp tin c nm sau phn t cui cng ca
tp tin hay khng.
5/ CLOSE
Khi vic x l tp tin hon tt th n phi c ng li. Thng thng tp tin c
ng mt cch t ng khi chng trnh kt thc. Tuy nhin nu mun thay i mode
truy nhp tp tin t WRITE sang READ hoc ngc li th tp tin phi c ng mt
cch tng minh bng php ton CLOSE v sau m li cho mode mi.
Php ci t
Trong hu ht cc h my tnh, th h iu hnh chu trch nhim ch yu v vic ci
t tp tin bi v tp tin c to ra v s dng bi nhiu ngn ng lp trnh khc
nhau. Ngn ng lp trnh ch lm mt vic l cung cp nhng cu trc d liu cn thit
giao din vi h iu hnh.
Cc php ton trn tp tin c ci t mt cch ch yu bng cch gi cc php ton
ca h iu hnh.
Khi chng trnh m mt tp tin, th b nh lu tr mt bng thng tin v tp tin (FIT)
(File Information Table) v mt b nh m (buffer) c cung cp. Php ton OPEN
ca h diu hnh s lu tr thng tin v v tr v cc c tnh ca tp tin vo trong bng
FIT.
Nu tp tin c m ghi th khi php ton WRITE chuyn mt phn t ni vo
cui tp tin, th d liu c gi cho php ton WRITE ca h iu hnh. Php ton
WRITE ca h iu hnh s lu d liu vo trong v tr c th ca b nh m. Khi
trong b nh m tch ly c mt khi cc phn t th khi s c chuyn
sang b nh ngoi (a hoc bng t). Qu trnh tip tc ca php ton WRITE c
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

54
thc hin bng cch lp y b nh m cho n khi mt khi c th c chuyn ra
b nh ngoi.
i vi READ th ngc li, mt khi cc phn t ca tp tin s c chuyn sang b
nh m v mi mt php ton READ c thc hin bi chng trnh li chuyn mt
phn t t b nh m sang bin chng trnh cho n khi b nh m tr thnh rng
th mt khi li c chuyn t b nh ngoi vo b nh m.


4.13.2 Tp tin vn bn
Tp tin vn bn l mt tp tin ca cc k t. y l mt loi tp tin rt thng dng v
n c s dng mt cch d dng trong tt c cc ngn ng lp trnh v cc cng c
khc (Cc loi tp tin khc khng c c c im ny). Tp tin vn bn cng l mt
tp tin tun t nn cc thao tc trn n cng tng t nh trn tp tin tun t. Ngoi ra
cn c cc php ton c bit khc cho php chuyn i d liu khc thnh k t v
ngc li khi c hoc ghi trn tp tin vn bn.
4.13.3 Tp tin truy xut trc tip
Tp tin truy xut trc tip l mt tp tin c t chc sao cho bt k mt phn t no
cng c truy xut mt cch ngu nhin. lm c iu mi mt phn t ca
n phi c mt kha chng hn kha ca mi phn t l s th t ca n trong tp tin.
truy xut phn t bt k, trc ht con tr ca tp tin phi c di chuyn ti phn
t c kha c ch nh, sau php ton READ hoc WRITE mi c thc hin.
Php ton WRITE c th thay i ni dung c trong mt phn t tn ti.
4.14 CU HI N TP
1. Nu nh ngha kiu d liu c cu trc.
Chuyn d
liu bng
READ/WRITE
(gia b nh
m v bin
nh)
(gia buffer v a)
Chuyn d liu khi
Bin nh
Bin nh
FIT

B nh m
(buffer)
B nh
ngoi
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

55
2. Nu tn cc thuc tnh ca cu trc d liu?
3. Th no l cu trc d liu ng nht?
4. Th no l cu trc d liu khng ng nht?
5. Th no l cu trc d liu c kch thc c nh?
6. Th no l cu trc d liu c kch thc thay i?
7. Cho v d v mt cu trc d liu ng nht.
8. Cho v d v mt cu trc d liu khng ng nht.
9. Cho v d v mt cu trc d c kch thc c nh.
10. Cho v d v mt cu trc d c kch thc khng c nh.
11. Trn cu trc d liu thng c cc php ton no?
12. K tn cc phng php la chn mt phn t ca cu trc d liu?
13. Nu tn cc phng php biu din cu trc d liu trong b nh?
14. Php ton la chn trc tip (ngu nhin) mt phn t ca cu trc d liu c
biu din tun t c thc hin bng cch no?
15. C phi kiu vct (mng mt chiu) l mt cu trc d liu c kch thc c
nh?
16. Cho bit cng thc xc nh s phn t ca mt vect.
17. Cho bit cng thc xc nh a ch (v tr) ca phn t V[i] ca vct V.
18. C phi kiu vct (mng mt chiu) l mt cu trc d liu c kch thc
khng c nh?
19. C phi kiu vct (mng mt chiu) l mt cu trc d liu ng nht?
20. C phi kiu vct (mng mt chiu) l mt cu trc d liu khng ng nht?
21. lu tr mt vct trong b nh, ngi ta thng s dng biu din tun t
hay biu din lin kt?
22. Cho bit cng thc xc nh s phn t ca mt ma trn M[LB1..UB1,
LB2..UB2] (mng hai chiu).
23. Cho bit cng thc xc nh a ch (v tr) ca phn t M[i,j] ca ma trn
M[LB1..UB1, LB2..UB2]. Bit rng cc phn t c lu tr theo trt t dng.
24. Cho bit cng thc xc nh a ch (v tr) ca phn t M[i,j] ca ma trn
M[LB1..UB1, LB2..UB2]. Bit rng cc phn t c lu tr theo trt t ct.
25. Gi s c khai bo VAR A:array[0..3, 1..3] of integer; Cc phn t ca ma trn
A c lu tr trong b nh theo phng php khai trin theo ct (trt t ct).
Hy v m hnh biu din s lu tr ny.
26. Gi s c khai bo VAR A:array[0..3, 1..3] of integer; Cc phn t ca ma trn
A c lu tr trong b nh theo phng php khai trin theo dngt (trt t
dng). Hy v m hnh biu din s lu tr ny.
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

56
27. Gi s c khai bo VAR A:array[0..3, 1..3] of integer; Cc phn t ca ma trn
A c lu tr trong b nh theo phng php khai trin theo dng (trt t
dng), gi s a ch c s ca khi nh l , kch thc b m t l D, kch
thc mi phn t l E. Hy tnh a ch (v tr) ca phn t A[1,2].
28. Gi s c khai bo VAR A:array[0..3, 1..3] of integer; Cc phn t ca ma trn
A c lu tr trong b nh theo phng php khai trin theo ct (trt t ct),
gi s a ch c s ca khi nh l , kch thc b m t l D, kch thc
mi phn t l E. Hy tnh a ch (v tr) ca phn t A[1,2].
29. Nu tn cc thuc tnh ca kiu mu tin.
30. C phi mu tin l mt cu trc d liu c kch thc c nh?
31. C phi mu tin l mt cu trc d liu c kch thc khng c nh?
32. C phi mu tin l mt cu trc d liu ng nht?
33. C phi mu tin l mt cu trc d liu khng ng nht?
34. lu tr mt mu tin trong b nh, ngi ta thng s dng biu din tun t
hay biu din lin kt?
35. Vic la chn mt phn t ca mu tin c thc hin bi s la chn tun t
hay trc tip?
36. C phi mu tin c cu trc thay i l mt cu trc d liu c kch thc c
nh?
37. C phi mu tin c cu trc thay i l mt cu trc d liu c kch thc thay
i?
38. Nu tn cc phng php c t chui k t.
39. Nu tn cc php ton thng c trn kiu chui k t.
40. Cp pht tnh c thc hin vo lc no?
41. Cp pht ng c thc hin vo lc no?
42. Cho bit cc u nhc im ca cp pht ng.
43. S dng cp pht tnh, ngi lp trnh c th ch ng gii phng nh khng?
44. S dng cp pht ng, ngi lp trnh c th ch ng gii phng nh
khng?
45. Bin con tr c cp pht ng hay cp pht tnh?
46. C nhng loi con tr no?
47. Nu tn cc php ton thng c trn tp hp.
48. Nu tn cc phng php biu din mt tp hp.
49. Gi s mt tp hp c biu din bi mt vect bit, hy cho bit gii thut
thc hin cc php ton Hp, Giao v Hiu hai tp hp.
50. S dng vct bit biu din cho mt tp hp th c nhng u, nhc im
g?
Ngn ng lp trnh Chng IV: Kiu d liu c cu trc

57
51. S dng bng bm biu din cho mt tp hp th c nhng u, nhc im
g?
52. Gi s mt khng gian c 5 phn t e1, e2, e3, e4, e5> Tp hp { e2, e1, e5,
e4} c biu din bi vector bit no?
53. Gi s c ba tp hp A, B, C c biiu din bi ba vector bit tng ng l (1,
0, 1, 1, 1); (1, 0, 1, 0, 1) v (1, 1, 1, 0, 1). Cho bit biu thc lin h gia cc tp
A,B v C?
54. K tn cc php ton thng c trn tp tin tun t.
55. Trong tp tin tun t, chng ta c th nhy n mt phn t bt k truy xut
n hay khng?
56. Trong tp tin truy xut trc tip, chng ta c th nhy n mt phn t bt k
truy xut n hay khng?
57. Trong tp tin truy xut trc tip, chng ta c th truy xut cc phn t mt cch
tun t t u n cui tp tin hay khng?
Ngn ng lp trnh Chng V: Kiu do ngi dng inh ngha

58
CHNG 5: KIU DO NGI DNG NH NGHA
5.1 TNG QUAN
5.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v tru tng ha, kiu d liu do ngi lp trnh nh ngha.
- Mc ch ca vic nh ngha kiu d liu.
- Phn bit cc hnh thc xc nh s tng ng gia cc kiu d liu
5.1.2 Ni dung ct li
- Tru tng ho
- Kiu d liu do ngi dng nh ngha.
- Xc nh s tng ng gia cc kiu d liu
5.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn
5.2 S PHT TRIN CA KHI NIM KIU D LIU
S pht trin ca khi nim kiu d liu l s pht trin ch yu ca ngn ng lp
trnh trong nhng nm 70. Trong nhng ngn ng c nh FORTRAN v COBOL
bt u c khi nim v kiu.
nim u tin v s nh ngha kiu l mt tp hp cc gi tr m mt bin c th
nhn. Kiu d liu trong cc ngn ng c ny lun lun gn lin vi cc bin ring l,
do mi mt php khai bo bin phi t tn cho mt bin v nh ngha kiu ca n.
Do nu mt chng trnh s dng nhiu bin c kiu ging nhau th mi mt bin
phi c khai bo ring.
Bc tip theo ca s pht trin khi nim kiu c nghin cu trong Pascal. Trong
cho php t tn cho mt kiu, tc l mt tp gi tr no . Php khai bo bin ch
cn tn bin v tn kiu nh ngha ch khng cn nh ngha li kiu.
Bc cui cng ca s pht trin khi nim kiu l: Kiu khng ch l mt tp hp cc
i tng d liu m cn l mt tp hp cc php ton c th thao tc trn cc i
tng d liu ny.
5.3 TRU TNG HA
5.3.1 Khi nim tru tng ha
Tru tng ha l mt phng php gip ngi lp trnh bit cch tp trung vo
nhng vn , nhng thuc tnh bn cht ca chng trnh m b qua cc thuc tnh
khng cn thit. N l mt v kh chng li phc tp ca chng trnh, mc ch
ca n l n gin ha qu trnh lp trnh.
C hai loi tru tng ha c bn trong ngn ng lp trnh l tru tng ha qu trnh
v tru tng ha d liu.
Ngn ng lp trnh Chng V: Kiu do ngi dng inh ngha

59
5.3.2 Tru tng ha qu trnh
Tru tng ha qu trnh l vic phn chia chng trnh thnh nhng chng trnh
con. Mi chng trnh con m nhim mt tc v no v c c trng bi mt
ci tn.
cp chng trnh chnh chng ta ch gi thc hin cc chng trnh con, thng
qua cc tn chng trnh con, thc hin cc tc v m chng trnh con m
trch. Nh vy, chng trnh chnh, chng ta ch quan tm n kt qu ca chng
trnh con mang li m khng cn bit chi tit ci t bn trong chng trnh con .
V d vit mt chng trnh qun l, ta c th vit theo hai cch, cch th nht
khng phn chia thnh cc chng trnh con v cch th hai c s dng chng trnh
con.














i vi phng php th nht, ta thy ton b chng trnh c vit trong chng
trnh chnh, iu ny lm cho chng trnh chnh rt rm r, kh c hiu, kh kim
sot, kh sa li,...
i vi phng php th hai, trong chng trnh chnh ta ch thy tn cc chng
trnh con (nhap_du_lieu, xu_ly_du_lieu, xuat_du_lieu) v thng qua cc tn ny ta bit
r chng trnh chnh lm nhng vic g cn bn thn cc vic y c lm nh th
no th ta khng cn bit.
u im ca tru tng ho qu trnh
Vic phn chia chng trnh thnh cc chng trnh con c cc u im ni bt nh
sau:
- chng trnh chnh, ci tng th c lm ni bt, cc chi tit b che du
nn chng trnh sng sa, d c hiu.
Program Quan_ly;
Begin
{
----
on chng trnh dng cho vic
nhp d liu
----
}
{
----
on chng trnh dng cho vic x
l d liu
----
}
{
----
on chng trnh dng cho vic
xut d liu
----
}
end.
Program Quan_ly;
Prcedure nhap_du_lieu;
{
Chng trnh con nhp d liu
}
Prcedure xu_ly_du_lieu;
{
Chng trnh con x l d liu
}
Prcedure xu_ly_du_lieu;
{
Chng trnh con xut d liu
}

Begin {Chng trnh chnh}
nhap_du_lieu;
xu_ly_du_lieu;
xuat_du_lieu;
end.


Chng trnh khng c chng trnh con
Chng trnh vi chng trnh con
Ngn ng lp trnh Chng V: Kiu do ngi dng inh ngha

60
- Mt chng trnh con c thit k th c th gi thc hin nhiu ln m
khng phi vit li. Vi vic truyn tham s cho chng trnh con, ta nhn c
cc kt qu khc nhau cc ln gi khc nhau.
- Khi xy dng chng trnh con ta c th kim th n mt cch c lp, nn
vic pht hin v sa li d dng hn.
- Do chng trnh c chia thnh nhiu chng trnh con, mi chng trnh
con c th giao cho mt hoc mt nhm lp trnh vin thc hin nn tng kh
nng lm vic theo nhm.
5.3.3 Tru tng ha d liu
Tru tng ho d liu l vic to ra kiu d liu tru tng. Kiu d liu tru tng
l mt tp hp cc TDL v tp hp cc php ton, thao tc trn cc TDL .
Ngy nay, khi ta ni kiu d liu thc cht l kiu d liu tru tng.
Kiu d liu tru tng c th c nh ngha bi ngn ng hoc do ngi lp trnh
nh ngha.
V d v kiu d liu tru tng do ngn ng nh ngha:
Kiu integer trong Pascal hay kiu int trong C l mt kiu d liu tru tng do ngn
ng nh ngha. Trong tp cc TDL l tp cc s nguyn t -32768 n 32767;
tp hp cc php ton bao gm cc php ton mt ngi (+, -), cc php ton hai ngi
(+, -, *, DIV, MOD), cc php ton quan h (<, <=, =, <>, >=, >).
V d v kiu d liu tru tng do ngi lp trnh nh ngha:
Trong mn hc cu trc d liu, chng ta bit mt lot cc kiu d liu tru tng
do ngi lp trnh nh ngha nh danh sch, ngn xp, hng i, cy,...
Chng hn kiu d liu tru tng danh sch l mt dy cc phn t vi tp hp cc
php ton nh to danh sch rng, kim tra danh sch rng, xen mt phn t vo danh
sch, xo mt phn t khi danh sch, ...
Sau y ta s nghin cu k hn v kiu d liu tru tng do ngi dng nh ngha.
5.4 NH NGHA KIU
5.4.1 Khi nim
Ngoi cc kiu nguyn thu c nh ngha bi ngn ng, ngi lp trnh cn c th
nh ngha cc kiu ca ring mnh. nh ngha mt kiu d liu mi bao gm vic
xc nh cc yu t sau:
- Tn ca kiu.
- S biu din b nh cho cc i tng d liu ca kiu.
- Tp hp cc php ton (cc chng trnh con) thao tc trn cc i tng d liu
ca kiu.
V d trong Pascal ta xt nh ngha kiu nh sau:
TYPE
Ngn ng lp trnh Chng V: Kiu do ngi dng inh ngha

61
RealVect = ARRAY[1..10] OF real;
Sau ta c th dng php khai bo bin:
VAR
A: RealVect;
B,C:RealVect;
u im ca nh ngha kiu:
- Lm cho vic vit chng trinh tr nn ngn gn, sng sa hn.
- Khi cn thay i cu trc d liu, ch cn thay i mt ln mc nh ngha kiu
ch khng cn phi thay i nhiu ln mc khai bo tng bin ring bit.
Chng ta thy rng kiu do ngi dng nh ngha chnh l mt kiu d liu tru
tng.
5.4.2 Tnh tng ng ca cc kiu nh ngha
Kim tra kiu dn ti s so snh gia kiu d liu ca i s thc c cho ca mt
php ton v kiu d liu ca i s m php ton cn n. Nu kiu ging nhau th
i s c chp nhn v php ton c tin hnh, nu kiu khc nhau, th mt li
c xem xt hoc mt s cng bc chuyn i kiu c dng i kiu ca i
s thc thnh kiu thch hp.
Vn y l cn phi xc nh hai kiu nh th no th c coi l "ging nhau"
hay tng ng. Xt v d sau y:
TYPE Vect1 = ARRAY[1..10] OF REAL;
Vect2 = ARRAY[1..10] OF REAL;
VAR x,z : Vect1;
y : Vect2;
PROCEDURE Sub(a:Vect1);
.....
END; { Sub }
BEGIN { Chng trnh chnh }
x := y;
Sub(y);
......
END.
Vn y l cc bin x, y v a c cng kiu do lnh gn x := y v li gi
chng trnh con Sub(y) l ng hay chng c khc kiu.
C hai cch gii quyt cho vn ny: tng ng tn v tng ng cu trc.
1/ Tng ng tn
H ai kiu d liu c xem l tng ng ch khi chng c tn ging nhau. Nh vy
Ngn ng lp trnh Chng V: Kiu do ngi dng inh ngha

62
cc kiu Vect1 v Vect2 trn l khc kiu mc d i tng d liu c chung mt
cu trc. Lnh gn x := y v li gi chuong trnh con Sub(y) l khng hp l. Tng
ng tn l phng php c dng trong Ada v Pascal. Tng ng tn c mt
im yu l khi mt kiu khng c tn nh trong khai bo trc tip:
VAR w : ARRAY[1..10] OF REAL;
Bin w c kiu ring nhng l kiu khng c tn. Nh vy w khng th c dng
nh l mt i s cho mt php ton m php ton i hi mt i s ca mt kiu
c tn.
2/ Tng ng cu trc
Hai kiu d liu c xem l tng ng nu chng xc nh cc i tng d liu
c cu trc bn trong ging nhau. Thng thng thut ng "cu trc bn trong ging
nhau" c ngha l ging nhau v s biu din b nh c dng cho c hai lp i
tng d liu. V d Vect1 v Vect2 l tng ng cu trc bi v mi mt i tng
d liu ca kiu Vect1 v mi mt i tng d liu ca kiu Vect2 c chung s phn
t c kiu tng ng.
Qun l b nh i vi cc i tng d liu ca c hai kiu ny l ging nhau, do
cng thc truy nhp ging nhau c th c s dng la chn cc phn t v ni
chung s ci t ti thi gian thc hin ca cc kiu d liu l ging ht nhau.
Tng ng cu trc khng c cc bt tin nh tng ng tn nhng n li c
nhng vn khc, chng hn nh hai bin c th tng ng cu trc mt cch
khng c mc d ngi lp trnh khai bo chng mt cch tch bit nh trong v
d sau:
TYPE Meters = INTEGER;
Liters = INTEGER;
VAR Len : Meters;
Vol : Liters;
Cc bin Len v Vol c kiu tng ng cu trc v do mt li nh php cng
Len + Vol s khng c tm thy bi php kim tra kiu tnh. Khi c nhiu lp trnh
vin lm vic chung trong mt chng trnh th tng ng kiu khng c c th
gy nn cc li rt nghim trng nh trong v d ni trn.
5.5 CU HI N TP
1. Th no l tru tng ho qu trnh?
2. Th no l tru tng ho d liu?
3. Lp trnh theo kiu tru tng ho qu trnh c nhng u im no?
4. nh ngha kiu d liu c nhng u im no?
5. C nhng phng php no xc nh s tng ng ca cc kiu d liu.

Ngn ng lp trnh Chng VI: Chng trnh con

63
CHNG 6: CHNG TRNH CON
6.1 TNG QUAN
6.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v chng trnh con.
- C ch hot ng khi chng trnh con c gi.
- Cc cch truyn tham s cho chng trnh con.
6.1.2 Ni dung ct li
- C ch hot ng ca chng trnh con.
- Cc loi tham s ca chng trnh con.
- Cc cch truyn tham s cho chng trnh con.
6.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn
6.2 NH NGHA CHNG TRNH CON
Chng trnh con l mt php ton tru tng c nh ngha bi ngi lp trnh.
Chng trnh con c cc c tnh nh sau:
- Mi chng trnh con c mt im vo duy nht.
Chng trnh gi tm ngng vic thc hin trong qu trnh thc hin chng trnh con.
- iu khin lun c tr v chng trnh gi khi s thc hin chng trnh con kt
thc.
Khi ni n chng trnh con, chng ta quan tm n hai kha cnh: s nh ngha
chng trnh con v li gi thc hin chng trnh con.
nh ngha chng trnh con l mt on chng trnh ngun c vit ra bi ngi
lp trnh.
6.2.1 c t chng trnh con
S c t chng trnh con bao gm:
- Tn ca chng trnh con
- S lng cc tham s, th t ca chng v kiu d liu ca mi mt tham s .
- S lng cc kt qu, th t ca chng v kiu d liu ca mi mt kt qu.
- Hot ng c thc hin bi chng trnh con.
Chng trnh con biu din mt hm ton hc, l mt nh x t tp hp cc tham s
n tp hp cc kt qu. Chng trnh con tr v mt kt qu duy nht trong tn
chng trnh con thng c gi l mt hm. C php in hnh c t hm c
quy nh trong ngn ng lp trnh Pascal:
Ngn ng lp trnh Chng VI: Chng trnh con

64
Function Ten_ham(Danh sch cc tham s cng vi kiu d liu tng ng): Kiu
kt qu tr v
V d Function FN(x:real; y:integer) : real
c t ny xc nh hm FN : REAL x INTEGER -> REAL
Nu chng trnh con tr v nhiu hn mt kt qu hoc khng c kt qu tr v trong
tn chng trnh con thng c gi l th tc (procedure hoc subroutine). C php
in hnh c t th tc c quy nh trong ngn ng lp trnh Pascal:
Procedure Ten_thu_tuc(Danh sch cc tham scng vi kiu d liu tng ng)
V d Procedure SUB(X:real; Y:Integer; Var Z:Real; Var U:boolean);
Trong s c t ny, tham s c tn ng sau VAR biu th mt kt qu hoc mt
tham s c th b thay i. C php ca s c t ny trong Ada l:
Procedure SUB(X: IN Real; Y: IN Integer; Z: IN OUT Real; U: OUT Boolean)
Th tc ny khai bo mt chng trnh con vi s xc nh:
SUB : Real x Integer x Real -> Real x Boolean
Cc t IN, OUT v IN OUT phn bit ba trng hp sau y: IN ch nh mt tham s
khng th b thay i bi cng trnh con, IN OUT ch nh mt tham s c th b thay
i v OUT ch nh mt kt qu.
Mc d chng trnh con biu din mt hm ton hc nhng n cng c cc vn
tng t nh i vi cc php ton nguyn thu:
- Chng trnh con c th c cc tham s n trong dng bin khng a phng m n
tham chiu.
- Chng trnh con c th c kt qu n (hiu ng l) c tr v thng qua s thay
i cc bin khng a phng hoc thng qua vic thay i cc tham s IN-OUT ca
n.
- Chng trnh con c th nhy cm vi tin s (t sa i), v vy kt qa ca n
khng ch ph thuc vo tham s c cho ti ln gi m cn ph thuc vo ton
b lch s cc ln gi trc . Nhy cm vi tin s c th do d liu a phng vn
cn gi li gia cc ln gi ca chng trnh con hoc thng qua s thay i m ring
ca n (t ph bin hn).
6.2.2 Ci t chng trnh con
Cc php ton nguyn thu c ci t bng cch dng cu trc d liu v cc php
ton c cung cp bi my tnh o bn di ngn ng lp trnh. Chng trnh con
biu din mt php ton c xy dng bi ngi lp trnh v do chng trnh con
c ci t bng cch dng cu trc d liu v cc php ton c cung cp bi
chnh bn thn ngn ng lp trnh . S ci t c xc nh bi thn chng trnh
con, bao gm c vic khai bo d liu cc b xc nh cu trc d liu c dng cho
chng trnh con v cc lnh xc nh hnh ng s lm khi chng trnh con thc
hin.
S khai bo v cc lnh thng c bao gi, ngi s dng chng trnh con khng
th truy xut c ti d liu cc b v cc lnh bn trong chng trnh con. Ngi s
Ngn ng lp trnh Chng VI: Chng trnh con

65
dng ch c th gi chng trnh con vi mt tp hp cc tham s v nhn li cc kt
qu c tnh ton. C php ca Pascal i vi chng trnh con l in hnh:
FUNCTION FN(x:REAL; y:INTEGER):REAL ; (M t)
VAR
m : ARRAY[1..10] OF REAL; (Khai bo cc i
n : INTEGER; tng d liu cc b)
BEGIN
. (Dy cc lnh xc nh
. hnh ng ca chng
. trnh con)
END;
Thng thng trong chng trnh con c th c cc chng trnh con khc biu th cc
php ton c nh ngha bi ngi lp trnh dng cho ch chng trnh con cha
chng. Nhng chng trnh con "cc b" ny c bao gi, ngha l chng khng th
c gi ti t bn ngoi chng trnh con cha chng.
Kim tra kiu cng l mt vn quan trng i vi chng trnh con. Mi ln gi
chng trnh con i hi cc tham s c kiu ng nh c xc nh trong s c
t chng trnh con. Kiu ca kt qu c tr v ca chng trnh con cng phi
c bit n. Vn kim tra kiu tng t nh i vi cc php ton nguyn thu.
Kim tra kiu c th c thc hin mt cch tnh trong qu trnh dch, nu c s
khai bo kiu cho cc tham s v kt qu ca mi mt chng trnh con. Mt khc
kim tra kiu c th l ng trong qu trnh thc hin chng trnh. S chuyn i
kiu n cc tham s i chng thnh cc kiu ng cng c th c cung cp mt
cch t ng bi s ci t ngn ng.
6.3 C CH GI CHNG TRNH CON
6.3.1 nh ngha v kch hot chng trnh con
Ngi lp trnh vit mt nh ngha chng trnh con trong chng trnh. Thng qua
vic thc hin chng trnh, nu chng trnh con c gi th mt kch hot chng
trnh con (subprogram activation) c to ra. Khi s thc hin chng trnh con kt
thc th kch hot b ph hu. Nu c mt ln gi khc th mt kch hot mi s c
to ra. Nh vy t mt nh ngha chng trnh con, c nhiu kch hot c th c
to trong qu trnh thc hin chng trnh. S nh ngha dng lm khun mu
(template) cho vic to kch hot trong qu trnh thc hin.
Ch rng s nh ngha l mt s din t trong chng trnh nh n c vit ra
v do n c bit n trong qu trnh dch. Kch hot chng trnh con ch c th
c trong qu trnh thc hin. Trong qu trnh thc hin, s nh ngha ch tn ti trong
dng khun mu m t cc kch hot c th c to ra.
6.3.2 Ci t nh ngha v kch hot chng trnh con
Xt li nh ngha chng trnh con trong Pascal:
FUNCTION FN(x : REAL; y : INTEGER) : REAL;
CONST
max = 20;
Ngn ng lp trnh Chng VI: Chng trnh con

66
VAR
m : ARRAY[1..max] OF REAL;
n : INTEGER;
BEGIN
n := MAX;
x := 2 * x + m[5];
......
END;
S nh ngha ny xc nh cc thnh phn cn thit cho mt kch hot chng trnh
con:
1/ B nh i vi cc tham s, i tng d liu x v y.
2/ B nh cho kt qu hm, i tng d liu ca kiu REAL;
3/ B nh cho bin cc b, mng m v bin n.
4/ B nh cho cc hng trc kin v cc hng, 20, 2 v 5.
5/ B nh cho m c th thc hin pht sinh t cc lnh trong thn chng trnh con.
nh ngha chng trnh con cho php cc vng nh ny c t chc v cc m c
th thc hin c xc nh thng qua vic dch. Kt qu ca vic dch l khun mu
dng xy dng mi mt kch hot ring ti thi gian chng trnh con c gi
trong qu trnh thc hin.
xy dng mt kch hot chng trnh con t khun mu ca n, ci khun mu ban
u c th phi c sao chp vo trong vng mi ca b nh. Tuy nhin thay v sao
chp hon ton, n c tch ra thnh hai phn:
1/ Phn tnh, gi l on m (code segment) bao gm cc mc 4 (cc hng) v 5 (cc
m c th thc hin c) ni trn. Phn tnh khng thay i trong qu trnh thc
hin chng trnh con v do th mt bn sao c th c dng cho tt c cc kch hot.
2/ Phn ng, gi l mu tin kch hot (Activation record) bao gm cc mc 1 (Cc
tham s), 2 (Kt qu hm) v 3 (d liu cc b) v cng thm nhiu mc khc ca d
liu n nh vng nh tm, im tr v, v s tham kho cc bin khng cc b. Phn
ng c cu trc ging nhau cho tt c cc kch hot nhng n cha cc gi tr d liu
khc nhau cho mi mt kch hat. Do mi mt kch hot cn thit phi c mt bn
sao mu tin kch hot ring ca n. Hnh v sau trnh by cu trc ca mt kch hot
chng trnh con ca hm FN ni trn
Ngn ng lp trnh Chng VI: Chng trnh con

67

M u

M lnh c th thc hin


Khi m c th thc hin
Kt thc
on m ca FN 20
2 Cc hng
5
1
im tr v
FN Kt qu ca hm
x Cc tham s
Mu tin kch hat ca FN y
m
:
:
:

Cc bin cc b
n
i vi mi chng trnh con, mt on m tn ti thng qua s thc hin chng
trnh. Cc mu tin kch hot c to ra v hu b mt cch ng thng qua thc hin
mi ln chng trnh con c gi v mi ln n kt thc bi RETURN.











Kch thc v cu trc ca mu tin kch hot ca chng trnh con thng thng c
xc nh trong qu trnh dch, l trnh bin dch (compile) c th xc nh mu tin
kch hot ln nh th no v v tr ca mi mt phn t trong . truy xut n cc
phn t c th s dng cng thc tnh a ch c s cng di nh trnh by i
vi mu tin bnh thng.
Kch hat
u tin
Kch hat
th hai
Kch hat
cui cng
an m ca FN
Mu tin kch
hat ca FN
Mu tin kch
hat ca FN
Mu tin kch
hat ca FN
...
Ngn ng lp trnh Chng VI: Chng trnh con

68
6.4 CHNG TRNH CON CHUNG
S c t chng trnh con thng thng lit k s lng, th t v kiu d liu ca
cc tham s. Chng trnh con chung (generic subprogram) l mt chng trnh con
c mt tn nhng c nhiu nh ngha khc nhau, c phn bit bi s lng, th t
v kiu d liu ca cc tham s. Khi nim v php ton chung c cp trong
chng II (phn mc ch ca s khai bo). Mt khi php ton hay chng trnh con
chung xut hin, vn c bn i vi trnh bin dch l lm sao xc nh c ng
ngha ca n trong mt tp hp nhiu ngha c th c. Thng tin v i s ca php
ton hoc tham s ca chng trnh con gip chng trnh dch nhn bit ngha ch
thc ca chng trnh con chung.
6.5 TRUYN THAM S CHO CHNG TRNH CON
6.5.1 Khi nim truyn tham s
Truyn tham s l phng php chuyn giao d liu gia cc n v chng trnh
nhm t c cc kt qu khc nhau khi gi thc hin chng trnh con. Tham s c
hai loi l tham s hnh thc v tham s thc t.
Tham s hnh thc l mt loi c bit ca TDL cc b trong chng trnh con. N
c xc nh lc nh ngha chng trnh con. Khi nh ngha chng trnh con, phi
xc nh mt danh sch cc tham s hnh thc cng vi khai bo kiu tng ng.
Tham s thc t l mt TDL c chia s cho chng trnh con bng cch truyn
trong li gi thc hin chng trnh con.
6.5.2 S tng ng gia tham s tham s thc t v tham s hnh thc
Khi mt chng trnh con c gi cng vi mt danh sch cc tham s thc t th i
hi phi c mt s tng ng gia cc tham s hnh thc v tham s thc t. S tng
ng ny nhm xc nh tham s thc t no c truyn cho tham s hnh thc no.
C hai phng php xc nh s tng ng ny:
Tng ng v tr: S tng ng gia cc cp tham s thc t v tham s hnh thc t
c s trn s tng ng v tr ca chng trong danh sch cc tham s thc t lc gi v
danh sch cc tham s hnh thc trong nh ngha chng trnh con.
Hu ht cc ngn ng u dng tng ng v tr v s lng cc tham s hnh thc v
tham s thc t l bng nhau do cc cp tng ng l duy nht. Tuy nhin cng c
nhng ngn ng cho php li gi chng trnh con khng cn cung cp s lng
tham s thc t.
Tng ng tn: Tham s hnh thc bt cp vi tham s thc t c ch nh trong
li gi chng trnh con. V d trong Ada c li gi chng trnh con nh sau:
SUB(y => B, x => 27).
Trong tham s thc t B bt cp vi tham s hnh thc y v tham s thc t 27 bt
cp vi tham s hnh thc x.
Ngn ng lp trnh Chng VI: Chng trnh con

69
6.5.3 Cc phng php truyn tham s tham s
Ni chung mt ngn ng cung cp nhiu phng php truyn tham s m ngi lp
trnh c th la chn xc nh khai bo tham s hnh thc lc nh ngha chng
trnh con v cung cp cc tham s thc t lc gi thc hin chng trnh con. Cc
phng php truyn tham s ch yu bao gm:
Truyn bng gi tr (transmission by value)
- Tham s hnh thc l tham s ch vo (IN-only parameters), tc l ch nhn gi tr
vo cho chng trnh con, khng c ngha v tr kt qu v cho chng trnh gi.
Tham s hnh thc c xem nh l mt bin cc b ca chng trnh con v c
cp pht nh ring.
- Tham s thc t l mt biu thc (l mt bin, mt hng, mt hm hoc l mt
biu thc thc s).
- Phng php thc hin: Ti thi im gi, gi tr ca tham s thc t c sao
chp vo trong nh ca tham s hnh thc. Trong qu trnh thc hin chng trnh
con, mi thao tc trn tham s hnh thc l s thao tc trn nh ring ca n, khng
nh hng n tham s thc t.
- Khi chng trnh con kt thc, s thay i gi tr ca tham s hnh thc, khng
lm nh hng n gi tr ca tham s thc t.
Truyn tham chiu (transmission by reference)
- Tham s hnh thc l tham s vo ra (IN-OUT parameters), tc l n c ngha v
nhn gi tr vo cho chng trnh con v tr kt qu v cho chng trnh gi. Tham s
hnh thc l mt con tr.
- Tham s thc t phi l mt bin, tc l mt TDL c nh.
- Phng php thc hin: Ti thi im gi, con tr ca tham s thc t c sao
chp cho tham s hnh thc. Trong qu trnh thc hin chng trnh con, mi thao tc
trn tham s hnh thc l s thao tc trn nh ca tham s thc t.
- Khi chng trnh con kt thc, mi thay i gi tr ca tham s hnh thc u lm
gi tr ca tham s thc t thay i theo.
Truyn bng gi tr-kt qu (transmission by value-result)
- Tham s hnh thc l tham s vo ra (IN-OUT parameters) nhng l mt bin cc
b ca chng trnh con v c cp pht nh ring.
- Tham s thc t phi l mt bin, tc l mt TDL c nh.
- Phng php thc hin: Ti thi im gi, gi tr ca tham s thc t c sao
chp vo trong nh ca tham s hnh thc. Trong qu trnh thc hin chng trnh
con, mi thao tc trn tham s hnh thc l s thao tc trn nh ring ca n, khng
nh hng n tham s thc t.
- Khi chng trnh con kt thc, gi tr cui cng ca tham s hnh thc c sao
chp vo nh ca tham s thc t.
Ngn ng lp trnh Chng VI: Chng trnh con

70
Truyn bng kt qu (transmission by result)
- Tham s hnh thc l tham s ch ra (OUT-only parameters), tc l ch tr kt qu
v cho chng trnh gi, khng c ngha v nhn gi tr vo cho chng trnh con.
Tham s hnh thc c xem nh l mt bin cc b ca chng trnh con v c
cp pht nh ring.
- Tham s thc t phi l mt bin, tc l mt TDL c nh.
- Phng php thc hin: Gi tr ca tham s thc t khng c s dng trong
chng trnh con. Tham s hnh thc c th c gn tr nh i vi mt bin cc b.
Trong qu trnh thc hin chng trnh con, mi thao tc trn tham s hnh thc l s
thao tc trn nh ring ca n, khng nh hng n tham s thc t.
- Khi chng trnh con kt thc, gi tr cui cng ca tham s hnh thc c sao
chp vo nh ca tham s thc t.
V d vit bng ngn ng gi
Var m:integer;
Procedure P(a:integer);
Begin
a:= 20;
writeln(m);
end;
begin
m:=10;
P(m);
writeln(m);
end.
Kt qu thc hin chng trnh i vi cc phng php truyn tham s

Truyn bng gi tr Truyn tham chiu Truyn bng
gi tr-kt qu
Truyn bng
kt qu
10
10
20
20
10
20
10
20

6.6 CU HI N TP
1. Nu tn cc phng php tng ng gia tham s thc t v tham s hnh thc
khi thc hin vic truyn tham s cho chng trnh con.
2. Nu tn cc phng php truyn tham s cho chng trnh con.
3. Cho bit s khc nhau v ging nhau gia cc phng php truyn tham s .
Ngn ng lp trnh Chng VII: iu khin tun t

71
a
ac b b
x
2
4
2
+
=
CHNG 7: IU KHIN TUN T
7.1 TNG QUAN
7.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v iu khin tun t.
- Cc th t thc hin chng trnh trong biu thc, trong cu lnh..
- Khi nim v ngoi l, x l ngoi l.
7.1.2 Ni dung ct li
- iu khin tun t trong biu thc.
- iu khin tun t trong cu lnh.
- Ngoi l v x l ngoi l.
7.1.3 Kin thc c bn cn thit
Kin thc v cu trc d liu v k nng lp trnh cn bn
7.2 KHI NIM IU KHIN TUN T
iu khin tun t l tp hp quy tc xc nh th t thc hin trong chng trnh.
Xt v mt cu trc th c ba loi iu khin:
iu khin trong biu thc.
iu khin gia cc lnh.
iu khin gia cc chng trnh con.
Xt v mt thit k ngn ng th c hai loi iu khin l:
iu khin n c thit k trong ngn ng chng hn quy tc u tin ca cc ton
t trong biu thc.
iu khin tng minh do ngi lp trnh vit trong chng trnh chng hn s
dng cc cu lnh iu khin nh r nhnh, lp li ...
7.3 IU KHIN TUN T TRONG BIU THC
7.3.1 t vn
Xt cng thc nghim ca phng trnh bc hai

Cng thc n gin ny bao gm t nht 15 php ton khc nhau. M ho trong hp
ng hoc ngn ng my, c th i hi t nht 15 lnh. Hn th, ngi lp trnh phi
quy nh b nh cho 5 n 10 kt qu trung gian s pht sinh. Ngi lp trnh cng s
phi quan tm n vic ti u nh cc php ton s c thc hin theo th t nh th
no b nh tm l nh nht ...
Ngn ng lp trnh Chng VII: iu khin tun t

72
Trong ngn ng cp cao nh FORTRAN, cng thc ny c vit nh mt biu thc
x = (-b + SQRT(b**2 - 4*a*c))/(2*a)
Biu thc l mt phng tin t nhin v mnh m cho vic biu din dy cc php
ton, tuy vy chng ny sinh cc vn mi chng hn nh th t thc hin cc ton
t.
7.3.2 S biu din theo cu trc cy ca biu thc
C ch iu khin tun t c bn trong biu thc l php ly hm hp: Mt php ton
chnh v cc ton hng ca n. Trong cc ton hng c th l cc hng, bin hoc
cc php ton khc m cc ton hng ca chng li c th l cc hng, bin hoc cc
php ton khc... Nh vy c th xem biu thc l mt cu trc cy, trong nt gc
ca cy biu din cho php ton chnh, cc nt gia gc v l biu din cho cc php
ton trung gian v cc nt l biu din cc bin v cc hng. V d biu thc nghim
phng trnh bc hai c biu din theo cu trc cy nh sau (dng M biu din
cho php ton mt ngi ly s i):
S biu din cy lm sng sa cu trc iu khin ca biu thc. R rng l cc kt
qu ca bin hoc php ton cp thp trong cy c coi nh l ton hng ca php
ton cp cao hn v do chng phi c thc hin trc.
















7.3.3 C php ca biu thc
Nu chng ta xem biu thc c biu din bi cy th dng biu thc trong
chng trnh, cy phi c tuyn tnh ha chng hn phi c quy nh vit cy
nh l mt dy tuyn tnh cc k hiu. Chng ta hy xem cc k hiu ph bin nht:
/
+
*
M SQRT
-
* *
*
B
B 2 C
4 A
2 A
Ngn ng lp trnh Chng VII: iu khin tun t

73
K hiu tin t (prefix)
Theo k hiu Prefix, php ton vit trc, sau l cc ton hng theo th t t tri
sang phi. Nu mt ton hng li l mt php ton th cng theo quy tc tng t. C
ba loi k hiu prix l ordinary, Polish, v Cambridge Polish.
K hiu ordinary prefix s dng cc du ngoc bao quanh cc ton hng v du
phy phn bit cc ton hng. V d cu trc cy trong hnh trn s tr thnh:
/(+M(B),SQRT(-(^(B,),*(*(4,A),C)))),*(2,A))
Mt bin th ca k hiu ny c dng trong ngn ng LISP i khi c gi l
Cambridge Polish. Theo k hiu Cambridge Polish th cc du ngoc bn tri ng sau
mt ton t c chuyn ra trc ton t v du phy ngn cch cc ton hng b
xa i. Cu trc cy trn tr thnh: (/(+(M B)(SQRT(-(^ B 2)(*(* 4 A)C)))) (* 2 A))
Bin th th hai c gi l k hiu Polish, cho php b hn cc du ngoc. Nu
chng ta gi s rng s lng cc ton hng ca mi mt php ton l bit v c
nh th cc du ngoc l khng cn thit. Cu trc cy trn s tr thnh: / + M B
SQRT - ^ B 2 * * 4 A C * 2 A
Bi v nh ton hc Ba lan Lukasiewiez pht minh ra k hiu khng du ngoc ny
nn thut ng "Polish" c dng cho k hiu ny v cc bin th ca n.
Thc t hin nhin l cc biu thc kiu ny rt kh gii. Trong thc t, chng ta
khng th gii biu thc dng Polish. Cc dng ordinary prefix v Cambridge Polish
i hi qu nhiu du ngoc v d nhin l cc k hiu ny khng gn gi vi nhng
k hiu tr thnh thi quen ca chng ta. Tuy nhin k hiu ordinary prefix l mt
k hiu ton hc chun cho hu ht cc php ton khc cc php ton s hc v logic,
chng hn f(x,y,z) c vit theo k hiu prefix. iu quan trng hn l k hiu prefix
c dng biu din mt php ton vi s lng ton hng bt k v do ni
chung ch cn hc mt quy tc vit cc biu thc bt k.
K hiu hu t (postfix)
K hiu postfix tng t nh k hiu Prefix ngoi tr k hiu php ton ng sau
danh sch cc ton hng. V d ((A,B)+,(C,A)-)* Hoc A B + C A - *
Postfix khng phi l s biu din ph bin cho biu thc trong ngn ng lp trnh
nhng n c tm quan trng nh l c s ca s biu din ti thi gian thc hin ca
biu thc.
K hiu trung t (infix)
K hiu trung t thch hp vi php ton hai ngi tc l php ton c hai ton hng.
Trong k hiu trung t, k hiu php ton c vit gia hai ton hng. V k hiu
trung t dng cho cc php tnh s hc c bn, php ton quan h v cc php ton
logic trong ton hoc thng thng nn n cng c chn dng mt cch rng ri
trong ngn ng lp trnh cho cc php ton v trong mt s trng hp cn c
m rng cho cc php ton khc. Mc d k hiu trung t c dng mt cch ph
bin, nhng vic dng n trong ngn ng lp trnh cng gy ra mt s vn nht
nh:
Ngn ng lp trnh Chng VII: iu khin tun t

74
1/ V k hiu trung t ch thch hp i vi php ton hai ngi nn mt ngn ng
khng ch dng k hiu trung t m cn kt hp vi k hiu Prexfix hoc Postfix. iu
ny lm cho vic dch tr nn phc tp hn.
2/ Khi c nhiu hn mt ton t trung t xut hin trong mt biu thc th c th xy
ra tnh trng mp m, ngha l mt biu thc c th biu din bng nhiu cy biu
thc. V d biu thc trung t: A * B + C c th c biu din thnh hai cy nh sau:







Du ngoc c th c dng chia cc ton t v ton hng thnh cc nhm, nh (A
* B) + C hoc A * (B + C), nhng trong cc biu thc phc tp th cc du ngoc lng
nhiu lp l mt tr ngi ln cho ngi lp trnh. V l do ny cc ngn ng thng s
dng quy tc iu khin n m vic dng du ngoc l khng cn thit. Hai quy tc n
ph bin l:
a/ Quy tc u tin trc: Cc php ton xut hin trong biu thc c sp xp theo
mt th bc hoc mt th t u tin trc. Trong mt biu thc c nhiu php ton,
th bc theo quy tc n l php ton no c bc u tin cao hn s c thc hin
trc. V d trong biu thc A * B + C, php nhn u tin trc php cng nn s
c thc hin trc.
b/ Quy tc kt hp: Trong mt biu thc c nhiu php ton cng cp theo th t u
tin th nguyn tc kt hp l cn thit hon thin vic xc nh th t cc php
ton. V d trong biu thc: A - B - C th php ton tr th nht hay php tr th hai
c thc hin trc?. Kt hp tri (thc hin t tri qua phi) l nguyn tc ph bin
nht cho cc php ton s hc, do A - B - C c x l nh (A - B) - C. Tuy nhin,
c mt s php ton li i hi s kt hp phi, chng hn php gn trong ngn ng C.
Trong ngn ng C ta c th vit a = b = 10, v th t thc hin l gn 10 cho b trc,
kt qu tr v ca php gn ny l 10 s c gn tip cho a.
7.3.4 Dch biu thc thnh biu din cy
Dch mt biu thc t s biu din c php ca n trong vn bn chng trnh thnh
dng c th thc hin l mt qa trnh hai giai on. Trc ht biu thc c dch
thnh biu din cy ca n v sau cy c dch thnh mt dy cc lnh c th thc
hin c. Giai on 1 thng thng ch lin quan ti s thnh lp cu trc iu khin
cy c bn ca biu thc, li dng quy tc n v u tin trc v kt hp khi biu thc
dng k hiu trung t. Giai on th hai c nhng quyt nh c th lin quan ti th
tc ca s nh gi (evalution) c to ra bao gm c s ti u ha qu trnh nh gi.
*
+ +
A B
C A
B C
*
Ngn ng lp trnh Chng VII: iu khin tun t

75
7.3.5 Biu din trong thi gian thc hin ca biu thc
Nhiu s biu din thi gian thc ca biu thc c dng trong ci t ngn ng. Sau
y l mt s s la chn c dng:
1/ Dy m my. K thut ph bin nht l dch cc biu thc thnh dng m my. Th
t cc lnh phn nh cu trc iu khin tun t ca bin thc ban u. Biu din m
my cho php dng trnh thng dch ca phn cng nn thc hin rt nhanh.
2/ Cu trc cy. Biu thc c th c thc hin mt cch trc tip trong biu din cu
trc cy t nhin ca chng, s dng trnh thng dch mm. y l k thut c bn
c dng trong LISP ni m ton b chng trnh c biu din nh l mt cu trc
cy trong qu trnh thc hin.
3/ Dng frefix hoc Postfix. Biu thc trong dng prefix hoc postfix c th c thc
hin bng gii thut thng dch m n qut biu thc t tri qua phi. Biu din postfix
c mt li ch c bit y, l th t ca cc k hiu trong biu din postfix tng
ng vi th t trong cc php ton khc nhau phi c thc hin. Biu din prefix
l dng c th thc hin ca chng trnh trong SNOBOL4.
Cc chin lc nh gia biu thc s c trnh by trong l thuyt chng trnh dch.
7.4 IU KHIN TUN T GIA CC LNH
7.4.1 Cc lnh c bn
Lnh c bn l lnh m trong khng cha cc lnh khc. Cc lnh c bn bao gm
lnh gn, li gi chng trnh con, cc lnh nhp, xut, lnh nhy goto. Trong mt
lnh c bn c th cha cc biu thc m cu trc iu khin c trnh by phn
trn.
Cc cu trc trong chng trnh thng c l: hp thnh, la chn v lp li. Cc ngn
ng khc nhau ci t cc cu trc ny mt ch khc nhau.
7.4.2 iu khin tun t dng nhn lnh v lnh GOTO
C ch ban u ca iu khin tun t trong hu ht cc ngn ng l ghi nhn lnh v
chuyn iu khin ti lnh c nhn t ch ny sang ch khc trong chng trnh. Vic
chuyn iu khin thng c thc hin bng lnh GOTO. C hai dng ca lnh
GOTO l:
1/ GOTO khng iu kin. Trong mt chui cc lnh, mt lnh GOTO khng iu
kin nh GOTO NEXT chuyn iu khin ti lnh c nhn l NEXT. Lnh ng sau
GOTO s khng c thc hin.
2/ GOTO c iu kin. Trong mt chui lnh, mt lnh GOTO c iu kin nh IF A
= 0 then GOTO NEXT chuyn iu khin ti lnh c nhn l NEXT ch khi iu kin
sau IF ng.
S dng hai dng GOTO ny, chng ta d dng biu din cc dng iu khin c bn
nh sau
Ngn ng lp trnh Chng VII: iu khin tun t

76

Lnh hp thnh Lnh la chn Lnh lp li
S0 S0 S0
GOTO L1 IF A=0 THEN GOTO
L1
L1: IF A=0 THEN
GOTO L2
L2: S2 S1 S1
GOTO L3 GOTO L2 GOTO L1
L1: S1 L1: S2 L2: S2
GOTO L2 L2: S3
L3 : S3
Chui lnh thc hin Chui lnh thc hin Chui lnh thc hin
S0 S1 S2 S3 S0 S1 S3 S0 S2
Hoc S0 S2 S3 Hoc S0 S1 S2
Hoc S0 S1 S1 S2
Hoc S0 S1 S1 S1 S2
Lnh GOTO c thun tin l d dng, v c hiu qu trong thc hin v n phn nh
cu trc c bn ca my tnh quy c (conventional computers), trong mi mt t
lnh hoc byte lnh u c a ch, v trong phn cng c cc lnh nhy c xy
dng chuyn iu kkhin n a ch c ch nh. Lnh GOTO biu th mt cu
trc iu khin t nhin ngi lp trnh chuyn ngn ng cp cao sang hp ng.
Hu ht cc ngn ng c u c c lnh GOTO c bn v nhiu dng ci tin t nn
mng cho vic dng nhn nh l d liu. Trong cc ngn ng mi nh Pascal iu
khin tun t trn c s lnh GOTO t quan trong hn mc d vn cn lnh .
Trong mt s ngn ng mi, lnh GOTO b loi b hon ton. V s dng nhn v
lnh GOTO th chng trnh tr nn rt kh c v khng c cu trc tng th v th
t cc lnh trong vn bn chng trnh ngun khng tng ng vi th t cc lnh khi
thc hin.
7.4.3 Cc lnh cu trc
Mt lnh c cu trc l mt lnh cha cc lnh khc. Cc lnh thnh phn ca mt
lnh c cu trc c th l mt lnh c bn hoc mt lnh c cu trc. Hu ht ngn
ng cung cp mt tp hp cc lnh c cu trc biu th cc dng iu khin c bn (
hp thnh, la chn v lp li) m khng cn dng lnh GOTO.
Lnh hp thnh (Compound Statements)
Lnh hp thnh l mt chui cc lnh c t vo trong mt cp k hiu th hin s
m u v kt thc ca chui . Chng hn trong Pascal, lnh hp thnh l chui cc
lnh c t trong cp t kha begin v end nh sau:
Begin
Lnh 1;
Ngn ng lp trnh Chng VII: iu khin tun t

77
Lnh 2;
.......
Lnh n
End
Cu trc lnh hp thnh cho php mt tp hp cc lnh c tru tng ha thnh mt
lnh n.
Lnh hp thnh c ci t trong my tnh o bng cch thit lp mt khi cc m
lnh c th thc hin c biu din cho mi mt lnh ca chui lnh trong b nh.
Th t m chng xut hin trong b nh xc nh th t trong chng c thc
hin.
Lnh iu kin (Conditional Statements)
Lnh iu kin l mt lnh biu th s la chn ca hai hoc nhiu lnh. Vic l chn
c iu khin bng cch kim tra mt s iu kin thng c vit trong dng biu
thc ca cc php ton quan h v logic. Cc lnh iu kin ph bin l lnh IF v
lnh CASE.
Lnh IF c c th ha thnh cc dng IF mt nhnh, IF hai nhnh v IF a nhnh.
Chn thc hin mt lnh c biu th l IF mt nhnh: IF <iu kin> THEN
<Lnh> ENDIF
Chn mt trong hai dng IF hai nhnh: IF <iu kin> THEN <Lnh1> ELSE
<Lnh2> ENDIF
Chn mt trong nhiu dng cc IF ni tip nhau hoc dng IF a nhnh:
IF <iu kin1> THEN <Lnh1>
ELSIF<iu kin2> THEN <Lnh2>
.
.
.
ELSIF <iu kinN> THEN <LnhN>
ELSE <LnhN+1> ENDIF
Lnh CASE
iu kin trong lnh If a nhnh thng phi lp li vic kim tra gi tr ca mt bin,
v d:
IF TAG = 0 THEN
<Lnh 0>
ELSIF TAG = 1 THEN
<Lnh 1>
ELSIF TAG = 2 THEN
<Lnh 2>
ELSE
<Lnh 3>
ENDIF
Cu trc ph bin ny c biu din mt cch sc tch hn bng lnh CASE
CASE TAG OF
0: <Lnh 0>
Ngn ng lp trnh Chng VII: iu khin tun t

78
1: <Lnh 1>
2: <Lnh 2>
OTHERS: <Lnh3>
ENDCASE
Ci t lnh iu kin
Lnh IF c ci t bng cch dng lnh r nhnh v lnh nhy c iu kin hoc
khng c iu kin trong phn cng. Kt qu tng t nh m t trong phn 7.3.2.
Lnh lp (Interation Statements)
Lp li n, kiu n gin nht ca lnh lp xc nh phn thn (ca lnh) c thc
hin mt s c nh ln. Lnh PERFORM ca COBOL l mt in hnh: PERFORM
<thn> k TIMES
Lp li khi iu kin ng: WHILE < test > DO <thn>
Lp li trong khi tng mt s m: FOR i:=1 STEP 2 UNTIL 30 DO <thn>
Lp khng xc nh, trong iu kin thot khi vng lp khng t ti u vng,
nh trong Ada:
LOOP
.......
EXIT WHEN <iu kin>
........
END LOOP;
Hoc trong Pascal s dng vng lp WHILE vi iu kin lun lun ng: WHILE
true DO BEGIN .... END;
Ci t cc lnh lp dng cc ch th r nhnh/ nhy ca phn cng.
7.5 S NGOI L V X L NGOI L
7.5.1 Mt s khi nim
Trong qu trnh thc hin chng trnh thng xy ra mt s s kin c bit hoc cc
li nh s trn s, truy xut n ch s mng nm ngoi tp ch s, thc hin lnh c
mt phn t cui tp tin... Cc s kin c gi l ngoi l (exception). Thay v
tip tc thc hin chng trnh bnh thng, mt chng trnh con s c gi
thc hin mt vi x l c bit no gi l x l ngoi l. Hnh ng ch n
ngoi l, ngt s thc hin chng trnh v chuyn iu khin n x l ngoi l c
gi l xut ngoi l (raising the exception)
7.5.2 X l ngoi l
Thng thng cc ngoi l c nh ngha trc bi ngn ng, chng hn nh
ZERO_DIVIDE ch s kin chia cho mt s khng, END_OF_FILE: ht tp tin ,
OVERFLOW: trn s, hay trn stack ... X l ngoi l l mt hnh vi x l tng ng
khi mt ngoi l c th din ra. V d
void example () {
Ngn ng lp trnh Chng VII: iu khin tun t

79
......
average = sum/total;
...
return ;
when zero_divide {
average = 0;
printf( error: cannot compute average, total is zero\n);
}
......
} /** function example **/
7.5.3 xut mt ngoi l
Mt ngoi l c th b xut bng php ton nguyn thu c nh ngha bi ngn
ng chng hn php cng, php nhn c th xut ngoi l OVERFLOW. Ngoi ra,
mt ngoi l c th b xut mt cch tng minh bi ngi lp trnh bng cch
dng mt lnh c cung cp cho mc ch . Chng hn trong Ada: raise
BAD_DATA_VALUE;
Lnh ny c th c thc hin trong mt chng trnh con sau khi xc nh mt bin
ring hoc tp tin nhp cha gi tr khng ng.
7.5.4 Lan truyn mt ngoi l (Propagating an exception)
Thng thng, khi xy dng chng trnh th v tr m mt ngoi l xut hin khng
phi l v tr tt nht x l n. Khi mt ngoi l c x l trong mt chng trnh
con khc ch khng phi trong chng trnh con m n c xut th ngoi l
c gi l c truyn (propagated) t im m ti n c xut n im m
n c x l.
Quy tc xc nh vic x l mt ngoi l c th thng c gi l chui ng
(dynamic chain) ca cc kch hot chng trnh con hng ti chng trnh con m n
xut ngoi l. Khi mt ngoi l P c xut trong chng trnh con C, th P c
x l bi mt x l c nh ngha trong C nu c mt ci x l nh th. Nu khng
c th C kt thc. Nu chng trnh con B gi C th ngoi l c truyn n B v mt
ln na c xut ti im trong B ni m B gi C. Nu B khng cung cp mt x
l cho P th B b kt thc v ngoi l li c truyn ti chng trnh gi B vn vn...
Nu cc chng trnh con v bn thn chng trnh chnh khng c x l cho P th
ton b chng trnh kt thc v x l chun c nh ngha bi ngn ng s c
gi ti.
Mt hiu qu quan trng ca quy tc ny i vi vic truyn cc ngoi l l n cho
php mt chng trnh con k tha (remain) nh l mt php ton tru tng c
nh ngha bi ngi lp trnh ngay c trong vic x l ngoi l. Mt php ton
nguyn thu c th bt ng ngt qu trnh bnh thng ca n v xut mt ngoi l.
Tng t, thng qua vic thc hin lnh RAISE, mt chng trnh con c th bt ng
ngt qu trnh bnh thng ca n v xut mt ngoi l. n chng trnh gi th
Ngn ng lp trnh Chng VII: iu khin tun t

80
hiu qu ca xut ngoi l ca chng trnh con cng ging nh hiu qu xut
ca php ton nguyn thy, nu chng trnh con t n khng c mt x l ngoi l.
Nu ngoi l c x l trong chng trnh con th chng trnh con tr v mt cch
bnh thng v chng trnh gi n khng bao gi bit c rng mt ngoi l
c xut.
7.5.5 Sau khi mt ngoi l c x l
Sau khi mt x l hon thnh vic x l mt ngoi l v x l kt thc th c
mt vn t ra l quyn iu khin c chuyn ti ch no? iu khin nn c
chuyn ti ch m ngoi l c xut? iu khin nn chuyn v lnh trong
chng trnh con cha x l ni m ngoi l c xut sau khi c truyn ti?
Chng trnh con cha x l t kt thc mt cch bnh thng v n xut hin ti
chng trnh gi nh l khng c g xy ra. y l nhng la chn khi thit k ngn
ng.
7.6 CU HI N TP
1. Th no l iu khin tun t?
2. Xt v mt cu trc th c nhng loi iu khin tun t no?
3. Xt v mt thit k ngn ng th c nhng loi iu khin tun t no?
4. Trong biu din trung t mt biu thc, khc phc tnh trng mt biu thc
c th c nhiu cy biu thc (tnh trng mp m), ngi ta thng s dng cc
quy tc g?
Ngn ng lp trnh Chng VIII: Lp trnh hm

81
CHNG 8: LP TRNH HM
8.1 TNG QUAN
8.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v lp trnh hm.
- K thut lp trnh qui.
- Cc cu trc c bn ca ngn ng LISP
8.1.2 Ni dung ct li
- Lp trnh hm.
- Cn bn v ngn ng lp trnh LISP.
8.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn.
8.2 NGN NG LP TRNH HM
8.2.1 Gii thiu
Hu ht cc ngn ng lp trnh t trc n nay c xy dng da trn nguyn l
kin trc my tnh Von Neumann. Lp ch yu trong cc ngn ng l cc ngn ng
ra lnh. n v lm vic trong mt chng trnh l cu lnh. Kt qu ca tng cu lnh
c t hp li thnh kt qu ca c chng trnh. Cc ngn ng ny bao gm:
FORTRAN, COBOL, Pasacl, Ada... Mc d ngn ng ra lnh c hu ht ngi
lp trnh chp nhn nhng s lin h cht ch vi kin trc my tnh l mt hn ch
n vic pht trin phn mm.
Ngn ng lp trnh hm c thit k da trn cc hm ton hc l mt trong nhng
ngn ng khng ra lnh quan trng nht. Trong LISP l mt ngn ng tiu biu.
8.2.2 Hm ton hc
Hm l mt s tng ng gia cc phn t ca mt tp hp (min xc nh) vi cc
phn t ca mt tp hp khc (min gi tr). nh ngha hm xc nh min xc nh,
min gi tr v quy tc tng ng gia cc phn t ca min xc nh vi cc phn t
ca min gi tr. Thng thng s tng ng c m t bi mt biu thc. Hm ton
hc c hai c trng c bn l:
- Th t nh gi biu thc c iu khin bi s quy v biu thc iu kin
ch khng phi bng cch lp li v lin tip nh trong cc ngn ng ra lnh.
- Hm ton hc khng c hiu ng l cho nn vi cng mt tp i s, hm ton hc
lun cho cng mt kt qu.
nh ngha hm thng c vit bi tn hm, danh sch cc tham s nm trong cp
du ngoc v sau l biu thc, v d: lap_phuong(x) x*x*x trong x l mt s
thc. Min xc nh, min gi tr l cc tp s thc.
Ngn ng lp trnh Chng VIII: Lp trnh hm

82
Lc p dng, mt phn t c th ca min xc nh gi l i s thay th cho tham s
trong nh ngha hm. Kt qu hm thu c bng cch nh gi biu thc hm. V d
lap_phuong(2.0) cho gi tr l 8.0. Trong nh ngha hm, x i din cho mi phn t
ca min xc nh. Trong lc p dng, n c cho mt gi tr (chng hn 2.0), gi tr
ca n khng thay i sau . iu ny tri ngc vi bin trong lp trnh c th nhn
cc gi tr khc nhau trong qu trnh thc hin chng trnh.
Trong nh ngha hm, ta bt cp tn hm vi biu thc x*x*x. i khi ngi ta s
dng hm khng tn, trong trng hp ngi ta s dng biu thc lambda. Gi tr
ca biu thc lambda chnh l hm ca n. V d (x)x*x*x. Tham s trong biu thc
lambda c gi l bin kt ghp. Khi biu thc lambda c nh gi i vi mt
tham s cho, ngi ta ni rng biu thc c p dng cho tham s .
8.2.3 Dng hm
Dng hm l s t hp ca cc hm. Dng hm ph bin nht l hm hp. Nu f c
nh ngha l hm hp ca g v h, c vit l f g.h th vic p dng f c nh
ngha l s p dng h sau p dng g ln kt qu.
Xy dng (construction) l mt dng hm m cc tham s ca chng l nhng hm.
Ngi ta k hiu mt xy dng bng cch cc hm tham s vo trong cp du
ngoc vung. Khi p dng vo mt i s th cc hm tham s s c p dng vo
i v tp hp cc kt qu vo trong mt danh sch. V d: G(x) x*x, H(x) 2*x
v I(x) x/2 th [G,H,I](4) c kt qu l (16,8,2).
p dng cho tt c l mt dng hm m n ly mt hm n nh l mt tham s. p
dng cho tt c c k hiu l . Nu p dng vo mt danh sch cc i th p dng
cho tt c s p dng hm tham s cho mi mt gi tr v tp hp cc kt qu vo trong
mt danh sch. V d
Cho h(x) x*x th (h, (2,3,4)) c kt qu l (4,9,16)
8.2.4 Bn cht ca ngn ng lp trnh hm
Mc ich ca vic thit k ngn ng lp trnh hm l m phng cc hm ton hc mt
cch nhiu nht c th c. Trong ngn ng ra lnh, mt biu thc c nh gi v
kt qu ca n c lu tr trong nh c biu din bi mt bin trong chng
trnh. Ngc li, trong ngn ng lp trnh hm khng s dng bin v do khng cn
lnh gn. iu ny gii phng ngi lp trnh khi mi quan tm v nh ca my
tnh trong khi thc hin chng trnh. Khng c bin cho nn khng c cu trc lp (v
cu trc lp c iu khin bi bin). Cc lnh lp li s c x l bng gii php
quy. Chng trnh l cc nh ngha hm v cc p dng hm. S thc hin l vic
nh gi cc p dng hm. S thc hin mt hm lun cho cng mt kt qu khi ta cho
n cng mt i s. iu ny gi l trong sut tham kho (referential transparancy).
N cho thy rng ng ngha ca ngn ng lp trnh hm n gin hn ng ngha ca
ngn ng lp trnh ra lnh v ngn ng hm bao gm c nhng nt c bit ca ngn
ng ra lnh.
Ngn ng hm cung cp mt tp hp cc hm nguyn thy, mt tp cc dng hm
xy dng cc hm phc tp t cc hm c. Ngn ng cng cung cp mt php ton
p dng hm v cc cu trc lu tr d liu. Mt ngn ng hm c thit k tt l
Ngn ng lp trnh Chng VIII: Lp trnh hm

83
mt ngn ng c tp hp nh cc hm nguyn thy. Phn sau chng ta lm quen vi
mt ngn ng lp trnh hm kh ni ting l ngn ng LISP.
8.3 NGN NG LISP
8.3.1 Gii thiu:
c J. MAC CARTHY vit nm 1958, LISP l mt trong nhng ngn ng lp trnh
sm nht. u nm nhng nm 80, LISP c pht trin mnh nh nhng p dng
trong lnh vc tr tu nhn to. LISP c cc u im chnh nh sau:
C php n gin. Trong LISP ch c mt cu trc duy nht l cu trc danh sch
(LISP l ngn ng x l danh sch: LISP = LISt Processing language), khng c
lnh, khng c t kha, tt c cc hm u c vit di dng danh sch.
L mt ngn ng mnh nh tnh tng ng gia d liu v chng trnh: d liu
v chng trnh u l danh sch, chng c th thao tc nh chung mt cng c.
Mm do v d pht trin.
8.3.2 Cc khi nim c bn
Nguyn t (atom)
Nguyn t l mt i tng c bn ca LISP, nguyn t c th l s hoc k hiu.
S. D liu s trong LISP cng ging nh trong mt s ngn ng lp trnh khc
nh Pascal, C
V d v cc hng s: 5, -17, 5.35, 3/4, 118.2E+5,...
K hiu (symbol) l mt chui cc k t (tr cc k t c bit, du ngoc v
khong trng). Cc hng k hiu c vit m u bng du nhy n .
V d v cc hng k hiu: a, anh, anh_ba,...
Mt s k hiu c nh ngha trc nh: T (v mt logic, c hiu l TRUE), NIL
(v mt logic, c hiu l FALSE).
Hng k hiu s c xem nh l mt s, chng hn 5 = 5.
Danh sch
Danh sch l mt dy c phn bit th t ca cc phn t cch nhau t nht mt
khong trng v t nm trong cp du ngoc n ().
Phn t ca danh sch c th l mt nguyn t hoc l mt danh sch.
Hng danh sch c m u bng du nhy n .
V d v cc hng danh sch:
- () Danh sch rng, tng ng k hiu NIL.
- (a 5 c) Danh sch gm 3 phn t.
- (3 (b c) d (e (f g))) Danh sch gm 4 phn t, trong phn t th 2 v phn
t th 4 li l cc danh sch.
Ngn ng lp trnh Chng VIII: Lp trnh hm

84
Biu thc
Biu thc l mt nguyn t hoc mt danh sch. Biu thc lun c mt gi tr m vic
nh tr n theo nguyn tc sau:
Nu biu thc l mt s, th gi tr ca biu thc l gi tr ca s .
V d:
> 25
= 25
Nu biu thc l mt k hiu th gi tr ca biu thc c th l
- c xc nh trc bi LISP (chng hn t c gi tr l T (TRUE) v nil c
gi tr l NIL mt danh sch rng) hoc
- Mt gi tr d liu ca ngi s dng hoc trong chng trnh c gn cho
mt bin. Bin khng cn phi khai bo.
V du:
> (setq a 3) ; Gn s 3 cho bin c tn a
= 3
> a ; hi gi tr ca k hiu a
= 3
Nu biu thc l mt danh sch c dng (E
0
E
1
... E
n
) th gi tr ca biu thc c
xc nh theo cch sau y:
- Phn t u tin E
0
phi l mt hm c LISP nhn bit.
- Cc phn t E
1
, E
2
, ..., E
n
c nh tr tun t t tri sang phi. Gi s ta c
cc gi tr tng ng l V
1
, V
2
, ..., V
n

- Hm E
0
c p dng cho cc i V
1
, V
2
, ..., V
n
. Gi tr ca hm E
0
chnh l
gi tr ca biu thc.
V d
> (+ 5 3 6)
= 14
> ( + 4 (+ 3 5))
= 12
- Ch : Nu biu thc dng hm QUOTE hoc du nhy n s khng c
nh gi
V d:
> (+ 1 2)
= (+ 1 2)
Ngn ng lp trnh Chng VIII: Lp trnh hm

85
8.3.3 Cc hm
Mt chng trnh ca LISP l mt hm hoc mt hm hp. Cc hm c th do LISP
nh ngha trc hoc do lp trnh vin t nh ngha.
Mt s hm nh ngha trc
Cc hm s hc: +, -, *, /, 1+, 1-, MOD, SQRT tc ng ln cc biu thc s v
cho kt qu l mt s.
V d:
> (+ 5 6 2)
= 13
> (- 8 3)
= 5
> (- 8 3 1)
= 4
>(1+ 5) ; Tng ng (+ 5 1)
= 6
> (1- 5) ; Tng ng (- 5 1)
= 4
>(MOD 14 3)
= 2
>(sqrt 9) ; Ly cn bc hai ca 9
= 3
Cc hm so snh cc s <, >, <=, >=, = v /=, cho kt qu l T hoc NIL
V d:
>(< 4 5)
= T
>(> 4 (* 2 3))
= NIL
(EQ s1 s2) so snh xem hai k hiu s1 v s2 c ging nhau hay khng?
V d:
>(eq tuong tuong)
= T
>(eq tuong duong)
= NIL
>(eq 5 5 )
Ngn ng lp trnh Chng VIII: Lp trnh hm

86
= T
(EQUAL o1 o2) so snh xem i tng bt k o1 v o2 c ging nhau hay
khng?
V d:
>(equal (a b c) (a b c))
= T
>(equal (a b c) ( b a c))
= NIL
>(equal a a)
= T
Cc hm thao tc trn danh sch: CAR, CDR, CONS v LIST
- (CAR L) nhn vo danh sch L, tr v phn t u tin ca L.
V du:
> (CAR '(1 2 3))
= 1
> (CAR 3)
Error: bad argument type - 3
>(CAR nil)
= NIL
> (CAR '((a b) 1 2 3))
= (A B)
- (CDR L) nhn vo danh sch L, tr v mt danh sch bng phn cn li ca
danh sch L sau khi b i phn t u tin.
V d:
>(cdr '(1 2 3))
= (2 3)
>(cdr 3)
Error: bad argument type - 3
>(cdr nil)
= NIL
>(cdr '(1))
= NIL
>(CAR (CDR (a b c)))
= B
Ngn ng lp trnh Chng VIII: Lp trnh hm

87
- Vit gp cc hm: Ta c th dng hm C..A/D..R kt hp nhiu CAR v
CDR (c th thay th vic lng nhau ti 4 cp)
V du:
(CADR (a b c))
= B
- (CONS x L) nhn vo phn t x v danh sch L, tr v mt danh sch, c
c bng cch thm phn t x vo u danh sch L
V du:
>(CONS 3 '(1 2 3))
= (3 1 2 3)
>(CONS 3 nil)
= (3)
>(CONS '(a b) '(1 2 3))
= ((A B) 1 2 3)
- (LIST E
1
E
2
... E
n
) nhn vo n biu thc E
1
, E
2
, ..., E
n
,
tr v danh sch bao
gm n phn t V
1
, V
2
, ..., V
n
,
trong V
i
l gi tr ca biu thc E
i
(i=1..n) .
V du:
>(list 1 2)
= (1 2)
>(list 'a 'b)
= (A B)
>(list 'a 'b (+ 2 3 5))
= (A B 10)
Cc v t kim tra
- (ATOM a) xt xem a c phi l mt nguyn t.
- (NUMBERP n) xt xem n c phi l mt s.
- (LISTP L) xt xem L c phi l mt danh sch.
- (SYMBOLP S) xt xem S c phi l mt k hiu.
- (NULL L) nhn vo 1 danh sch L. Nu L rng th tr v kt qu l T,
ngc li th tr v kt qu l NIL.
V du:
>(atom 'a)
= T
>(numberp 4)
= T
Ngn ng lp trnh Chng VIII: Lp trnh hm

88
>(symbolp 'a)
= T
>(listp '(1 2))
= T
>(symbolp NIL)
= T
>(listp NIL)
= T
>(null NIL)
= T
>(null (a b))
= NIL
>(null 10)
= NIL
Cc hm logic AND, OR v NOT
- (AND E
1
E
2
... E
n
) nhn vo n biu thc E
1
, E
2
,... E
n
. Hm AND nh tr cc
biu thc E
1
E
2
... E
n
t tri sang phi. Nu gp mt biu thc l NIL th
dng v tr v kt qu l NIL. Nu tt c cc biu thc u khc NIL th tr
v gi tr ca biu thc E
n
.
V d:
>(AND (> 3 2) (= 3 2) (+ 3 2))
= NIL
>(AND (> 3 2) (- 3 2) (+ 3 2))
= 5
- (OR E
1
E
2
... E
n
) nhn vo n biu thc E
1
, E
2
,... E
n
. Hm OR nh gi cc
biu thc E
1
E
2
... E
n
t tri sang phi. Nu gp mt biu thc khc NIL th
dng v tr v kt qu l gi tr ca biu thc . Nu tt c cc biu thc
u l NIL th tr v kt qu l NIL.
V du:
>(OR (= 3 2) (+ 2 1) (list 1 2))
= 3
>(OR (= 2 1) (Cdr (a) ) (listp 3 ))
= NIL
- (NOT E) nhn vo biu thc E. Nu E khc NIL th tr v kt qu l NIL,
ngc li th tr v kt qu l T.

Ngn ng lp trnh Chng VIII: Lp trnh hm

89
Cc hm iu khin
- (IF E
1
E
2
E
3
) nhn vo 3 biu thc E
1
, E
2
v E
3
. Nu E
1
khc NIL th hm
tr v gi tr ca E
2
ngc li tr v gi tr ca E
3

- (IF E
1
E
2
) tng ng (IF E
1
E
2
NIL)
- Nu E
2
khc NIL th (IF E
1
E
2
E
3
) tng ng (OR (AND E
1
E
2
) E
3
)
- (COND (K
1
E
1
)
(K
2
E
2
)
..................
(K
n
E
n
)
[(T E
n+1
)]
)
Nu K
1
khc NIL th tr v kt qu l gi tr ca E
1
, ngc li s xt K
2
.
Nu K
2
khc NIL th tr v kt qu l gi tr ca E
2
, ngc li s xt K
3
...
......
Nu K
n
khc NIL th tr v kt qu l gi tr ca E
n
, ngc li s tr v NIL
hoc tr v kt qu l gi tr ca E
n+1
(trong trng hp ta s dng (T E
n+1
))
- (PROGN E
1
E
2
... E
n
) nhn vo n biu thc E
1
, E
2
,... E
n
. Hm nh tr cc
biu thc E
1
, E
2
,... E
n
t tri sang phi v tr v kt qu l gi tr ca biu
thc E
n
.
- (PROG1 E
1
E
2
... E
n
) nhn vo n biu thc E
1
, E
2
,... E
n
. Hm nh tr cc
biu thc E
1
, E
2
,... E
n
t tri sang phi v tr v kt qu l gi tr ca biu
thc E1.
Hm do ngi lp trnh nh ngha
C php nh ngha hm l:
(defun <tn hm> <danh sch cc tham s hnh thc>
<biu thc>
)
V d 1: nh ngha hm ly bnh phng ca s a
(defun binh_phuong (a)
(* a a)
)
Sau khi np hm ny cho LISP, ta c th s dng nh cc hm c nh ngha
trc.
>(binh_phuong 5)
= 25
>(binh_phuong (+ 5 2))
= 49
V d 2: nh ngha hm DIV chia s a cho s b, ly phn nguyn.
Ngn ng lp trnh Chng VIII: Lp trnh hm

90
Trc ht ta c: a DIV b = (a a MOD b)/b
(defun DIV (a b)
(/ (- a (MOD a b)) b)
)
8.3.4 quy
Mt hm quy l mt hm c li gi chnh n trong biu thc nh ngha hm. M t
mt quy bao gm:
C t nht mt trng hp dng kt thc vic gi quy.
Li gi quy phi bao hm yu t dn n cc trng hp dng.
V d 1: Vit hm tnh n giai tha
Cng thc quy tnh n giai tha l

=
=
1)! (n * n
0 n neu 1
n!
Hm (giai_thua N) vit bng ngn ng LISP:
(defun giai_thua (n)
(if (= n 0) 1 ; trng hp dng
(* n (giai_thua (1- n))); n-1 l yu t dn n trng hp dng
) ; If
)

V d 2: Vit hm DIV chia a cho b ly phn nguyn, vit bng quy.
Cng thc quy:

+
<
=
b DIV b) (a 1
b a neu 0
b DIV a
Hm (DIV a b) vit bng LISP:
(defun DIV (a b)
(if (< a b) 0 ; Trng hp dng
(1+ (DIV (- a b) b)); a-b l yu t dn n trng hp dng
) ; If
)

V d 3: Vit hm (phan_tu i L), nhn vo s nguyn dng i v danh sch L. Hm
tr v phn t th i trong danh sch L hoc thng bo khng tn ti.
Cng thc quy:

= =
L cua duoi" " DS trong 1) (i u Phan tu th
1 i neu L cua dau tien Phan tu
rong L DS neu ton tai" Khong "
L DS trong i u Phan tu th
Hm (phan_tu i L) vit bng LISP:
(defun phan_tu(i L)
(cond
((Null L) Khong ton tai)
((= i 1) (car L)); trng hp dng th hai
(T (phan_tu (1- i) (cdr L)))
Ngn ng lp trnh Chng VIII: Lp trnh hm

91
) ; cond
)

Trong chng trnh trn, (null L) l trng hp dng th nht; (= i 1) l trng hp
dng th hai; (cdr L) l yu t dn n trng hp dng th nht v (1- i) yu t
dn n trng hp dng th hai.
8.3.5 Cc hm nhp xut
(LOAD <Tn tp tin>)
Np mt tp tin vo cho LISP v tr v T nu vic np thnh cng, ngc li tr v
NIL. Tn tp tin l mt chui k t c th bao gm c ng dn n ni lu tr tp tin
. Tn tp tin theo quy tc ca DOS, ngha l ch c ti a 8 k t trong phn tn v
3 k t phn m rng v khng cha cc k t c bit.
Ta c th s dng LOAD np mt tp tin chng trnh ca LISP trc khi gi thc
hin cc hm c nh ngha trong tp tin .
V d:
>(Load D:\btlisp\bai1.lsp)
(READ)
c d liu t bn phm cho n khi g phm Enter, tr v kt qu l d liu c
nhp t bn phm.
(PRINT E)
In ra mn hnh gi tr ca biu thc E, xung dng v tr v gi tr ca E.
(PRINC E)
In ra mn hnh gi tr ca biu thc E (khng xung dng) v tr v gi tr ca E.
(TERPRI)
a con tr xung dng v tr v NIL.
8.3.6 Bin ton cc v bin cc b
Bin ton cc
Bin ton cc (global variables) l bin m phm vi ca n l tt c cc hm. Bin ton
cc s t ng gii phng khi chng trnh dch LISP kt thc.
Hm (SETQ <tn bin> <biu thc>)
Gn tr ca <biu thc> cho <tn bin> v tr v kt qu l gi tr ca <biu thc>.
V d:
>(setq x (* 2 3))
= 6
> x ; bin x vn cn tn ti v c gi tr l 6
Ngn ng lp trnh Chng VIII: Lp trnh hm

92
= 6
Bin cc b
Bin cc b (local variables) l bin m phm vi ca n ch nm trong hm m n
c to ra. Bin cc b s t ng gii phng hm to ra n kt thc.
(LET ( (var1 E1) (var2 E2) ... (vark Ek)) Ek+1 ... En)
Ta thy hm ny c 2 phn: phn gn tr cho cc bin v phn nh tr cc biu thc.
Gn tr ca biu thc E
i
cho bin cc b var
i
tng ng v thc hin (PROGN E
k+1
...
E
n
).
V d:
>(Let ((a 3) (b 5)) (* a b) (+ a b))
= 8
> a ; bin a lc ny c gii phng nn LISP s thng bo li
error: unbound variable - A
Bin cc b che bin ton cc
Trong lp trnh hm, ngi ta rt hn ch s dng bin, nu tht s cn thit th nn s
dng bin cc b. Tuy nhin vic khai bo bin cc b trong hm LET gy kh khn
cho vic vit chng trnh hn l s dng bin ton cc. khc phc tnh trng ny,
ta s kt hp c hai hm LET v SETQ s dng bin cc b che bin ton cc.
Cch lm nh sau:
- Trong phn gn tr cho bin ca LET ta to ra mt bin v gn cho n mt gi
tr bt k, chng hn s 0.
- Trong phn nh tr cc biu thc, ta c th s dng SETQ gn tr cho bin
to ra trn, bin ny s l mt bin cc b ch khng cn l ton cc na.
- C th chng ta c th vit:
(LET ( (var E1)..)
.
(SETQ var E2)

)
Vi cch lm ny th bin var trong hm SETQ s tr thnh bin cc b.
V d: Gi s ta nh ngha c hm (ptb2 a b c), gii phng trnh bc hai
ax
2
+bx+c = 0. By gi ta vit hm (giai_ptb2) cho php nhp cc h s a, b, c t bn
phm v gi hm (ptb2 a b c) thc hin vic gii phng trnh. C hai phng
php vit hm ny.
Phng php 1: dng cc bin ton cc a, b, c
(defun giai_ptb2 ()
(progn
(print Chng trnh gii phng trnh bc hai)
Ngn ng lp trnh Chng VIII: Lp trnh hm

93
(princ Nhp h s a: ) (setq a (read))
(princ Nhp h s b: ) (setq b (read))
(princ Nhp h s c: ) (setq c (read))
(ptb2 a b c)
)
)
Sau khi thc hin chng trnh ny, th cc bin ton cc a, b v c vn cn.
Phng php 2: dng cc bin cc b d, e, f
(defun giai_ptb2 ()
(let ((d 0) (e 0) (f 0))
(print Chng trnh gii phng trnh bc hai)
(princ Nhp h s a: ) (setq d (read))
(princ Nhp h s b: ) (setq e (read))
(princ Nhp h s c: ) (setq f (read))
(ptb2 d e f)
)
)
Sau khi thc hin chng trnh ny, th cc bin cc b d, e v f c gii phng.
8.3.7 Hng dn s dng LISP
S dng XLISP
XLISP l mt trnh thng dch, chy di h iu hnh Windows. Ch cn chp tp tin
thc thi XLISP.EXE c dung lng 288Kb vo my tnh ca bn l c th thc hin
c.
thc hin cc hm, ch cn g trc tip hm vo sau du ch lnh (>) ca
XLISP. Trong trng hp khng c du ch lnh, hy dng menu Run/Top level hoc
Ctrl-C lm xut hin du ch lnh.
Vic nh ngha mt hm cng c th g trc tip vo sau du ch lnh. Tuy nhin
cch lm ny s kh sa cha hm v do vy ta thng nh ngha cc hm trong
mt tp tin chng trnh, sau np vo cho XLISP s dng.
Ta c th lu tr li tnh trng lm vic hin hnh vo trong tp tin .WKS bng cch
dng menu File/Save workspace v sau c th khi phc li bng cch dng menu
File/Restore workspace.
Son tho tp tin chng trnh
Do XLISP khng c cng c son tho chng trnh nn ta c th s dng Notepad
son tho tp tin chng trnh.
Trong mt tp tin chng trnh ta c th nh ngha nhiu hm.
Lu tp tin chng trnh c tn theo quy nh ca DOS (8.3) vi phn m rng .LSP
v trong cp du nhy kp.
Ngn ng lp trnh Chng VIII: Lp trnh hm

94
Np hm t nh ngha cho XLISP
C hai phng php np cc hm t nh ngha cho XLISP:
Phng php 1: Copy v dn khi
- Trong Notepad, nh du khi mt hm t nh ngha v copy khi
(Edit/Copy hoc Ctrl-C).
- Trong XLISP, dn khi ti du ch lnh (Edit/Paste hoc Ctrl-Ins).
- Vi phng php ny th khi vit cc hm, khng nn vit mt dng lnh
qu di.
- Nu khi hm dn vo khng c li th tn hm s xut hin v ta c th s
dng c hm .
- Phng php ny rt ph hp vi vic kim th tng hm.
Phng php 2: M tp tin chng trnh
- Trong XLISP, s dng menu File-Open/Load m tp tin chng trnh
cha cc hm c vit v lu tr bi Notepad. Chng ta cng c th s
dng hm (LOAD <tn tp tin>) m tp tin chng trnh.
- Nu vic m thnh cng th c th gi thc hin bt k hm no c trong
tp tin chng trnh.
- Nu c mt hm vit sai du ngoc th vic m tp tin s tht bi v do ta
khng th dng bt k hm no trong tp tin .
- Phng php ny thch hp vi vic np nhiu hm c kim chng
trong mt tp tin chng trnh s dng.
Mt s thng bo li thng gp
- Unbound function: Hm khng c.
- Bad function: Hm sai.
- Too many arguments: Tha tham s.
- Too few arguments: Thiu tham s.
- Misplaced close paren: Tha du ngoc ng/ Thiu du ngoc m.
- EOF reached beore expression end: Tha du ngoc m/ Thiu du ngoc
ng.
- Not a number: i s ca hm phi l mt s.
- Bad argument type: Kiu ca tham s sai.

Ngn ng lp trnh Chng IX: Lp trnh logic

95
CHNG 9: LP TRNH LOGIC
9.1 TNG QUAN
9.1.1 Mc tiu
Sau khi hc xong chng ny, sinh vin cn phi nm:
- Khi nim v lp trnh logic.
- Cc nguyn tc trong lp trnh logic.
- Vit chng trnh n gin bng ngn ng Prolog.
9.1.2 Ni dung ct li
- Lp trnh logic.
- Cn bn v ngn ng lp trnh Prolog.
9.1.3 Kin thc c bn cn thit
Kin thc v k nng lp trnh cn bn
9.2 GII THIU V LP TRNH LOGIC
Trong lp trnh logic, ta c th s dng cc v t nh ngha cc khi nim ca tt c
cc mn khoa hc khc.
V d nh ngha mt s nguyn t:
S nguyn t N l mt s nguyn ln hn 1, ch chia ht cho 1 v chnh n.
xt xem s N c phi l s nguyn t hay khng, ngi ta thng s dng du hiu
nhn bit: S nguyn t l mt s nguyn dng, khng chia ht cho mi s nguyn
t nh hn n v 2 l s nguyn t nh nht.
Du hiu ny c th m t bng cc v t nh sau:
- 2 l mt s nguyn t.
- N l mt s nguyn t nu N>0, M l s nguyn t no , M<N v N khng
chia ht cho M.
Khi m t bi ton di dng logic v t, ta c th yu cu h thng tm kim cc li
gii lin quan n cc khai bo . Bi ton cn gii c xem l mc tiu m h
thng phi chng minh trn c s cc tri thc c khai bo.
Nh th, ton b cc k hiu ca ngn ng lp trnh suy v mt cng thc c bit:
- Pht sinh t mt yu cu.
- Nhm chng minh mt mc tiu. tr li cho cu hi h thng xem n nh
l mt ch v c chng minh ch bng cch to nhng suy din trn c
s cc tri thc khai bo.
Mt ngn ng logic c th c dng trong giai on c t yu cu ca quy trnh xy
dng mt sn phm phn mm. Hn th na, logic v t cho php biu din hu ht
cc khi nim v cc nh l trong cc b mn khoa hc.
Ngn ng lp trnh Chng IX: Lp trnh logic

96
Mt trong nhng ngn ng lp trnh logic c h tr rt nhiu cho lnh vc tr tu nhn
to m ta xt n y l ngn ng Prolog.
9.3 NGN NG PROLOG
9.3.1 Gii thiu
Prolog l mt ngn ng cp cao, c c im gn vi ngn ng t nhin, t nhng
ngi mi hc n nhng lp trnh vin chuyn nghip u c th tip cn mt cch
nhanh chng, vit ra mt chng trnh ng dng hu ch.
Prolog ra i vo nm 1973 do C.Camerauer (i hc Marseilles, Php) v nhm
ng s pht trin. T n nay, qua nhiu ln ci tin, c bit hng Borland cho ra
i phn mm TURBO PROLOG vi nhiu u im, thun tin cho ngi s dng.
gii quyt mt s vn , ta nhn thy s dng ngn ng Prolog cho ta chng
trnh gn nh hn nhiu so vi cc ngn ng khc.
Khc vi nhng ngn ng cu trc nh Pascal, hay C m ta lm quen, Prolog l
mt ngn ng m t, vi mt s s kin v quy lut suy din m t, Prolog s suy
lun cho ta cc kt qu.
9.3.2 Cc yu t c bn ca Turbo Prolog
Trong mt chng trnh Prolog, ta cn khai bo cc yu t sau y: i tng, quan h
gia cc i tng, s kin v cc lut.
i tng
Gm c cc hng v bin. Hng mang gi tr cho sn u chng trnh hoc trong
qu trnh vit ta a vo; Cc bin c gi tr thay i s c gn gi tr khi chy
chng trnh. Tn bin l mt k t hoa hoc mt chui k t, bt u bng mt k t
hoa.
C mt loi bin c bit gi l bin t do, bin ny khng c tn v ngi ta dng k
hiu _ (du gch di) thay cho tn bin.
Quan h gia cc i tng
Quan h gia cc i tng c dng di hnh thc v t.
V d: Thich(X,Y) l v t din t cu X thch Y trong ngn ng t nhin.
Blue(car) l v t din t cu Car is blue.
Nh vy cc v t s bao gm tn ca v t v cc i s ca n. Cc i s c t
trong ngoc v phn cch nhau bi du phy.
S kin v lut
S kin l mt v t din t mt s tht.
V d: 2 l mt s nguyn t l mt s kin v n din t s tht 2 l mt s nguyn
t.
Lut l v t din t quy lut suy din m ta cng nhn ng. Lut c trnh by di
dng mt mnh .
Ngn ng lp trnh Chng IX: Lp trnh logic

97
V d suy din s nguyn N bt k l mt s nguyn t ta vit:
N l mt s nguyn t nu N>0, M l s nguyn t no , M<N v N khng chia ht
cho M.
9.3.3 Cu trc ca mt chng trnh Prolog
Mt chng trnh Prolog thng gm c 3 hoc 4 on c bn: clauses, predicates,
domains v goal. Phn goal c th b i, nu ta khng thit k goal trong chng trnh,
th khi thc hin, h thng s yu cu ta nhp goal vo.
Phn Domains
y l phn nh ngha kiu mi da vo cc kiu bit. Cc kiu c nh ngha
y s c s dng cho cc i s trong cc v t. Nu cc v t s dng i s c
kiu c bn th c th khng cn phi nh ngha li cc kiu . Tuy nhin cho
chng trnh sng sa, ngi ta s nh ngha li c cc kiu c bn.
C php: <danh sch kiu mi> = <kiu bit> hoc <danh sch kiu mi> =
<danh sch kiu bit>
Trong cc kiu mi phn cch nhau bi du phy, cn cc kiu bit phn cch
nhau bi du chm phy.
V d:
Domains
ten, tac_gia, nha_xb, dia_chi = string
nam, thang, so_luong = integer
dien_tich = real
nam_xb = nxb(thang, nam)
do_vat = sach(tac_gia, ten, nha_xb, nam_xb); xe(ten, so_luong); nha(dia_chi,
dien_tich)
Trong v d trn, ta nh ngha cc kiu mi, trong cc kiu mi ten, tac_gia,
nha_xb, dia_chi da vo cng mt kiu bit l string; cc kiu mi nam, thang,
so_luong da vo cng mt kiu bit l integer; kiu mi dien_tich da vo kiu
bit l real; kiu mi nm_xb da vo kiu nxb c xy dng t cc kiu bit l
thang, nam; cn kiu do_vat li da vo cc kiu sach, xe, nha m cc kiu ny li da
vo cc kiu bit.
Phn Predicates
y l phn bt buc phi c. Trong phn ny chng ta cn phi khai bo y cc
v t s dng trong phn Clauses, ngoi tr cc v t m Turbo Prolog xy dng
sn.
C php: <Tn v t> (<danh sch cc kiu>)
Cc kiu l cc kiu c bn hoc l cc kiu c nh ngha trong phn domains
v c vit phn cch nhau bi du phy.
V d:
Predicates
so_huu (ten, do_vat)
Ngn ng lp trnh Chng IX: Lp trnh logic

98
so_nguyen_to(integer)
Trong v d trn ta khai bo hai v t. Trong v t so_huu (ten, do_vat) ch mt
ngi c tn l ten s s hu mt do_vat no . Cn v t so_nguyen_to(integer)
xt xem mt s integer no c phi l s nguyn t hay khng.
Phn Clauses
y l phn bt buc phi c dng m t cc s kin v cc lut, s dng cc v t
khai bo trong phn predicates.
C php:
<Tn v t>(<danh sch cc tham s>) <k hiu>
<Tn v t 1>(<danh sch cc tham s 1>) <k hiu>

<Tn v t N>(<danh sch cc tham s N>) <k hiu>
Trong : Tn v t phi l cc tn v t c khai bo trong phn predicates. Cc
tham s c th l cc hng hoc bin c kiu tng thch vi cc kiu tng ng
c khai bo trong cc v t trong phn predicates; cc tham s c vit cch
nhau bi du phy. Cc k hiu bao gm:
:- (iu kin nu).
, (iu kin v).
; (iu kin hoc).
. (kt thc v t)
V d:
Clauses
so_nguyen_to(2):- !.
so_nguyen_to(N):- N>0,
so_nguyen_to(M),
M<N,
N MOD M <>0.
so_huu(Nguyen Van A, sach(Do Xuan Loi, Cau truc DL, Khoa hoc Ky
thuat, nxb(8,1985))).
Ch : Nu trong cc tham s ca mt v t c bin th bin ny phi xut hin t nht
2 ln trong v t hoc trong cc v t dng suy din ra v t . Nu ch xut hin
mt ln th bt buc phi dng bin t do.
V d: din t s kin: T hp chp 0 ca N (N bt k) bng 1, ta khng th vit
Tohop(N,0,1) v bin N ch xut hin ng mt ln trong v t ny, do ta phi vit
Tohop(_,0,1) .
Phn Goal
Bao gm cc mc tiu m ta yu cu Turbo Prolog xc nh v tm kt qu. y l
phn khng bt buc phi c. Nu ta vit sn trong chng trnh th gi l goal ni;
Nu khng, khi chy chng trnh Turbo Prolog s yu cu ta nhp goal vo, lc ny
gi l goal ngoi.
Ngn ng lp trnh Chng IX: Lp trnh logic

99
C php phn goal ging nh c php phn clauses. Tc l ta a vo mt hoc mt
s cc v t.
Nu tt c cc tham s ca v t l hng th kt qu nhn c l Yes (ng) hoc No
(sai). Nu trong cc tham s ca v t c bin th kt qu tr v s l cc gi tr ca
bin.
Ngoi cc phn ch yu ni trn, ta c th a vo cc phn lin quan n khai bo
hng, cc tp tin lin quan hoc ch th dch.
V d:
Constants
Pi = 3.141592653
Mt s v d v chng trnh prolog
V d 1: Xt xem mt s N c phi l s nguyn t hay khng.
domains
so_nguyen = integer
predicates
so_nguyen_to(so_nguyen)
Clauses
so_nguyen_to(2):- !.
so_nguyen_to(N):- N>0,
so_nguyen_to(M),
M<N,
N MOD M <>0.
goal
so_nguyen_to(13).
V d 2: Gi s ta c bng s liu nh sau:
Tn ngi gii tnh c im Tiu chun kt bn
lan n p, kho, tt, kho, thng minh, p
hng n p, thng minh, giu kho, thng minh, giu
thu n tt, kho, giu p, kho, thng minh
anh nam kho, giu, thng minh p, thng minh, tt
bnh nam p, kho, thng minh p, kho
hng nam giu, thng minh, kho tt, thng minh, kho
Tiu chun kt bn l hai ngi khc phi, ngi ny hi cc tiu chun ca ngi
kia v ngc li. Hy vit chng trnh tm ra cc cp c th kt bn vi nhau.

domains
ten, g_tinh = symbol
predicates
gioi_tinh(ten, g_tinh)
dep(ten)
tot(ten)
giau(ten)
thong_minh(ten)
Ngn ng lp trnh Chng IX: Lp trnh logic

100
khoe(ten)
thich(ten,ten)
ket_ban(ten,ten)
clauses
gioi_tinh(lan,nu).
gioi_tinh(hong,nu).
gioi_tinh(thuy,nu).
gioi_tinh(anh,nam).
gioi_tinh(binh,nam).
gioi_tinh(hung,nam).

dep(lan).
dep(hong).
dep(binh).

khoe(thuy).
khoe(lan).
khoe(binh).
khoe(anh).
khoe(hung).

tot(lan).
tot(thuy).

thong_minh(hong).
thong_minh(anh).
thong_minh(hung).
thong_minh(binh).

giau(hong).
giau(thuy).
giau(hung).

thich(lan,X):-khoe(X), dep(X), thong_minh(X).
thich(hong,X):-khoe(X), thong_minh(X), giau(X).
thich(thuy,X):-khoe(X), dep(X), thong_minh(X).
thich(ann,X):-dep(X), tot(X), thong_minh(X).
thich(binh,X):-dep(X), khoe(X).
thich(hung,X):-khoe(X), tot(X), thong_minh(X).

ket_ban(X,Y):- gioi_tinh(X,M),
gioi_tinh(Y,N),
M<>N,
thich(X,Y),
thich(Y,X).
Ngn ng lp trnh Chng IX: Lp trnh logic

101
9.3.4 Cc nguyn tc ca ngn ng Prolog
Vic gii quyt vn trong ngn ng Prolog ch yu da vo hai nguyn tc sau:
ng nht, quay lui.
ng nht
Mt quan h c th ng nht vi mt quan h no cng tn, cng s lng tham
s, cc i lng con cng ng nht theo tng cp.
Mt hng c th ng nht vi mt hng.
Mt bin c th ng nht vi mt hng no v c th nhn lun gi tr hng .
Chng hn trong v d 2 ni trn nu ta s dng goal dep(lan) th c kt qu l Yes.
Nu ta dng goal dep(X) th s c 3 kt qu: X=lan, X=hong v X=binh.
Khi ta dng goal dep(lan) th dep(lan) s ng nht vi s kin dep(lan) trong phn
clauses v do hai v t ng nht vi nhau v hai i s hng ng nht nhau nn kt
qu l Yes.
Khi dng goal dep(X) th dep s c ng nht vi dep v bin X ng nht vi hng
lan, do ta c kt qu X=lan. Tng t X=hong v X=binh.
Quay lui
Gi s h thng ang chng minh goal g, trong g c m t nh sau:
g :- g
1
, g
2
, , g
j-1
, g
j
, , g
n
.
Khi cc g
i
kim chng t tri sang phi, n g
j
l sai th h thng s quay lui li g
j-1

tm li gii khc.
Chng hn trong v d 2 ni trn, khi ta yu cu Goal: thich(lan,X), ta c X=binh.
V t thich(lan,X) s c ng nht vi thich(lan,X) trong phn clauses, theo h
thng phi chng minh thich(lan,X):-khoe(X), dep(X), thong_minh(X).
Trc ht ng nht khoe(X) vi khoe(thuy) => X=thuy.
Do dep(thuy) sai nn quay lui ng nht khoe(X) vi khoe(lan) => X=lan.
Do dep(lan) ng nn tip tc kim tra thong_minh(lan).
Do thong_minh(lan) sai nn quay lui ng nht khoe(X) vi khoe(binh)
c X=binh, sau kim tra thy dep(binh) v thong_minh(binh) u ng nn
X=binh l mt nghim.
9.3.5 B k t, t kho
Prolog dng b k t sau: cc ch ci v ch s (A Z, a z, 0 9); cc ton t (+, -,
*, /, <, =, >) v cc k hiu c bit.
Mt s t kho:
a. Trace: Khi c t kho ny u chng trnh, th chng trnh c thc
hin tng bc theo di; dng phm F10 tip tc.
b. Fail: Khi ta dng goal ni, chng trnh ch cho ta mt kt qu (mc d c
th cn nhng kt qu khc), nhn v tt c cc kt qu khi chy goal ni,
ta dng ton t Fail.
Ngn ng lp trnh Chng IX: Lp trnh logic

102
c. ! hay cn gi l nht ct, goal ngoi lun cho ta mi kt qu, mun nhn ch
mt kt qu t goal ngoi, ta dng k hiu !.
9.3.6 Cc kiu d liu
Trong prolog c kiu d liu chun v kiu do ngi lp trnh nh ngha.
Kiu d liu chun
L kiu d liu do prolog nh ngha sn. Prolog cung cp cc kiu d liu chun l:
char, integer, real, string v symbol.
a. Char: L kiu k t. Hng k t phi nm gia hai du nhy n.
V d: a, #.
b. Integer: L kiu s nguyn, tp gi tr bao gm cc s nguyn t -32768 n
32767.
c. Real: L kiu s thc, tp gi tr bao gm cc s thc thuc hai on: on
cc s m t -10307 n -10-307 v on s dng t 10-307 n 10307.
d. String: L kiu chui k t. Hng chui k t phi nm gia hai du nhy
kp.
V d: Turbo prolog 2.0
e. Symbol: L mt kiu s cp, c hnh thc ging chui k t. Hng symbol
c hai dng: Dy cc ch, s v du gch di vit lin tip, k t u phi
vit thng (chng hn: telephone_number); Dy cc k t gia mt cp
hai nhy kp (ging nh chi k t)
f. Mt s php ton ca cc kiu
Php ton s hc
Php ton ngha Kiu ca i s Kiu kt qu
+ Cng hai s Integer, real ging kiu i
s
- Tr hai s Integer, real ging kiu i
s
* Nhn hai s Integer, real ging kiu i
s
/ Chia hai s Integer, real ging kiu i
s
Mod Php chia ly phn d Integer Integer
Div Php chia ly phn nguyn Integer Integer
Php ton quan h
Php ton ngha Kiu ca i s Kt qu
< Nh hn Char, integer, real, string Yes hoc No
<= Nh hn hay bng Char, integer, real, string Yes hoc No
= Bng Char, integer, real, string Yes hoc No
Ngn ng lp trnh Chng IX: Lp trnh logic

103
> Ln hn Char, integer, real, string Yes hoc No
>= Ln hn hay bng Char, integer, real, string Yes hoc No
<> hay >< Khc Char, integer, real, string Yes hoc No
Cc v t nh cc hm ton hc
V t ngha Kiu ca
i s
Kiu kt
qu
V d
Sin(X) Tnh sin ca X real real
Tan(X) Tnh tang ca X real real
Arctan(X) Tnh arctang ca X real real
Exp(X) Tnh e
X
real real
Ln(X) Tnh logarit c s e ca X real real
Log(X) Tnh Logarit c s 10 ca
X
real real
SQRT(X) Tnh cn bc hai ca X real real
ROUND(X) Cho ta s nguyn l s X
c lm trn, du l du
ca X
real integer round(2.3)=2
round(2.5)=3
round(-2.5)=-2
round(-2.6)=-3
TRUNC(X) Cho phn nguyn ca s X,
du l du ca X
real integer trunc(2.5)=2
trunc(-2.6)=-2
ABS(X) Cho ta tr tuyt i ca X real real
Random(X) Cho ta s thc X nm trong
khong [0, 1)
real real
Random(Y, X) Cho ta s nguyn X nm
trong khong [0, Y)
real integer
Ton t NOT(X) : Nu X l Yes th NOT(X) l No v ngc li.
Cc kiu d liu do ngi lp trnh nh ngha
a. Kiu mu tin:
C php: <tn kiu mu tin> = tn mu tin (danh sch cc kiu phn t)
V d:
Domains
ten, tac_gia, nha_xb, dia_chi = string
nam, thang, so_luong = integer
dien_tich = real
nam_xb = nxb(thang, nam)
do_vat = sach(tac_gia, ten, nha_xb, nam_xb); xe(ten, so_luong); nha(dia_chi,
dien_tich)
predicates
so_huu(ten,do_vat)
clauses
so_huu(Nguyen Van A, sach(Do Xuan Loi, Cau truc DL, Khoa hoc Ky
thuat, nxb(8,1985))).
Ngn ng lp trnh Chng IX: Lp trnh logic

104
so_huu(Le thi B, xe(Dream II, 2)).
so_huu(Nguyen Huu C, nha(3/1 Ly Tu Trong, tp Can Tho, 100.5))
b. Kiu danh sch
C php: <tn kiu danh sch> = <tn kiu phn t>*
V d:
Domains
intlist = integer*
Mt danh sch l mt dy cc phn t phn cch nhau bi du phy v t trong cp
du ngoc vung.
V d:
[] % Danh sch rng
[1,2,3] % Danh sch gm ba s nguyn 1, 2 v 3.
Cu trc ca danh sch bao gm hai phn: Phn u l phn t u tin ca danh sch
v phn ui l mt danh sch ca cc phn t cn li.
Danh sch c vit theo dng [X|Y] th X l phn t u v Y l danh sch ui.
Chng hn trong danh sch [1,2,3] th u l s nguyn 1 v ui l danh sch [2,3].
Trong danh sch cng c th dng bin t do, chng hn ta c th vit [_|Y] ch mt
danh sch c u l mt phn t no v c ui l danh sch Y.
9.3.7 Cc hm xut nhp chun
Xut ra mn hnh
a. Write( Arg1, Arg2, ,Argn) in ra mn hnh gi tr ca cc i s.
b. Writef( Formatstring, Arg1, Arg2, ,Argn) in ra mn hnh gi tr ca cc
i s theo nh dng c ch nh trong Formastring.
Trong Formastring l mt chui c th l:
- %d: In s thp phn bnh thng; i s phi l char hoc integer.
- %c: i s l mt s integer, in k t c m Ascci l i s , chng hn
writef(%c,65) c A.
- %e: In s thc di dng ly tha ca 10.
- %x: In s Hexa; i s phi l char hoc integer.
- %s: In mt chui hoc mt symbol.
Nhp vo t bn phm
a. Readln(X): Nhp mt chui k t vo bin X.
b. ReadInt(X): Nhp mt s nguyn vo bin X.
c. ReadReal(X): Nhp mt s thc vo bin X.
d. ReadChar(X): Nhp vo mt k t vo bin X.
Ngn ng lp trnh Chng IX: Lp trnh logic

105
9.3.8 K thut quy
quy l k thut lp trnh c s dng trong nhiu ngn ng. Trong Turbo Prolog
ta s dng quy khi mt v t c nh ngha nh vo chnh v t .
Nh ni trong chng lp trnh hm, trong chng trnh quy phi c t nht mt
trng hp dng v li gi quy phi cha yu t dn n trng hp dng. Trong
Prolog, trng hp dng c th hin bng mt s kin, yu t dn n trng hp
dng th hin bng mt bin, lin h vi bin ban u bi mt cng thc.
V d 1: Tnh n giai tha.
Predicates
Facto (integer, integer)
Clauses
Facto(0,1):- !.
Facto(N, FactN) :- N > 0, M = N 1, facto(M, factM), factN = N*factM.
v d trn ta nh ngha mt v t dng tnh gi tr giai tha ca mt s t
nhin, i s th nht l s cn tnh giai tha v i s th hai dng nhn gi tr tr
v.
Trng hp dng y c xc inh bi s kin 0 giai tha l 1.
tnh N! ta tnh M! vi M= N-1. Yu t dn n trng hp dng l bin M c gi
tr bng N-1.
V d 2: Xc nh mt phn t trong danh sch cc symbol
domains
symbol_list = symbol*
predicates
element1(integer,symbol_list,symbol)
element (integer,symbol_list,symbol)
clauses
% element1 khng suy din ngc c
element1(1,[X|_],X).
element1(N,[_|L],Y):- M=N-1,
element1(M,L,Y).
% element c th suy din ngc
element(1,[X|_],X).
element(N,[_|L],Y):- element(M,L,Y),
N=M+1.
S suy din thun chiu l cho danh sch v v tr, tm c phn t ti v tr , chng
hn, nu ta a vo goal element(2,[a,b,c,d],X) ta c X=b.
S suy din ngc y l cho danh sch v phn t, tm c v tr ca phn t ,
chng hn, nu ta a vo goal element(N,[a,b,c,d], b) ta c N=2.
V d 3: Sp xp mt danh sch cc s nguyn
domains
list=integer*
predicates
Ngn ng lp trnh Chng IX: Lp trnh logic

106
insert(integer,list,list)
sort(list,list)
clauses
insert(E,[],[E]).
insert(E,[A|B],[E,A|B]):- E<=A.
insert(E,[A|B],[A|C]):- E>A,insert(E,B,C).

sort([],[]).
sort([X|R1],L):- sort(R1,R),
insert(X,R,L).

You might also like