Transcript
  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    1/162

    1

    Mc lc

    Gii thiu...........................................................................................................6

    Chng 1. Mu.........................................................................................8

    1.1. Chng trnh l g?.............................................................................8

    1.2. Lp trnh l g? ...................................................................................8

    1.2.1. Mc cao c lp vi my tnh ......................................................8

    1.2.2. Mc thp ph thuc vo my tnh ..............................................10

    1.3. Ngn ng lp trnh v chng trnh dch ..........................................10

    1.4. Mi trng lp trnh bc cao.............................................................11

    1.5. Li v tm li....................................................................................13

    1.6. Lch s C v C++ .............................................................................14

    1.7. Chng trnh C++ u tin...............................................................15

    Bi tp .........................................................................................................19

    Chng 2. Bin, kiu d liu v cc php ton ............................................20

    2.1. Kiu d liu......................................................................................22

    2.1.1. Kiu d liu cbn ....................................................................22

    2.1.2. Kiu d liu dn xut .................................................................24

    2.2. Khai bo v s dng bin .................................................................24

    2.2.1. nh danh v cch t tn bin...................................................24

    2.2.2. Khai bo bin .............................................................................25

    2.3. Hng.................................................................................................25

    2.4. Cc php ton cbn........................................................................26

    2.4.1. Php gn.....................................................................................26

    2.4.2. Cc php ton s hc..................................................................26

    2.4.3. Cc php ton quan h................................................................27

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    2/162

    2

    2.4.4. Cc php ton l-gic...................................................................28

    2.4.5. u tin ca cc php ton......................................................28

    2.4.6. Tng thch gia cc kiu ..........................................................29

    Bi tp .........................................................................................................30

    Chng 3. Cc cu trc iu khin ..............................................................32

    3.1. Lung iu khin..............................................................................32

    3.2. Cc cu trc r nhnh .......................................................................33

    3.2.1. Lnh if-else ...........................................................................33

    3.2.2. Lnh switch .............................................................................39

    3.3. Cc cu trc lp................................................................................43

    3.3.1. Vng while...............................................................................43

    3.3.2. Vng do-while ........................................................................46

    3.3.3. Vng for ...................................................................................49

    3.4. Cc lnh break v continue .........................................................54

    3.5. Biu thc iu kin trong cc cu trc iu khin.............................57

    Bi tp .........................................................................................................59

    Chng 4. Hm............................................................................................61

    4.1. Cc hm c sn.................................................................................62

    4.2. Cu trc chung ca hm ...................................................................63

    4.3. Cch s dng hm ............................................................................64

    4.4. Bin ton cc v bin a phng.....................................................65

    4.4.1. Phm vi ca bin ........................................................................65

    4.4.2. Thi gian sng ca bin..............................................................67

    4.5. Tham s, i s, v cch truyn tham s cho hm .........................68

    4.5.1. Truyn gi tr..............................................................................68

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    3/162

    3

    4.5.2. Truyn tham chiu......................................................................69

    4.5.3. Tham s mc nh ......................................................................72

    4.6. Hm trng tn...................................................................................74

    4.7. Hm quy ......................................................................................76

    Bi tp .........................................................................................................78

    Chng 5. Mng..........................................................................................80

    5.1. Mng mt chiu................................................................................80

    5.1.1. Khai bo v khi to mng.........................................................81

    5.1.2. ng dng ca mng ...................................................................83

    5.1.3. Trch nhim kim sot tnh hp l ca ch s mng....................85

    5.1.4. Mng lm tham s cho hm........................................................85

    5.2. Mng nhiu chiu .............................................................................86

    5.3. Mng v xu k t.............................................................................88

    5.3.1. Khi to gi tr cho xu k t ......................................................90

    5.3.2. Th vin x l xu k t .............................................................90

    5.4. Tm kim v sp xp d liu trong mng..........................................91

    5.4.1. Tm kim tuyn tnh ...................................................................91

    5.4.2. Tm kim nh phn .....................................................................92

    5.4.3. Sp xp chn ..............................................................................94

    Bi tp .........................................................................................................96

    Chng 6. Con tr v b nh.......................................................................99

    6.1. B nhmy tnh...............................................................................99

    6.2. Bin v a ch ca bin....................................................................99

    6.3. Bin con tr ....................................................................................100

    6.4. Mng v con tr..............................................................................105

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    4/162

    4

    6.5. B nhng...................................................................................107

    6.5.1. Cp pht b nhng...............................................................107

    6.5.2. Gii phng b nhng ...........................................................108

    6.6. Mng ng v con tr .....................................................................109

    6.7. Truyn tham s l con tr ...............................................................111

    Bi tp .......................................................................................................115

    Chng 7. Cc kiu d liu tru tng......................................................118

    7.1. nh ngha kiu d liu tru tng bng cu trc struct .................118

    7.2. nh ngha kiu d liu tru tng bng cu trc class ...............124

    7.2.1. Quyn truy nhp.......................................................................127

    7.2.2. Ton t phm vi v nh ngha cc hm thnh vin ..................128

    7.2.3. Hm khi to v hm hy.........................................................129

    7.3. Li ch ca lp trnh hng i tng.............................................132

    7.4. Bin dch ring r ...........................................................................133

    Bi tp .......................................................................................................137

    Chng 8. Vo ra d liu...........................................................................140

    8.1. Khi nim dng d liu ..................................................................140

    8.2. Tp vn bn v tp nh phn ...........................................................141

    8.3. Vo ra tp.......................................................................................141

    8.3.1. Mtp......................................................................................142

    8.3.2. ng tp...................................................................................143

    8.3.3. X l tp vn bn .....................................................................144

    8.3.4. X l tp nh phn....................................................................147

    Bi tp .......................................................................................................151

    Ph lc A. Phong cch lp trnh.................................................................153

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    5/162

    5

    Ph lc B. Dch chng trnh C++ bng GNU C++...................................157

    Ph lc C. X l xu bng th vin cstring................................................160

    Ti liu tham kho .........................................................................................162

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    6/162

    6

    Gii thiu

    Lp trnh l mt trong nhng bc quan trng nht trong quy trnh gii quytmt bi ton. Nhiu ngn ng lp trnh c ra i nhm gip chng ta gii

    quyt cc bi ton mt cch hiu qu nht. Mi ngn ng lp trnh c nhng thmnh v nhc im ring. Cc ngn ng lp trnh c th chia ra thnh hai loichnh l ngn ng lp trnh bc thp (gn gi vi ngn ng my), v ngn nglp trnh bc cao (ngn gi vi ngn ng t nhin ca con ngi).

    Gio trnh ny trang b cho sinh vin nhng kin thc cbn v lp trnh. Ngnng lp trnh C++ c s dng minh ha cho vic lp trnh. Vic la chnC++ bi v n l mt ngn ng lp trnh hng i tng chuyn nghip cs dng rng ri trn ton th gii pht trin cc chng trnh tn gin

    n phc tp. Hn th na, s mm do ca C++ cho php chng ta gii quytnhng bi ton thc t mt cch nhanh chng, ngoi ra cho php chng ta qunl v tng tc trc tip n h thng, b nh nng cao hiu qu ca chngtrnh.

    Gio trnh c chia thnh 8 chng, mi chng trnh by mt vn lthuyt trong lp trnh. Cc vn l thuyt c m t bng cc v d thc t.Kt thc mi chng l phn bi tp sinh vin gii quyt v nm r hn v lthuyt. Cu trc ca gio trnh nh sau:

    Chng 1: gii thiu cc khi nim c bn v lp trnh v quy trnh giiquyt mt bi ton. Sinh vin s hiu v ngn ng lp trnh bc cao v ngnng lp trnh bc thp. Cui chng chng ti gii thiu v mi trng lptrnh cng nh ngn ng lp trnh C++.

    Chng 2: Chng ti gii thiu cc khi nim cbn v bin s, hng s,cc kiu d liu cbn v cc php ton cbn. Sau khi hc, sinh vin sbit cch khai bo v s dng bin s, hng s, v cc php ton trn bin vhng s.

    Chng 3: Trng ny gii thiu v cu trc chng trnh cng nh cc cutrc iu khin. C th l cc cu r nhnh (if-else, switch), cu trc lp (for,while, do-while) sc gii thiu.

    Chng 4: Chng trnh con v hm sc gii thiu sinh vin hiuc chin lc lp trnh chia tr. Chng ti s trnh by chi tit v

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    7/162

    7

    cch khai bo v s dng hm, cng nh cch truyn tham s, truyn gi trcho hm.

    Chng 5: Chng ny trnh by cu trc d liu kiu mng v xu k t.Cch khai bo v s dng mng mt chiu cng nh mng nhiu chiu v v

    d lin quan c trnh by chi tit chng ny.

    Chng 6: y l mt chng tng i c th cho C++, khi chng titrnh by v b nhv kiu d liu con tr. Cu trc b nh, cch qun lv xin cp php b nhng thng qua vic s dng bin con tr sctrnh by.

    Chng 7: Trong chng ny chng ti s trnh by v cu trc d liu trutng (c th l struct v class trong C++). Sinh vin s hiu v bit cchto ra nhng cu trc d liu tru tng ph hp vi cc kiu i tng dliu cn biu din. Cui chng, chng ti cng gii thiu v lp trnh hngi tng, mt th mnh ca ngn ng lp trnh C++.

    Chng 8: Chng ti gii thiu v cch vo ra d liu. Sinh vin scgii thiu chi tit v cch lm vic vi cc tp d liu.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    8/162

    8

    Chng 1. MuTrong chng ny, chng ti s gii thiu qua mt s khi nim c bn v:chng trnh, lp trnh, ngn ng lp trnh.

    1.1. Chng trnh l g?Bn chc chn dng qua nhiu chng trnh khc nhau, v d nh chngtrnh son tho vn bn Microsoft Word. Chng trnh, hay phn mm, chiu n gin l mt tp cc lnh my tnh thc hin theo. Khi bn a chomy tnh mt chng trnh v yu cu my tnh thc hin theo cc lnh cachng trnh, bn ang chy chng trnh .

    1.2. Lp trnh l g?Lp trnh l c th hiu n gin l qu trnh vit ra cc lnh hng dn mytnh thc hin gii quyt mt bi ton c th no . Lp trnh l mt bcquan trng trong quy trnh gii quyt mt bi ton nh m tHnh 1.1.

    bt/gi

    y

    bt/gi

    y

    trnhs

    on

    tho

    chn

    g

    trnh

    dch

    Hnh 1.1: Quy trnh gii quyt mt bi ton.

    Quy trnh trn c thc chia ra thnh hai mc: mc cao c lp vi my tnh(machine independent) v mc thp ph thuc vo my tnh (machine specific).

    1.2.1.Mc cao c lp vi my tnhMc cao c lp vi my tnh thng c chia thnh ba bc chnh l: xcnh vn , thit k thut ton v lp trnh.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    9/162

    9

    Xc nh vn : Bc ny nh ngha bi ton, xc nh d liu u vo, ccrng buc, yu cu cn gii quyt v kt quu ra. Bc ny thng s dngbt/giy v ngn ng t nhin nh ting Anh, ting Vit m t v xc nhvn cn gii quyt.

    Thit k thut ton: Mt thut ton l mt b cc ch dn nhm gii quyt mtbi ton. Cc ch dn ny cn c din t mt cch hon chnh v chnh xcsao cho mi ngi c th hiu v tin hnh theo. Thut ton thng c m tdi dng m gi (pseudocode). Bc ny c th s dng giy bt v thngkhng ph thuc vo ngn ng lp trnh. V d v thut ton tm c s chungln nht (UCLN) ca hai s x v y vit bng ngn ng t nhin:

    Bc 1: Nu x>y th thay x bng phn d ca php chia x/y. Bc 2: Nu khng, thay y bng phn d ca php chia y/x. Bc 3: Nu trong hai s x v y c mt s bng 0 th kt lun UCLN

    l s cn li.

    Bc 4: Nu khng, quay li Bc 1.hoc bng m gi:

    repeat

    ifx >ythenx :=xmody

    elsey :=ymodx

    untilx = 0 ory = 0

    ifx = 0 then UCLN :=y

    else UCLN :=x

    Lp trnh l bc chuyn i thut ton sang mt ngn ng lp trnh, ph binl cc ngn ng lp trnh bc cao, v d nh cc ngn ng C++, Java. Bc

    ny, lp trnh vin s dng mt chng trnh son tho vn bn vit chngtrnh. Trong v sau qu trnh lp trnh, ngi ta phi tin hnh kim th v sali chng trnh. C ba loi li thng gp: li c php, li trong thi gianchy, v li l-gic (xem chi tit Mc 1.5).

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    10/162

    10

    1.2.2.Mc thp ph thuc vo my tnhCc ngn ng lp trnh bc cao, v d nh C, C++, Java, Visual Basic, C#, cthit k con ngi tng i d hiu v d s dng. Tuy nhin, my tnhkhng hiu c cc ngn ng bc cao. Do , trc khi mt chng trnh vit

    bng ngn ng bc cao c th chy c, n phi c dch sang ngn ngmy, hay cn gi l m my, m my tnh c th hiu v thc hin c. Vicdch c thc hin bi mt chng trnh my tnh gi l chng trnh dch.

    1.3. Ngn nglp trnh v chng trnh dchNh chng ta thy, qu trnh gii quyt mt bi ton thng qua cc bc khcnhau chuyn i t ngn ng t nhin m con ngi hiu c sang ngnng my m my tnh c th hiu v thc hin c. Ngn ng lp trnh thngc chia ra thnh hai loi: ngn ng lp trnh bc thp v ngn ng lp trnhbc cao.

    Ngn nglp trnh bc thp nh hp ng (assembly language) hoc m myl ngn ng gn vi ngn ng my m my tnh c th hiu c. c imchnh ca cc ngn ng ny l chng c lin quan cht chn phn cng camy tnh. Cc h my tnh khc nhau s dng cc ngn ng khc nhau. Chngtrnh vit bng cc ngn ng ny c th chy m khng cn qua chng trnhdch. Cc ngn ng bc thp c th dng vit nhng chng trnh cn ti uha v tc . Tuy nhin, chng thng kh hiu i vi con ngi v khng

    thun tin cho vic lp trnh.

    Ngn ng lp trnh bc cao nh Pascal, Ada, C, C++, Java, Visual Basic,Python, l cc ngn ng c mc tru tng ha cao, gn vi ngn ng tnhin ca con ngi hn. Vic s dng cc ngn ng ny cho vic lp trnh do d dng hn v nhanh hn rt nhiu so vi ngn ng lp trnh bc thp. Khcvi ngn ng bc thp, chng trnh vit bng cc ngn ng bc cao ni chungc th s dng c trn nhiu loi my tnh khc nhau.

    Cc chng trnh vit bng mt ngn ng bc cao mun chy c th phi

    c dch sang ngn ng my bng cch s dng chng trnh dch. Chngtrnh dch c th chia ra thnh hai loi l trnh bin dch v trnh thng dch.

    Mt s ngn ng bc cao nh C, C++ yu cu loi chng trnh dch c gil trnh bin dch (compiler). Trnh bin dch dch m ngun thnh m my dng c th thc thi c. Kt qu ca vic dch l mt chng trnh thc thic v c th chy nhiu ln m khng cn dch li. V d, vi ngn ng C++

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    11/162

    11

    mt trnh bin dch rt ph bin l gcc/g++ trong b GNU Compiler Collection(GCC) chy trong cc mi trng Unix/Linux cng nh Windows. Ngoi ra,Microsoft Visual C++ l trnh bin dch C++ ph bin nht trong mi trngWindows. Mt s ngn ng bc cao khc nh Perl, Python yu cu loi chngtrnh dch gi l trnh thng dch (interpreter). Khc vi trnh bin dch, thayv dch ton b chng trnh mt ln, trnh thng dch va dch va chychng trnh, dch n u chy chng trnh n .

    Trong mn hc ny, C++ c chn lm ngn ng th hin. y l mt trongnhng ngn ng lp trnh chuyn nghip c s dng rng ri nht trn thgii. Trong phm vi nhp mn ca mn hc ny, C++ chc gii thiu mcrt cbn, rt nhiu tnh nng mnh ca C++ s khng c ni n hoc chc gii thiu squa. Ngi hc nn tip tc tm hiu v ngn ng C++, vtra ngoi gii hn ca cun sch ny.

    1.4. Mi trng lp trnh bc cao lp trnh gii quyt mt bi ton bng ngn ng lp trnh bc cao, bn cn ccng c chnh l: chng trnh son tho, chng trnh dch dnh cho ngn ngs dng, v cc th vin chun ca ngn ng s dng (standard library), vchng trnh tm li (debugger).

    Cc bc cbn xy dng v thc hin mt chng trnh:

    1.

    Son tho: M ngun chng trnh c vit bng mt phn mm son thovn bn dng text v lu trn a. Ta c th dng nhng phn mm sontho vn bn n gin nht nh Notepad (trong mi trng Windows) hay vi(trong mi trng Unix/Linux), hoc cc cng c son tho trong mi trngtch hp vit m ngun chng trnh. M ngun C++ thng t trongcc tp vi tn c phn mrng l .cpp, cxx, .cc, hoc .C (vit hoa).

    2. Dch: Dng trnh bin dch dch m ngun chng trnh ra thnh cc onm my ring l (gi l object code) lu trn a. Cc trnh bin dch phbin cho C++ l vc.exe trong b Microsoft Visual Studio hay gcc trong b

    GNU Compiler vi cc tham s thch hp dch v lin kt to ra tpchy c. Vi C++, ngay trc khi dch cn c giai on tin x l(preprocessing) khi cc nh hng tin x l c thc thi lm cc thaotc nh b sung cc tp vn bn cn dch hay thay th mt s chui vn bn.Mt snh hng tin x l quan trng sc gii thiu dn trong cunsch ny.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    12/162

    12

    3. Lin kt: Mt tp m ngun thng khng cha y nhng phn cnthit cho mt chng trnh hon chnh. N thng dng n d liu hochm c nh ngha trong cc tp khc hoc trong th vin chun. Trnhlin kt (linker) kt ni cc on m my ring l vi nhau v vi cc thvin c sn to ra mt chng trnh m my hon chnh chy c.

    4. Np: Trnh np (loader) s np chng trnh di dng m my vo b nh.Cc thnh phn b sung t th vin cng c np vo b nh.

    5. Chy: CPU nhn v thc hin ln lt cc lnh ca chng trnh, d liu vkt qu thng c ghi ra mn hnh hoc a.

    Thng th khng phi chng trnh no cng chy c v chy ng ngay ln chy thu tin. Chng trnh c th c li c php nn khng qua cbc dch, hoc chng trnh dch c nhng gp li trong khi chy. Trong

    nhng trng hp , lp trnh vin phi quay li bc son tho sa li vthc hin li cc bc sau .

    Hnh 1.2: Cc bc cbn xy dng mt chng trnh.

    thun tin cho vic lp trnh, cc cng c son tho, dch, lin kt, chy...

    ni trn c kt hp li trong mt mi trng lp trnh tch hp (IDE integrated development environment), trong , tt c cc cng on i vingi dng ch cn l vic chy cc tnh nng trong mt phn mm duy nht.IDE rt hu ch cho cc lp trnh vin. Tuy nhin, i vi nhng ngi mi hclp trnh, thi gian u nn t thc hin cc bc dch v chy chng trnhthay v thng qua cc chc nng ca IDE. Nh vy, ngi hc s c th nmc bn cht cc bc ca qu trnh xy dng chng trnh, hiu c bn

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    13/162

    13

    cht v c im chung ca cc IDE, trnh tnh trng b ph thuc vo mt IDEc th.

    V d v cc IDE ph bin l Microsoft Visual Studio mi trng lp trnhthng mi cho mi trng Windows, v Eclipse phn mm min ph vi cc

    phin bn cho c mi trng Windows cng nh Unix/Linux, c hai u h trnhiu ngn ng lp trnh.

    Dnh cho C++, mt s mi trng lp trnh tch hp ph bin l MicrosoftVisual Studio, Dev-C++, Code::Blocks, KDevelop. Mi mi trng c th htrmt hoc nhiu trnh bin dch. Chng hn Code::Blocks h trc GCC vMSVC Do C++ c cc phin bn khc nhau.

    C nhng bn ci t khc nhau ca C++. Cc bn ra i trc chun C++ 1998(ISO/IEC 14882) c th khng h try cc tnh nng c c t trong

    chun ANSI/ISO 1998. Bn C++ do Microsoft pht trin khc vi bn C++ caGNU. Tuy nhin, cc trnh bin dch hin i hu ht h trC++ chun, ta cngnn chn dng cc phn mm ny. Ngn ng C++ c dng trong cun schny tun theo chun ISO/IEC 14882, cn gi l "C++ thun ty" (pure C++).

    1.5. Li v tm liTrong v sau qu trnh lp trnh, chng ta phi tin hnh kim th v sa lichng trnh. C ba loi li thng gp: li c php, li run-time v li l-gic.

    Li c php l do lp trnh vin vit sai vi cc quy tc c php ca ngn nglp trnh, chng hn thiu du chm phy cui lnh. Chng trnh bin dch spht hin ra cc li c php v cung cp thng bo v v tr m n cho l c li.Nu trnh bin dch ni rng chng trnh c li c php th chc chn l c lic php trong chng trnh. Tuy nhin, li l ch no th trnh bin dch ch cthon, v n c thon sai.

    Li run-time l li xut hin trong khi chng trnh ang chy. Li dng ny sgy ra thng bo li v ngng chng trnh. V d l khi chng trnh thc hin

    php chia cho 0.Li l-gic c nguyn nhn l do thut ton khng ng, hoc do lp trnh vingp sai st khi th hin thut ton bng ngn ng lp trnh (v d vit nhm ducng thnh du tr). Khi c li l-gic, chng trnh ca bn c th dch v chybnh thng, nhng kt qu ca chng trnh a ra li c trng hp sai hoc

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    14/162

    14

    hot ng ca chng trnh khng nh mong i. Li l-gic l loi li kh tmra nht.

    Nu chng trnh ca bn dch v chy khng pht sinh thng bo li, thm chchng trnh cho ra kt qu c ng vi mt vi b d liu test, iu khng

    c ngha chng trnh ca bn hon ton khng c li. c th chc chn hnv tnh ng n ca chng trnh, bn cn chy th chng trnh vi nhiu bd liu khc nhau v so snh kt qu m chng trnh to ra vi kt qu mongi.

    1.6. Lch sC v C++Ngn ng lp trnh C c to ra bi Dennis Ritchie (phng th nghim Bell) vc s dng pht trin hiu hnh UNIX. Mt trong nhng c im nibt ca C l c lp vi phn cng (portable), tc l chng trnh c th chytrn cc loi my tnh v cc hiu hnh khc nhau. Nm 1983, ngn ng C c chun ha v c gi l ANSI C bi Vin chun ha quc gia Hoa K(American National Standards Institute). Hin nay ANSI C vn l ngn ng lptrnh chuyn nghip v c s dng rng ri pht trin cc h thng tnhton hiu nng cao.

    Ngn ng lp trnh C++ do Bjarne Stroustrup (thuc phng th nghim Bell)pht trin trn nn l ngn ng lp trnh C v cm hng chnh t ngn ng lptrnh Simula67. So vi C, C++ l ngn ng an ton hn, kh nng din t cao

    hn, v t i hi cc k thut bc thp. Ngoi nhng th mnh tha k t C,C++ h tr tru tng ha d liu, lp trnh hng i tng v lp trnh tngqut, C++ gip xy dng d dng hn nhng h thng ln v phc tp.

    Bt u t phin bn u tin nm 1979 vi ci tn "C with Classes" (C km lpi tng)1 vi cc tnh nng cbn ca lp trnh hng i tng, C++ cpht trin dn theo thi gian. Nm 1983, ci tn "C++" chnh thc ra i, cctnh nng nh hm o (virtual function), hm trng tn v nh ngha li ton t(overloading), hng ... c b sung. Nm 1989, C++ c thm lp tru tng,

    a tha k, hm thnh vin tnh, hng hm, v thnh vin kiu protected. Cc bsung cho C++ trong thp k sau l khun mu (template), khng gian tn(namespace), ngoi l (exception), cc ton ti kiu d liu mi, v kiu d

    1 Theo li k ca Bjarne Stroustrup ti trang c nhn ca ng ti trang web ca phng th nghim AT&Thttp://www2.research.att.com/~bs/bs_faq.html#invention

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    15/162

    15

    liu Boolean. Nm 1998, ln u tin C++ c chnh thc chun ha quc tbi t chc ISO, kt qu l chun ISO/IEC 148822.

    i km vi s pht trin ca ngn ng l s pht trin ca th vin chun C++.Bn cnh vic tch hp th vin chun truyn thng ca C vi cc sa i nh

    cho ph hp vi C++, th vin chun C++ cn c thm th vin stream I/Ophc v vic vo ra d liu dng dng. Chun C++ nm 1998 tch hp thmphn ln th vin STL (Standard Template Library th vin khun muchun)3. Phn ny cung cp cc cu trc d liu rt hu ch nh vector, danhsch, v cc thut ton nh sp xp v tm kim.

    Hin nay, C++ l mt trong cc ngn ng lp trnh chuyn nghip c s dngrng ri nht.

    1.7. Chng trnh C++ u tinChng trnh n gin trong Hnh 1.3 s hin ra mn hnh dng ch Helloworld!. Trong chng trnh c nhng c im quan trng ca C++. Ta s xemxt tng dng.

    2 Vn bn ny (ISO/IEC 14882:1998) sau c pht hin li chnh sa vo nm 2003, thnh phin bnISO/IEC 14882:2003.

    3 STL vn khng nm trong th vin chun m l mt th vin ring do HP v sau l SGI pht trin.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    16/162

    16

    Hnh 1.3: Chng trnh C++ u tin.

    Hai dng u tin bt u bng chui // l cc dng ch thch chng trnh. l kiu ch thch dng n. Cc dng ch thch khng gy ra hot ng g cachng trnh khi chy, trnh bin dch b qua cc dng ny. Ngoi ra cn cdng ch thch kiu C dng chui /* v */nh du im bt u v kt thcch thch. Cc lp trnh vin dng ch thch gii thch v gii thiu v ni

    dung chng trnh.Dng th ba, #include l mt nh hng tin x l(preprocessor directive) ch dn v mt cng vic m trnh bin dch cn thchin trc khi dch chng trnh. #include l khai bo v th vin sc sdng trong chng trnh, trong trng hp ny l th vin vo ra d liuiostream trong th vin chun C++.

    Tip theo l hm main, phn khng th thiu ca mi chng trnh C++. N btu t dng khai bo header ca hm:

    int main()

    Mi chng trnh C++ thng bao gm mt hoc nhiu hm, trong c ngmt hm c tn main, y l ni chng trnh bt u thc hin v kt thc.Bn tri tmain l t kha int, n c ngha l hm main s tr v mt gi tr ls nguyn. T kha l nhng tc bit m C++ dnh ring cho nhng mc

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    17/162

    17

    ch c th. Chng 4 s cung cp thng tin chi tit v khi nim hm v vichm tr v gi tr.

    Thn hm mainc bt u v kt thc bi cp ngoc {}, bn trong lchui cc lnh m khi chng trnh chy chng sc thc hin tun t t

    lnh u tin cho n lnh cui cng. Hm main trong v dang xt c chahai lnh. Mi lnh u kt thc bng mt du chm phy, cc nh hng tinx l th khng.

    Lnh th nht gm cout, ton t

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    18/162

    18

    n y ta c th sa chng trnh trong Hnh 1.3 in ra li cho "Helloworld!" theo cc cch khc nhau. Chng hn, ta c th in ra cng mt ni dungnh c nhng bng hai lnh gi cout:

    cout

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    19/162

    19

    Bi tp

    1. Trnh by cc bc chnh gii quyt mt bi ton. Phn tch ni dungv c im chnh ca tng bc.

    2. Ti sao cn phi c chng trnh dch, s khc bit gia trnh bin dchv trnh thng dch? Lit k cc ngn ng lp trnh cn c trnh bin dch,v cc ngn ng lp trnh cn c trnh thng dch.

    3. S khc bit, u im v nhc im gia ngn ng lp trnh bc cao vngn ng lp trnh bc thp? Nu mt v d m nn s dng ngn ng lptrnh bc thp gii quyt, v mt v d m nn s dng ngn ng lptrnh bc cao gii quyt.

    4. Trnh by cc ngn ng lp trnh bc thp m bn bit, nu ra cc cim ni bt ca tng ngn ng lp trnh .

    5. Trnh by cc ngn ng lp trnh bc cao m bn bit, nu ra cc cim ni bt ca tng ngn ng lp trnh .

    6. Trnh by s khc bit, u im v nhc im gia ngn ng lp trnh Cv C++.

    7. Trnh by cc loi li thng gp khi lp trnh. Phn tch c im catng loi li trn.

    8. Trnh by 5 v d v li logic m bn c th gp trong lp trnh.9. Lm quen vi mi trng lp trnh Dev-C++. Lit k ra cc chc nng

    chnh ca mi trng Dev-C++. Tm hiu v so snh cc mi trng lptrnh khc cho C v C++.

    10.Vit mt chng trnh C++ hin ra mn hnh tn ca bn. S dngbin dch dng lnh bng b cng c GNU C++ dch v chy chngtrnh.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    20/162

    20

    Chng 2. Bin, kiu dliu v cc php tona s chng trnh khng ch c nhng hot ng n gin nh l hin th mtxu k t ra mn hnh m cn phi thao tc vi d liu. Trong mt chng trnh,

    bin l tn ca mt vng b nhc dng lu d liu trong khi chngtrnh chy. D liu lu trong mt bin c gi l gi tr ca bin . Chng tac th truy nhp, gn hay thay i gi tr ca cc bin, khi bin c gn mtgi tr mi, gi tr c s b ghi ln.

    Khai bo bin ton cctotalApples kiu int

    Khai bo bin a phngnumberOfBasketssau gn gi tr 5 cho n

    #include

    using namespace std;

    int totalpples;

    int main()

    {

    int numberfaskets ;

    int appleerasket;

    cout > appleerasket;

    totalpples numberfaskets appleerasket;

    cout

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    21/162

    21

    v mt kiu d liu trc khi bin c s dng. Cc bin thuc cng mtkiu c thc khai bo trn cng mt dng, cch nhau bi mt du phy.Chng hn, c th thay hai dng khai bo cho numberfaskets, vappleerasketbng:

    int numberfaskets , appleerasket;

    Chng trnh trong Hnh 2.1 yu cu ngi dng nhp s to trong mi gi(appleerasket), tnh tng s to (totalpples) vi d kin bit l s gito (numberfasket), ri in ra mn hnh. C th, dng

    cout > appleerasket;

    c d liu c ngi dng nhp vo tu vo chun thng l t bnphm. Khi chy lnh ny, chng trnh si ngi dng nhp vo mt gi trcho bin appleerasket. Ngi dng p ng bng cch g vo mt snguyn di dng chui cc ch s ri nhn phm Enter gi cc ch scho my tnh. n lt n, my tnh bin i chui cc ch s n nhn cthnh mt gi tr kiu nguyn ri chp gi tr ny vo bin appleerasket.

    Tng ng vi cout l i tng qun l dng d liu ra chun ca th vinC++, cin l i tng qun l dng d liu vo chun, thng l t bn phm.

    Tip theo l lnh gn

    totalpples numberfaskets appleerasket;

    Lnh ny tnh tch gi tr ca hai bin numberfaskets v appleerasketri gn kt qu cho bin totalpples, trong l k hiu ca php nhn v l k hiu ca php gn.

    Lnh in kt qu ra mn hnhcout

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    22/162

    22

    Ngoi vic in gi tr ca mt bin, C++ cn cho php ta in kt qu ca mt biuthc. Do , ta c mt la chn khc l gp cng vic ca hai lnh trn (tnhtch hai bin v in tch ra mn hnh) vo mt lnh:

    cout

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    23/162

    23

    Kiu M tKch thcthng dng

    (byte)Phm vi (tng ng vi kch thc)

    char k t /s nguyn nh

    1cc k t ASCII

    signed char: -128 127, hocunsighed char: 0 255

    bool gi tr Boolean 1 true hoc false

    short s nguyn 2signed short: -32767 32767unsigned short: 0 65536

    int s nguyn ln 4signed int: 2147483648 2147483647

    unsigned int: 0 -4294967296

    longs nguyn

    rt ln4

    signed long: 2147483648 2147483647unsigned long: 0 -4294967296

    float s thc 4 +/- 1.4023x10-45 3.4028x10+38

    doubles thc vi

    chnh xc cao8 +/- 4.9406x10-324 1.7977x10308

    longdouble

    s thc vi chnh xc

    rt cao8 +/- 4.9406x10-324 1.7977x10308

    Bng 2.1: Mt skiu dliu cbn trong C++.

    Mt s lu :

    Kch thc v phm vi ca cc kiu d liu cbn ph thuc vo h thngm chng trnh c bin dch ti . Tuy nhin, tt c cc h thng, kiuchar bao gi cng c kch thc l 1 byte; cc kiu d liu char, short,

    int, long phi c kch thc tng dn; cn cc kiu float, double, longdouble phi c chnh xc cao dn.

    Kiu char dng lu cc k tn (c m nh hn 256), chng hn nhch ci La-tinh, ch s, hay cc k hiu. Trong C++, mt k tn cng trong cp nhy n, v d''. lu cc k t c m ln hn 255, tac th s dng kiu wchar_t.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    24/162

    24

    Kiu d liu bool ch c hai gi tr true v false. Ta c th dng binthuc kiu ny lu cu tr li ca nhng cu hi ng/sai chng hn nh"C phi index ln hn 100?" hay lu cc trng thi "Ta tm thy gi trm cha?". Cc gi trtrue v false trong C++ thc ra ch l 0 v 1.

    2.1.2.Kiu dliu dn xutKiu d liu dn xut l kiu d liu c xy dng t cc kiu d liu cbnbng cc ton t nh * (con tr), & (tham chiu), [] (mng), () hm, hoc cnh ngha bng cchstruct hay class. Cc kiu d liu c nh nghabng cchstruct hay class cn c gi l cc kiu d liu c cu trc hockiu d liu tru tng. Chi tit v cc kiu d liu dn xut sc trnh bydn dn trong cc chng sau.

    2.2.

    Khai bo v sdng bin bt u s dng mt bin, chng ta phi tin hnh hai bc: t cho binmt ci tn hp l v khai bo bin.

    2.2.1.nh danh v cch t tn binnh danh (identifier) l thut ng trong ngn ng lp trnh khi ni n tn (tnbin, tn hm, tn lp). nh danh l mt chui k t (bao gm cc ch cia..z, A..Z, ch s 0..9, du gch chn _) vit lin nhau. nh danh khng cbt u bng ch s v khng c trng vi cc tkha (nhng t mang ngha c bit) ca ngn ng lp trnh. Lu , C++ phn bit ch ci hoa v chci thng.

    Cch t tn bin tun th theo cch t tn nh danh. V d v cc tn bin:

    _sinhvien, sinhvien_1, sinhVien_1 l cc tn bin hp l khc nhau 1sinhvien, sinhvin, "sinhvien" l cc tn bin khng hp l

    Tn bin nn dc, v gi nhn cng dng ca bin hay kiu d liu m

    bin s lu tr. V d, nu cn dng mt bin lu s lng qu to, ta c tht tn l totalpples. Khng nn s dng cc tn bin ch gm mt k t vkhng c ngha nha hay b.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    25/162

    25

    2.2.2.Khai bo binCc ngn ng lp trnh nh kiu mnh, trong c C++, yu cu mi bintrc khi dng phi c khai bo v bin phi thuc v mt kiu d liu no. C th chia cc bin thnh hai loi:

    cc bin c khai bo ngoi tt c cc chng trnh con l bin ton cc,c hiu lc trn ton b chng trnh, chng hn bin totalpples trongHnh 2.1.

    cc bin c khai bo ti mt chng trnh con l bin a phng, chiu lc bn trong chng trnh con , chng hn numberfaskets vappleeraskettrong Hnh 2.1 l cc bin a phng ca hm main v chc hiu lc bn trong hm main.

    Chng 4 s ni khn v hai loi bin trn.Trong C++, bin c thc khai bo gn nh bt cu trong chng trnh,min l trc dng u tin s dng n bin (xem Hnh 2.1).

    Mt bin a phng c khai bo nhng cha c gn mt gi tr noc gi l bin cha c khi to. Gi tr ca bin cha c khi to thngl khng xc nh. trnh tnh trng ny, ta c th khi to gi tr ca cc binbng cch gn gi tr ngay ti lnh khai bo bin.

    2.3.

    HngHng l mt loi bin c bit m gi tr ca n c xc nh ti thi imkhai bo v khng c thay i trong sut chng trnh. khai bo mthng, ta thm t kha const vo pha trc lnh khai bo bin. V d:

    const float I 3.1419263;

    const float SCR_WIDTH 317.24;

    Hng c dng t tn cho cc gi tr khng thay i c dng trongchng trnh, chng hn nh rng mn hnh nh trong v d trn. Cng dng

    ca hng l mi khi cn thay i gi tr, ta ch cn sa lnh khai bo hngthay v tm v sa gi tr tng ng ti tt c cc v tr dng n n. Ngoi ra,mt ci tn c ngha t cho mt gi trc dng i dng li s gip chochng trnh dc v d hiu hn.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    26/162

    26

    2.4. Cc php ton cbn2.4.1.Php gnPhp gn l cch gn mt gi tr cho mt bin hoc thay i gi tr ca mt

    bin. Lnh gn trong C++ l:bin = biu thc;

    trong du bng (=) c gi l du gn hay ton t gn. Lu , du bngtrong C++ khng dng so snh gi tr nh trong mt s ngn ng lp trnhkhc. V d

    symbol '';

    l php gn gi tr A cho bin symbol, khng phi l biu thc so snh xemgi tr ca symbol c phi l 'A' hay khng.

    Cng vic ca php gn l tnh gi tr ca biu thc bn phi du gn ri lu gitr vo trong bin nm bn tri du gn.

    Biu thc c th l mt s, mt bin, hoc mt biu thc phc tp. Lu rngmt bin c th xut hin c hai bn ca du gn. V d lnh sau tng gi trca bin apples thm 2.

    apples apples + 2;

    im c bit ca C++ l bn thn php gn cng chnh l mt biu thc vigi tr tr v l kt qu ca php gn. V d, php gn x = 3 l mt biu thc cgi tr bng 3.

    2.4.2.Cc php ton s hcC++ h trnm php ton s hc sau: + (cng), - (tr), (nhn), / (chia), %(modulo ly phn d ca php chia). Php chia c thc hin cho hai gi trkiu nguyn s cho kt qu l thng nguyn. V d biu thc 4 / 3 cho kt qubng 1, cn 3 / 5 cho kt qu bng 0.

    Mt s php gn km theo biu thc xut hin nhiu ln trong mt chngtrnh, v vy C++ cho php vit cc php gn biu thc mt cch gn ngnhn, s dng cc php gn phc hp (+, -, , /, %, >>,

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    27/162

    27

    V d:

    apples + 2; tng ng apples apples + 2;

    Cc php gn phc hp khc c s dng tng t.

    C++ cn cung cp cc php ton ++ (hay --) tng (gim) gi tr ca bin lnmt n v. V d:

    apples++ hay ++apple c tc dng tng apples thm 1 n v

    apples-- hay --apple c tc dng gim applesi 1 n v

    Khc bit gia vic vit php tng/gim trc bin (tng/gim trc) v vitphp tng/gim sau bin (tng/gim sau) l thi im thc hin phptng/gim, th hin gi tr ca biu thc. Php tng/gim trc c thc hin

    trc khi biu thc c tnh gi tr, cn php tng/gim sau c thc hin saukhi biu thc c tnh gi tr. V d, nu apples vn c gi tr 1 th cc biuthc ++apples hay apples++u c hiu ng l applesc tng t 1 ln 2.Tuy nhin, ++apples l biu thc c gi tr bng 2 (tng apples trc tnh gitr), trong khi apples++ l biu thc c gi tr bng 1 (tng apples sau khi tnhgi tr biu thc). Nu ta ch quan tm n hiu ng tng hay gim ca cc php++ hay th vic php ton c t trc hay t sau khng quan trng. cng l cch dng ph bin nht ca cc php ton ny.

    Lu , cn ht sc cn thn khi s dng cc php tng v gim trong cc biuthc. Vic ny khng c khuyn khch v tuy n c th tit kim c mthai dng lnh nhng li lm gim tnh trong sng ca chng trnh.

    2.4.3.Cc php ton quan hCc php ton quan hc s dng so snh gi tr hai biu thc. Cc phpton ny cho kt qu bng 0 nu ng v khc 0 nu sai. Ta s dng gi tr camt biu thc quan h nh l mt gi tr thuc kiu bool. V d:

    bool enoughpples (totalpples > 1);

    Cc php ton quan h trong ngn ng C++ c lit k trong Bng 2.2.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    28/162

    28

    K hiu ton hc Ton tca C++ V d ngha

    > > x > y x ln hn y< < x < y x nh hn y > x > y x ln hn hoc bng y

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    29/162

    29

    Cc php ton nm trong cp du ngoc ( ) c u tin ln nht. V d:

    2 * (1 + 3) cho kt qu bng 8

    Cc php ton , /, +, -. Trong , / c u tin nh nhau v cao hn +, -.V d:

    2 * 1 + 3 cho kt qu l 5

    Cc php ton so snh , =. V d:

    3 + 4 < 2 + 6 cho kt qung

    Cc php ton l-gic c th th tu tin nh sau: !, &&, ||. V d:

    1 || 0 && 0 tng ng vi 1 || (0 && 0) v cho kt qu 1

    2.4.6.Tng thch gia cc kiuV cbn, gi tr gn cho mt bin nn cng kiu vi bin . Khi mt binc gn mt gi tr khng ng vi kiu d liu ca bin , th gi tr sc chuyn i sang kiu ca bin (type conversion). Mt vi trng hpthng gp trong vic chuyn kiu l:

    Chuyn i gia s thc v s nguyn

    int x 2.; // x nhn gi tr 2

    double y 3.; // y nhn gi tr 3,

    x y; // x nhn gi tr 3

    Php chia ca s nguyn

    int divisor 4;

    int dividend 6;

    int quo dividend/divisor; // quo nhn gi tr 1.

    Lu : Php chia mt s nguyn cho mt s nguyn s cho kt qu l mt snguyn. Mun kt qu l mt s thc th t nht mt trong hai s phi l s thc.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    30/162

    30

    Bi tp

    1. Vit chng trnh tnh din tch ca mt hnh trn. Bn knh l mt s thcv c nhp vo t bn phm. Din tch hnh trn c hin ra mn hnh.

    2. Nhp t bn phm hai s nguyn l chiu cao ca Peter v Essen. Hy tnhxem Peter cao gp bao nhiu ln Essen. V d, nu chiu cao ca Peter l180, chiu cao ca Essen l 150, th hin ra mn hnh dng ch Peter is 1.2times as tall as Essen.

    3. Nhp t bn phm mt s nguyn l nhit di dng F (Fahrenheit),hy hin ra mn hnh nhit di dng C (Celsius). Sinh vin t tmhiu cng thc chuyn i.

    4. Vit mt chng trnh trong c hai hng s WIDTH vi gi tr bng3.17654, v hng s LENGTH vi gi tr bng 10.03212. Tnh v hin ramn hnh din tch ca hnh ch nht vi hai cnh l WIDTH v LENGTH.

    5. Nhp t bn phm bn s nguyn a, b, c, d. Hy tnh v hin ra mn hnh gitr ca biu thc:

    (a + b) > (c + d) || (a - b) > (c - d)

    6. Trnh by s khc bit gia bin a phng v bin ton cc. Khi no thnn dng bin a phng, khi no th nn dng bin ton cc. Nu cc lu y

    khi s dng bin ton cc.7. Vit mt chng trnh c cha hai bin: bin a phng bonus v bin ton

    cc score. Nhp gi tr hai bin t bn phm, tnh v hin ra mn hnh tngca score v bonus.

    8. Hy tnh (khng dng chng trnh) gi tr ca cc biu thc sau:a) 1 + 3 < 2 * 4 1 && 1b) 2 * 2 1 + 5 / 1 & 4 3c) (2 3 * 1) && 0 / 5 * 2 + 1

    9. Tnh gi tr ca bin c ton chng trnh sau:a) int a = 3; int b = 2; int c = a/b;b) double a = 3.1; int b = 2; int c = a/b;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    31/162

    31

    c) int a = 3; int b = 2; double c = a/b;10.Nhp hai s nguyn dng x v y t bn phm, hy tnh:

    a) Thng ca php ton x chia cho yb) Tch ca php ton x nhn yc) Phn nguyn ca x chia cho yd) Phn d ca x chia cho y

    11.Nhp t bn phm 3 s thc x, y, v z. Hy tnha) Trung bnh cng ca ba s trnb) Hin ra mn hnh s 1 nu x l s ln nht trong ba s trn, ngc li

    hin ra mn hnh s 0.c) Hin ra mn hnh s 1 nu z l s nh trong ba s trn, ngc li hin ra

    mn hnh s 0.

    12.Tnh gi tr (khng dng chng trnh) ca biu thc so snh di y:a) x = 1; y = 2; x++ < yb) x = 2; y = 1; x-- < y++c) x = 2; y = 2; x++ == y

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    32/162

    32

    Chng 3. Cc cu trc iu khinNh ni phn trn, chng trnh my tnh m chng ta lp trnh to ra thccht l mt tp cc lnh. Cc chng trnh c vit bng ngn ng bc cao

    thng cha mt hm chnh (trong C++ l hm main), ni chng trnh bt uthc hin cc lnh.

    Trong chng ny chng ta s tm hiu th t thc hin cc lnh trong mtchng trnh.

    3.1. Lung iu khinLung iu khin ca chng trnh l th t cc lnh (hnh ng) m chngtrnh thc hin. Cho n chng ny, chng ta mi gp th tn gin: th t

    tun t, ngha l cc hnh ng c thc hin ng theo th t m chng cvit trong chng trnh. V d, Hnh 3.1 l s minh ha mt cu trc tun tin hnh, trong hai hnh ng v cc mi tn biu din th t thc hin cchnh ng.

    Hnh 3.1: S chuyn trng thi ca mt on lnh c thtthc thi tun t.

    Trong chng ny, ta s lm quen vi cc lung iu khin phc tp hn. Huht cc ngn ng lp trnh, trong c C++, cung cp hai loi lnh kim sot

    lung iu khin:

    lnh r nhnh (branching) chn mt hnh ng t danh sch gm nhiuhnh ng.

    lnh lp (loop) thc hin lp i lp li mt hnh ng cho n khi mtiu kin dng no c tha mn.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    33/162

    33

    Hai loi lnh to thnh cc cu trc iu khin (control structure) bn trongchng trnh.

    3.2. Cc cu trc r nhnh3.2.1.Lnh if-elseLnh if-else (hay gi tt l lnh if) cho php r nhnh bng cch la chnthc hin mt trong hai hnh ng. V d, trong mt chng trnh xp loi imthi, nu im ca sinh vin nh hn 60, sinh vin c coi l trt, nukhng th c coi l .

    in "Failed" in "Passed"

    [score < 60] [score >= 60]

    Hnh 3.2: S mt lnh if.

    Thut ton nh ny c th hin bng s trong Hnh 3.2. Trong hnh qutrm biu din im r nhnh, ni chng trnh a ra quyt nh xem nn r

    theo hng no. Tim r nhnh c cc mi tn i ra, mi mi tn km theomt iu kin. Lung iu khin si theo mi tn no m iu kin ca nc tha mn.

    Cng c th trnh by thut ton bng m gi nh sau:

    If students score is less than 60

    print Failed

    else

    print Passed

    Th hin thut ton trn bng mt lnhif-else

    ca C++, ta c on m:

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    34/162

    34

    if (score < 6)

    cout

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    35/162

    35

    Trong cu trc r nhnh -, ta c th b phn nu khng munchng trnh thc hin hnh ng no nu iu kin khng tha mn. Chnghn, nu mun thm mt li khen c bit cho im s xut sc t 90 trln, tac th thm lnh sau vo trong chng trnh ti Hnh 3.3.

    (>=9)=8)

    ='B';

    (>=)

    ='';

    (>=6)

    ='D';

    ='F';

    rng mi khi lnh - sau nm trong phn ca khi lnh - lin trc. Nu khng di 90, iu kin ca c bn lnh -u cho kt qu. Tuy nhin, do iu kin ca lnh - ngoi cngtha mn, ch c lnh gn u tin ='A'c thc thi, cn ton b

    phn ca lnh - ngoi cng, bao gm ba lnh - cn li, bb qua.

    Vi cc khi lnh - lng nhau nh trn, khi phi li u dng qu xav bn phi, dng cn li qu ngn khin mi lnh c th phi tri trn vi dng,dn n vic chng trnh kh c. Do , a s lp trnh vin C++ thng

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    36/162

    36

    dng kiu li u dng nh di y. (Hai cch li u dng ny l nh nhaui vi trnh bin dch v n b qua cc k t trng.)

    (>=9)

    ='A';

    (>=8)='B';

    (>=)

    ='';

    (>=6)

    ='D';

    ='F';

    Hnh 3.4 l chng trnh hon chnh thc hin nhim v yu cu ngi dng

    nhp im s sau tnh v in ra xp loi hc lc tng ng.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    37/162

    37

    ;

    ()

    ;

    ;

    ;

    (>=9)

    ='A';

    (>=8)

    ='B';

    (>=)='';

    (>=6)

    ='D';

    ='F';

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    38/162

    38

    (

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    39/162

    39

    (=='A')

    (=='A')

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    40/162

    40

    w()

    'A'

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    41/162

    41

    w()

    'A'

    'B'

    ''

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    42/162

    42

    ;

    ()

    ;

    ;

    w()

    'A'

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    43/162

    43

    3.3. Cc cu trc lpCc chng trnh thng cn phi lp i lp li mt hot ng no . V d,mt chng trnh xp loi hc lc s cha cc lnh r nhnh gn xp loi A,B, C cho mt sinh vin ty theo im s ca sinh vin ny. xp loi cho

    c mt lp, chng trnh s phi lp li thao tc cho tng sinh vin trong lp.Phn chng trnh lp i lp li mt lnh hoc mt khi lnh c gi l mtvng lp. Lnh hoc khi lnh c lp i lp li c gi l thn ca vng lp.Cu trc lp cho php lp trnh vin ch th cho chng trnh lp i lp li mthot ng trong khi mt iu kin no vn c tha mn.

    Khi thit k mt vng lp, ta cn xc nh thn vng lp thc hin hnh ng g.Ngoi ra, ta cn cn mt cch quyt nh khi no vng lp s kt thc.

    Mc ny s gii thiu v cc lnh lp m C++ cung cp.

    3.3.1.Vng wileVngwilelp i lp li chui hnh ng, gi l thn vng lp, nu nhiukin lpvn cn c tha mn. C php ca vng lp w nh sau:

    w(iu_kin_lp)thn_vng_lp

    Cu trc ny bt u bng t kha w, tip theo l iu kin lp t trongmt cp ngoc n, cui cng l thn vng lp. Thn vng lp hay cha nhiu

    hn mt lnh v khi th phi c gi trong mt cp ngoc {}.

    Khi thc thi mt cu trc w, u tin chng trnh kim tra gi tr ca biuthc iu kin, nu biu thc cho gi tr (thc cht l bng 0) th nhyn im kt thc lnh w, cn nu iu kin lp c gi tr (thc cht lmt gi tr no khc 0) th tin hnh thc hin tp lnh trong thn vng lpri quay trli kim tra iu kin lp, nu khng tha mn th kt thc, nu thamn th li thc thi thn vng lp ri quay li... Tp lnh thn vng lp c thlm thay i gi tr ca biu thc iu kin t sang (thc cht l t

    khc 0 sang bng 0) dng vng lp.

    V d, xt mt chng trnh c nhim vm t 1 n mt ngng b chotrc. on m m t 1 n b c thc vit nh sau:

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    44/162

    44

    =1;

    w(

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    45/162

    45

    dng nhp gi tr 0 cho b, thn vng w khng chy mt ln no, thhin vic khng mt s no c in ra mn hnh. L do l v nu b bng0 th biu thc

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    46/162

    46

    trong Hnh 3.7. Nu (cc) bin khng c thay i gi tr mt cchthch hp hoc khi iu kin lp c vit khng chnh xc (c th do thut tonsai hay nhm ln khi vit m chng trnh), ta s nhn c mt vng lp vtn do iu kin lp khng bao ginhn gi tr.

    Hnh 3.8 minh ha mt vng lp v tn khi bin tng dn n v hnnhng lun nhn gi tr l v khng bao gic th c gi tr bng 12 kt thcvng lp w. y c th gi l li l-gic. Nu on chng trnh c nhimv tnh tng cc s 1, 3, 5, 7, 9, 11 th iu kin lp nn c sa thnh (

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    47/162

    47

    Cng thc ca vng -w tng qut l:

    thn_vng_lpw(iu_kin_lp);

    Tng t nhvng w, thn_vng_lp ca vng -w c th ch gmmt lnh hoc thng gp hn l mt chui lnh c bc trong mt cp ngoc{}. Lu du chm phy t cui ton b khi -w.

    Cng thc tng qut ca vng -w trn tng ng vi cng thc saunu dng vng w:

    thn_vng_lpw(iu_kin_lp)

    thn_vng_lp

    minh ha hot ng ca hai cu trc lp w v -w, ta so snh haion m di y:

    =1;

    w(

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    48/162

    48

    ;

    ()

    ,b;

    b;

    =1;

    do

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    49/162

    49

    du im kt thc. y, 0 l gi tr canh nh du phn t d liu cui cngm ngi dng nhp vo chng trnh.

    ;

    ()

    =;

    ;

    ;

    =+;

    w(=);

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    50/162

    50

    Lm nhim v sau y i vi mi gi tr ca t1n b:In ra mn hnh

    on m gi c thc vit bng vng ca C++ nh sau:

    (=1;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    51/162

    51

    (=1;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    52/162

    52

    nm trong s tit kim sau mi nm (k hn 12 thng) c tnh theo cng thcsau:

    amount=principal * (1 + interest_rate)year

    trong amount l s tin trong s tit kim, principal l vn ban u,interest_rate l li xut hng nm, vyearl s nm gi. Hy tnh v in ra stin trong s tit kim vo thi im cui cc k 12 thng hng nm trong vng5 nm theo dng

    A

    1 xxxx

    xxxx

    Thut ton cho bi ton nh sau:

    Khi to cc bin amount, principal, interestRateIn mc hai ct Year v Amount in deposit ra mn hnhVi year chy t1 n 5, thc hin cc cng vic sau:

    tnh amount sau year nm theo cng thcin amount theo ct

    Chng trnh hon chnh cho trong Hnh 3.12. Trong c mt sim cnch .

    Th nht, vn nh dng cc gi tr s khi in ra mn hnh. nh dng mc

    nh khi in ra mn hnh l nh dng khoa hc, chng hn s 1120000 h thpphn s c dng 1.12e+006. Ta s nhn thy kt qu ny nu xa b dng saukhi chng trnh:

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    53/162

    53

    Th hai l s dng hm th vin ton hc tnh ly tha. C++ khng c phptnh ly tha. Thay vo , th vin trong th vin chun C++ cungcp hm w. Hm w(x,) cho kt qu l gi tr ca php tnh xy. dng hm ny, ta cng cn c nh hng tin x l utp m ngun.

    ++b

    ;

    ()

    b;

    b=1;

    b=1;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    54/162

    54

    3.4. Cc lnh eak v oieNh gii thiu cc mc trc, cc vng lp w, -w, v ukt thc khi kim tra biu thc iu kin c gi tr v chy tip thnvng lp trong trng hp cn li. Cc lnh bk v l cc lnh

    nhy cho php thay i lung iu khin .

    Lnh bk khi c thc thi bn trong mt cu trc lp hay mt cu trcw c tc dng lp tc chm dt cu trc , chng trnh s chy tip lnh nm tip sau cu trc . Lnh bk thng c dng kt thc smvng lp (thay v i n lt kim tra iu kin lp) hoc b qua phn cnli ca cu trc w (nh ti cc v d trong Mc 3.2.2).

    V v d s dng lnh bk trong vng lp. Chng hn, nu ta sa v d trongHnh 3.11 vng ngng li khi ngi dng nhp im s c gi tr m, tac chng trnh trong Hnh 3.13. Vi ci t ny, khi ngi dng nhp mtim s c gi tr m, iu kin (k=bj) trong lnh sau c ngha "vng c chy bj ln hay khng?" hoc "vng c b ngt gia chng bi lnh bk hay khng?", hay l "d liu nhp vo cthnh cng hay khng?".

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    55/162

    55

    ;

    ()

    =;

    ,bj=1;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    56/162

    56

    ;

    ()

    =;

    =,bj=3;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    57/162

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    58/162

    58

    (ade'A')

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    59/162

    59

    Bi tp

    1. Nhp vo t bn phm mt s nguyn nm trong khong t 0 n 10 lim ca mt sinh vin. Hy s dng cu trc switch phn loi sinhvin theo quy tc di y. Hin kt qu phn loi ra mn hnh:

    im < 5: km 5 im 7: trung bnh 8 im 9: gii im = 10: xut sc

    2. Nhp vo t bn phm hai s nguyn a v b. Nu a > b: hin ra mn hnh dng ch a is greater than b. a < b: hin ra mn hnh dng ch a is smaler than b. a = b: hin ra mn hnh dng ch a is equal to b.

    3. Nhp vo t bn phm ba s a, b, c. Hy kim tra xem ba s c thamn l di cc cnh ca mt tam gic hay khng? Nu c, hin ramn hnh thng bo v din thch ca tam gic . Nu khng, thng bora mn hnh ba s khng phi l 3 cnh ca mt tam gic.

    4. Nhp t bn phm 3 s a, b, c. Hy tm v hin kt qu ra mn hnh.a. Gi tr ln nht ca ba s trnb. Gi tr nh nht ca ba s trn

    5. Nhp t bn phm ba s nguyn a, b, c. Tnh tng ca s nh nht v sln nht trong ba s trn. Hin kt qu tnh c ra mn hnh.

    6. Nhp vo t bn phm danh sch cc s nguyn th hin cho im camt lp hc. Qu trnh nhp dng li khi s nhp vo l mt s m. Vit

    chng trnh gii quyt cc bi ton sau (hin kt qu tm c ra mnhnh)

    a. Tnh s lng sinh vin trong lpb. Tnh im trung bnh ca lp hc va nhp.c. Tm sinh vin c im cao nht

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    60/162

    60

    d. Tm sinh vin c im thp nht.7. Nhp vo t bn phm mt s nguyn dng, s dng cu trc vng lp

    while-do tnh tng tt c cc s nguyn dng l nh hn s nhp tbn phm. Hin kt qu tm c ra mn hnh.

    8. Nhp t bn phm mt s nguyn dng. Hy kim tra xem s nguyndng c phi l s nguyn t hay khng, nu khng th tm tt c ccc s ca s nguyn dng . Hin kt qu tm c ra mn hnh.

    9. S dng cu trc vng lp for tnh tng tt c cc s nguyn dngchia ht cho 7 v nh hn mt s n cho trc t bn phm. Hin kt qura mn hnh.

    10.Nhp vo t bn phm vo 4 s t nhin. Hy kim tra xem c tn ti haykhng mt cp s (a, b) trong bn s trn m a chia ht cho b. Nu c,hin ra mn hnh tt c cc cp s (a, b) tm c.

    11.Cng thc tnh dy s Fibonacci nh sau:f(0) = 0; f(1) = 1; f(n) = f(n-1) + f(n-2), vi n >1.

    12.Nhp t bn phm mt s nguyn khng m n, hy tnh gi tr f(n). Hinkt qu tnh c ra mn hnh.

    13.Nhp vo t bn phm 3 s nguyn h (0 h 23), m (0 m 59), s (0 s 59) cho bit gi, pht, giy ca thi im hin ti. Hy tnh xem cnbao nhiu giy na th n thi im 0 gi, 0 pht, 0 giy.

    V d:

    h = 23, m = 59, s = 58.

    Kt qu: cn 2 giy na th n 0:0:0

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    61/162

    61

    Chng 4. HmCc chng trnh v d m ta gp tu n giu ngn vi duy nht mthm chnh hm . Khi cn gii quyt bi ton phc tp hn, hm s

    di hn, v phc tp hn, dn n chng trnh kh c, kh hiu, lp trnh vind mc li, v li kh tm.

    gii quyt cc bi ton ln v phc tp, ngi ta thng s dng chin lcchia tr. Ngha l, chia bi ton thnh mt chui cc bi ton nh hn, dhn, v chng c thc gii mt cch t nhiu c lp vi nhau, sau kthp li c mt li gii hon chnh cho bi ton ban u. Trong lp trnh, chia trc th hin bng vic chia chng trnh thnh cc chng trnh con.on m cha trong thn mt chng trnh con s c thc thi mi khi

    chng trnh con c gi (hay kch hot). Chng trnh con chnh l mttrong cc cch cho php m-un ha chng trnh.

    Bn cnh chin lc chia tr, vic s dng chng trnh con cn mang licho lp trnh vin kh nng ti sdng m, s dng cc chng trnh con nhl cc khi lp ghp xy dng cc chng trnh mi. Chng trnh con cnggip trnh c cc on m ging nhau lp i lp li trong mt chng trnh.

    Ngi ta khuyn rng di mi chng trnh con khng nn vt qu mttrang mn hnh lp trnh vin c th kim sot tt hot ng ca chng trnh

    con .

    Trong C++, tt c cc chng trnh con u c th hin bi cu trc hm.Ngay c chng trnh chnh () cng l mt hm. Mt hm c kch hotkhi n c gi t bn trong mt hm khc, chng hn hm wc gi ttrong hm ca chng trnh trong Hnh 3.12. Khi hm c gi thc hinxong cng vic ca mnh, n tr kt qu v cho ni gi n hoc n gin l trquyn iu khin v cho ni gi n. C th so snh hm c gi nh l mtngi th, cn hm gi n nh l ngi ch. Ngi ch giao vic cho ngi th

    A, ngi thA thc hin cng vic v khi lm xong th bo co kt qu li chongi ch. Ngi thA trong khi lm nhim v ca mnh cng c th yu cumt ngi thkhc (B) thc hin mt nhim v con trong . n y quan hgia ngi thA v ngi thB cng tng t nh quan h gia ngi ch vngi thB.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    62/162

    62

    Chng ny s ni v cch nh ngha cc chng trnh con (hoc cc hm) vcc vn lin quan nh bin a phng, cch truyn d liu vo trong hm.

    4.1. Cc hm c snCc ngn ng lp trnh bc cao thng cung cp rt nhiu cc hm c sn chongi dng s dng. Cc hm c chia thnh cc nhm hay cc th vinkhc nhau. Khi mun s dng hm c sn , ta ch cn ch ra cho chng trnhbit l hm nm th vin no (s dng ) v sau c th s dnghm mt cch bnh thng. V d nh ti chng trnh trong Hnh 3.12, ta s dng hm w v khai bo include th vin cmath cha n.

    Mt s th vin ca C++ hay c s dng:

    iostream: cung cp cc hm lin quan n nhp v xut d liu cmath: cung cp cc hm lin quan n ton hc. cstdlib: cung cp cc hm cho cc mc ch chung nh: qun l b nh

    ng, sinh s ngu nhin, tm kim-sp xp

    cstring: cung cp cc hm x l chui k t nh: tnh di, sao chpchui

    C th tra cu chi tit v cc th vin ny ti [4].

    V d, Bng 4.1 lit k danh sch mt s hm ton hc thng dng.Bng 4.1: Cc hm ton hc trong thvin cmath.

    Hm Miu t

    ceil( x ) s nguyn nh nht khng nh hn x

    cos( x ) hm lng gic cos x (x o bng radian)

    exp( x ) ex

    fabs( x ) gi tr tuyt i ca x

    floor( x ) s nguyn ln nht khng ln hn x

    fmod( x, y ) phn d ca php chia x/y (ly gi tr kiu thc)

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    63/162

    63

    log( x ) loga cs e ca x ( ln x )

    log10( x ) loga cs 10 ca x ( log x )

    pow( x, y ) x

    y

    sin( x ) hm lng gic sin x (x o bng radian)

    sqrt( x ) cn bc 2 ca x (x l gi tr khng m)

    tan( x ) hm lng gic tan x (x o bng radian)

    4.2. Cu trc chung ca hmNgoi vic s dng cc hm c sn trong th vin, lp trnh vin cn t xydng cc hm ca ring mnh. Sau khi c nh ngha, mt hm c thcs dng nhiu ln. Hm c nh ngha theo cng thc:

    kiu_tr_vtn_hm (tham_s_1, tham_s_2,)

    thn_hm

    trong :

    kiu_tr_v l kiu gi tr m hm s tr v. y c th l mt trong cckiu d liu c sn ca C++ hoc mt kiu d liu ngi dng tnh ngha.Trong C++, nu hm khng tr v gi tr no, th kiu_tr_vc thay thbng t kha .

    tn_hm l nh danh ca hm, cch t tn hm tun th theo cch t nhdanh v ging cch t tn bin.

    tham_s_1, tham_s_2,l danh sch cc tham su vo ca hm. Tny ca chng l cc tham s hnh thc ( formal parameter)4. y lphng tin truyn d liu vo trong hm.

    thn_hm l ni cha chui cc lnh.

    4 Cn c gi tt l "tham s".

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    64/162

    64

    Hnh 4.1 m t cch khai bo, ci t v s dng mt hm tnh din tch hnhch nht (A) trong C++. Hm A nhn hai tham su vo l L v , n tnh din tch hnh chnht (lu ti bin ) v tr li kt qu (lnh ;).

    ;

    b

    A(L,)

    =L;

    ;

    ()

    =3;

    w=;

    =A(,w);

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    65/162

    65

    Hnh 4.1). Cc gi tr truyn vo cho hm c gi l cc i s (argument)5.Nh trong li gi hmA(,w) ti Hnh 4.1, v w l cc i s. Mt hm c thc gi nhiu ln vi cc i s khcnhau.

    Khi chng trnh thc thi mt li gi hm, gi tr ca cc i sc sao chpvo cc tham s hnh thc tng ng, ngha l gi tr ca c chp voL v gi tr ca w c chp vo , rion m nh ngha hm c thc thi. Cui cng, lnh tr v mt gitr (l gi tr ca biu thc nm ngay sau t kha ) cho on m chngtrnh gi hm ny. ng thi, lung iu khin ca chng trnh cng quaytr li vi ni gi hm v cc lnh ni tip pha sau li gi hm sc thcthi.

    4.4. Bin ton cc v bin a phngChng 2 gii thiu cc khi nim cbn v bin. Trong mc ny, ta s bnkhn v cc loi bin, hiu lc v phm vi ca bin.

    Chng ta bit rng bin c cc thuc tnh nh: tn, kiu, kch thc, gi tr.Ngoi ra, mi bin cn c cc c im khc, c th l:

    thi gian sng: bin tn ti bao lu trong b nh phm vi: bin c thc s dng ti nhng ni no trong chng trnh

    4.4.1.Phm vi ca binPhm vi (scope) ca mt bin l nhng ni chng ta c th s dng bin .Mt bin c th c phm vi ton cc hay phm vi a phng.

    Bin ton cc (global variable) l bin c khai bo bn ngoi tt c cc hm(bin A trong Hnh 2.1). Bin ton cc c thc s dng trongton b chng trnh, ngay c bn trong cc hm, min l on m s dng binnm sau dng lnh khai bo bin .

    Bin a phng (local variable) l bin c khai bo bn trong mt hmhoc mt khi lnh (trong C++, mt khi lnh c gi trong cp ngoc {}).Bin a phng ch c th s dng bn trong khi lnh m n c khai bo ti

    5 Mt s ti liu dng thut ng "tham s thc s" hay "tham i" chi s. Mt s ti liu khc dng thutng "tham s" gi chung cho c tham s hnh thc ln i s.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    66/162

    66

    . Khi lnh ny c th l thn ca mt hm hoc mt khi cu trc iu khin(xem Chng 3). Chng hn, ti chng trnh trong Hnh 4.2 c ba bin x khcnhau vi cc phm vi khc nhau: bin xc khai bo trong hm c phmvi l hm ; bin xc khai bo ngay ti dng u tin ca thn hm c phm vi l ton b thn hm do cp ngoc {} gn nht chnh l cpngoc bao quanh thn hm ; v bin xc khai bo bn trong thn vng ca hm ch c phm vi bn trong vng . y l cc bin honton c lp. Sa i i vi bin ny hon ton khng c nh hng g i vicc bin kia (th hin cc dng output: con m x ca vngthay i gitr trong khi hai bin x cn li khng c g thay i).

    ;

    ();

    ()

    x=;b

    ();

    (=1;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    67/162

    67

    4.4.2.Thi gian sng ca binTrong trng hp mc nh vi lnh khai bo thng thng, mt bin scto ra khi chng trnh chy n lnh khai bo bin v tn ti cho n khichng trnh ra khi phm vi ca bin . C th, cc bin ton cc c phm vi

    l ton b chng trnh, nn chng c sinh ra v khi to ng mt ln v"sng" cho n khi chng trnh kt thc.

    Vi cc bin a phng c khai bo theo kiu thng thng, phm vi cachng ko t lnh khai bo chng cho n ht khi chng trnh cha lnh khaibo . Do , cc bin ny c to ra mi khi chng trnh chy n lnhkhai bo bin v b hy i khi chng trnh chy n ht khi. Ngi ta cn gicc bin a phng ny l bin tng (automatic variable).

    Trng hp ngoi l trong C++ l cc bin a phng c khai bo vi t

    kha . Cc bin ny tuy l bin a phng nhng "sng" cho n khichng trnh kt thc mc d n khng thc truy nhp ti trong khi chngtrnh ang chy ngoi phm vi ca n. Cc bin static ny gi nguyn gi trca mnh gia cc ln gi hm. Ngi ta gi cc bin a phng loi ny lbin tnh (static variable).

    Chng trnh trong Hnh 4.3 l mt v d minh ha s khc nhau gia bin tnhv bin thng thng. Trong hm Vb c hai bin aphng: x l bin tng v l bin tnh. C hai u c khai bo vi gi tr

    khi to bng 0, cng c in ra mn hnh trc khi tng thm 1.Vb c gi bn ln t trong hm , mi ln li in ramn hnh mt dng thng bo gi tr ca x v . Kt qu in ra mn hnh chothy x c gi tr bng 0 trong tt c cc li gi hm, trong khi bin tnh y miln li tng thm 1. Ln no bc vo hm Vb, x cng nhngi tr khi to (0). Trong khi , chc khi to bng 0 ng mt ln, nkhng b hy khi hm kt thc m n vn "sng" v gi hiu ng ca php tngcui hm Vb t ln gi hm trc cho n ln gi hm sau.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    68/162

    68

    ;

    Vb()

    x=;

    =;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    69/162

    69

    hng g ti i s tng ng c dng cho li gi hm. Tt c cc v d trongchng ny cho n y u dng cch truyn gi tr.

    Xem thm minh ha trong Hnh 4.4. Vic tham s hnh thc b thay igi tr t bn trong hm khng c nh hng g i vi i sL

    (mt bin ca hm ) c dng khi gi hm ny. Sau khi li gi hm cthc hin xong, L vn gi nguyn gi tr l 9.

    ;

    ()

    =;

    (;>;--)

    +=;

    ;

    ()

    L=9;

    =(L);

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    70/162

    70

    tham chiu gip chng trnh c hiu nng cao hn do trnh c chi ph chovic sao chp d liu. Tuy nhin, truyn tham chiu lm cho chng trnh kman ton do nguy chm c gi c th lm ri lon d liu ca hm gi. Mcny ni v mt cch m C++ cung cp truyn tham s bng tham chiu.Ngoi ra, Chng 6 s ni n mt dng truyn tham chiu khc c th caC/C++: con tr.

    Trc tin chng ta tm hiu v khi nim tham chiu trong ngn ng lp trnhC++. Tham chiu (reference) ca mt bin v bn cht l mt bit danh haymt ci tn khc ca chnh bin . Cc thao tc trn tham chiu ca mt bincng c hiu qu ging ht nh thao tc trn chnh bin v ngc li. Saukhi khai bo, tham chiu c s dng trong chng trnh nh cc bin khc.V d dng:

    &bk=bUB;

    khai bo bk l mt tham chiu ti mt bin kiu c tnbUB. Lu rng trong khai bo c du &. Ngoi ra, tham chiu phic khi to ngay khi khai bo, C++ khng chp nhn tnh trng mt thamchiu khng chiu i u c.

    Hnh 4.5 minh ha cch khai bo v s dng tham chiu. Bin bkc khai bo (c du & vo ng trc tn bin) l mt tham chiu ti binbUB (stick l mt tn gi khc ca USB stick). Mi tnh ton v tc ng

    trn bin bk s tng t nh trn bin bUB v ngc li vthc cht hai bin ny l mt.

    Hnh 4.5: V d v khai bo v sdng tham chiu.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    71/162

    71

    Trong nhiu trng hp, chng ta mun vic thay i gi tr ca mt tham strong hm s lm thay i gi tr ca i s tng ng. V d, khi ta vit mthm nhp gi tr cho cc bin t bn phm.

    lm nh vy, ta c th s dng cchtruyn tham chiu. Tc l, tham s

    hnh thc s l mt tham chiu ti i s tng ng. Trong cch ny, cc sai i vi tham s hnh thc bn trong hm c thc hin trn chnh i sdng cho li gi hm.

    Hnh 4.6 minh ha c ch truyn tham chiu vi hm . Hm nynhp hai s nguyn t bn phm v lu chng vo hai tham s v k (c khai bo l tham chiu). Vic lu gi tr vo v k s lm thay igi tr ca i s l cc bin tng ng ca hm .

    Khc bit duy nht v c php gia truyn gi tr v truyn tham chiu l danh

    sch khai bo tham s hnh thc. quy nh tham s no sc truyn bngtham chiu, cn c du &t ngay sau tn kiu d liu ti khai bo tham strong nh ngha hm. Trong v d hm , c cc du &t ti khaibo ca cc tham s v k.

    (&,&k);

    Lu : Hm khng cn tr v gi tr g nn n c khai bo vit kha cho kiu gi tr tr v v khng cn c lnh km gi trtrong thn hm.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    72/162

    72

    ;

    (&,&k)

    >>k;

    ;

    ()

    1,k1;

    (1,k1);

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    73/162

    73

    li, nu mt gi trc truyn vo tham s th gi tr mc nh s b b qua dng gi trc truyn vo.

    Hnh 4.7 minh ha v cch khai bo v s dng tham s mc nh. Trong ,tham s hnh thc ca hm c gi tr mc nh l 9. Ln gi hm

    th nht cung cp i s cho c hai tham s (w = 1 v = 5) v ta thuc kt qu l 15. Ln gi hm th hai ch cung cp i s c gi bng 1cho tham sw, cn tham s s nhn gi tr mc nh (9), ta thu ckt qu l 45.

    ;

    (w,=9)

    =;(;w

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    74/162

    74

    nhn gi tr mc nh. Lu : si s truyn vo phi nhiu hn hoc bng stham s hnh thc khng c gn gi tr mc nh.

    4.6. Hm trng tnTrong C++, hai hm khc nhau c th c tn trng nhau (function overloading)nu danh sch tham s (ch quan tm n kiu d liu m khng quan tm ntn ca tham s) ca hai hm l khc nhau.

    V d,

    (x);

    (x);

    (x,);

    l ba hm khc nhau trong C++. Mi khi cn dch mt li gi hm c tn ,

    trnh bin dch kim tra kiu d liu ca i s v s lng cc i s trong ligi hm xc nh xem hm c gi l hm no trong ba hm c nh ngha.

    V d trong Hnh 4.8 minh ha vic khai bo v s dng cc hm trng tn lit k trn. C ba hm c gi t trong hm vi danh sch thams khc nhau. Kt qu chy chng trnh chng t trnh bin dch gi nghm cho cc bi s khc nhau.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    75/162

    75

    ;

    (x)

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    76/162

    76

    hm trng tn vi n. V d, khi ta c hai hm trng tn, mt hm c danh schtham s rng, hm kia cho php tt c cc tham s c th ly gi tr mc nh,chng hn ()v (=1,j=1). Tnh trng ny sgy li bin dch do tnh trng nhp nhng khng th xc nh mt li gi hmng vi hm no.

    C++ cn cho php s dng cch hm trng tn nh ngha cc phin bnkhc ca cc php ton c sn dng cho cc kiu d liu khng cbn.Chng hn lp trnh vin c thnh ngha kiu d liu s phc v vit phpcng (+) dnh cho kiu d liu ny. Ni dung chi tit v ch ny nm ngoiphm vi ca cun sch ny, ngi c c th tm hiu ti [2].

    4.7. Hm quyTrong cc v d tu cun sch, ta lm quen vi vic mt hm gi mt hmkhc. quy l dng gi hm c bit: hm quy l hm cha li gi tichnh n, trc tip hoc gin tip (qua mt hm khc).

    Dng hm ny c dng biu din cc thut ton quy a mt bi tonv mt bi ton tng t nhng c kch thc nh hn. y l ch phc tp,sc ni n mt cch y hn trong cc mn hc cao hn ca ngnhKhoa hc My tnh. Phn ny ch gii thiu v quy mc n gin nht.

    V din hnh thng c dng minh ha cho hm quy l bi ton tnh

    giai tha ca mt s. Giai tha ca nc tnh theo cng thc quy:n! = n* (n-1) * (n-2) * (n-3) ... * 1

    tng ng vi:

    n! = n* (n-1)!

    Ngha l, gi s f(n) l giai tha bc n, f(n) c nh ngha nh sau:

    f(0) = 1

    f(n) = n * f(n-1)

    Trong , dng th nht l trng hp c bn, dng th hai l cng thc quy.

    Hm quy vit bng C++ v cbn l ging ht vi cng thc quy trn.Hnh 4.9 m t hm quy tnh gi tr ca n! Hm quy baogm mt khi lnh - chia hai trng hp cbn v tng qut. Trnghp cbn xy ra nu 1, khi hm kt thc tnh ton v tr v gi tr 1 l

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    77/162

    77

    giai tha ca . Trng hp cn li (>1), hm gi quy tnh gi tr ca(-1) ri tr v kt qu l tch ca v (-1).

    Trong hai phn chnh ca hm quy, trng hp cbn nhn qua c vngin nhng thc ra li c vai tr rt quan trng trong hm quy. Nu thiu

    hoc c nhm ln khi vit trng hp ny, hoc ssut trong bc quy lmn khng th hi t v trng hp cbn th chng trnh c nguy c quy vtn n khi cn kit b nhdnh cho chng trnh. Hin tng ny tng tnh vng lp v tn.

    ;

    ()

    (

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    78/162

    78

    Bi tp

    1. Vit mt hm nhn tham su vo l 5 s nguyn, v tr v kt qu ltrung bnh cng ca 5 s nguyn . Hin kt qu tr v ca hm ra mnhnh.

    2. Hy tm nhng hm trng nhau trong danh sch cc hm sau:a) int foo (int x)b) int foo (float x)c) float foo (int y)d) float foo (int x, int y)e) float foo (int x, float y)f) int foo (int student, float teacher)

    3. Khi no th nn truyn i s cho hm theo kiu truyn gi tr, khi no thnn truyn theo kim tham chiu?

    4. Vit mt chng trnh c mt hm vi 5 tham s dng tham chiu nhpvo 5 s nguyn t bn phm. Tm v hin ra mn hnh tt c cc cp s ctng bng 50.

    5.

    Vit chng trnh vi mt hm get_min tnh gi tr nh nht ca 3 s.Hm trn c vit da vo hm get_min tnh gi tr nh nht ca hai s.Lu , hai hm ny trng tn.

    6. Nhp t bn phm hai s nguyn x, y. Hy tnh v hin ra mn hnh gi trca cc hm sau y:

    a) cn bc hai ca xb) exc) log (x)d) x!e) x!!

    7. Tm hiu hm rand sinh ra cc s ngu nhin trong ngn ng lp trnhC++. Hy vit chng trnh sinh ra 9 s nguyn ngu nhin nm trong phm

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    79/162

    79

    vi t 2 n 99. Hin ra mn hnh cc cp s nguyn c sinh ra c tngbng 100.

    8. Dy s Fibonacci c tnh nh sau:a) f (0) = 0; f (1) = 1; f(n) = f (n-1) + f(n-2) vi n > 1.b) Hy vit chng trnh vi hm quy tnh f(k), vi k l gi tr nhp t

    bn phm. Hin kt qu tnh c ra mn hnh.

    9. Vit chng trnh c mt hm quy tnh tng tt c cc s nguyndng chia ht cho 3 v nh hn mt s nguyn cho trc nhp t bn phm.a kt qu tnh c ra mn hnh.

    10.Vit mt hm nhn u vo l hai s x, y v tr ra 4 gi tr l kt qu ca 4php ton sau y:

    a) Thng ca php ton x chia cho yb) Tch ca php ton x nhnc) Phn nguyn ca x chia cho yd) Phn d ca x chia cho y

    11.Cho mt dy s gm 5 s nguyn c gi tri mt khc nhau c nhpvo t bn phm. Hy vit hm f(k) tr ra gi tr ca phn t ln th k trong

    dy s trn. Gi tr k c nhp vo t bn phm. Hin kt qu tm c ramn hnh.

    V d cho dy s: 14, 5, 11, 2, 23

    f(1) = 23; f(3) = 11; f(5) = 2.

    12.Nhp vo t bn phm 1 s nguyn x, vit mt hm tnh tng tt c cc chs ca s nguyn x. Hin kt qu tm c ra mn hnh.

    V d: x = 25701, th tng cc ch s ca x l: 2+5+7+0+1 = 15.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    80/162

    80

    Chng 5. MngCc kiu d liu cbn nh gii thiu trong Chng 2 khng biudin cc loi d liu m cc bi ton i hi. Mt v d l khi chng trnh cn

    lu v x l mt chui cc phn t d liu cng kiu, chng hn nh danh schsinh vin trong trng hoc danh sch im thi ca mt sinh vin, c th spxp, tm kim, v tnh ton cc con s thng k trn chui d liu . a s ccngn ng lp trnh cung cp cc kiu d liu c cu trc phc v cc nhimv ny, trong , mng l cu trc d liu thng dng nht.

    5.1. Mng mt chiuMng mt chiu l mt chui hu hn cc phn t d liu thuc cng mt kiu

    d liu, t ti cc nhlin tip trong b nh. Mi phn t trong mng c mtch s khc nhau. Mng cho php nh v v truy nhp n tng phn t bngcch s dng ch s ca phn t.

    V d, im s cho 7 mn thi ca mt sinh vin c thc lu tr trong mtmng c kch thc bng 7 (ngha l c 7 nh) thay v khai bo 7 bin khcnhau cho im thi tng mn. Mng c thc hnh dung nh sau:

    30 85 76 90 72 80 88

    0 1 2 3 4 5 6

    trong , mi biu din mt phn t ca mng trong trng hp ny l mtgi tr thuc kiu . By phn t ca mng c nh s ln lt t 0 n 6, cn gi l ch s ca cc phn t trong mng. By phn t ca mng c thc xem nh 7 bin kiu vi "tn" ca chng l , 1,, 3, , , v 6, trong ch s cami phn tc t trong cp ngoc vung. Khi truy nhp mt phn t mng,c th dng ch s l mt gi tr nguyn hoc mt biu thc c gi tr nguyn.

    V d, vi bin c gi tr bng 3, lnh sau gn gi tr 100 cho :+=1;

    cn lnh sau tnh trung bnh cng ca v 1 ri ghi kt quvo bin :

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    81/162

    81

    =(+1);

    5.1.1.Khai bo v khi to mngCng nh mt bin bnh thng, mng phi c khai bo trc khi s dng.

    C php khai bo mt mng trong C++ c dng:kiu_d_liu tn_mng s_phn_t;

    trong , kiu_d_liu l mt kiu d liu hp l (chng hn , , ,b), tn_mng l mt nh danh hp l, v s_phn_t(lun t trong cpngoc vung) quy nh s lng phn t m mng cn cha.

    V d, mng trong v dtrn c khai bo nh sau:

    ;

    Lu : gi tr s phn tt trong cp ngoc vung phi l mt hng s, do ccmng khai bo kiu ny thuc b nhtnh v phi c kch thc c xc nhtrc khi chng trnh thc thi. Mng vi kch thc ng s c ni ntrong chng sau.

    Hnh 5.1 minh ha vic khai bo v s dng mng mt chiu. Chng trnhtrong hnh yu cu ngi dng nhp im cho 7 mn hc, ln lt cng dntng im ri tnh im trung bnh. rng chng trnh s dng mt hngbin (NUB_U) lu tr kch thc mng, cng l s mn hc, thay vs dng gi tr 7 trong ton bon m. Gi tr ch xut hin ng mt ln khikhai bo hng NUB_U. Vi cch s dng hng nh vy, nu ta munthay i s mn hc m chng trnh x l, ta ch cn sa duy nht mt v trtrong chng trnh l lnh khai bo hng NUB_U thay v phi lm mtcng vic tn thi gian v d gy li l tm v sa tt c cc gi tr 7 c linquan (trong cc chng trnh phc tp hn, khng phi gi tr 7 no cng linquan n s mn hc).

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    82/162

    82

    ;

    NUB_U=;

    ()

    NUB_U;

    =;

    (=;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    83/162

    83

    =6,,89,,88,3,9;

    Ta cng c th b qua khng khai bo kch thc ca mng C++ t xc nhthng qua di ca dy khi to. V d lnh sau y cho hiu qu ging htlnh trn:

    =6,,89,,88,3,9;

    Nu khng c khi to, cc phn t ca mng s c gi tr khng xc nhcho n khi ta gn cho chng mt gi tr no . Vic s dng cc gi tr khngxc nh s dn n li l-gic.

    5.1.2.ng dng ca mngMng c thc dng lu tr v tnh ton nhiu dng d liu. D thy nhtl dng mng lu tr mt chui gi tr, chng hn nh dy im s ca cc

    mn hc nh v d trong Hnh 5.1. Ta c th dng mng biu din tp hp,chng hn mng =1,,1i din cho tp hp [0, 2], trong phn t c gi tr khc 0 mang ngha rng gi tr c mt trong tp hp.

    Ngoi ra, ta c th dng cc phn t mng lm cc con m. Chng trnh v dtrong Hnh 5.2 gi lp vic tung xc xc v thng k s ln ra cc mt c gi trt 1 n 6. Chng trnh s dng mng cha cc con m, trong dng m s ln tung xc xc c mt c gi tr. Vng th nht trong chng trnh thc hin gi lp vic tung xc 6.000.000 ln, sau

    mi ln tung li tng con m tng ng. gi lp tung xc xc, chng trnhdng hm sinh s ngu nhin () thuc th vin b, vn nm trong bth vin chun ca ngn ng C. Hm ny tr v mt gi tr nguyn ngu nhintrong khong t 0 n AND_AX (mt hng sc nh ngha trong b,c gi tr ph thuc tng b ci t khc nhau ca C++ nhng c m bo lkhng nh hn 32767). c c mt gi tr ngu nhin trong mt khong gitr, ta kt hp (), php ly ng d v cc php tnh s hc khc. V d,cng thc (()%6+1) nh trong chng trnh cho kt qu l mt sngu nhin trong on t 1 n 6. Thc ra hm rand() ch sinh ra cc s gi

    ngu nhin (pseudocode). Chui s m () sinh ra khi c gi lp i lpli trng c v ngu nhin nhng mi ln chy chng trnh li cho ra cng mtchui. chui s m () sinh ra mi ln mi khc, ta cn dng km hm() trc khi gi () ln u trong chng trnh. Hm () lymt tham s kiu int v ly gi tr ny lm ht ging cho chui ngu nhin sc sinh. Cc ht ging khc nhau s cho chui khc nhau. Trong chng

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    84/162

    84

    trnh v d, ta dng thi gian hin ti lm ht ging (gi hm () vi i sbng 0).

    ;

    ()

    bF=6;

    bF+1=;

    (());b

    1,,;

    (=1;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    85/162

    85

    5.1.3.Trch nhim kim sot tnh hp l ca ch s mngi vi mng c khai bo vi kch thc n, ch s ca cc phn t trongmng l cc s nguyn t 0 n n1. Ngoi ra, cc gi tr khc u khnghp l. Vic truy nhp mng bng cc ch s khng hp l, chng hn khi truy

    nhp n -1 hay , c th dn n cc thay i khng mongmun i vi d liu vng b nhbn ngoi mng (c th thuc v cc binkhc), hu qu l chng trnh chy sai hoc gp s c dng t ngt. Trongnhiu ngn ng lp trnh, vic truy nhp mng c kim sot tng trnhtrng hp truy nhp vi ch s khng hp l. Tuy nhin, trong C++, vic truynhp n cc phn t ca mng vi ch s nh hn 0 hoc ln hn 1 khng hphm li c php, vic truy nhp ra ngoi mng khng gy li khi dch nhngc th gy li khi chy. Lp trnh vin c trch nhim kim sot cc gi tr chs mng trnh trng hp ny.

    5.1.4.Mng lm tham s cho hmC th dng mng lm tham s cho hm. Hnh 5.3 l kt qu ca vic sachng trnh trong Hnh 5.1, a hai nhim v nhp d liu cho mng v tnhim trung bnh vo hai hm v truyn mng vo trong hai hm .

    rng tuy cc tham s mng khng c khai bo vi k t "&" trong phnkhai bo v nh ngha hm, nhng thc cht chng l cc tham chiu (thay vgi tr). Ni cch khc, khi chng trnh thc thi, cc hm khng to cc bn

    sao ring ca cc mng c truyn lm tham s (vic to bn sao ny c th cchi ph rt cao v b nh.)

    Vy lm th no khi ta cn quy nh rng mt hm khng c sa i mttham s mng no ? (v d khng nn cho hm quyn sa mng.) Gii php m C++ cung cp l t kha . Ta sa phn khai botham s ca hm t

    (,);

    thnh(,);

    Kt qu l trnh bin dch s khng chp nhn cc dng lnh sa gi tr catham s mng bn trong hm . Nn s dng t kha cho tt c cc tham s m hm khng c nhu cu thay i.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    86/162

    86

    ;

    NUB_U=;

    (,)

    (=;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    87/162

    87

    1 3 1 3 A 1 8 6 9 1 11 1

    Mt v d khc v mng hai chiu: lu mt bn cca-r, ta c th dng mt

    mng hai chiu cha cc k t. Trong , k t '.' biu din mt trng trn bnc, cc k t 'x' v 'o' ln lt biu din cc k hiu trong tr chi cca r.

    Khai bo mng hai chiu nh sau:

    BAD_HH=;

    BAD_DH=6;

    bBAD_HHBAD_DH;

    Ta dng hai ch s hng v ct truy nhp tng phn t trong mng, v d:

    b1='x';

    on chng trnh sau c thc dng v bn cra mn hnh.

    (w=,w

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    88/162

    88

    (A3);

    5.3. Mng v xu k tChng ta dng n cc xu k t, chng hn "" trong

    Hnh 5.3. Cc ngn ng lp trnh u c cu trc xu k t (string), trong quy nh cch tham chiu ti tng phn t trong xu. Km theo l mt bcc hm v th tc thc hin cc php ton trn d liu xu, chng hn nhxc nh di xu, so snh ni dung xu, ghp xu.

    B th vin chun C++ c th vin kh mnh vi kiu d liu dng x l v thao tc vi cc xu k t. Tuy nhin, v bn cht, xu k t lchui cc k t, nn ta c th biu din xu k t bng mt mng mt chiu gmcc phn t kiu . Nhiu tin ch trong th vin chun C++ s dng xu kt kiu mng, cc chng trnh C++ truyn thng cng nh nhiu chng trnhhin i vn s dng xu k t dng mng. Do , ta vn cn hc s dng thnhtho kiu d liu ny.

    V d, mng sau y gm 20 phn t kiu .

    ;

    V l thuyt, mng trn c th cha mt chui cc k t vi di khng qu20. Nhng ta cn c th lu ti cc xu k t c di ngn hn, chng hn"" hay "H". Xu "" m ta gp

    cng c cu trc tng t, im khc bit ch l y l mt hng xu k t. Hngxu k t c th dng lm gi tr khi to ti lnh khai bo mng . V d:

    ="H";

    Do mng c th lu xu k t c di nh hn kch thc ca mng, tacn c cch xc nh im cui hay di ca xu. C++ s dng k t('') nh du kt thc ca xu k t. V d, mng c th dng lu xu "" hay "H" nh trong Hnh 5.4.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    89/162

    89

    greeting

    H

    Hnh 5.4: Xu k tlu trong mng.

    Lu : cc k t '' nm cui xu nh du kt thc xu; cn cc muxm k hiu cc phn t mng nm ngoi xu (tuy vn nm trong mng) v cgi tr khng xc nh. Khi khai bo mng lu tr mt xu k t, ta cn ch khai bo kch thc mng ln cha c k t nm cui xu.

    ;

    AX_NA_LNH=1;

    ()

    AX_NA_LNH;

    ;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    90/162

    90

    >>w(1)>>;

    Nu ta mun nhp c mt dng, trong c c cc k t trng (tn y thng cha du trng phn cch gia h, m, v tn), ta c th dng lnh() cho cng vic ny. V d, c vo mng mt dng text

    c di ti a 100, kt thc bng k t xung dng, ta dng lnh:(,1,'');

    ()i hi tham s th nht l mng lu xu k t input, thams th hai l di ti a ca input, v tham s th ba l k tnh du cuiinput (k t ny s khng c ghi vo mng ch).

    5.3.1.Khi to gi tr cho xu k tC hai cch khi to gi tr cho xu k t ngay ti lnh khai bo:

    1. Khi to xu theo cch khi to mng:='H','','','','','';

    2. Dng hng gi tr khi to xu:="H";

    i vi cch th nht, ta phi tin k tcui xu. Cn cch th hai,cc biu din gi tr xu c dng dng cp du nhy kp c tng kmthm k t.

    Lu rng chng ta ang ni v cng on khi to gi tr cho xu ch khngni v lnh gn gi tr cho c xu. Cng nh cc loi mng ni chung, i vimng (hay xu k t), khng c php dng mt lnh gn tr hnglot cho cc phn t trong mng. Cc lnh sau s gy li khi dch:

    ='H','','','','','';

    ="";

    5.3.2.Thvin xl xu k tTh vin ca C++ (vn l th vin ca C) cung cp mt lotcc hm tin ch cho vic x l xu k t, chng hn nh tr v dixu, sao chp xu, v so snh xu. Xem thm chi tit v thvin ny trong Ph lc C.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    91/162

    91

    5.4. Tm kim v sp xp dliu trong mngTm kim d liu trong mng l xc nh xem mt gi tr no (c gi lkha) c mt trong mng hay khng, nu c th n nm v tr no. Sp xpmng l sp t li v tr ca cc phn t mng theo mt trong hai th t: gi tr

    kha tng dn hoc gim dn. V d, mt danh sch t c thc sp xp theoth t tin, danh sch sinh vin c sp xp theo s sinh vin. Mc ny giithiu mt s thut ton cbn cho vic tm kim v sp xp d liu trong mng.

    5.4.1.Tm kim tuyn tnhThut ton tm kim tuyn tnh (linear search) duyt tun t tng phn ttrong mt mng, so snh kha vi mi phn t. Khi gp mt phn t khp vikha, thut ton kt thc v tr v ch s ca phn t. Nu duyt n htmng m vn khng tm thy phn t no khp vi kha, thut ton kt lun lkha cn tm khng c trong mng. V d, vi mng {3, 18, 2, 3, 10, 1}, nu tathc hin tm kim vi kha bng 10, thut ton tm kim tuyn tnh s duytln lt t phn tu tin (3) cho ti khi gp phn t th nm (10) v tr vkt qu l ch s mng ca phn t (vi mng C++ nh s t 0, kt qu cathut ton trong trng hp ny s l 4).

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    92/162

    92

    ;

    (,,k)

    (=;=)

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    93/162

    93

    nh phn (binary search) l mt thut ton tm kim phc tp hn nhng chohiu qu cao hn. Tuy nhin, n cn i hi mng u vo c sp xp.

    Gi s mng c sp xp tng dn, thut ton tm kim nh phn hot ngnh sau: ln lp u tin, ly phn t nm gia mng. Nu phn t khp

    vi kha th thut ton kt thc. Nu n c gi tr ln hn kha th chc chnna sau ca mng cha ton cc phn t ln hn kha, v do khng cn tmti phn ny. Ngha l vng tm kim nay c gii hn ch cn l na uca mng. Cn nu phn tgia c gi tr nh hn kha, vi lp lun tng tnh trn, ta c gii hn cn tm kim thu hp li ch cn l na sau ca mng.Nh vy, ti mi ln lp, thut ton so snh kha vi phn t nm gia phnmng cn tm kim hoc l thy phn t khp vi kha hoc l loi bmt na mng ra khi phm vi cn tm kim. Thut ton kt thc khi tm thymt phn t c gi tr bng kha hoc khi phm vi cn tm kim b gim xung

    thnh mt mng con c kch thc bng 0.

    V d, cho mng {1, 3, 4, 7, 10, 12, 15}. tm phn t c gi tr 10, u tinthut ton ly phn t nm gia mng l 7 v so snh vi 10. V 7 nh hn 10,thut ton b qua na u ca mng, phm vi tm kim thu hp thnh onmng {10, 12, 15}. Ti ln lp tip theo, thut ton li ly phn t nm gia l12 v so snh vi kha 10. V 12 ln hn 10 nn na sau ca on {10, 12, 15}b b qua, phm vi tm kim c thu hp li ch cn on mng gm mt phnt {10}. Ln lp th ba, phn t nm gia mng (phn t duy nht cn li trong

    on cn tm) c gi tr trng vi kha nn thut ton kt lun tm thy phnt c gi tr 10.

    Thut ton c minh ha bng chng trnh trong Hnh 5.7.

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    94/162

    94

    ;

    b(,,k)

    =,=;w(>)

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    95/162

    95

    hai trong mng. Thut ton tip tc cho n ln lp cui cng khi phn t lnnh mng c chn ra v tro vi phn t c ch s st cui, dn n vic phnt ln nht mng nm ti v tr cui mng. Tng qut, kt qu ca ln lp thil phn t nh thi ca mng c xp vo v tr thi trong mng.

    Hnh 5.8 minh ha thut ton sp xp chn.

    ;

    (,)

    (=;

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    96/162

    96

    Bi tp

    1. Nhp vo t bn phm mt danh sch cc s X1, X2,, X2n-1, X2n. Hyvit mt hm tnh gi tr ca biu thc sau y (hin kt qu tm c ramn hnh):

    ( X1 + X2n) * (X2 + X2n-1) ** (Xn + Xn+1)

    2. Nhp vo t bn phm danh sch tn cc bn sinh vin trong lp. Hy tmhiu v ci t thut ton sp xp ni bt (bubble sort) sp xp danhsch tn theo th t tng dn. Hin danh sch sau khi sp xp ra mnhnh.

    3. Nhp vo t bn phm mt danh sch cc s nguyn. Hy hin ra mnhnh tt c cc b s (a, b, c) m tng ca chng bng 25.

    4. Mt qu i c chia thnh mt li vung c kch thc m*n vung. Mi vung cha mt s nguyn i din cho cao ti vung. Hy tm v hin ra mn hnh:

    vung c cao ln nht vung c cao nh nht Tt c cc hnh vung c kch thc 3*3, m vung gia cao hn

    cc vung xung quanh

    Tt c cc hnh vung c kch thc 3*3, m vung gia thp hncc vung xung quanh

    5. Nhp vo t bn phm mt xu k t. S dng kiu d liu char[] ghira mn hnh cc kt qu sau:

    di ca xu k t va nhp Xu k t sau khi loi b tt c cc du ?, ! Xu k t sau khi chn vo gia xu t C++. Xu k t sau khi xa b 5 k t nm gia

    6. Nhp vo t bn phm mt danh sch tn cc bn sinh vin trong lp, hym xem c bao nhiu bn c tn vi ch ci bt u l T, C, V, A,

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    97/162

    97

    Q. Tm tn c s bn trng nhau l nhiu nht. Hin kt qu tm cra mn hnh.

    7. Nhp vo t bn phm mt xu k t l danh sch tn cc sinh vin. Haitn ng lin nhau c cch nhau bi t nht mt du cch. Hy tnh

    xem c bao nhiu sinh vin trong danh sch. V d:

    D liu vo Kt qu tng ng

    Vinh tuan vinh blah blah 5

    8. Nhp mt xu k t t bn phm. Hy chun ho xu bng cch loi bcc k t khng phi ch ci, du cch, du phy, du chm. Cc t cchnhau bi ng mt du cch v ch vit hoa ch ci u tin. V d:

    D liu vo Kt qu tng ng

    tOi te1N !LA ng2uyen v3an aN;. Toi Ten La Nguyen Van An.

    9. Nhp vo t bn phm 1 dy k t gm cc k t 0..9. Hy tnh s lngk t 0, s lng k t 1,, s lng k t 9 trong xu va nhp vo. Hinkt qu ra mn hnh.

    10.Nhp t bn phm 2 s nguyn ln (s lng ch s ln hn 100). Hyvit chng trnh tnh v hin kt qu ra mn hnh:

    Tng ca hai s trn Hiu ca hai s trn Tch ca hai s trn

    11.Nhp t bn phm 1 dy cc ch s t 0 n 9. Hy vit chng trnh och cc ch s thu c (hin kt qu ra mn hnh): S nguyn c gi tr ln nht S nguyn c gi tr nh nhtV d: Dy u vo: 1312013

    S nguyn c gi tr ln nht: 3321110

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    98/162

    98

    S nguyn c gi tr nh nht: 0111233

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    99/162

    99

    Chng 6. Con tr v b nhCon tr l mt cng c m mt s ngn ng lp trnh bc cao, c bit l C vC++, cung cp cho php chng trnh qun l v tng tc trc tip vi b

    nh. N gip chng trnh linh ng v hiu qu. Tuy nhin, s dng con trcng d dn n sai st v kh pht hin ra li.

    6.1. B nhmy tnh hiu v con tr, trc tin ta s tm hiu v b nhmy tnh. Ta c th hnhdung b nhmy tnh l mt lot cc nhni tip nhau, mi nhc kchthc nh nht l mt byte. Cc nhn ny c nh s lin tc, nhsauc s th t hn s th t ca nhlin trc l 1. Tc l nh1505 sng

    sau nh1504 v ng trc nh1506 (xem Hnh 6.1). S th t ca nhc thc gi l a ch ca nh.

    Hnh 6.1: Bin eei xu k t"Hello" trong b nh.

    6.2. Bin v a ch ca binBin trong mt chng trnh l mt vng b nhc dng lu d liu. Victruy nhp d liu ti cc nh c thc hin thng qua tn bin. Tc l, takhng phi quan tm n v tr vt l ca b nh.

    Khi mt bin c khai bo, phn b nhcn thit sc cp pht cho n timt v tr c th trong b nh, v tr c gi l a ch b nhca bin .V d, trong Hnh 6.1, bin c a ch l 1504. Thng thng, hiuhnh s quyt nh v tr ca bin trong b nhkhi chng trnh chy.

    a chb nh

    Ni dung nhc1 byte

    Tn bin

    13 1 'H' greeting1 '' 16 '' 1 '' 18 ''

    19 '' 11

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    100/162

    100

    ly a ch ca mt bin, trong C++ ta s dng ton t tham chiu a ch(&). Khi t ton t tham chiu trc tn ca mt bin, ta c mt biu thc cgi tr l a ch ca bin trong b nh. V d:

    =9;kbb9

  • 8/2/2019 Lap Trinh C++ Can Ban 2011 [DH CNQGHN]]

    101/162

    101

    A,P;

    Con tr cn c khi to bng gi tr 0 (ha


Top Related