111
Th.s. NGUYN VĂN LINH NGÔN NGLP TRÌNH Được biên son trong khuôn khdán ASVIET002CNTT ”Tăng cường hiu quđào to và năng lc tđào to ca sinh viên khoa Công nghThông tin - Đại hc Cn thơĐẠI HC CN THƠ - 12/2003

Giao Trinh Ngon Ngu Lap Trinh

Embed Size (px)

DESCRIPTION

Ngon ngu lap trinh

Citation preview

  • Th.s. NGUYN VN LINH

    NGN NG LP TRNH

    c bin son trong khun kh d n ASVIET002CNTT Tng cng hiu qu o to v nng lc t o to ca sinh vin

    khoa Cng ngh Thng tin - i hc Cn th

    I HC CN TH - 12/2003

  • Ngn ng lp trnh Mc lc CHNG 0: TNG QUAN .................................................................................................i

    0.1 MC CH YU CU...............................................................................................i 0.2 I TNG S DNG............................................................................................i 0.3 NI DUNG CT LI.................................................................................................i 0.4 KIN THC TIN QUYT......................................................................................ii 0.5 DANH MC TI LIU THAM KHO ...................................................................ii

    CHNG 1: M U ........................................................................................................1 1.1 TNG QUAN ............................................................................................................1 1.2 KHI NIM V NGN NG LP TRNH ............................................................1 1.3 VAI TR CA NGN NG LP TRNH ..............................................................2 1.4 LI CH CA VIC NGHIN CU NNLT ............................................................3 1.5 CC TIU CHUN NH GI MT NGN NG LP TRNH TT ...............4 1.6 CU HI N TP ....................................................................................................7

    CHNG 2: KIU D LIU..............................................................................................8 2.1 TNG QUAN ............................................................................................................8 2.2 I TNG D LIU.............................................................................................8 2.3 BIN V HNG .....................................................................................................10 2.4 KIU D LIU........................................................................................................10 2.5 S KHAI BO ........................................................................................................13 2.6 KIM TRA KIU V BIN I KIU.................................................................14 2.7 CHUYN I KIU...............................................................................................17 2.8 GN V KHI TO ..............................................................................................17 2.9 CU HI N TP ..................................................................................................20

    CHNG 3: KIU D LIU S CP.............................................................................22 3.1 TNG QUAN ..........................................................................................................22 3.2 NH NGHA KIU D LIU S CP................................................................22 3.3 S C T CC KIU D LIU S CP .........................................................22 3.4 CI T CC KIU D LIU S CP ..............................................................23 3.5 KIU D LIU S .................................................................................................24 3.6 KIU LIT K.........................................................................................................27 3.7 KIU LOGIC ...........................................................................................................28 3.8 KIU K T ...........................................................................................................29 3.9 CU HI N TP ..................................................................................................29

    CHNG 4: KIU D LIU C CU TRC................................................................30 4.1 TNG QUAN ..........................................................................................................30 4.2 NH NGHA KIU D LIU C CU TRC...................................................30 4.3 S C T KIU CU TRC D LIU ............................................................30 4.4 S CI T CC CU TRC D LIU ............................................................32 4.5 VCT .....................................................................................................................34 4.6 MNG NHIU CHIU ...........................................................................................36 4.7 MU TIN .................................................................................................................39 4.8 MU TIN C CU TRC THAY I .................................................................41 4.9 CHUI K T: .......................................................................................................45 4.10 CU TRC D LIU C KCH THC THAY I ........................................47 4.11 CON TR.................................................................................................................48 4.12 TP HP..................................................................................................................50 4.13 TP TIN...................................................................................................................52 4.14 CU HI N TP ..................................................................................................54

    CHNG 5: KIU DO NGI DNG NH NGHA ..................................................58 5.1 TNG QUAN ..........................................................................................................58 5.2 S PHT TRIN CA KHI NIM KIU D LIU .........................................58

  • Ngn ng lp trnh Mc lc

    5.3 TRU TNG HA ..............................................................................................58 5.4 NH NGHA KIU................................................................................................60 5.5 CU HI N TP ..................................................................................................62

    CHNG 6: CHNG TRNH CON ..............................................................................63 6.1 TNG QUAN ..........................................................................................................63 6.2 NH NGHA CHNG TRNH CON .................................................................63 6.3 C CH GI CHNG TRNH CON ..................................................................65 6.4 CHNG TRNH CON CHUNG...........................................................................68 6.5 TRUYN THAM S CHO CHNG TRNH CON.............................................68 6.6 CU HI N TP .................................................................................................70

    CHNG 7: IU KHIN TUN T.............................................................................71 7.1 TNG QUAN ..........................................................................................................71 7.2 KHI NIM IU KHIN TUN T ..................................................................71 7.3 IU KHIN TUN T TRONG BIU THC ...................................................71 7.4 IU KHIN TUN T GIA CC LNH ........................................................75 7.5 S NGOI L V X L NGOI L .................................................................78 7.6 CU HI N TP ..................................................................................................80

    CHNG 8: LP TRNH HM .......................................................................................81 8.1 TNG QUAN ..........................................................................................................81 8.2 NGN NG LP TRNH HM.............................................................................81 8.3 NGN NG LISP ...................................................................................................83

    CHNG 9: LP TRNH LOGIC ....................................................................................95 9.1 TNG QUAN ..........................................................................................................95 9.2 GII THIU V LP TRNH LOGIC ...................................................................95 9.3 NGN NG PROLOG............................................................................................96

  • Ngn ng lp trnh Tng quan

    i

    TNG QUAN

    MC CH YU CU Mc ch ca mn hc Ngn ng lp trnh l cung cp cho sinh vin mt khi lng kin thc tng i hon chnh v nguyn l ca ngn ng lp trnh. Cng vi mn hc Tin hc l thuyt, Ngn ng lp trnh s l mn hc tin quyt hc mn Trnh bin dch. Sau khi hc xong mn hc ny, sinh vin cn:

    - Nm c cc khi nim v i tng d liu v kiu d liu. Cc kha cnh cn nghin cu khi c t v ci t mt kiu d liu. Vn kim tra kiu v chuyn i kiu cng cn c quan tm.

    - Nm c cc kiu d liu s cp v c cu trc. Vi mi kiu d liu cn nm nh ngha, c t v cch ci t kiu d liu.

    - Nm c khi nim tru tng ho trong lp trnh th hin trn hai kha cnh l tru tng ho d liu bng cch s dng cc kiu d liu t nh ngha v tru tng ho chng trnh bng cch chia chng trnh thnh cc chng trnh con. Vn truyn tham s cho chng trnh con cng cn c lu tm.

    - Nm c khi nim iu khin tun t, nguyn tc iu khin tun t trong biu thc v gia cc cu lnh.

    I TNG S DNG Mn hc ngn ng lp trnh c dng ging dy cho cc sinh vin nm th 4 chuyn ngnh Tin hc.

    NI DUNG CT LI Trong khun kh 45 tit, gio trnh c cu trc thnh 9 chng Chng 1: M u. Chng ny trnh by khi nim v ngn ng lp trnh, li ch

    ca vic nghin cu ngn ng lp trnh v cc tiu chun nh gi mt ngn ng lp trnh tt.

    Chng 2: Kiu d liu. Chng ny trnh by cc khi nim v i tng d liu v kiu d liu; cc phng php kim tra kiu v chuyn i kiu; Php gn tr cho bin v s khi to bin.

    Chng 3: Kiu d liu s cp. Chng ny trnh by khi nim v kiu d liu s cp, s c t v nguyn tc ci t mt kiu d liu s cp ni chung. Phn ch yu ca chng trnh by mt s kiu d liu s cp ph bin nh cc kiu s, kiu min con, kiu lit k, kiu k t v kiu logic.

    Chng 4: Kiu d liu c cu trc. Chng ny trnh by khi nim v kiu d liu c cu trc, s c t cc thuc tnh, c t php ton, c bit l php ton la chn mt phn t; cc phng php lu tr mt cu trc d liu trong b nh v phng php la chn phn t. Ni dung ch yu ca chng trnh by cc cu trc c th nh mng, mu tin, chui k t, tp hp

    Chng 5: Kiu d liu t nh ngha. Chng ny trnh by v s tru tng ho, nh ngha kiu d liu v s tng ng ca cc kiu d liu c nh ngh.

  • Ngn ng lp trnh Tng quan

    ii

    Chng 6: Chng trnh con. Chng ny trn by v s nh ngha v c ch gi thc hin chng trnh con, cc phng php truyn tham s cho chng trnh con.

    Chng 7: iu khin tun t. Chng ny trnh by cc loi iu khin tun t v vn x l ngoi l.

    Chng 8: Lp trnh hm. Chng ny trnh by khi nim, bn cht ca lp trnh hm v gii thiu mt ngn ng lp trnh hm in hnh l LISP.

    Chng 9: Lp trnh logic. Chng ny trnh by khi nim, bn cht ca lp trnh logic v gii thiu mt ngn ng lp trnh hm in hnh l PROLOG.

    KIN THC TIN QUYT hc tt mn hc ngn ng lp trnh cn phi c cc kin thc v k nng lp trnh cn bn.

    DANH MC TI LIU THAM KHO [1] Terrence W. Pratt, Marvin V. Zelkowitz; Programming Languages: Design and Implementation; Prentice-Hall, 2000. [2] Doris Appleby, Julius J. VandeKopple; Programming Languages; McGraw-Hill; 1997. [3] Ryan Stensifer; The Study of Programming Languages; Prentice Hall, 1995. [4] Maryse CONDILLAC; Prolog fondements et applications; BORDAS, Paris 1986. [5] Website v XLISP http://webmaker.web.cern.ch/WebMaker/examples/xlisp/www/cldoc_1.html [6] Website v Turbo Prolog http://www.csupomona.edu/%7Ejrfisher/www/prolog_tutorial/contents.html

  • Ngn ng lp trnh Chng I: M u

    1

    CHNG 1: M U

    1.1 TNG QUAN

    1.1.1 Mc tiu Sau khi hc xong chng ny, sinh vin cn phi nm:

    - Khi nim v phn loi cc ngn ng lp trnh. - Vai tr ca ngn ng lp trnh trong cng ngh phn mm. - Li ch ca vic nghin cu ngn ng lp trnh. - Cc tiu chun nh gi ngn ng lp trnh.

    1.1.2 Ni dung ct li - Khi nim v ngn ng lp trnh. - Vai tr ca ngn ng lp trnh. - Li ch ca vic nghin cu ngn ng lp trnh. - Cc tiu chun nh gi mt ngn ng lp trnh tt.

    1.1.3 Kin thc c bn cn thit Kin thc v k nng lp trnh cn bn

    1.2 KHI NIM V NGN NG LP TRNH Nh chng ta bit, my tnh bao gm phn cng l cc thit b in t trong thng tin c biu din di dng s nh phn v phn mm bao gm cc chng trnh c to ra bng cch s dng cc ngn ng lp trnh. Nh vy ngn ng lp trnh (NNLT) l ngn ng dng vit cc chng trnh cho my tnh. Cng nh cc ngn ng thng thng, NNLT cng c t vng, c php v ng ngha. Theo tin trnh lch s pht trin, ngn ng lp trnh c th c chia ra lm ba loi ch yu nh sau:

    Ngn ng my (machine language): L cc ch th di dng nh phn, can thip trc tip vo trong cc mch in t. Chng trnh c vit bng ngn ng my th c th c thc hin ngay khng cn qua bc trung gian no. Tuy nhin chng trnh vit bng ngn ng my d sai st, cng knh v kh c, kh hiu v ton nhng con s 0 v 1. Hp ng (assembly language): Hp ng l mt bc tin vt bc a ngn ng lp trnh thot ra khi ngn ng my kh hiu. Ngn ng ny xut hin vo nhng nm 1950, n c thit k my tnh tr nn thn thin hn vi ngi s dng. Hp ng a ra khi nim bin (variable), nh m ta c th gn mt k hiu cho mt v tr no trong b nh m khng phi vit li a ch ny di dng nh phn mi ln s dng. Hp ng cng cha vi "php ton gi", tc l ta c th biu bin m php ton di dng pht biu (hay cn gi l cu lnh) thay v di dng nh phn. Cc cu lnh bao gm hai phn: phn m lnh

  • Ngn ng lp trnh Chng I: M u

    2

    (vit ta ting Anh) ch php ton cn thc hin v phn tn bin ch a ch cha ton hng ca php ton . my thc hin c mt chng trnh vit bng hp ng th chng trnh phi c dch sang ngn ng my. Cng c thc hin vic dch c gi l Assembler. Ngn ng cp cao (High level language): L ngn ng c to ra v pht trin nhm phn nh cch thc ngi lp trnh ngh v lm. Ngn ng cp cao rt gn vi ngn ng con ngi (Anh ng) nhng chnh xc nh ngn ng ton hc. Nh ngn ng cp cao m lnh vc lp trnh tr nn ph bin, rt nhiu ngi c th vit c chng trnh, v nh th m cc phn mm pht trin nh v bo, phc v nhiu lnh vc ca cuc sng. Cng vi s pht trin ca cc th h my tnh, ngn ng lp trnh cp cao cng c pht trin rt a dng v phong ph, vic lp trnh cho my tnh v th m cng c nhiu khuynh hng khc nhau: lp trnh cu trc, lp trnh hng i tng, lp trnh logic, lp trnh hm... Mt chng trnh vit bng ngn ng cp cao c gi l chng trnh ngun (source programs). my tnh "hiu" v thc hin c cc lnh trong chng trnh ngun th phi c mt chng trnh dch dch chng trnh ngun (vit bng ngn ng cp cao) thnh chng trnh ch. Trong khun kh ti liu ny, thut ng ngn ng lp trnh dng ch ngn ng lp trnh cp cao.

    1.3 VAI TR CA NGN NG LP TRNH thy r vai tr ca ngn ng lp trnh trong cng ngh phn mm chng ta hy xt cc giai on ch yu xy dng mt phn mm. Cc giai on bao gm:

    - Xc nh: Mc tiu ca giai an xc nh l hiu r cc yu cu ca khch hng. Kt qu ca giai an ny l m hnh th gii thc c phn nh thng qua mt ti liu c t yu cu.

    - Phn tch: Mc tiu ca giai on ny l xc nh chnh xc h thng s lm nhng g theo quan im ca ngi s dng. Kt qu ca giai on phn tch l mt ti liu c t chc nng m t h thng s c nhng chc nng g.

    - Thit k: Mc tiu ca giai an thit k l xc nh chnh xc h thng s lm vic nh th no. Kt qu ca giai an ny l mt ti liu c t thit k. y l mt ti liu k thut m nhng ngi thc hin s cn c vo m to ra phn mm.

    - Ci t: L vic thc hin cch gii quyt vn c xut bi ngi thit k bng mt NNLT. Kt qu ca giai an ny l mt h chng trnh my tnh.

    - Tch hp v kim th h thng: Do cc chuyn vin tin hc thc hin nhm ghp ni cc b phn ca h thng v kim tra xem h thng c c thc hin ng theo thit k khng.

    - Chp nhn: Do cc chuyn vin tin hc cng vi khch hng tin hnh nhm xc nhn h thng chng trnh bo m cc yu cu ca ngi s dng.

    - Vn hnh khai thc: H thng c trin khai s dng.

  • Ngn ng lp trnh Chng I: M u

    3

    trn ch trnh by mt m hnh lm phn mm, gi l m hnh thc nc (water fall), ngoi ra cn c nhiu m hnh khc. Tuy nhin trong tt c cc m hnh y u phi c giai on ci t. Trong NNLT ng vai tr l mt cng c gip con ngi thc hin bc ci t ny. Cng c ngy cng c ci tin hon thin v c th ni mi tin b trong tin hc u th hin ra trong NNLT. NNLT va l cng c gip cc nh tin hc gii quyt cc vn thc t nhng ng thi cng l ni m nhng nghin cu mi nht ca tin hc c a vo. Lnh vc ny va mang tnh truyn thng va mang tnh hin i.

    1.4 LI CH CA VIC NGHIN CU NNLT Trc khi nghin cu v NNLT, chng ta cn tho lun xem v sao cc sinh vin tin hc v cc nh lp trnh chuyn nghip cn phi nm cc khi nim tng qut v NNLT. Vic nghin cu tt NNLT s t c cc li ch nh sau:

    1.4.1 Cho php la chn mt NNLT ph hp vi d n thc t Hin nay c rt nhiu d n cng ngh thng tin ng dng vo nhiu lnh vc khc nhau ca cuc sng. Do tnh cht ca tng d n m phn mm c th c ci t bng cc NNLT khc nhau. Vi mt vn kin thc rng v NNLT, nhng ngi lm d n c th la chn nhanh chng mt NNLT ph hp vi n thc t. Chng hn c th la chn ngn ng lp trnh Java cho cc d n lp trnh truyn thng, hay hng lp trnh logic cho cc d n v tr tu nhn to.

    1.4.2 S dng mt cch c hiu qu cc cng c ca ngn ng Cc ngn ng ni chung u cung cp nhng cng c c bit to ra cc tin ch cho lp trnh vin, nhng khi s dng chng khng ng n c th s gy ra nhng sai lm ln. Mt v d in hnh l php quy (recursion) - mt cng c lp trnh c bit c hiu lc trong nhiu ngn ng. Khi s dng quy mt cch ng n th c th ci t mt gii thut p v c hiu qu. Nhng trong trng hp khc n c th gy ra mt s lng ph thi gian chy my rt ln cho mt gii thut n gin. iu ny c th trnh c nu nh lp trnh vin c mt s hiu bit su sc v ngn ng lp trnh v cc ci t bn trong n.

    1.4.3 Lm tng vn kinh nghim khi xy dng cc chng trnh Nu ngi lp trnh c s nghin cu mt cch rng ri nhiu ngn ng m mt trong chng c ci t sn nhng cng c no th anh ta c th t thit lp nhng cng c tng t khi phi vit chng trnh bi mt ngn ng m trong cc cng c nh th cha c ci t.

    1.4.4 To s d dng hc mt ngn ng mi Mc d c nhiu NNLT khc nhau nhng chng u c nhng nguyn tc chung ca NNLT. Rt nhiu ngn ng c chung c php (sai khc nhau cht t v cch vit), c chung cc kiu d liu (sai khc nhau cht t v tn gi). Vic nm vng cc nguyn l c bn ca NNLT s l mt iu kin thun li ln tip cn mt cch nhanh chng vi mt ngn ng lp trnh c th mi. Thc t cho thy rng vi nhng ngi nm vng NNLT, khi gp mt ngn ng lp trnh c th mi, h c th va nghin cu ngn ng mi ny va p dng lp trnh gii quyt mt bi ton theo yu cu.

  • Ngn ng lp trnh Chng I: M u

    4

    1.4.5 To tin thit k mt ngn ng mi Vic thit k ngn ng mi l mt i hi ca khoa hc pht trin NNLT. Nu chng ta khng nghin cu v NNLT th khng th no c kin thc xy dng mt ngn ng mi.

    1.5 CC TIU CHUN NH GI MT NGN NG LP TRNH TT Nhng yu t sau to nn mt ngn ng tt, n cng l nhng tiu chun ngi lp trnh nh gi ngn ng ny tt hn ngn ng kia khi la chn mt ngn ng s dng. Ngoi ra khi thit k mt ngn ng lp trnh mi, ta cng phi quan tm n cc tiu chun ny c c mt ngn ng tt.

    1.5.1 Tnh d c Tnh d c ca mt NNLT l s d dng c hiu mt chng trnh c vit bng ngn ng . Tnh d c c c trng bi cc thuc tnh sau: 1.- S gin d. Mt ngn ng c gi l c tnh gin d nu ngn ng c t cc thnh phn c s, tc l t cc yu t c nh ngha trc. Cc ngn ng m chng ta c th t c mt php ton bng nhiu cch khc nhau th khng phi l mt ngn ng gin d. Chng hn trong ngn ng C tng thm mt n v cho bin count ta c th s dng nhiu cch nh count = count + 1, count += 1, count++ hoc ++count. Cc php ton chng (overload) cng lm cho ngn ng tr nn phc tp. Chng hn ton t + c th hiu l cng hai s nguyn, cng hai s thc, hp hai tp hp hay ghp ni hai chui k t... 2.- Cu trc iu khin. Cc lnh c cu trc cho php vit cc chng trnh sng sa, d c, d hiu. Chng ta c th nhn thy iu ny trong cc ngn ng thuc thp nin 1960 nh BASIC, FORTRAN trong do thiu cc cu trc iu khin nn chng trnh phi s dng nhiu lnh GOTO, rt kh theo di hiu chng trnh. Ta hy so snh hai on chng trnh in ra mn hnh 10 s t nhin u tin c vit bng ngn ng BASIC (khng c lnh cu trc FOR) v ngn ng Pascal.

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

    Vit bng BASIC 10 i=1; 20 IF i>10 THEN GOTO 60; 30 PRINT i ; 40 i=i+1; 50 GOTO 20; 60 PRINT In xong;

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

  • Ngn ng lp trnh Chng I: M u

    5

    4.- C php. C php ca ngn ng c nh hng ln n s d c hiu ca chng trnh. Chng ta xt mt s th d sau thy r vn ny.

    Mt s ngn ng quy nh di ti a ca danh biu qu ngn, chng hn trong FORTRAN 77 di ti a ca danh biu l 6, do tn bin nhiu khi phi vit tt nn kh c hiu.

    Vic s dng t kha cng gp phn lm cho ngn ng tr nn d c. Chng hn trong ngn ng Pascal ch s dng mt t kha end kt thc mt khi, kt thc mt lnh case hay kt thc mt lnh hp thnh do chng trnh tr nn kh c, trong khi Ada dng cc t kha end if kt thc lnh if, end loop kt thc lnh vng lp th chng trnh d c hn.

    1.5.2 Tnh d vit Tnh d vit ca mt ngn ng l kh nng s dng ngn ng vit mt chng trnh cho mt vn no mt cch d dng hay khng. Thng thng cc ngn ng d c th u d vit. Tnh d vit phi c xem xt trong ng cnh ca vn m ngn ng c s dng gii quyt. Theo khng th so snh tnh d vit ca hai ngn ng cho cng mt bi ton m mt trong hai c thit k dnh ring gii quyt bi ton . V d gii quyt bi ton qun tr d liu, chng ta khng th so snh Pascal vi mt h qun tr c s d liu nh Foxpro, Access hay Oracle. Sau y l mt s yu t quan trng nht nh hng ti tnh d vit ca ngn ng. 1.- S gin d. Nu mt ngn ng c qu nhiu cu trc th mt s ngi lp trnh s khng quen s dng ht tt c chng. Tt nht l c mt s nh cc cu trc ban u v mt quy tc kt hp chng thnh cc cu trc phc tp hn. 2.- H tr cho tru tng. Mt cch ngn gn, tru tng (abstraction) l kh nng nh ngha v s dng cc cu trc hoc cc php ton phc tp theo cch thc m n cho php b qua cc chi tit. Mt v d v tru tng l chng trnh con, t chng trnh gi, chng ta gi chng trnh con thc hin mt tc v no m khng cn bit cc ci t chi tit bn trong chng trnh con . Thc cht tru tng ha chnh l lm cho chng trnh sng sa hn. 3.- Kh nng din t. L nhng cng c ca ngn ng m ngi lp trnh c th s dng din t gii thut mt cch d dng. Ni cch khc, mt ngn ng c kh nng din t l ngn ng cung cp cho ngi lp trnh nhng cng c sao cho ngi lp trnh c th ngh sao th vit chng trnh nh vy. Chng hn lnh lp FOR trong Pascal d s dng cho cu trc lp vi s ln lp xc nh hn l lnh WHILE.

    found := 0; i := 1; While (i

  • Ngn ng lp trnh Chng I: M u

    6

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

    Kt qu thc hin on chng trnh ny l in ra hai dng: 50 v 50 20 v 20 Trong khi nhiu ngi lm tng hai dng s in ra l: 50 v 50 50 v 20

    1.5.4 Chi ph Chi ph ca mt ngn ng cng thng c quan tm nh l mt tiu chun nh gi ngn ng. Chi ph y phi c hiu l c tin bc v thi gian. Chi ph ny bao gm: - Chi ph o to lp trnh vin s dng ngn ng. Chi ph ny ph thuc vo s gin

    d ca ngn ng. - Chi ph ci t chng trnh. Chi ph ny ph thuc vo tnh d vit ca ngn ng. - Chi ph dch chng trnh. - Chi ph thc hin chng trnh. - Chi ph bo tr chng trnh.

    Var p, q: ^integer; Begin New(p); p^ := 50; q:= p; {C q v p cng tr n mt nh} writeln(p^, v , q^); q^ := 20; writeln(p^, v , q^); end;

  • Ngn ng lp trnh Chng I: M u

    7

    - Chi ph mua trnh bin dch

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

  • Ngn ng lp trnh Chng II: Kiu d liu

    8

    CHNG 2: KIU D LIU

    2.1 TNG QUAN

    2.1.1 Mc tiu Sau khi hc xong chng ny, sinh vin cn phi nm:

    - Khi nim v i tng d liu, bin, hng. - Khi nim v kiu d liu. - Cc phng php kim tra kiu v bin i kiu.

    2.1.2 Ni dung ct li - Cc khi nim v i tng d liu, kiu d liu. - S khai bo cc i tng d liu trong chng trnh. - Kim tra kiu, bin i kiu d liu. - Vn gn gi tr v khi to bin.

    2.1.3 Kin thc c bn cn thit Kin thc v k nng lp trnh cn bn

    2.2 I TNG D LIU

    2.2.1 Khi nim i tng d liu Trong my tnh thc d liu c lu tr b nh trong v b nh ngoi. Trong d liu c t chc thnh cc bit, cc byte hoc word. Tuy nhin trong my tnh o ca mt NNLT no , d liu c t chc phc tp hn vi cc mng, ngn xp, s, chui k t ... Ngi ta s dng thut ng i tng d liu (TDL) ch mt nhm ca mt hoc nhiu mu d liu trong my tnh o. Khc vi tnh cht tnh tng i ca cc vng nh trong my tnh thc, cc TDL v cc mi lin h ni ti ca chng li thay i mt cch ng trong qu trnh thc hin chng trnh.

    2.2.2 Cc loi TDL Xt v mt cu trc th ngi ta phn TDL lm hai loi l TDL s cp v TDL c cu trc hay cu trc d liu. TDL s cp l mt TDL ch cha mt gi tr d liu n. Hng hn nh mt s, mt k t, TDL c cu trc hay cu trc d liu l mt tch hp ca cc TDL khc. Mi TDL thnh phn ca TDL c cu trc c gi l mt phn t. Mi phn t ca cu trc d liu c th l mt TDL s cp hay cng c th l mt TDL c cu trc khc. V d mt chui k t, mt tp hp cc s, mt vct, mt ma trn,u l cc TDL c cu trc.

  • Ngn ng lp trnh Chng II: Kiu d liu

    9

    Xt v mt ngun gc th c th phn TDL lm hai loi: TDL tng minh v TDL n. TDL tng minh l mt TDL do ngi lp trnh to ra chng hn nh cc bin, cc hng, c ngi lp trnh vit ra trong chng trnh. TDL n l mt TDL c nh ngha bi h thng nh cc ngn xp lu tr cc gi tr trung gian, cc mu tin kch hot chng trnh con, cc nh m ca tp tin... Cc TDL ny c pht sinh mt cch t ng khi cn thit trong qu trnh thc hin chng trnh v ngi lp trnh khng th truy cp n chng c.

    2.2.3 Thuc tnh ca TDL Thuc tnh ca mt TDL l mt tnh cht c trng ca TDL . Mi TDL c mt tp hp cc thuc tnh phn bit TDL ny vi TDL khc. Cc TDL s cp ch c mt thuc tnh duy nht l kiu d liu ca i tng . Cc TDL c cu trc c thm cc thuc tnh nhm xc nh s lng, kiu d liu ca cc phn t v cc thuc tnh khc.

    2.2.4 Gi tr d liu Gi tr d liu (GTDL) ca mt TDL s cp c th l mt s, mt k t hoc l mt gi tr logic ty thuc vo kiu ca TDL . Mi GTDL thng c biu din bi mt dy cc bit trong b nh ca my tnh. Cn phn bit hai khi nim TDL v GTDL. Mt TDL lun lun c biu din bi mt khi nh trong b nh ca my tnh trong khi mt GTDL c biu din bi mt dy cc bit. Khi ni rng mt TDL A cha mt GTDL B c ngha l: khi nh biu din cho A cha dy bit biu din cho B. GTDL ca mt TDL c cu trc l mt tp hp cc GTDL ca cc phn t ca TDL c cu trc .

    2.2.5 Thi gian tn ti Thi gian tn ti (lifetime) ca mt TDL l khong thi gian TDL chim gi b nh ca my tnh. Thi gian ny c tnh t khi TDL c to ra cho n khi n b hy b trong qu trnh thc hin chng trnh.

    2.2.6 Cc mi lin kt Mt TDL c th tham gia vo nhiu mi lin kt trong thi gian tn ti ca n. Cc lin kt quan trng nht l:

    S lin kt ca TDL vi mt hoc nhiu gi tr. S lin kt ny c th b thay i bi php gn tr.

    S lin kt ca mt TDL vi mt hoc nhiu tn c tham chiu trong qu trnh thc hin chng trnh. Cc lin kt ny c thit lp bi s khai bo v thay i bi vic gi v tr chng trnh con.

  • Ngn ng lp trnh Chng II: Kiu d liu

    10

    S lin kt ca mt TDL vi mt s TDL khc gi l cc hp thnh (component). Cc lin kt ny thng c biu din bi gi tr con tr v n c th b thay i bi vic thay i con tr.

    S lin kt ca mt TDL vi nh trong b nh. S lin kt ny thng khng th thay i mt cch trc tip bi ngi lp trnh m n c thit lp v c th b thay i bi cc thng trnh (routine) qun l b nh ca my tnh o.

    2.3 BIN V HNG

    2.3.1 Bin Bin l mt TDL c ngi lp trnh nh ngha v t tn mt cch tng minh trong chng trnh. Gi tr ca bin c th b thay i trong thi gian tn ti ca n. Tn bin c dng xc nh v tham kho ti bin. Trong cc NNLT, tn bin thng c quy nh di dng mt dy cc ch ci, du gch di v cc ch s, bt u bng mt ch ci v c chiu di hu hn.

    2.3.2 Hng Hng l mt TDL c tn v gi tr ca hng khng thay i trong thi gian tn ti ca n. Hng trc kin (literal constant) l mt hng m tn ca n l s m t gi tr ca n (chng hn "27" l s m t s thp phn ca TDL gi tr 27). Ch s khc bit gia 2 gi tr 27. Mt ci l mt s nguyn c biu din thnh mt dy cc bit trong b nh trong qu trnh thc hin chng trnh v ci tn "27" l mt chui 2 k t "2" v "7" m t mt s nguyn nh n c vit trong chng trnh.

    2.4 KIU D LIU

    2.4.1 nh ngha kiu d liu Kiu d liu l mt tp hp cc TDL v tp hp cc php ton thao tc trn cc TDL . Mi NNLT u xy dng cho mnh mt tp cc kiu d liu nguyn thu. Chng hn ngn ng LISP, kiu d liu chnh l cc cy nh phn vi cc php ton CAR, CDR v CONS cn i vi cc ngn ng cp cao khc th cc kiu d liu nguyn thy thng l: integer, real, character v boolean. Hn na cc ngn ng cn cung cp phng tin cho php ngi lp trnh nh ngha cc kiu d liu mi. Kiu d liu trong ngn ng c nghin cu trn hai phng din khc nhau: S c t v s ci t kiu d liu.

    2.4.2 S c t kiu d liu Khi c t mt kiu d liu chng ta thng quan tm n cc thnh phn c bn sau:

    Cc thuc tnh nhm phn bit cc TDL ca kiu. Cc gi tr m cc TDL ca kiu c th c.

  • Ngn ng lp trnh Chng II: Kiu d liu

    11

    Cc php ton c th thao tc trn cc TDL ca kiu. V d, xt s c t kiu d liu mng ta thy: 1.- Cc thuc tnh c th bao gm: s chiu, min xc nh ca ch s i vi mi chiu v kiu d liu ca cc phn t. 2.- Cc gi tr c th nhn ca cc phn t mng. 3.- Cc php ton c th bao gm: php la chn mt phn t mng thng qua vic s dng ch s ca phn t , php gn mt mng cho mt mng khc

    Php ton

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

    Tn php ton: Min xc nh -> Min gi tr Trong Min xc nh = Kiu i s X Kiu i s X

    (Min xc nh l tp tch -cc ca cc kiu i s) Min gi tr = Kiu kt qu X Kiu kt qu X ... (Min gi tr l tp tch -cc ca cc kiu kt qu)

    Khi nghin cu cc php ton trn cc kiu d liu chng ta cn lu cc vn sau: 1.- Cc php ton khng c xc nh u vo mt cch chc chn.

  • Ngn ng lp trnh Chng II: Kiu d liu

    12

    Mt php ton c xc nh trn nhiu hn mt min xc nh thng cha ng cc li. V d cc php ton s hc c th xc nh trn nhiu tp hp s khc nhau c th gy ra s trn s hoc mt kt qu sai lch m ta khng th kim sot c. V d trong ngn ng Pascal, php cng c th xc nh trn nhiu min xc nh khc nhau nh integer, real, nn c th c nhng kt qu sai lch nh trong v d sau: var a, b : integer; begin {1} a:= 32767; {2} b:= 30000;

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

  • Ngn ng lp trnh Chng II: Kiu d liu

    13

    Mt php ton c th tr v mt kt qu n, v cc kt qu n nh vy s gy ra hiu ng l (side effect) lm thay i gi tr c lu tr ca cc TDL khc m ngi lp trnh kh lng kim sot. Cc php ton c th gy nn hiu ng l l php gn (c tr v mt gi tr) v cc chng trnh con m tham s c truyn bng quy chiu. Chng hn xt v d sau trong Pascal: var m,n: integer; function f(var a: integer): integer; begin a := 2*a; f := 5; end; begin m := 10; n := m + f(m); writeln(n); readln; end. Vi mi s integer a hm f lun tr v mt kt qu tng minh l 5 v mt kt qu n l 2a, chnh kt qu n ny lm thay i gi tr ca TDL m do n s c gi tr l 25 ch khng phi l 15 nh chng ta lm tng.

    2.4.3 S ci t kiu d liu Khi xt s ci t kiu d liu ta phi quan tm n hai yu t sau:

    T chc lu tr gi tr d liu ca kiu d liu trong b nh ca my tnh hay cn gi l s biu din trong b nh.

    Gii thut thc hin cc php ton thao tc trn cc gi tr d liu ca kiu. Hai yu t ny lin quan cht ch n nhau, ni chnh xc hn l tu thuc vo cch thc t chc lu tr m c cc gii thut thao tc tng ng.

    2.5 S KHAI BO

    2.5.1 Khi nim khai bo Khai bo l mt lnh trong chng trnh dng chuyn ti b dch, thng tin v s lng v kiu ca TDL cn thit trong qu trnh thc hin chng trnh. Nh v tr ca khai bo trong chng trnh, chng hn u chng trnh con, s khai bo c th ch r thi gian tn ti ca TDL. S khai bo cn xc nh s lin kt ca cc TDL vi cc tn ca n. C hai loi khai bo l khai bo tng minh v khai bo n. Khai bo tng minh l s khai bo do ngi lp trnh vit ra trong chng trnh, nh trong cc khai bo ca Pascal. Khai bo n nh trong trng hp cc TDL c dng mt cch mc nhin m khng cn mt s khai bo tng minh no. V d trong ngn ng FORTRAN bin INDEX c th dng m khng cn khai bo tng minh v n c trnh bin dch FORTRAN hiu mt cch mc nhin l mt bin nguyn bi v tn ca n c bt u bi mt trong cc ch ci t I n N.

  • Ngn ng lp trnh Chng II: Kiu d liu

    14

    Ngn ng lp trnh c chia lm hai loi: ngn ng khai bo, trong cc TDL phi c khai bo trc khi s dng v ngn ng khng khai bo, trong TDL c th s dng m khng cn phi khai bo. Vi ngn ng khai bo, TDL sau khi khai bo phi s dng ng nh n c khai bo, trong khi i vi ngn ng khng khai bo, mt TDL c th s dng mt cch tu thch. y l mt trong nhng l do lm cho ngn ng khng khai bo tr nn mm do hn.

    2.5.2 Mc ch ca s khai bo Vic khai bo c cc mc ch quan trng sau:

    Chn mt t chc lu tr tt nht cho TDL. Chng hn trong ngn ng Pascal lu tr ngy trong thng ta c th khai bo bin ngay c kiu l integer c lu tr trong b nh bi 2 byte. Tuy nhin trong mt thng ch c ti a 31 ngy nn ta c th khai bo bin ngay c kiu min con 1..31 c lu tr trong b nh ch vi 1 byte.

    Qun l b nh: S khai bo cho php xc nh thi gian tn ti ca TDL m cc chng trnh qun l b nh s dng cp pht v gii phng b nh cho TDL.

    Cc php ton chung. Hu ht cc ngn ng u dng cc k hiu c bit nh "+" ch mt php ton no ph thuc vo kiu d liu ca i s. V d trong Pascal, "A+B" c ngha l "php cng cc s nguyn" nu A v B thuc kiu Integer, "php cng cc s thc" nu A v B thuc kiu real v l "php hp" nu A v B thuc kiu tp hp. Cc php ton nh th c gi l cc php ton chung bi v n khng ch r mt php ton nht nh no. S khai bo cho php b dch xc nh mt php ton c th c ch nh bi k hiu php ton chung. V d trong Pascal, t s khai bo hai bin A v B, trnh bin dch s xc nh c php ton c th trong ba php ton, theo nu A, B l cc bin integer th "A+B" l php cng hai s nguyn, nu A, B l hai bin real th "A+B" l php cng hai s thc Ngc li trong SNOBOL4 v khng c khai bo kiu cho bin nn s xc nh php "+" no thc hin phi c lm ti thi im m mt php "+" b bt gp trong qu trnh thc hin chng trnh.

    Kim tra kiu. Mc ch quan trng nht ca vic khai bo l chng cho php kim tra kiu ca bin. V tnh cht quan trng ca vic kim tra kiu nn chng ta s xem xt n trong mc sau.

    2.6 KIM TRA KIU V BIN I KIU

    2.6.1 Khi nim kim tra kiu Kim tra kiu l kim tra xem kiu thc nhn c ca cc i s trong mt php ton c ng vi kiu d liu m cc i s cn c hay khng. V d trc khi thc hin lnh gn X := A * B vic kim tra phi c xc nh i vi 2 php ton nhn v php gn. Trc ht php nhn phi nhn c 2 tham s A, B c kiu s, nu c A v B ng l c kiu s (chng hn s nguyn) th tip tc kim tra cho php ton gn. Tch A*B s l mt s nguyn nn X cng phi l mt bin thuc kiu nguyn, nu khng ng nh vy th c s sai kiu.

  • Ngn ng lp trnh Chng II: Kiu d liu

    15

    Kim tra kiu c th c tin hnh trong lc chy chng trnh (kim tra kiu ng) hoc trong lc bin dch chng trnh (kim tra kiu tnh).

    2.6.2 Kim tra kiu ng Khi nim: Kim tra kiu ng l kim tra kiu c thc hin trong khi thc hin chng trnh. Thng thng kim tra kiu ng c thc hin mt cch tc th trc khi thc hin mt php ton. Phng php thc hin: kim tra kiu ng ngi ta phi lu tr thng tin v kiu ca mi mt TDL cng vi TDL . Trc khi thc hin mt php ton thng tin v kiu ca mi mt i s c kim tra. Nu kiu ca cc i s l ng th php ton s c thc hin v kiu ca kt qu s c ghi li dng kim tra cho cc php ton sau, ngc li s c mt thng bo li v kiu . Ngn ng s dng: Kim tra kiu ng c s dng trong cc ngn ng khng khai bo nh SNOBOL4, LISP, APL. Trong cc ngn ng ny khng c s khai bo kiu cho bin. Kiu d liu ca cc bin A v B trong biu thc "A+B" c th thay i trong qu trnh thc hin chng trnh. Trong nhng trng hp nh vy, kiu ca A v B phi c kim tra ng ti mi ln php cng c gi thc hin. Trong cc ngn ng khng khai bo, cc bin i khi c gi l khng nh kiu v chng khng c kiu c nh. u im: u im ch yu ca kim tra kiu ng l tnh mm do trong khi vit chng trnh: khng yu cu khai bo kiu v kiu ca TDL c th thay i trong qu trnh thc hin chng trnh. Ngi lp trnh khng phi lo lng v kiu d liu. Nhc im: Tuy nhin kim tra kiu ng cng c mt s yu im nh sau:

    C kh nng b st li v kiu. Bi v vic kim tra ng ch kim tra ti thi im thc hin php ton do cc php ton nm trong nhnh chng trnh khng c thc hin th s khng c kim tra. Bt k mt nhnh cha c kim tra no u c th cha cc i s c li v kiu v do cc li ny c th xut hin ti thi im sau . V d ta c mt on chng trnh sau c vit trong mt ngn ng kim tra kiu ng:

    Nhp s a t bn phm; Nhp s b t bn phm; Nu a > b Th x := a + b

    Ngc li x := a + titi; Nu khi thc hin on chng trnh ny, ngi s dng lun lun nhp s a ln hn s b th iu kin a>b lun lun ng nn khng bao gi chng trnh

  • Ngn ng lp trnh Chng II: Kiu d liu

    16

    thc hin lnh x := a + titi do khng bao gi pht hin li v kiu: a l mt s, khng th cng vi titi l mt chui.

    Kim tra kiu ng i hi thng tin v kiu phi c lu gi cho mi mt TDL trong qu trnh thc hin chng trnh do yu cu v b nh phi ln.

    Kim tra kiu phi c tin hnh tc th trc mi khi thc hin mt php ton nn tc thc hin chng trnh chm.

    2.6.3 Kim tra kiu tnh Khi nim: Kim tra kiu tnh l s kim tra kiu c thc hin trong qu trnh dch chng trnh. Phng php thc hin: Theo nguyn tc kim tra kiu tnh, thng tin v kiu ca TDL phi c cung cp cho b dch. Thng tin ny mt phn c cung cp bi php khai bo ca ngi lp trnh v mt phn bi ngn ng . Cc thng tin bao gm:

    i vi mi mt php ton th l s lng, th t v kiu d liu ca i s v kiu ca kt qu. i vi cc php ton nguyn thu th vic nh ngha ngn ng s cung cp cc thng tin ny cn i vi chng trnh con th ngi lp trnh phi xc nh mt cch tng minh.

    i vi mi mt bin th l kiu ca bin. i vi mi mt hng, th l kiu ca i tng d liu hng. Ng ngha ca

    mt hng trc kin s ch ra kiu ca n, chng hn "2" l mt s nguyn, "2.3" l mt s thc.

    Kim tra kiu tnh c thc hin nh sau: Thng qua on u ca chng trnh, b bin dch tp hp thng tin t s khai bo trong chng trnh vo trong bng danh biu (symbol table) ni cha thng tin v kiu ca cc bin v chng trnh con. B bin dch cng s c thng tin v cc php ton nguyn thu c nh ngha bi ngn ng, cc hng...Khi gp mt php ton th phi tra trong bng danh biu xc nh kiu ca mi mt i s c hp l hay khng. Ch rng nu php ton l php ton chung nh ni trn th c th c nhiu kiu hp l cho mt i s. Nu kiu ca i s l hp l th kiu kt qu c xc nh v b bin dch ghi li thng tin ny kim tra cc php ton sau. Ngn ng s dng: Kim tra kiu tnh thng c s dng trong cc ngn ng khai bo tc l khi vit chng trnh, cc bin phi c khai bo kiu trc khi s dng nh Pascal, C u im:

    Do php kim tra kiu tnh kim tra tt c cc php ton c th xut hin trong bt k mt lnh no ca chng trnh, tt c cc nhnh ca chng trnh u c kim tra nn khng th c s st li v kiu.

  • Ngn ng lp trnh Chng II: Kiu d liu

    17

    Mt khc thng tin v kiu khng gn vi TDL ti thi im thc hin chng trnh nn tit kim c b nh v tng tc thc hin chng trnh.

    Nhc im: Yu im ch yu ca kim tra kiu tnh l chng trnh khng mm do, ngi lp trnh lun phi lo lng v vic s dng bin khng ng kiu.

    2.7 CHUYN I KIU Trong qu trnh kim tra kiu, nu c s khng tng thch gia kiu thc ca i s v kiu ang c monng i ca php ton y th c hai la chn c th:

    S khng tng thch kiu b bo li hoc Mt s chuyn i kiu t ng c thi hnh i kiu ca i s thc t

    thnh kiu ng vi yu cu. Chuyn i kiu l mt php ton c nh ngha nh sau: S chuyn i: Kiu1 -> Kiu2 ngha l s chuyn i ly TDL ca mt kiu v sn sinh ra mt TDL "tng ng" ca mt kiu khc. Hu ht cc ngn ng u cung cp hai phng php chuyn i kiu:

    Trang b mt tp hp cc hm c xy dng m ngi lp trnh c th gi trong chng trnh to ra s chuyn i kiu. V d Pascal trang b hm ROUND i mt TDL s thc thnh mt i tng d liu nguyn vi gi tr bng phn nguyn ca s thc.

    Nh l mt s chuyn i t ng (cn gi l p kiu) do ngn ng thc hin trong mt s trng hp khng tng thch kiu no . V d trong Pascal cc i s ca php ton s hc "+" c ln s thc v s nguyn hoc khi gn mt s nguyn cho mt bin s thc th s nguyn phi c i mt cch t ng thnh kiu thc.

    i vi kim tra kiu ng th s chuyn i kiu t ng c din ra ti im m s khng tng thch kiu c tm thy trong qu trnh thc hin chng trnh. i vi s kim tra kiu tnh th mt m ph s c xen vo trong chng trnh ch dng gi ti hm bin i kiu ti im thch hp trong qu trnh thc hin. Chuyn i kiu t ng gip ngi lp trnh khi mi lo lng v s sai kiu v trnh vic gi ti mt s lng ln cc php bin i kiu tng minh trong chng trnh. Tuy nhin chng ta nn trnh vic chuyn i kiu bng cch vit cc php ton ng kiu. Chng hn trong lp trnh thay v vit lnh x := 1 (vi x l bin s thc) ta nn vit x := 1.0, vi lnh trc th khi thc hin phi c mt s chuyn i kiu t ng cn vi lnh sau th khng cn nn thi gian thc hin s nhanh hn.

    2.8 GN V KHI TO

    2.8.1 Php gn Gn tr cho bin l s lu tr gi tr d liu vo trong nh ca bin . Gn tr l mt php ton c bn trong cc NNLT. N dng thay i s lin kt ca gi tr vi TDL.

  • Ngn ng lp trnh Chng II: Kiu d liu

    18

    Ni chung cc ngn ng khc nhau th php gn cng khc nhau. S khc nhau u tin l khc nhau v c php, chng hn ta c mt s c php lnh gn nh sau:

    A := B (Pascal hay Ada) A = B (C, C++, Fortran, PL/1 v SNOBOL4) MOVE B TO A (COBOL) A 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: & operator= (const & Obj) { // Thc hin vic gn d liu; return *this; } Trong tn lp l tn ca lp chng ta ang nh ngha. Phng thc ny nhn vo mt i tng Obj, thc hin vic gn Obj cho i tng hin hnh v tr i tng hin hnh ny v nh mt kt qu. V d ta to mt class c tn l point biu din cho mt im trong mt phng c c trng bi hai ta x v y. Trong chng trnh ta mun gn cc im cho nhau, nn trong khi nh ngha class point, ta phi nh ngha ton t gn. C th nh sau: class point {

  • Ngn ng lp trnh Chng II: Kiu d liu

    19

    float x; float y;

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

    2.8.2 S khi to bin Khi to mt bin l gn cho bin mt gi tr u tin. Mt bin khi c to ra th s c cp pht nh nhng n vn cha c khi to. Khi n c gn mt gi tr u tin th mi c khi to. Cc bin cha c khi to l ngun gc ca cc li lp trnh. Khi mt bin c cp pht nh m cha c khi to th trong nh ca n cng c mt gi tr ngu nhin no . Thng l mt gi tr rc (Khi mt TDL no trc b hy b nhng gi tr ca TDL ny trong nh vn cn, gi tr ny gi l gi tr rc). iu nguy him l gi tr rc ny vn l mt gi tr hp l. V th chng trnh c th x l trn gi tr rc ny mt cch bnh thng v chng ta khng th kim sat c kt qu x l .

    17.2

    8.4

    8.4

    8.4

    A: A:

    B: B:

    17.2

    8.4 8.4

    A:A:

    B: B:

    Trc khi gn Sau khi gn

  • Ngn ng lp trnh Chng II: Kiu d liu

    20

    V tnh cht nghim trng nh ni trn ca bin cha c khi to, cc ngn ng lp trnh c th s dng cc gii php sau khc phc: 1.- Nu bin cha c kh to th s c gi tr NULL: Khi mt bin mi c to ra, nh cp pht cho n phi cha mt dy cc bit biu din cho mt gi tr NULL. Ty thuc vo kiu ca bin m gi tr NULL ny s c mt gi tr c th, v d nu l bin s th NULL l 0, nu l bin chui k t th NULL l chui rng, nu bin l logic th NULL l FALSE... 2.- Khi to bin ngay sau khi n va c to ra l mt cch lp trnh tt v trong mt s ngn ng mi u cung cp phng tin lm iu ny mt cch d dng. Trong ngn ng Pascal mt bin c khi to ng thi vi vic khai bo c gi l bin c gi tr u hay cn gi l hng nh kiu. V d: const i:integer=10; a: ARRAY[1..3,1..2] Of Integer = ((11, 12), (21, 22), (31, 32)); var j:integer; begin writeln(i); i:= i+1; writeln(i); for i:=1 to 3 do begin for j:=1 to 2 do write(a[i,j]:5); writeln; end; end.

    2.9 CU HI N TP 1. Xt v mt cu trc th c cc loi i tng d liu no? 2. Th no l mt i tng d liu s cp? 3. Th no l mt i tng d liu c cu trc? 4. i tng d liu tng minh l g? 5. i tng d liu n l g? 6. K tn cc mi lin kt ca i tng d liu. 7. Th no l mt bin? 8. Th no l mt hng? 9. Kiu d liu l g? 10. Khi c t mt kiu d liu, chng ta phi c t nhng iu g? 11. Cho v d v mt php ton gy ra hiu ng l. 12. Khi ci t mt kiu d liu, chng ta phi ch r nhng iu g? 13. Mc ch ca s khai bo l g? 14. Th no l kim tra kiu? 15. Khi c s khng tng thch v kiu th chng trnh dch phi lm g? 16. K tn cc phng php kim tra kiu.

  • Ngn ng lp trnh Chng II: Kiu d liu

    21

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

    nh gi (nh tr) c biu thc khng?

  • Ngn ng lp trnh Chng III: Kiu d liu s cp

    22

    CHNG 3: KIU D LIU S CP

    3.1 TNG QUAN

    3.1.1 Mc tiu Sau khi hc xong chng ny, sinh vin cn phi nm:

    - Khi nim v kiu d liu s cp. - c t v phng php ci t kiu d liu s cp trong cc ngn ng lp trnh. - Mt s kiu d liu s cp c th nh: kiu s, k t, logic

    3.1.2 Ni dung ct li - Kin thc tng quan v kiu d liu s cp. - Mt vi kiu d liu s cp: kiu s, lit k, logic, k t.

    3.1.3 Kin thc c bn cn thit Kin thc v k nng lp trnh cn bn, kin thc chng 2.

    3.2 NH NGHA KIU D LIU S CP Kiu d liu s cp l mt kiu d liu m cc TDL ca n l cc TDL s cp. Ni chung cc ngn ng lp trnh u c cc kiu d liu s cp sau: s nguyn (integer, int), s thc (real, float, double), k t (char, character), logic (bool, boolean) v kiu lit k.

    3.3 S C T CC KIU D LIU S CP

    3.3.1 Thuc tnh ca kiu d liu s cp Thuc tnh c bn nht ca bt k mt TDL s cp no chnh l kiu d liu ca n. i vi mt s kiu d liu c th th c th c thm cc thuc tnh b sung c trng cho kiu .

    3.3.2 Gi tr ca kiu d liu s cp Tp hp cc gi tr ca mt kiu d liu s cp lun l mt tp hp c th t v c mt gi tr nh nht v mt gi tr ln nht. Chnh nh tnh cht c th t ca tp gi tr s cp nn trong thao tc sp xp d liu, kha sp xp thng thuc kiu d liu s cp. V d kiu d liu integer l mt tp hp hu hn cc s nguyn (d nhin l c th t), t mt s nguyn nh nht n mt s nguyn ln nht. S nguyn nh nht v s nguyn ln nht l cc s nguyn tng ng vi cc gi tr nguyn nh nht v ln nht c th biu din mt cch thun tin trong b nh ca my tnh.

  • Ngn ng lp trnh Chng III: Kiu d liu s cp

    23

    3.3.3 Php ton trn kiu d liu s cp Do tp gi tr s cp c th t, nn trong tt c cc kiu d liu s cp u c cc php ton quan h. Ngoi ra cn c cc php ton nhn vo mt s i s thuc kiu s cp v tr v mt gi tr s cp cng kiu. Tuy nhin cn ht sc lu rng tp cc gi tr s cp c gi tr nh nht v gi tr ln nht, cho nn i khi gi tr tr v ca php ton khng nm trong gii hn ca tp gi tr s cp, iu ny s gy ra s sai st trong chng trnh.

    3.4 CI T CC KIU D LIU S CP

    3.4.1 T chc d liu trong b nh Ngi ta thng s dng vic t chc d liu di phn cng ca my tnh biu din cho cc gi tr d liu ca kiu d liu s cp. L do ca vic la chn ny rt n gin: Nu biu din b nh ca phn cng c s dng th cc php ton c bn trn d liu ca kiu ny c th c thc hin bi cc php ton do phn cng cung cp. M cc php ton c thit k bi phn cng s c tc thc hin nhanh. Ngc li, nu ta s dng s biu din bi phn mm th phi s dng cc php ton m phng bi phn mm m tc thc hin s chm hn. Tuy nhin, vic s dng biu din bi phn cng cng c yu im l tp cc gi tr s b hn ch. V d biu din mt s nguyn trong b nh, ta c th s dng hai phng php: 1.- S dng cch biu din mt s nguyn ca phn cng, chng hn s dng 16 bit biu din cho mt s nguyn. Vi phng php ny th ta c th s dng lun cc php tnh s hc trn s nguyn (+, -, *, DIV, MOD) c thit k cho phn cng. u im ca phng php ny l cc php tnh s hc c tc thc hin nhanh. Nhc im ca phng php l tp gi tr cc s nguyn ch c 65535 s (t -32768 n 32767). 2.- S dng mt cu trc d liu no biu din cho mt s nguyn, chng hn s dng mt chui k t, trong mi k t lu tr mt ch s. u im ca phng php l tp cc gi tr nguyn s rt ln (s cc ch s trong mt nguyn c th bng chiu di ca chui k t biu din cho n). Nhc im ca phng php l chng ta phi xy dng cc chng trnh con thc hin cc php tnh s hc v d nhin tc thc hin ca cc chng trnh con ny s chm hn cc php tnh c xy dng trong phn cng. Cc thuc tnh (ch yu l kiu d liu) ca TDL s cp c x l bng 2 cch chnh nh sau: 1.- Cc thuc tnh ca TDL c th c xc nh trong khi bin dch bi trnh bin dch. Cc thuc tnh ny s c lu tr trong b dch ca ngn ng (chng hn bng danh biu) v khi cn s tm li cc thuc tnh ny s dng. l phng php thng dng trong cc ngn ng bin dch nh FORTRAN, C v Pascal, ni m tnh hiu qu ca vic s dng b nh v tc thc hin chng trnh l nhng mc tiu trn ht.

  • Ngn ng lp trnh Chng III: Kiu d liu s cp

    24

    2.- Cc thuc tnh c th c lu tr trong b m t nh l mt phn ca TDL ti thi gian thc hin. y l phng php thng dng trong cc ngn ng thng dch nh LISP v SNOBOL4, ni m tnh linh hot mm do l mc tiu trc ht ch khng phi l tnh hiu qu.

    3.4.2 Ci t php ton Mi mt php ton thao tc trn cc TDL ca mt kiu d liu s cp cho c th c ci t bng mt trong 3 cch nh sau: 1.- Nh l mt php ton phn cng trc tip, nu s biu din b nh ca TDL l s biu din ca phn cng. V d nu cc s nguyn c lu tr bng cch dng biu din phn cng cho s nguyn th cc php ton nh php cng, tr v cc php ton s hc khc ca s nguyn c th c thc hin bng cch dng cc php ton s hc cho s nguyn c xy dng trong phn cng. 2.- Nh l mt th tc hoc hm thc hin cc php ton. V d php ton ly cn bc hai thng thng khng c cung cp mt cch trc tip nh l mt php ton trong phn cng ngay c khi cc s c biu din bng s biu din ca phn cng v v vy n c ci t nh l mt chng trnh con tnh cn bc hai. Nu cc TDL khng c biu din bng s biu din xc nh bi phn cng th tt c cc php ton phi c m phng bi phn mm. 3.- Nh l mt chui cc dng m lnh dng thc hin php ton nh l mt dy cc php ton phn cng. V d hm ly tr tuyt i ca mt s c nh ngha l:

    ABS(x) =

    =0 th b qua ch th k tip 3.- t x = -x 4.- Lu x vo b nh

    Trong mi mt dng m lnh c thc hin bi mt php ton trong phn cng.

    3.5 KIU D LIU S Hu ht cc ngn ng lp trnh u c cc kiu d liu s, nhng cc chi tit ca s c t v php ci t cc kiu ny c nhiu im khc nhau. Kiu s nguyn v kiu s thc l ph bin nht bi v chng da mt cch trc tip vo phn cng ca my tnh.

    3.5.1 S nguyn

    S c t

    c t cc thuc tnh: Mt TDL ca kiu s nguyn khng c thuc tnh no khc ngoi kiu ca n. c t gi tr: Tp hp cc gi tr nguyn c xc nh theo dng l mt tp hp con c th t hu hn ca tp v hn cc s nguyn c nghin cu trong ton hc.

  • Ngn ng lp trnh Chng III: Kiu d liu s cp

    25

    Gi tr nguyn ln nht i khi c biu din nh l mt hng xc nh. V d trong Pascal l hng MaxInt. Min gi tr ca kiu s nguyn l tp cc s nguyn t -MaxInt n MaxInt. Gi tr MaxInt c la chn phn nh gi tr nguyn ln nht c th biu din c trong phn cng. c t cc php ton: Trn TDL nguyn thng c cc nhm php ton chnh nh sau: 1.- Cc php tnh s hc Cc php tnh s hc hai ngi thng c nh ngha l: Bin_Op: Integer x Integer -> Integer. y Bin_Op c th l cng (+), tr (-), nhn (*), chia (/ hoc DIV), ly phn d (MOD) hoc mt s php ton tng t khc. Cc php tnh s hc mt ngi c nh ngha: Unary_Op : Integer -> Integer y Unary_Op c th l m (-), dng (+). Cc php ton s hc ph bin khc thng c cha trong th vin chng trnh con. 2.- Cc php ton quan h Cc php ton quan h c nh ngha l: Rel_Op : Integer x Integer -> Boolean y Rel_Op c th l bng, khc, nh hn, ln hn, nh hn hoc bng, ln hn hoc bng. Php ton quan h so snh hai gi tr d liu i s v tr v kt qu l mt i tng d liu logic (ng hoc sai). 3.- Gn tr Cng nh php gn tng qut, php gn ca s nguyn c th tr v (vi nh ngha: Assignment : Intger x Integer -> Integer) hoc khng tr v mt gi tr (vi inh ngha: Assignment : Integer x Intger -> Void) .

    S ci t

    Kiu d liu nguyn hu ht c ci t mt cch trc tip bng cch dng s biu din b nh c xc nh bi phn cng v tp hp cc php tnh s hc, cc php ton quan h nguyn thu trong phn cng cho cc s nguyn. Thng thng s biu din ny s dng mt t trong b nh hoc mt dy cc bytes lu tr mt s nguyn. Chng hn ngn ng Pascal s dng biu din s nguyn bi 1 t (word) trong phn cng ca my tnh biu din cho mt s integer.

    3.5.2 Min con ca s nguyn

    S c t

    Kiu min con ca kiu d liu nguyn l mt kiu d liu m tp cc gi tr ca n l mt dy cc gi tr nguyn trong mt khong gii hn nh. Cc dng khai bo sau thng c s dng:

    A : 1..10 (Pascal)

  • Ngn ng lp trnh Chng III: Kiu d liu s cp

    26

    A : Integer Range 1..10 (Ada) Nh vy v thuc tnh, kiu min con ca kiu s nguyn, c thuc tnh ca kiu s nguyn. V gi tr, tp cc gi tr ca kiu min con c xc nh r trong php khai bo v cui cng, kiu min con cho php s dng tp hp php ton nh trong kiu s nguyn bnh thng.

    S ci t

    Kiu min con c ci t tng t nh ci t kiu s nguyn.

    Li ch ca vic s dng kiu min con

    Kiu min con c mt u im ni bt l kim tra kiu tt hn kiu s nguyn. Vic khai bo mt bin kiu min con cho php kim tra kiu mt cch nghim ngt hn khi thc hin lnh gn tr cho bin. V d lu tr cc thng trong mt nm ta c th s dung bin MONTH vi khai bo kiu min con l MONTH: 1..12 th lnh gn MONTH := 0 l khng hp l v li c t ng tm thy khi bin dch. Nhng nu MONTH c khai bo l Integer th lnh gn trn l hp l v li ch c th c tm ra bi ngi lp trnh trong qu trnh chy th.

    3.5.3 S thc du chm ng

    S c t

    Tp hp cc gi tr thc du chm ng c xc nh l mt dy s c th t t mt s m nh nht ti mt s ln nht c xc nh trong phn cng ca my tnh, nhng cc gi tr khng c phn b ri rc u trong gii hn ny. Cc php tnh s hc, cc php ton quan h, php gn i vi s thc cng ging nh i vi s nguyn. Mt s php ton khc cng c cc ngn ng trang b nh l cc hm, chng hn:

    SIN : Real -> Real (Hm SIN) COS : Real -> Real (Hm COSIN) SQRT: Real -> Real (Hm ly cn bc hai) MAX : Real x Real -> Real (Hm ly gi tr ln nht)

    S ci t

    S biu din b nh cho kiu d liu thc du chm ng da trn c s biu din phn cng trong mt nh c chia thnh mt phn nh tr (mantissa) v mt s m (exponent). Cc php tnh s hc v cc php ton quan h trn kiu s thc c h tr bi phn cng. Cc php ton khc phi c ngn ng ci t nh l cc chng trnh con.

  • Ngn ng lp trnh Chng III: Kiu d liu s cp

    27

    3.6 KIU LIT K

    3.6.1 t vn Trong lp trnh, c mt iu ph bin l mt bin c th ly mt hoc mt s nh cc gi tr. Chng hn bin NGAY_TRONG_TUAN ch ly 7 gi tr biu din cho ch nht, th hai, th ba,...th by. Tng t bin GIOI_TINH ch c hai gi tr biu din l "nam" v "n". Trong cc ngn ng nh FORTRAN hay COBOL mt bin nh vy phi c kiu s nguyn v cc gi tr c biu din bi cc s nguyn chng hn "ch nht" c biu din bi s 1, "th hai" c biu din bi s 2,... "nam" c biu din bi s 0 v "n" c biu din bi s 1. Chng trnh s dng cc gi tr ny nh l cc s nguyn v ngi lp trnh phi nh s tng ng gia cc gi tr nguyn vi "ngha" ca chng trong ng dng. Qu thc y l mt iu bt tin v d gy ra sai st. Nhiu ngn ng mi nh Pascal hay Ada cho php ngi lp trnh t t ra mt kiu d liu bng cch lit k ra mt danh sch cc gi tr ca kiu . Kiu ny gi l kiu lit k.

    3.6.2 S c t Ngi lp trnh nh ngha kiu lit k bng cch lit k ra mt danh sch cc tn trc kin thng qua s khai bo. Cc tn trc kin trong danh sch l cc gi tr ca kiu v th t ca chng cng c xc nh nh th t chng xut hin trong danh sch. Chng hn, ta c khai bo bin trong Pascal: VAR

    NGAY_TRONG_TUAN : (Chu_nhat, Hai, Ba, Tu, Nam, Sau, Bay); V c nhiu bin c cng mt kiu lit k c dng trong mt chng trnh nn ngi ta thng nh ngha mt lit k nh l mt kiu c tn, sau s dng n xc nh kiu cho nhiu bin nh trong Pascal: TYPE

    NGAY = (Chu_nhat, Hai, Ba, Tu, Nam, Sau, Bay); sau khai bo bin: VAR

    NGAY_TRONG_TUAN, NGAY_LAM_VIEC: NGAY; Trong s khai bo trn, cc tn trc kin nh Chu_nhat, Hai, Ba, chnh l cc gi tr ca kiu v cc gi tr ny c sp th t nh chng c ghi ra, tc l Chu_nhat < Hai < Ba < < Bay. Ch rng kiu NGAY c nh ngha th c th c dng nh mt tn kiu nguyn thu (Integer chng hn) v cc hng trc kin nh Chu_nhat, Hai, Ba, Tu,.. cng c s dng nh l cc hng trc kin nguyn thu (chng hn "27"). V th ta c th vit:

    IF NGAY_TRONG_TUAN = Hai THEN ... Cc php ton c bn trong kiu lit k l cc php ton quan h (bng, nh hn, ln hn...), php gn tr, php ton cho gi tr ng sau v gi tr ng trc mt gi tr trong dy cc hng trc kin ca lit k.

  • Ngn ng lp trnh Chng III: Kiu d liu s cp

    28

    3.6.3 S ci t Biu din b nh cho mt TDL kiu lit k thng l khng phc tp. Mi gi tr trong lit k c biu din bng mt s nguyn 0, 1, 2,... V d kiu NGAY trn ch cn s dng 7 gi tr t 0 n 6, trong 0 biu din cho Chu_nhat, 1 biu din cho Hai, 2 biu din cho Ba,... S ci t cc php ton c bn cng khng phc tp. Cc php quan h c ci t bng cch s dng cc php ton quan h di phn cng cho s nguyn nh "=", "",... Php ton ly gi tr ng sau mt gi tr c ci t bng cch ly s nguyn biu din cho gi tr cng thm 1 v c s kim tra thy c kt qu khng vt qu gii hn cho php. Chng hn xc nh gi tr sau Hai, ta ly 1 (biu din cho Hai) cng vi 1 c 2, m 2 biu din cho Ba, nn sau Hai l Ba, nhng sau Bay th khng c gi tr no v tng ca 6 (biu din cho Bay) vi 1 c 7, vt qu gii hn cho php ca kiu. Tng t cho php ton ly gi tr ng trc ca mt gi tr.

    3.6.4 Li ch ca vic s dng kiu lit k Kiu lit k c a vo trong ngn ng lp trnh nhm gii quyt vn c nu ra trong phn t vn . T ta c th thy r vic s dng kiu lit k lm cho chng trnh sng sa, trc quan, ngi lp trnh khng cn phi nh ngha ca gi tr s v do vy chng trnh s c chnh xc cao hn. Ni cch khc, kiu lit k lm tng tnh d c, tnh d vit v tin cy ca ngn ng.

    3.7 KIU LOGIC Kiu logic (bool, boolean hoc logical) l kiu d liu ph bin trong hu ht cc ngn ng.

    3.7.1 S c t Kiu d liu logic gm cc TDL c mt trong hai gi tr ng hoc sai. Trong Pascal v Ada, kiu d liu logic c xem mt cch n gin nh l mt lit k c nh ngha bi ngn ng. BOOLEAN = (FALSE, TRUE) trong xc nh cc tn "FALSE" v "TRUE" cho cc gi tr ca kiu v xc nh th t FALSE < TRUE. Cc php ton ph bin trn kiu logic gm c:

    AND: Boolean X Boolean -> Boolean OR: Boolean X Boolean -> Boolean NOT: Boolean -> Boolean

    3.7.2 Php ci t Ch cn mt bit ca b nh lu tr mt tng d liu logic. Tuy nhin v cc bit n c th khng c a ch ring trong b nh nn ta phi s dng mt n v nh c a ch nh l byte hoc word do cc gi tr FALSE v TRUE c th c biu din bng hai cch khc nhau: 1.- Bit c trng (thng thng l bit du ca s biu din s) vi 0 biu din cho FALSE v 1 biu din cho TRUE, cc bits cn li trong byte hoc word s b b qua.

  • Ngn ng lp trnh Chng III: Kiu d liu s cp

    29

    2.- S dng ton b n v nh ghi gi tr zero (tt c cc bit bng 0) biu din cho FALSE cn gi tr khc zero biu din cho TRUE.

    3.8 KIU K T Hu ht d liu xut v nhp u c dng k t v c s chuyn i sang dng d liu khc trong qu trnh nhp xut. Chng hn khi ta nhp mt ch s (hoc mt chui ch s) t bn phm vo mt bin s trong chng trnh th c mt s chuyn i ch s (chui ch s) thnh s. Hay khi ta ghi mt s ra my in hoc ra mt tp tin vn bn th c mt s chuyn i t s thnh ch s (chui ch s). Tuy nhin vic x l mt s d liu trc tip di dng k t cng cn thit trong mt s ng dng no , chng hn trong x l vn bn. D liu chui k t c th c cung cp mt cch trc tip thng qua kiu chui k t (nh trong SNOBOL4, PL/1 v cc ngn ng mi khc) hoc thng qua kiu k t v chui k t c xem nh l mt mng cc k t (nh trong APL, Pascal v Ada. Ch Turbo Pascal c kiu chui k t).

    3.8.1 S c t Kiu k t l mt lit k c nh ngha bi ngn ng tng ng vi mt tp hp k t chun c cho bi phn cng v h iu hnh nh tp cc k t ASCII chng hn. Cc php ton trn d liu k t bao gm: cc php ton quan h, php gn, v i khi c php kim tra xem mt k t c thuc mt lp c bit "ch ci", "ch s" hoc lp k t xc nh no .

    3.8.2 Php ci t Cc gi tr d liu hu nh lun c ci t mt cch trc tip bi phn cng v h iu hnh. Do cc php ton quan h cng c biu din mt cch trc tip bi phn cng.

    3.9 CU HI N TP 1. Nu nh ngha kiu d liu s cp. 2. Tp cc gi tr ca mt kiu s cp c c im g? 3. C phi cc ngn ng lp trnh thng s dng biu din trong phn cng

    biu din cho kiu s nguyn? 4. ci t cc php ton s hc trn kiu d liu s nguyn, c phi ngi ta

    phi thit lp cc chng trnh con trong ngn ng? 5. Ti sao ngi ta li s dng kiu lit k? 6. Ti sao ngi ta li s dng kiu min con?

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

    30

    CHNG 4: KIU D LIU C CU TRC

    4.1 TNG QUAN

    4.1.1 Mc tiu Sau khi hc xong chng ny, sinh vin cn phi nm:

    - Khi nim v kiu d liu c cu trc. - c t v phng php ci t kiu d liu c cu trc. - Cc c t, phng php t chc lu tr, ci t cc php ton ca mt s kiu d liu c cu trc nh: vecto, mng nhiu chiu, mu tin, chui k t

    4.1.2 Ni dung ct li - Kiu d liu c cu trc. - Cc c t, phng php lu tr, hnh thc truy xut, ci t cc php ton ca mt s kiu d liu c cu trc.

    4.1.3 Kin thc c bn cn thit Kin thc v k nng lp trnh cn bn, kin thc chng 2.

    4.2 NH NGHA KIU D LIU C CU TRC Kiu d liu c cu trc hay cn gi l cu trc d liu (CTDL) l mt kiu d liu m cc TDL ca n l cc TDL c cu trc. Nh vy CTDL l mt tp hp cc TDL c cu trc cng vi tp hp cc php ton thao tc trn cc TDL . Cc kiu d liu nh mng, mu tin, chui, ngn xp (stacks), danh sch, con tr, tp hp v tp tin l cc CTDL.

    4.3 S C T KIU CU TRC D LIU

    4.3.1 S c t cc thuc tnh Cc thuc tnh ch yu ca CTDL bao gm:

    S lng phn t

    S lng cc phn t ca mt CTDL cho bit kch thc ca CTDL, s lng ny c th c nh hoc thay i tu loi CTDL. Mt CTDL c gi l c kch thc c nh nu s lng cc phn t khng thay i trong thi gian tn ti ca n. V d cc kiu mng, mu tin l cc CTDL c kch thc c nh. Mt CTDL c gi l c kch thc thay i nu s lng cc phn t thay i mt cch ng trong thi gian tn ti ca n. V d ngn xp, danh sch, tp hp, chui k t v tp tin l cc CTDL c kch thc thay i. Cc php ton cho php thm hoc bt cc phn t ca cu trc lm thay i kch thc ca cu trc.

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

    31

    Kiu ca mi mt phn t

    Mi mt phn t ca CTDL c mt kiu d liu no , ta gi l kiu phn t. Kiu phn t c th l mt kiu d liu s cp hoc mt CTDL. Cc phn t trong cng mt CTDL c th c kiu phn t ging nhau hoc khc nhau. Mt CTDL c gi l ng nht nu tt c cc phn t ca n u c cng mt kiu. V d mng, chui k t, tp hp v tp tin l cc CTDL ng nht . Mt CTDL c gi l khng ng nht nu cc phn t ca n c kiu khc nhau. V d mu tin l CTDL khng ng nht.

    Tn dng cho cc phn t c la chn

    la chn mt phn t ca CTDL cho mt x l no ngi ta thng s dng mt tn. i vi cu trc mng, tn c th l mt ch s nguyn hoc mt dy ch s; i vi mu tin, tn l mt tn trng. Mt s kiu cu trc d liu nh ngn xp v tp tin cho php truy nhp n ch mt phn t c bit (phn t u tin hoc phn t hin hnh).

    S lng ln nht cc phn t

    i vi CTDL c kch thc thay i nh chui k t hoc ngn xp, i khi ngi ta quy nh thuc tnh kch thc ti a ca cu trc gii hn s lng cc phn t ca cu trc.

    T chc cu trc

    T chc ph bin nht l mt dy tun t ca cc phn t. Vector (mng mt chiu), mu tin, chui k t, ngn xp, danh sch v tp tin l cc CTDL c t chc kiu ny. Mt s cu trc cn c m rng thnh dng "nhiu chiu" v d mng nhiu chiu, mu tin m cc phn t ca n l cc mu tin, danh sch m cc phn t ca n l danh sch.

    4.3.2 Cc php ton trn cu trc d liu Mt s cc php ton c th ca CTDL:

    Php ton la chn phn t ca cu trc

    Php ton la chn mt phn t l php ton truy nhp n mt phn t ca CTDL v lm cho n c th c x l bi mt php ton khc. C hai loi la chn: La chn ngu nhin (hay cn gi l la chn trc tip) l s la chn mt phn t ty ca cu trc d liu c truy nhp thng qua mt ci tn. V d la chn mt phn t no ca mng, ta ch ra ch s ca phn t , la chn mt phn t ca mu tin ta s dng tn ca phn t .

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

    32

    La chn tun t l s la chn trong phn t c la chn l mt phn t ng sau cc phn t c la chn khc theo tun t ca vic x l hoc l la chn mt phn t c bit no . V d la chn tun t cc phn t trong mt tp tin hay la chn mt phn t trn nh ca ngn xp.

    Cc php ton thao tc trn ton b cu trc d liu

    L cc php ton c th nhn cc CTDL lm cc i s v sn sinh ra kt qu l cc CTDL mi. Chng hn php gn mt mu tin cho mt mu tin khc hoc php hp hai tp hp.

    Thm / bt cc phn t

    L cc php ton cho php thm vo CTDL hoc loi b khi CTDL mt s phn t. Cc php ton ny s lm thay i s lng cc phn t trong mt CTDL. Vic thm vo hay loi b mt phn t thng phi ch nh mt v tr no .

    To / hy CTDL

    L cc php ton to ra hoc xa b mt CTDL.

    4.4 S CI T CC CU TRC D LIU

    4.4.1 Biu din b nh S biu din b nh cho mt CTDL bao gm: - B nh cho cc phn t ca cu trc. - B m t lu tr mt s hoc tt c cc thuc tnh ca cu trc. C hai phng php biu din b nh l:

    Biu din tun t

    Biu din tun t l s biu din, trong CTDL c lu tr nh mt khi cc nh lin tip nhau, bt u bng b m t sau l cc phn t. y l phng php c dng cho cc CTDL c kch thc c nh hoc c kch thc thay i nhng ng nht. Chng hn c th dng biu din tun t biu din cho mng, mu tin,

    Biu din lin kt

    Biu din lin kt l s biu din, trong CTDL c lu tr trong nhiu khi nh ti cc v tr khc nhau trong b nh, mi khi lin kt vi khi khc thng qua mt con tr gi l con tr lin kt. Phng php ny thng c s dng cho cc CTDL c kch thc thay i. Chng hn c th dng biu din lin kt biu din cho danh sch, ngn xp,

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

    33

    B m t

    Phn t Phn t

    Phn t

    4.4.2 Ci t cc php ton trn cu trc d liu Php ton la chn mt phn t l php ton c bn nht trong cc php ton trn CTDL. Nh trn trnh by, c hai cch la chn l la chn ngu nhin v la chn tun t v hai cch biu din b nh l biu din tun t v biu din lin kt. V vy y chng ta s xt cch thc hin mi mt phng php la chn vi mi mt phng php biu din b nh.

    i vi biu din tun t

    Nh trn trnh by, trong cch biu din tun t, mt khi nh lin tc s c cp pht lu tr tan b CTDL. Trong , v tr u tin ca khi nh c gi l a ch c s. Khong cch t a ch c s n v tr ca phn t cn la chn c gi l di ca phn t. Cch thc truy xut, c cho bi tn hoc ch s ca phn t (chng hn ch s ca mt phn t ca mng), s xc nh cch tnh di ca phn t nh th no. la chn ngu nhin mt phn t cn phi xc nh v tr thc ca phn t (tc l a ch ca nh lu tr phn t ) theo cng thc:

    V tr thc ca phn t = a ch c s + di ca phn t. La chn tun t mt dy cc phn t ca cu trc c th theo cc bc: - chn phn t u tin ta dng cch tnh a ch c s cng vi di nh ni trn.

    B m t

    Phn t

    Phn t

    Phn t

    Biu din tun t Biu din lin kt

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

    34

    - i vi cc phn t tip theo trong dy, cng kch thc ca phn t hin hnh vi v tr ca phn t hin hnh c v tr ca phn t k tip.

    i vi biu din lin kt

    Nh trn trnh by, cc khi nh trong biu din lin kt c b tr ri rc nhau, khi ny ni vi khi kia bng con tr v lc u ch nm c con tr ti khi u tin. Do vic i n cc khi lun phi xut pht t khi u tin. la chn ngu nhin mt phn t trong cu trc lin kt cn phi duyt mt dy cc khi, t khi u tin n khi cn la chn. La chn tun t mt dy cc phn t c thc hin bng cch la chn phn t u tin nh ni trn v sau t phn t hin hnh, duyt theo con tr n phn t k tip.

    4.5 VCT

    4.5.1 nh ngha vct Vct (cn gi l mng mt chiu) l mt CTDL bao gm mt s c nh cc phn t c kiu ging nhau c t chc thnh mt dy tun t cc phn t. Nh vy vct l mt CTDL c kch thc c nh v ng nht.

    4.5.2 S c t v c php

    c t thuc tnh ca vct

    Cc thuc tnh ca mt vct l: - S lng cc phn t, lun c ch r bng cch cho tp ch s. Tp ch s ny thng thng c cho bi mt min con cc s nguyn, trong trng hp , s lng cc phn t bng s nguyn cui cng - s nguyn u tin + 1. Mt cch tng qut th tp ch s c th l kiu lit k no , trong trng hp ny, s lng phn t bng s gi tr trong kiu lit k. Cng c nhng ngn ng ch nh r s lng cc phn t nh ngn ng C chng hn. - Kiu d liu ca mi mt phn t, thng c vit r trong khai bo. - Ch s c s dng la chn mi mt phn t. Nu tp ch s c cho bi mt min con ca tp cc s nguyn th s nguyn u tin ch nh phn t u tin s nguyn th 2 ch nh phn t th 2 ...Nu tp ch s l mt lit k th gi tr u tin trong lit k l ch s ca phn t u tin. Nu ngn ng ch nh r s lng cc phn t th 0 l ch s ca phn t u tin. Khai bo vct trong Pascal l ARRAY [] OF . V d VAR a: ARRAY[1..10] OF real; Khai bo ny xc nh 1 vct a c 10 phn t l cc s real. Cc phn t ny c la chn bi cc ch s t 1 n 10. Min gi tr ca ch s khng nht thit bt u t 1, v d

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

    35

    Var b: ARRAY [-5..10] OF integer; Vi khai bo ny th b l mt vct c 16 phn t (10 (-5) + 1 = 16). Cc phn t c la chn nh cc ch s t -5 n 10. Min gi tr ca ch s khng nht thit l min con ca s nguyn, n c th l mt lit k bt k (hoc 1 min con ca mt lit k). V d: Type

    Ngay = (Chu_nhat, Hai, Ba, Tu, Nam, Sau, Bay); var

    c : ARRAY [Ngay] OF Integer ; Khai bo ny xc inh vct c c 7 phn t l cc s integer, cc phn t ca c c la chn nh cc ch s t Chu_nhat n Bay. Khai bo vct trong ngn ng C l []. V d int d[10]; Khai bo ny xc nh vct d c 10 phn t cc s int, cc phn t ny c la chn nh cc ch s t 0 n 9.

    c t cc php ton trn vct

    Cc php ton trn vct bao gm: Php ton la chn mt phn t ca vct l php ly ch s, c vit bng tn ca vct theo sau l ch s ca phn t c la chn t trong cp du []. Nh vy php la chn mt phn t ca vct l php la chn trc tip. V d, vi cc khai bo trong cc v d thuc phn c t thuc tnh ni trn, Cc phn t ca vct a c la chn bng cch vit a[1], a[2], , a[10]. Cc phn t ca vct b c la chn bng cch vit b[-5], b[-4], , b[10]. Cc phn t ca vct c c la chn bng cch vit c[Chu_nhat], c[Hai], , c[Bay]. Cc phn t ca vct d c la chn bng cch vit d[0], d[1], , d[9]. Ch s c th l mt hng hoc mt bin (ni chung l mt biu thc), v d a[i] hay a[i+2]. Nh ch s l mt biu thc nn vic lp trnh tr nn n gin hn nhiu nh tnh khi qut ca ch s. V d in ra gi tr ca 10 phn t trong vct a, thay v ta phi vit 10 lnh in cc phn t c th theo kiu writeln(a[1]); writeln(a[2]); writeln(a[3]); ta ch cn vit mt lnh for i:=1 to 10 do writeln(a[i]); Cc php ton khc trn vct bao gm cc php ton to v hy b vct, gn hai vct cho nhau v cc php ton thc hin nh cc php ton s hc trn tng cp 2 vct c cng kch thc. Chng hn php cng 2 vct (cng cc phn t tng ng). Ty thuc vo ngn ng m cc php ton ny c hoc khng c.

    4.5.3 Ci t mt vct

    Biu din b nh

    Biu din b nh tun t c s dng biu din cho mt vct.

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

    36

    M hnh sau minh ha cho s biu din b nh ca vct A : ARRAY[LB..UB] OF .

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

    ...

    A[UB]

    Khi nh lu tr mt vct c hai phn: b m t v b nh dnh cho cc phn t ca vct. Trong b m t lu tr kiu d liu ca cu trc (vct A), cn di ca tp ch s (LB - Lower Bound), cn trn ca tp ch s (UB - Upper Bound), kiu d liu ca phn t v kch thc mi phn t (E). B nh dnh cho cc phn t ca vct lu tr lin tip cc phn t, t phn t u tin (A[LB]) cho n phn t cui cng (A[UB]). Do cc phn t c cng mt kiu nn cc nh dnh cho cc phn t c kch thc bng nahu. a ch ca nh u tin trong khi gi l a ch c s.

    Gii thut thc hin cc php ton

    Php ton la chn mt phn t c thc hin bng cch tnh v tr ca phn t cn la chn theo cng thc:

    V tr ca phn t th i = + D + (i - LB) * E Trong i l ch s ca phn t cn la chn, l a ch c s ca khi nh (a ch word hoc byte u tin ca khi nh dnh cho vct) D l kch thc ca b m t, LB l cn di ca tp ch s v E l kch thc ca mi mt i tng d liu thnh phn (s word hoc byte cn thit lu tr mt phn t). Nu ch s l mt gi tr ca kiu lit k ch khng phi s nguyn th hiu i-LB phi c tnh ton mt cch thch hp (chng hn s dng hiu ca hai s th t tng ng ca i v LB trong lit k). Php gn mt vct cho mt vct khc c cng thuc tnh c thc hin bng cch sao chp ni dung trong khi nh biu din vct th nht sang khi nh biu din vct th hai. Cc php ton trn ton b vct c thc hin bng cch s dng cc vng lp x l tun t cc phn t ca vct.

    4.6 MNG NHIU CHIU Ma trn (mng hai chiu) c xem nh l mt vct ca cc vct. Mt mng 3 chiu c xem nh l mt vct ca cc ma trn...

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

    37

    4.6.1 S c t v c php

    c t thuc tnh

    Mng nhiu chiu tng t nh vct nhng ch c mt thuc tnh khc vct l mi mt chiu phi c mt tp ch s tng ng. Chng hn khai bo cho mt mng hai chiu c th c vit di dng

    ARRAY[LB1..UB1, LB2..UB2] OF Trong tp ch s 1 c cc gi tr t LB1 n UB1, tp ch s 2 c cc gi tr t LB2 n UB2. Nh vy s lng cc phn t ca mng hai chiu s l (UB1-LB1+1)*(UB2-LB2+1) V d s khai bo ca Pascal: M= array [1..3, -1..2] of Integer; S khai bo ny cho ta thy mng M c hai chiu, chiu th nht c xc nh bi tp ch s 1..3 v chiu th hai c xc nh bi tp ch s -1..2. C th xem y l mt ma trn c 3 dng v 4 ct, nh vy s c 12 phn t, mi phn t c th lu tr mt s integer. i vi cc mng c s chiu nhiu hn hai th cch lm cng tng t nh mng hai chiu.

    c t php ton

    Php la chn mt phn t c thc hin bng cch ch ra tn mng v ch s ca mi mt chiu. Chng hn la chn mt phn t ca ma trn ta vit tn ma trn, theo sau l cp ch s dng, ct phn cch nhau bi du phy v t trong cp du [], v d M[2,0]. Nh vy php la chn mt phn t ca mng nhiu chiu l php la chn trc tip.

    4.6.2 S ci t

    S biu din b nh

    S biu din b nh i vi mng nhiu chiu tng t nh s biu din b nh i vi vct. Ngha l cng s dng s biu din tun t v kh nh c chia lm hai phn: b m t v b nh cho cc phn t. B m t ca mng ging b m t ca vct ngoi tr mi mt chiu c mt cn di v cn trn ca tp ch s ca chiu . Trong b nh dnh cho cc phn t ta cng lu tr lin tip cc phn t theo mt trt t no . Vi ma trn, v mt logic th ma trn l mt bng gm m dng v n ct, mi mt l mt phn t, nhng b nh li ch gm cc lin tip nhau, v th ta phi lu tr ma trn theo trt t dng hoc theo trt t ct. Lu tr theo trt t dng c ngha l trong b nh dnh cho cc phn t ta lu tr tun t cc phn t trong dng th nht, tip n l cc phn t trong dng th hai... cho n dng cui cng.

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

    38

    Lu tr theo trt t ct ngha l trong b nh dnh cho cc phn t ta lu tr tun t cc phn t trong ct th nht, tip n l cc phn t trong ct th hai... cho n ct cui cng. Chng hn vi khai bo M: ARRAY [1..3,-1..2] OF Integer; ta c hnh nh biu din trong b nh nh cc hnh sau: Cu trc logic ca ma trn M Lu tr ma trn M theo trt t dng

    M[1,-1] M[1,0] M[1,1] M[1,2] Ma trn M Kiu d liu

    M[2,-1] M[2,0] M[2,1] M[2,2] LB1 (= 1) Cn di ca tp ch s th nht

    M[3,-1] M[3,0] M[3,1] M[3,2] B m t UB1 (= 3) Cn trn ca tp ch s th nht

    LB2 (= -1) Cn di ca tp ch s th hai

    UB2 (= 2) Cn trn ca tp ch s th hai

    M[1,-1]

    M[1,0] Dng th nht

    B nh cho M[1,1]

    Cc phn t M[1,2]

    M[2,-1] Dng th hai

    M[2,0]

    ...

    ...........

    M[3,2]

    Cu trc logic ca ma trn M Lu tr ma trn M theo trt t ct

    M[1,-1] M[1,0] M[1,1] M[1,2] Ma trn M Kiu d liu

    M[2,-1] M[2,0] M[2,1] M[2,2] LB1 (= 1) Cn di ca tp ch s th nht

    M[3,-1] M[3,0] M[3,1] M[3,2] B m t UB1 (= 3) Cn trn ca tp ch s th nht

    LB2 (= -1) Cn di ca tp ch s th hai

    UB2 (= 2) Cn trn ca tp ch s th hai

    M[1,-1]

    M[2,-1] Ct th nht

    B nh cho M[3,-1]

    Cc phn t M[1,0]

    M[2,0] Ct th hai

    M[3,0]

    ...

    ...........

    M[3,2]

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

    39

    Gii thut thc hin php ton

    thc hin php ton la chn phn t, ta s dng cng thc tnh v tr ca phn t trong b nh. Vi cch lu tr theo trt t dng ca ma trn M, tnh v tr ca M[i,j], u tin ta xc nh s dng cn nhy qua: (i-LB1) nhn vi di ca mi dng xc nh v tr bt u ca dng th i v sau tm v tr th J trong dng ny nh i vi 1 vct. Nh vy, v tr ca phn t M[i,j] c tnh bi:

    V tr ca M [i,j] = + D + (i-LB1) x S + (j-LB2) x E Trong : l a ch c s.

    D l ln ca b m t. S l ln ca mi dng = (UB2 - LB2 +1) x E. LB1 l cn di ca ch s th nht. LB2,UB2 tng ng l cn di v cn trn ca ch s th hai.

    Tng t ta c th thnh lp cng thc tnh v tr ca phn t M[i,j] trong trng hp ma trn M c t chc lu tr theo trt t ct. Tng qut ha cng thc ny cho mng nhiu chiu hn l mt iu n gin.

    4.7 MU TIN

    4.7.1 nh ngha mu tin Mu tin l mt CTDL bao gm mt s c nh cc phn t c kiu khc nhau. Nh vy, mu tin l mt CTDL c kch thc c nh v khng ng nht. Cc phn t ca mu tin c gi l cc trng.

    4.7.2 S c t v c php

    c t thuc tnh

    Cc thuc tnh ca mt mu tin phi c ch r trong php khai bo, chng bao gm: 1. S lng cc phn t. 2. Kiu d liu ca cc phn t (Cc phn t c th c kiu khc nhau). 3. Mi phn t c cho bi tn phn t (tn trng). C php khai bo mu tin ca Pascal: Nhan_vien: RECORD

    Ma: Integer; {M nhn vin} Ho_ten: String[25]; Tuoi: Integer; {Tui} Luong: Real; {H s lng}

    END Vic khai bo ny c t mt mu tin c 4 phn t ca cc kiu Integer, Real v String. Mi phn t c mt tn: Ma, Ho_ten, Tuoi v Luong. chn mt phn t ca mu tin ta s dng tn ca phn t (trng) , chng hn trong Pascal, Nhan_vien.Luong l truy xut ti phn t Luong ca mu tin Nhan_vien.

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

    40

    22901 Ma

    Nguyen Van A

    Ho_ten

    20 Tuoi 2.18 Luong

    c t php ton

    La chn mt phn t l php ton c bn cu mu tin. Php ton ny c thc hin bng cch ch ra tn trc kin ca phn t. V d la chn phn t th 4 ca mu tin Nhan_vien ta vit: Nhan_vien.Luong. Php ton la chn mt phn t ca mu tin l s la chn trc tip. Mc d u l la chn trc tip, nhng c khc bit so vi cch la chn phn t ca vct. im khc bit y l: i vi vct, ta c th s dng gi tr ca mt biu thc lm ch s, chng hn VECTO[i+1], cn i vi mu tin th bt buc phi ch r tn trc kin, ch khng th l biu thc. Ngoi php ton la chn phn t, php gn cc mu tin c cng cu trc l mt php ton ph bin c cc ngn ng a vo. Chng hn Nhan_vien := InputRec trong InputRec c cc thuc tnh ging ht Nhan_vien.

    4.7.3 S ci t

    Biu din b nh

    Biu din b nh tun t c s dng lu tr mt mu tin. Mt khi lin tc cc nh c dng lu tr cho mt mu tin, trong khi , mi biu din cho mt trng. C th cng cn s dng b m t ring cho tng trng lu tr thuc tnh ca cc trng . Do cc trng c kiu khc nhau nn nh dnh cho chng cng c kch thc khc nhau.

    Gii thut thc hin php ton

    Vic la chn phn t c thc hin mt cch d dng v tn trng c bit n thng qua vic dch ch khng phi c tnh ton thng qua vic thc hin nh i vi vct. Vic khai bo mu tin cn cho php xc nh kch thc v v tr ca n trong nh thng qua vic dch. Kt qu l di ca phn t bt k c th c tnh thng qua vic dch. Chng hn vi mu tin Nhan_vien, cc phn t ca n c lu tr trong b nh nh sau:

    V tr ca mt phn t bt k c tnh mt cch d dng. Chng hn

    V tr ca Tuoi = + Kch thc ca Ma + Kch thc ca Ho_ten.

    Trong l a ch c s ca khi nh biu din cho Nhan_vien. Php ton gn ton b mt mu tin cho mt mu tin khc c cng cu trc c thc hin mt cch n gin l copy ni dung khi nh biu din cho mu

    tin th nht sang khi nh biu din cho mu tin th 2.

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

    41

    4.8 MU TIN C CU TRC THAY I

    4.8.1 c t v khai bo Trc ht ta xt v d sau: Gi s trong mt x nghip c hai loi cng nhn l cng nhn trong bin ch v cng nhn hp ng. i vi cng nhn trong bin ch th lng s c tnh bng s ngy cng * mc lng ti thiu * h s /20, nhng ngy ngh bo him x hi, h c tr lng bo him x hi. Ngc li cng nhn hp ng ch c tr lng bng s ngy cng * n gi cng nht v h khng c tr lng bo him x hi. Ta thy, hai loi cng nhn ny c nhng thng tin chung l h tn, s ngy cng, tin lng v loi cng nhn (bin ch hay hp ng). Mi loi cng nhn li c cc thng tin ring. i vi cng nhn trong bin ch, ta cn thm cc thng tin: h s lng v s ngy ngh bo him x hi. i vi cng nhn hp ng, ta cn thm thng tin v n gi cng nht. Nu s dng mu tin bnh thng lu tr thng tin v hai loi cng nhn ny, ta cn tt c 7 trng lu tr 4 thng tin chung v 3 thng tin ring. Khi nh cn cp pht phi lu tr c 7 trng nhng vic s dng khi nh li b d, do i vi cng nhn bin ch ta ch cn 6 trng, i vi cng nhn hp ng ta ch cn 5 trng!

    c t thuc tnh

    gii quyt vn lng ph b nh, trong mt s ngn ng lp trnh c mt loi CTDL gi l mu tin c cu trc thay i. Mi mt cu trc s c mt s trng ging nhau cho mi loi mu tin v mt s trng khc nhau cho tng loi mu tin. Cc trng ging nhau gi l phn chung hay phn tnh, cc trng khc nhau ny gi l phn ng hay phn thay i ca mu tin. Chng hn i vi bi ton nu trn th mi cng nhn c lu trong mt mu tin, c cc trng thuc phn chung l Ho_Ten, Ngay_Cong, Tien_Luong. Ngoi ra ty thuc vo loi cng nhn l bin ch hay hp ng m c cc trng ring. i vi cng nhn trong bin ch ta cn thm cc trng He_So v Nghi_Bhxh lu tr h s lng v s ngy ngh bo him x hi. i vi cng nhn hp ng ta ch cn thm mt trng l Gia_Cong_Nhat lu tr gi cng nht cho mi ngi. Khai bo trong Pascal nh sau: TYPE loai_cong_nhan = (bien_che,hop_dong); VAR Cong_Nhan : RECORD ho_ten: String[20]; ngay_cong: Real; luong: Real; CASE loai: loai_cong_nhan OF bien_che: (he_so: Real; nghi_bhxh:Real); hop_dong:

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

    42

    (gia_cong_nhat: Real); END; Khai bo trn nh ngha mt mu tin c cu trc thay i. Mu tin lun lun c cc trng Ho_Ten, Ngay_Cong, Luong v Loai. Khi gi tr ca Loai = "bien_che" th mu tin cn c cc trng He_So v Nghi_Bhxh, trong khi nu gi tr ca Loai = "hop_dong" th n li c trng Gia_Cong_Nhat.

    c t php ton

    Php ton la chn cc phn t ca mu tin c cu trc thay i cng ging nh mu tin bnh thng. Chng hn ta c th s dng Cong_Nhan.Luong, Cong_Nhan.He_So hay Cong_Nhan.Gia_Cong_Nhat. Tuy nhin cc trng thuc phn ng ch tn ti trong mt thi im nht nh do khi chng ta truy xut ti mt tn trng m n khng tn ti th s b li. Trng Loai trong v d trn l rt quan trng v n ch ra phn ng no ca mu tin c s dng trong qu trnh thc hin chng trnh. Ngi c c th tham kho v d tng i hon chnh vit bng Pascal. uses crt; Const luong_toi_thieu = 290000; Type Loai_cong_nhan = (bien_che, hop_dong); Cong_nhan = Record ho_ten : String[20]; Ngay_cong : real; luong : real; Case loai: Loai_cong_nhan of bien_che: (He_so, so_ngay_nghi_BHXH : real); hop_dong: (don_gia: real); end; danh_sach_cong_nhan = Array[1..10] of cong_nhan; Var n : integer; ho_so : danh_sach_cong_nhan; {Nhp danh sch cng nhn, v cc thng tin lin quan n lao ng} Procedure Nhap (var ho_so: danh_sach_cong_nhan; var n: integer); Var i: integer; loaicn : char; Begin write('So cong nhan: '); readln(n); For i:=1 to n do with ho_so[i] do begin Writeln('Cong nhan ',i);

    Write('Ho va Ten: '); readln(ho_ten); Write('Loai cong nhan: A la bien che, B la hop dong ');

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

    43

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

    so_ngay_nghi_BHXH * luong_binh_quan*0.80; end else {tnh lng ca cng nhn hp ng} luong := ngay_cong * don_gia; end; { with Ho_so[i] } end; {Tinh_luong } Procedure In_luong (ho_so: danh_sach_cong_nhan; n: integer); Var i : integer; begin for i:=1 to n do with ho_so[i] do begin Write(ho_ten:25); If loai = bien_che then write('Bien che':10) else write('Hop dong':10); write(ngay_cong:5:1); if loai = bien_che then begin write(he_so:5:1); write(so_ngay_nghi_BHXH:5:1); end else write(don_gia:10:2); writeln(luong:10:2);

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

    44

    end; { with Ho_so[i] } end; { In_luong } begin {Chuong trinh chinh} nhap(ho_so,n); tinh_luong(ho_so,n); in_luong(ho_so,n); readln; end.

    4.8.2 Ci t mu tin c cu trc thay i

    Biu din b nh

    Biu din tun t s c s dng biu din cho mt mu tin c cu trc thay i. Thng qua vic dch, tng b nh cn lu cc phn t ca mi mt phn ng c xc nh v b nh c cp pht lu tr mu tin vi phn ng ln nht. Chng hn vi mu tin cong_nhan ta c m hnh lu tr nh trong hnh v sau:

    Ho_ten

    Ho_ten

    Ngay_cong

    Ngay_cong Luong

    Luong

    Loai Loai He_so

    Gia_cong_nhat

    Nghi_bhxh

    Khng s dng Cng nhn bin ch Cng nhn hp ng

    V khi nh ln lu tr phn ng ln nht nn c ch cho bt k mt phn ng no nhng i vi nhng phn ng nh hn s khng s dng ti mt s nh c cp pht. Vi mu tin c cu trc thay i, r rng ta tit kim c mt s nh so vi mu tin bnh thng.

    Gii thut thc hin php ton

    La chn mt phn t ca phn ng cng ging nh la chn mt phn t bnh thng, qua vic dch th di ca phn t c la chn s c tnh ton v qua vic thc hin th di c cng vo a ch c s ca khi xc nh v tr ca phn t.

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

    45

    4.9 CHUI K T: Chui k t l cu trc d liu bao gm mt dy cc k t. Nh vy, kiu