You are on page 1of 111

Smith Nguyen Studio.

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 Smith Nguyen Studio.

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 Smith Nguyen Studio.

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 Smith Nguyen Studio.

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 Smith Nguyen Studio.

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

ii

Ngn ng lp trnh

Chng I: M u Smith Nguyen Studio.

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 Smith Nguyen Studio.

(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 Smith Nguyen Studio.

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

Ngn ng lp trnh

Chng I: M u Smith Nguyen Studio.

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. Vit bng BASIC
10 20 30 40 50 60 i=1; IF i>10 THEN GOTO 60; PRINT i ; i=i+1; GOTO 20; PRINT In xong;

Vit bng Pascal


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

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

Ngn ng lp trnh

Chng I: M u Smith Nguyen Studio.


found := FALSE; i := 1; While(i<=n)and(NOT found) do IF a[i]=x THEN found:= TRUE ELSE i:=i+1;

found := 0; i := 1; While (i<=n)and (found=0) do IF a[i]=x THEN found := 1 ELSE i := i+1;

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.

Ngn ng lp trnh 1.5.3 tin cy

Chng I: M u Smith Nguyen Studio.

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

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.

Ngn ng lp trnh 1.6

Chng I: M u Smith Nguyen Studio.

Chi ph mua trnh bin dch


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 Kiu d liu Smith NguyenII: Studio.

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 Kiu d liu Smith NguyenII: Studio.

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 Kiu d liu Smith NguyenII: Studio.

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.

10

Ngn ng lp trnh

Chng Kiu d liu Smith NguyenII: Studio.

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.

11

Ngn ng lp trnh

Chng Kiu d liu Smith NguyenII: Studio.

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
12

Ngn ng lp trnh

Chng Kiu d liu Smith NguyenII: Studio.

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

Ngn ng lp trnh

Chng Kiu d liu Smith NguyenII: Studio.

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

Ngn ng lp trnh

Chng Kiu d liu Smith NguyenII: Studio.

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
15

Ngn ng lp trnh

Chng Kiu d liu Smith NguyenII: Studio.

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.

16

Ngn ng lp trnh

Chng Kiu d liu Smith NguyenII: Studio.

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

Ngn ng lp trnh

Chng Kiu d liu Smith NguyenII: Studio.

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 {

18

Ngn ng lp trnh

Chng Kiu d liu Smith NguyenII: Studio.

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) A: B: Trc 17.2 8.4 A=B A: B: Sau 8.4 8.4

SNOBOL4

(Sao chp s tr n TDL khi gn) Sau khi gn A: B: 8.4

Trc khi gn A: B: 17.2 8.4

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 .

19

Ngn ng lp trnh

Chng Kiu d liu Smith NguyenII: Studio.

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.

20

Ngn ng lp trnh

Chng Kiu d liu Smith NguyenII: Studio.

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?

21

Ngn ng lp trnh

Smith Chng III: Kiu dStudio. Nguyen liu s cp

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.

22

Ngn ng lp trnh

Smith Chng III: Kiu dStudio. Nguyen liu s cp

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.

23

Ngn ng lp trnh

Smith Chng III: Kiu dStudio. Nguyen liu s cp

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) =
x nu x 0 thng c ci t nh l mt chui cc m lnh: - x nu x < 0

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

Ngn ng lp trnh

Smith Chng III: Kiu dStudio. Nguyen liu s cp

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)

25

Ngn ng lp trnh A : Integer Range 1..10 (Ada)

Smith Chng III: Kiu dStudio. Nguyen liu s cp

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 COS : Real -> Real SQRT: Real -> Real (Hm SIN) (Hm COSIN) (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.

26

Ngn ng lp trnh
3.6 KIU LIT K

Smith Chng III: Kiu dStudio. Nguyen liu s cp

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

Ngn ng lp trnh 3.6.3 S ci t

Smith Chng III: Kiu dStudio. Nguyen liu s cp

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.

28

Ngn ng lp trnh

Smith Chng III: Kiu dStudio. Nguyen liu s cp

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?

29

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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.

30

Ngn ng lp trnh Kiu ca mi mt phn t

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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 .

31

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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,

32

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio. B m t

B m t Phn t Phn t

Phn t

Phn t

Phn t Phn t Biu din tun 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

Biu din lin kt

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

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

- 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

34

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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.

35

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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 B m t Vct A LB UB Kiu phn t E A[LB] A[LB+1] ... 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

Kiu d liu Cn di ca tp ch s Cn trn ca tp ch s Kiu d liu ca phn t Kch thc mi phn t

B nh cho cc phn t ca vct

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

36

Ngn ng lp trnh 4.6.1 S c t v c php


c t thuc tnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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.

37

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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
M[1,-1] M[1,0] M[2,-1] M[2,0] M[3,-1] M[3,0] M[1,1] M[2,1] M[3,1] M[1,2] M[2,2] M[3,2] B m t

Lu tr ma trn M theo trt t dng


Ma trn M LB1 (= 1) UB1 (= 3) LB2 (= -1) UB2 (= 2) M[1,-1] M[1,0] B nh cho Cc phn t M[1,1] M[1,2] M[2,-1] M[2,0] ... M[3,2] ........... Dng th hai Dng th nht Kiu d liu Cn di ca tp ch s th nht Cn trn ca tp ch s th nht Cn di ca tp ch s th hai Cn trn ca tp ch s th hai

Cu trc logic ca ma trn M


M[1,-1] M[1,0] M[2,-1] M[2,0] M[3,-1] M[3,0] M[1,1] M[2,1] M[3,1] M[1,2] M[2,2] M[3,2] B m t

Lu tr ma trn M theo trt t ct


Ma trn M LB1 (= 1) UB1 (= 3) LB2 (= -1) UB2 (= 2) M[1,-1] M[2,-1] B nh cho Cc phn t M[3,-1] M[1,0] M[2,0] M[3,0] ... M[3,2] ........... Ct th hai Ct th nht Kiu d liu Cn di ca tp ch s th nht Cn trn ca tp ch s th nht Cn di ca tp ch s th hai Cn trn ca tp ch s th hai

38

Ngn ng lp trnh
Gii thut thc hin php ton

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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 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. Trong : 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.
39

Ngn ng lp trnh
c t php ton

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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: 22901 Nguyen Van A 20 2.18
Ma

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.

Ho_ten

Tuoi Luong

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.

40

Ngn ng lp trnh
4.8

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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:

41

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.


(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 ');

42

Ngn ng lp trnh
readln(loaicn);

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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

43

Ngn ng lp trnh
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.

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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 Ngay_cong Luong Loai He_so Nghi_bhxh Cng nhn bin ch

Ho_ten Ngay_cong Luong Loai Gia_cong_nhat Khng s dng 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.

44

Ngn ng lp trnh
4.9 CHUI K T:

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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)

45

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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):
46

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio. E I N S T E I N Cc d khng s dng

12 di khai bo

8 di thc

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

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

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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.

48

Ngn ng lp trnh 4.11.2 S c t


c t thuc tnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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
49

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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
50

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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 e1, e2, ... en. 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 ei thuc vo tp hp, ngc li bit th i c gi tr 0 th ei 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 A U 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) A I 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
51

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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

52

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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
53

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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. Bin nh

Bin nh Chuyn d liu bng


READ/WRITE

FIT

(gia b nh m v bin nh)

B nh m (buffer)

Chuyn d liu khi (gia buffer v a)

B nh ngoi

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.

54

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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.

55

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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?

56

Ngn ng lp trnh

Chng IV: Kiu d liu c cu trc Smith Nguyen Studio.

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?

57

Ngn ng lp trnh

Chng V: Smith Kiu do ngi dngStudio. Nguyen inh ngha

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

Ngn ng lp trnh 5.3.2 Tru tng ha qu trnh

Chng V: Smith Kiu do ngi dngStudio. Nguyen inh ngha

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

end. Chng trnh khng c chng trnh con Chng trnh vi 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.

59

Ngn ng lp trnh

Chng V: Smith Kiu do ngi dngStudio. Nguyen inh ngha

- 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

60

Ngn ng lp trnh

Chng V: Smith Kiu do ngi dngStudio. Nguyen inh ngha

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
61

Ngn ng lp trnh

Chng V: Smith Kiu do ngi dngStudio. Nguyen inh ngha

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.

62

Ngn ng lp trnh

Chng VI: Chng trnh con Smith Nguyen Studio.

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. iu khin lun c tr v chng trnh gi khi s thc hin chng trnh con kt thc. Chng trnh gi tm ngng vic thc hin trong qu trnh thc hin chng trnh con.

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:
63

Ngn ng lp trnh

Chng VI: Chng trnh con Smith Nguyen Studio.

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
64

Ngn ng lp trnh

Chng VI: Chng trnh con Smith Nguyen Studio.

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

Ngn ng lp trnh VAR

Chng VI: Chng trnh con Smith Nguyen Studio.

BEGIN n := MAX; x := 2 * x + m[5]; ...... END;

m : ARRAY[1..max] OF REAL; n : INTEGER;

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

66

Ngn ng lp trnh

Chng VI: Chng trnh con Smith Nguyen Studio. M u M lnh c th thc hin Khi m c th thc hin

on m ca FN

Kt thc 20 2 5 1 FN x y m : : : n

Cc hng im tr v Kt qu ca hm Cc tham s

Mu tin kch hat ca FN

Cc bin cc b

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. an m ca FN

Kch hat u tin

Kch hat th hai

Kch hat cui cng

Mu tin kch hat ca FN

Mu tin kch hat ca FN

...

Mu tin kch hat ca FN

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.

67

Ngn ng lp trnh
6.4

Chng VI: Chng trnh con Smith Nguyen Studio.

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.

68

Ngn ng lp trnh

Chng VI: Chng trnh con Smith Nguyen Studio.

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.

69

Ngn ng lp trnh

Chng VI: Chng trnh con Smith Nguyen Studio.

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 10 10 Truyn tham chiu 20 20 Truyn bng gi tr-kt qu 10 20 Truyn bng kt qu 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 .

70

Ngn ng lp trnh

Smith Chng VII: iu khin tun t Nguyen Studio.

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
2 Xt cng thc nghim ca phng trnh bc x = b + b 4ac hai

2a

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

71

Ngn ng lp trnh

Smith Chng VII: iu khin tun t Nguyen Studio.

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. / *

SQRT

* B 2 * C

* 4 A

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:
72

Ngn ng lp trnh
K hiu tin t (prefix)

Smith Chng VII: iu khin tun t Nguyen Studio.

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:

73

Ngn ng lp trnh

Smith Chng VII: iu khin tun t Nguyen Studio.

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: * + C A *

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.

74

Ngn ng lp trnh

Smith Chng VII: iu khin tun t Nguyen Studio.

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

75

Ngn ng lp trnh

Smith Chng VII: iu khin tun t Nguyen Studio.


Lnh la chn S0 IF A=0 THEN GOTO L1 S1 GOTO L2 L1: S2 L2: S3 Chui lnh thc hin S0 S1 S3 Hoc S0 S2 S3 Chui lnh thc hin S0 S2 Hoc S0 S1 S2 Hoc S0 S1 S1 S2 Hoc S0 S1 S1 S1 S2 Lnh lp li S0 L1: IF A=0 THEN GOTO L2 S1 GOTO L1 L2: S2

Lnh hp thnh S0 GOTO L1 L2: S2 GOTO L3 L1: S1 GOTO L2 L3 : S3 Chui lnh thc hin S0 S1 S2 S3

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;

76

Ngn ng lp trnh Lnh 2; ....... Lnh n End

Smith Chng VII: iu khin tun t Nguyen Studio.

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>
77

Ngn ng lp trnh 1: <Lnh 1> 2: <Lnh 2> OTHERS: <Lnh3> ENDCASE Ci t lnh iu kin

Smith Chng VII: iu khin tun t Nguyen Studio.

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 () {
78

Ngn ng lp trnh ...... average = sum/total; ... return ; when zero_divide { average = 0;

Smith Chng VII: iu khin tun t Nguyen Studio.

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
79

Ngn ng lp trnh

Smith Chng VII: iu khin tun t Nguyen Studio.

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?

80

Ngn ng lp trnh CHNG 8: LP TRNH HM


8.1 TNG QUAN

Chng VIII: Smith NguyenLp trnh hm Studio.

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

Ngn ng lp trnh

Chng VIII: Smith NguyenLp trnh hm Studio.

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
82

Ngn ng lp trnh

Chng VIII: Smith NguyenLp trnh hm Studio.

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: () (a 5 c) Danh sch rng, tng ng k hiu NIL. 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.


83

Ngn ng lp trnh
Biu thc

Chng VIII: Smith NguyenLp trnh hm Studio.

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. > (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 (E0 E1 ... En) th gi tr ca biu thc c xc nh theo cch sau y: Phn t u tin E0 phi l mt hm c LISP nhn bit. Cc phn t E1, E2, ..., En c nh tr tun t t tri sang phi. Gi s ta c cc gi tr tng ng l V1, V2, ..., Vn Hm E0 c p dng cho cc i V1, V2, ..., Vn. Gi tr ca hm E0 chnh l gi tr ca biu thc. > (+ 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 du:

V d

V d: > (+ 1 2) = (+ 1 2)

84

Ngn ng lp trnh
8.3.3 Cc hm

Chng VIII: Smith NguyenLp trnh hm Studio.

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 )
85

Ngn ng lp trnh
=T

Chng VIII: Smith NguyenLp trnh hm Studio.

(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 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) 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 (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. (CAR L) nhn vo danh sch L, tr v phn t u tin ca L.

86

Ngn ng lp trnh
V du: (CADR (a b c)) =B 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) 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 V du: >(atom 'a) =T >(numberp 4) =T

Chng VIII: Smith NguyenLp trnh hm Studio.

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)

(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

(LIST E1 E2 ... En) nhn vo n biu thc E1, E2, ..., En, tr v danh sch bao gm n phn t V1, V2, ..., Vn, trong Vi l gi tr ca biu thc Ei (i=1..n) .

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

87

Ngn ng lp trnh
>(symbolp 'a) =T >(listp '(1 2)) =T >(symbolp NIL) =T >(listp NIL) =T >(null NIL) =T >(null (a b)) = NIL >(null 10) = NIL

Chng VIII: Smith NguyenLp trnh hm Studio.

Cc hm logic AND, OR v NOT (AND E1 E2... En) nhn vo n biu thc E1, E2,... En. Hm AND nh tr cc biu thc E1 E2... En 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 En.

V d: >(AND (> 3 2) (= 3 2) (+ 3 2)) = NIL >(AND (> 3 2) (- 3 2) (+ 3 2)) =5 (OR E1 E2 ... En) nhn vo n biu thc E1, E2,... En. Hm OR nh gi cc biu thc E1 E2... En 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.

88

Ngn ng lp trnh
Cc hm iu khin -

Chng VIII: Smith NguyenLp trnh hm Studio.

(IF E1 E2 E3) nhn vo 3 biu thc E1, E2 v E3. Nu E1 khc NIL th hm tr v gi tr ca E2 ngc li tr v gi tr ca E3 (IF E1 E2) tng ng (IF E1 E2 NIL) Nu E2 khc NIL th (IF E1 E2 E3) tng ng (OR (AND E1 E2) E3) (COND (K1 E1) (K2 E2) .................. (Kn En) [(T En+1)] )

Nu K1 khc NIL th tr v kt qu l gi tr ca E1, ngc li s xt K2. Nu K2 khc NIL th tr v kt qu l gi tr ca E2, ngc li s xt K3... ...... Nu Kn khc NIL th tr v kt qu l gi tr ca En, ngc li s tr v NIL hoc tr v kt qu l gi tr ca En+1 (trong trng hp ta s dng (T En+1)) (PROGN E1 E2 ... En) nhn vo n biu thc E1, E2,... En. Hm nh tr cc biu thc E1, E2,... En t tri sang phi v tr v kt qu l gi tr ca biu thc En. (PROG1 E1 E2 ... En) nhn vo n biu thc E1, E2,... En. Hm nh tr cc biu thc E1, E2,... En 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.
89

Ngn ng lp trnh

Chng VIII: Smith NguyenLp trnh hm Studio.

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
1 neu n = 0 Cng thc quy tnh n giai tha l n! = n * (n 1)!

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. 0 neu a < b Cng thc quy: a DIV b = 1 + (a b) DIV b 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: " Khong ton tai" neu DS L rong Phan tu thu i trong DS L = Phan tu dau tien cua L neu i = 1 Phan tu thu (i 1) trong DS " duoi" cua L 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)))

90

Ngn ng lp trnh
) ; cond )

Chng VIII: Smith NguyenLp trnh hm Studio.

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

91

Ngn ng lp trnh
=6
Bin cc b

Chng VIII: Smith NguyenLp trnh hm Studio.

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 Ei cho bin cc b vari tng ng v thc hin (PROGN Ek+1 ... En). 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 ax2+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)

92

Ngn ng lp trnh

Chng VIII: Smith NguyenLp trnh hm Studio. (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.

93

Ngn ng lp trnh
Np hm t nh ngha cho XLISP

Chng VIII: Smith NguyenLp trnh hm Studio.

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

94

Ngn ng lp trnh

Chng IX: Smith NguyenLp trnh logic Studio.

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.

95

Ngn ng lp trnh

Chng IX: Smith NguyenLp trnh logic Studio.

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

Ngn ng lp trnh

Chng IX: Smith NguyenLp trnh logic Studio.

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)
97

Ngn ng lp trnh
so_nguyen_to(integer)

Chng IX: Smith NguyenLp trnh logic Studio.

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.

98

Ngn ng lp trnh

Chng IX: Smith NguyenLp trnh logic Studio.

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 lan n p, kho, tt, hng n p, thng minh, giu thu n tt, kho, giu anh nam kho, giu, thng minh bnh nam p, kho, thng minh hng nam giu, thng minh, kho Tiu chun kt bn kho, thng minh, p kho, thng minh, giu p, kho, thng minh p, thng minh, tt p, 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)
99

Ngn ng lp trnh
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).

Chng IX: Smith NguyenLp trnh logic Studio.

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

100

Ngn ng lp trnh

Chng IX: Smith NguyenLp trnh logic Studio.

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 :- g1, g2, , gj-1, gj, , gn. Khi cc gi kim chng t tri sang phi, n gj l sai th h thng s quay lui li gj-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.

101

Ngn ng lp trnh

Chng IX: Smith NguyenLp trnh logic Studio.

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 + Cng hai s * / Mod Div Php ton < <= = Tr hai s Nhn hai s Chia hai s Php chia ly phn d Php chia ly phn nguyn ngha Nh hn Nh hn hay bng Bng Kiu ca i s Integer, real Integer, real Integer, real Integer, real Integer Integer Kiu ca i s Char, integer, real, string Char, integer, real, string Char, integer, real, string Kiu kt qu ging kiu i s ging kiu i s ging kiu i s ging kiu i s Integer Integer Kt qu Yes hoc No Yes hoc No Yes hoc No

Php ton quan h

102

Ngn ng lp trnh
> >= <> hay >< Ln hn Ln hn hay bng Khc

Chng IX: Smith NguyenLp trnh logic Studio.


Char, integer, real, string Char, integer, real, string Char, integer, real, string Yes hoc No Yes hoc No Yes hoc No V d

Cc v t nh cc hm ton hc V t ngha Sin(X) Tan(X) Arctan(X) Exp(X) Ln(X) Log(X) SQRT(X) ROUND(X)

Kiu ca i s Tnh sin ca X real Tnh tang ca X real Tnh arctang ca X real X Tnh e real Tnh logarit c s e ca X real Tnh Logarit c s 10 ca real X Tnh cn bc hai ca X real Cho ta s nguyn l s X real c lm trn, du l du ca X real real real real

Kiu kt qu real real real real real real real integer

TRUNC(X)

Cho phn nguyn ca s X, du l du ca X ABS(X) Cho ta tr tuyt i ca X Random(X) Cho ta s thc X nm trong khong [0, 1) Random(Y, X) Cho ta s nguyn X nm trong khong [0, Y)
Cc kiu d liu do ngi lp trnh nh ngha

integer real real integer

round(2.3)=2 round(2.5)=3 round(-2.5)=-2 round(-2.6)=-3 trunc(2.5)=2 trunc(-2.6)=-2

Ton t NOT(X) : Nu X l Yes th NOT(X) l No v ngc li. 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))).

103

Ngn ng lp trnh

Chng IX: Smith NguyenLp trnh logic Studio.

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: [] [1,2,3] % Danh sch rng % 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.
104

Ngn ng lp trnh
9.3.8 K thut quy

Chng IX: Smith NguyenLp trnh logic Studio.

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
105

Ngn ng lp trnh
insert(integer,list,list) sort(list,list) clauses insert(E,[],[E]). insert(E,[A|B],[E,A|B]):insert(E,[A|B],[A|C]):sort([],[]). sort([X|R1],L):-

Chng IX: Smith NguyenLp trnh logic Studio.

E<=A. E>A,insert(E,B,C).

sort(R1,R), insert(X,R,L).

106

You might also like