Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

download Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

of 186

Transcript of Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    1/186

    HC VIN CNG NGH BU CHNH VIN THNG

    NGN NGLP TRNH C++

    (Dng cho sinh vin ho to i hc txa)

    Lu hnh ni b

    H NI - 2006

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    2/186

    NGN NGLP TRNH C++

    PGS.TS. Trn nh Qu

    KS. Nguyn Mnh Hng

    Lp trnh nng cao vi C++

    Lp trnh hng i tng vi C++

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    3/186

    2

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    4/186

    3

    GII THIU

    C++ l ngn ng lp trnh hng i tng c m rng t ngn ng C. Do vy, C++ c uim l k tha c cc im mnh truyn thng ca ngn ng C nh uyn chuyn, tng thch

    vi cc thit b phn cng. Hin nay, C++ l mt ngn ng lp trnh ph bin, c ging dy ticc trng i hc trong nc v trn th gii v c bit c s dng rng ri cho nhu cu phttrin ca cng nghip phn mm hin nay. Ti liu ny khng nhng nhm gii thiu cho sinhvin ngn ng lp trnh C++, m cn mong mun qua sinh vin c th hiu c t tng ca

    phng php lp trnh hng i tng ni chung. Ni dung ca ti liu bao gm hai phn chnh:

    Phn th nht l lp trnh nng cao vi C++, bao gm lp trnh C++ vi con tr v mng,cc kiu d liu c cu trc cng cc thao tc vo ra trn tp.

    Phn th hai l lp trnh hng i tng vi C++, bao gm cc nh ngha v cc thaotc trn lp i tng, tnh k tha v tng ng bi trong C++, cch s dng mt s lp

    cbn trong th vin C++.

    Ni dung ti liu c t chc thnh 7 chng:

    Chng 1: Gii thiu tng quan v cc phng php lp trnh

    Trnh by cc phng php lp trnh tuyn tnh, lp trnh cu trc v c bit, lm quenvi cc khi nim trong lp trnh hng i tng.

    Chng 2: Con tr v mng

    Trnh by cch khai bo v s dng cc kiu con tr v mng trong ngn ng C++.

    Chng 3: Kiu dliu c cu trc

    Trnh by cch biu din v ci t mt s kiu cu trc d liu tru tng trong C++. Sau, trnh by cch p dng cc kiu d liu ny trong cc ng dng c th.

    Chng 4: Vo ra trn tp

    Trnh by cc thao tc c, ghi d liu trn cc tp tin khc nhau: tp tin vn bn v tp tinnh phn. Trnh by cc cch truy nhp tp tin trc tip.

    Chng 5: Lp i tng

    Trnh by cc khi nim mu cho lp trnh hng i tng trong C++, bao gm cchkhai bo v s dng lp, cc thuc tnh ca lp; cch khi to v hu bi tng, cc

    quy tc truy nhp n cc thnh phn ca lp.Chng 6: Tnh k tha v tng ng bi

    Trnh by cch thc k tha gia cc lp trong C++, cc nguyn tc truy nhp trong ktha, nh ngha n p chng cc phng thc v tnh a hnh trong l p trnh hng itng vi C++.

    Chng 7: Mt s lp quan trng

    Trnh by cch s dng mt s lp c sn trong th vin chun ca C++, bao gm cc lp:lp tp hp, lp chui, lp ngn xp, lp hng i v lp danh sch lin kt.

    c c cun sch ny, sinh vin phi quen bit cc khi nim cbn v lp trnh, c mt s

    k nng lp trnh vi ngn ng C hoc C++. Cun sch ny cng c th dng ti liu tham khocho nhng sinh vin mun tm hiu cc k thut lp trnh nng cao v lp trnh hng i tng

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    5/186

    4

    vi C++. Cun sch ny c km theo mt a chng trnh cha ton b cc chng trnh cly lm minh ho v cc bi tp trong cun sch.

    Mc d cc tc gi c nhiu c gng trong vic bin son ti liu ny, song khng th trnhkhi nhng thiu st. Rt mong nhn c nhng kin ng gp qu bu t cc sinh vin v ccbn ng nghip.

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    6/186

    Chng 1: Gii thiu vcc phng php lp trnh

    5

    CHNG 1

    GII THIU V CC PHNG PHP LP TRNH

    Ni dung ca chng ny tp trung trnh by cc phng php lp trnh:

    Phng php lp trnh tuyn tnh Phng php lp trnh hng cu trc Phng php lp trnh hng i tng.

    1.1 LP TRNH TUYN TNH

    c trng cbn ca lp trnh tuyn tnh l t duy theo li tun t. Chng trnh sc thchin theo th t tu n cui, lnh ny k tip lnh kia cho n khi kt thc chng trnh.

    c trng

    Lp trnh tuyn tnh c hai c trng:

    n gin: chng trnh c tin hnh n gin theo li tun t, khng phc tp. n lung: ch c mt lung cng vic duy nht, v cc cng vic c thc hin tun t

    trong lung .

    Tnh cht

    u im: Do tnh n gin, lp trnh tuyn tnh c ng dng cho cc chng trnh ngin v c u im d hiu.

    Nhc im: Vi cc ng dng phc tp, ngi ta khng th dng lp trnh tuyn tnh gii quyt.

    Ngy nay, lp trnh tuyn tnh ch tn ti trong phm vi cc modul nh nht ca cc phng phplp trnh khc. V d trong mt chng trnh con ca lp trnh cu trc, cc lnh cng c thchin theo tun t tu n cui chng trnh con.

    1.2 LP TRNH HNG CU TRC

    1.2.1 c trng ca lp trnh hng cu trc

    Trong lp trnh hng cu trc, chng trnh chnh c chia nh thnh cc chng trnh con vmi chng trnh con thc hin mt cng vic xc nh. Chng trnh chnh s gi n chngtrnh con theo mt gii thut, hoc mt cu trc c xc nh trong chng trnh chnh.

    Cc ngn ng lp trnh cu trc ph bin l Pascal, C v C++. Ring C++ ngoi vic c c trngca lp trnh cu trc do k tha t C, cn c c trng ca lp trnh hng i tng. Cho nnC++ cn c gi l ngn ng lp trnh na cu trc, na hng i tng.

    c trng

    c trng cbn nht ca lp trnh cu trc th hin mi quan h:

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    7/186

    Chng 1: Gii thiu vcc phng php lp trnh

    6

    Chng trnh = Cu trc dliu + Gii thut

    Trong :

    Cu trc dliu l cch t chc d liu cho vic x l bi mt hay nhiu chng trnhno .

    Gii thut l mt quy trnh thc hin mt cng vic xc nhTrong chng trnh, gii thut c quan h ph thuc vo cu trc d liu:

    Mt cu trc d liu ch ph hp vi mt s hn ch cc gii thut. Nu thay i cu trc d liu th phi thay i gii thut cho ph hp. Mt gii thut thng phi i km vi mt cu trc d liu nht nh.

    Tnh cht

    Mi chng trnh con c thc gi thc hin nhiu ln trong mt chng trnh chnh. Cc chng trnh con c thc gi n thc hin theo mt th t bt k, tu thuc

    vo gii thut trong chng trnh chnh m khng ph thuc vo th t khai bo ca ccchng trnh con.

    Cc ngn ng lp trnh cu trc cung cp mt s cu trc lnh iu khin chng trnh.u im

    Chng trnh sng sa, d hiu, d theo di. T duy gii thut r rng.

    Nhc im

    Lp trnh cu trc khng h trmnh vic s dng li m ngun: Gii thut lun phthuc cht ch vo cu trc d liu, do , khi thay i cu trc d liu, phi thay i giithut, ngha l phi vit li chng trnh.

    Khng ph hp vi cc phn mm ln: t duy cu trc vi cc gii thut ch ph hp vicc bi ton nh, nm trong phm vi mt modul ca chng trnh. Vi d n phn mmln, lp trnh cu trc t ra khng hiu qu trong vic gii quyt mi quan h vm giacc modul ca phn mm.

    Vn

    Vn cbn ca lp trnh cu trc l bng cch no phn chia chng trnh chnh thnh ccchng trnh con cho ph hp vi yu cu, chc nng v mc ch ca mi bi ton. Thngthng, phn r bi ton trong lp trnh cu trc, ngi ta s dng phng php thit k trnxung (top-down).

    1.2.2 Phng php thit k trn xung (top-down)

    Phng php thit k top-down tip cn bi ton theo hng t trn xung di, t tng qat n

    chi tit. Theo , mt bi ton c chia thnh cc bi ton con nh hn. Mi bi ton con lic chia nh tip, nu c th, thnh cc bi ton con nh hn na. Qu trnh ny cn c gi lqu trnh lm mn dn. Qu trnh ny s dng li khi cc bi ton con khng cn chia nh thm

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    8/186

    Chng 1: Gii thiu vcc phng php lp trnh

    7

    na. Ngha l khi mi bi ton con u c th gii quyt bng mt chng trnh con vi mt giithut n gin.

    V d, s dng phng php top-down gii quyt bi ton xy mt cn nh mi. Chng ta cth phn r bi ton theo cc bc nh sau:

    mc th nht, chia bi ton xy nh thnh cc bi ton nh hn nhlm mng, ct, trn, xy tng, lp mi. mc th hai, phn r cc cng vic mc th nht nh vic lm mngnh c th phn

    r tip thnh cc cng vic o mng, gia c nn, lm khung st, b tong; cng vic ct c phn r thnh

    mc th ba, phn r cc cng vic ca mc th hai nh vic o mngc th phn chiatip thnh cc cng vic nho c, cm mc, chng dy, o v kim tra mng. Vic giac nn c phn r thnh

    Qu trnh phn r c th dng mc ny, bi v cc cng vic con thu c nho c, cm

    mc, chng dy, o c th thc hin c ngay, khng cn chia nh thm na.Lu :

    Cng s dng phng php top-down vi cng mt bi ton, nhng c th cho ra nhiukt qu khc nhau. Nguyn nhn l do s khc nhau trong tiu ch phn r mt bi tonthnh cc bi ton con.

    V d, vn p dng phng php top-down gii quyt bi ton xy nh, nhng nu s dngmt cch khc phn chia bi ton, ta c th thu c kt qu khc bit so vi phng php banu:

    mc th nht, chia bi ton xy nh thnh cc bi ton nh hn nhlm phn g, lmphn st, lm phn b tng v lm phn gch.

    mc th hai, phn r cc cng vic mc th nht l lm phn gc th chia thnh cccng vic nh x g, gia cng g, to khung, lp vo nh. Vic lm st c th chia nhthnh

    R rng, vi cch lm mn th ny, ta s thu c mt kt qu khc hn vi cch thc thchin phn trn.

    1.3 LP TRNH HNG I TNG

    1.3.1 Lp trnh hng i tng

    Trong lp trnh hng i tng:

    Ngi ta coi cc thc th trong chng trnh l cc i tng v sau tru tng ho itng thnh lp i tng.

    D liu c t chc thnh cc thuc tnh ca lp. Ngui ta ngn chn vic thay i tutin d liu trong chng trnh bng cc cch gii hn truy nhp nh ch cho php truynhp d liu thng qua i tng, thng qua cc phng thc m i tng c cungcp

    Quan h gia cc i tng l quan h ngang hng hoc quan h k tha: Nu lp B ktha t lp A th A c gi l lp csv B c gi l lp dn xut.

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    9/186

    Chng 1: Gii thiu vcc phng php lp trnh

    8

    Ngn ng lp trnh hng i tng ph bin hin nay l Java, C++, C#...Mc d C++ cng cnhng c trng cbn ca lp trnh hng i tng nhng vn khng phi l ngn ng lptrnh thun hng i tng.

    c trng

    Lp trnh hng i tng c hai c trng cbn:

    ng gi dliu: d liu lun c t chc thnh cc thuc tnh ca lp i tng. Victruy nhp n d liu phi thng qua cc phng thc ca i tng lp.

    Sdng li m ngun: vic s dng li m ngun c th hin thng qua cch ktha. Cch ny cho php cc lp i tng c th k tha t cc lp i tng khc. Khi, trong cc lp dn xut, c th s dng cc phng thc (m ngun) ca cc lp csm khng cn phi nh ngha li.

    u im

    Lp trnh hng i tng c mt su im ni bt:

    Khng cn nguy cd liu b thay i t do trong chng trnh. V d liu c nggi vo cc i tng. Nu mun truy nhp vo d liu phi thng qua cc phng thcc cho php ca i tng.

    Khi thay i cu trc d liu ca mt i tng, khng cn thay i m ngun ca cc itng khc, m ch cn thay i mt s thnh phn ca i tng dn xut. iu ny hnch s nh hng xu ca vic thay i d liu n cc i tng khc trong chngtrnh.

    C th s dng li m ngun, tit kim ti nguyn, chi ph thi gian. V nguyn tc ktha cho php cc lp dn xut s dng cc phng thc t lp csnh nhng phngthc ca chnh n, m khng cn thit phi nh ngha li.

    Ph hp vi cc d n phn mm ln, phc tp.1.3.2 Mt s khi nim cbn

    Trong mc ny, chng ta s lm quen vi mt s khi nim cbn trong lp trnh hng itng. Bao gm:

    Khi nim i tng (object) Khi nim ng gi d liu (encapsulation) Khi nim k tha (inheritance) Khi nim a hnh (polymorphism)

    i tng (Object)

    Trong lp trnh hng i tng, i tng c coi l n v cbn nh nht. Cc d diu vcch x l ch l thnh phn ca i tng m khng c coi l thc th. Mt i tng cha cc

    d liu ca ring n, ng thi c cc phng thc (hnh ng) thao tc trn cc d liu :i tng = dliu + phng thc

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    10/186

    Chng 1: Gii thiu vcc phng php lp trnh

    9

    Lp (Class)

    Khi c nhiu i tng ging nhau v mt d liu v phng thc, chng c nhm li vi nhauv gi chung l lp:

    Lp l s tru tng ho ca i tng i tng l mt th hin ca lp.

    ng gi dliu (Encapsulation)

    Cc d liu c ng gi vo trong i tng. Mi d liu c mt phm vi truy nhpring.

    Khng th truy nhp n d liu mt cch t do nh lp trnh cu trc Mun truy nhp n cc d liu c bo v, phi thng qua cc i tng, ngha l

    phi s dng cc phng thc m i tng cung cp mi c th truy nhp n d liu

    ca i tng .Tuy nhin, v C++ ch l ngn ng lp trnh na i tng, cho nn C++ vn cho php nh nghacc bin d liu v cc hm t do, y l kt qu k tha t ngn ng C, mt ngn ng lp trnhthun cu trc.

    Ktha (Inheritance)

    Tnh k tha ca lp trnh hng i tng cho php mt lp c th k tha t mt s lp tnti. Khi , lp mi c th s dng d liu v phng thc ca cc lp csnh l ca mnh.

    Ngoi ra, lp dn xut cn c th b sung thm mt s d liu v phng thc. u im ca k

    tha l khi thay i d liu ca mt lp, ch cn thay i cc phng thc trong phm vi lp csm khng cn thay i trong cc lp dn xut.

    a hnh (Polymorphsim)

    a hnh l khi nim lun i km vi k tha. Do tnh k tha, mt lp c th s dng li ccphng thc ca lp khc. Tuy nhin, nu cn thit, lp dn xut cng c thnh ngha li mts phng thc ca lp cs. l s np chng phng thc trong k tha. Nhs np chng

    phng thc ny, ta ch cn gi tn phng thc b np chng ti tng m khng cn quantm l i tng ca lp no. Chng trnh s tng kim tra xem i tng l thuc kiu

    lp cshay thuc lp dn xut, sau s gi phng thc tng ng vi lp . l tnh ahnh.

    1.3.3 Lp trnh hng i tng trong C++

    V C++ l mt ngn ng lp trnh c mrng t mt ngn ng lp trnh cu trc C nn C++c xem l ngn ng lp trnh na hng i tng, na hng cu trc.

    Nhngc trng hngi tng ca C++

    Cho php nh ngha lp i tng. Cho php ng gi d liu vo cc lp i tng. Cho php nh ngha phm vi truy nhp

    d liu ca lp bng cc t kho phm vi:public, protected, private.

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    11/186

    Chng 1: Gii thiu vcc phng php lp trnh

    10

    Cho php k tha lp vi cc kiu k tha khc nhau tu vo t kho dn xut. Cho php lp dn xut s dng cc phng thc ca lp cs(trong phm vi quy nh). Cho php nh ngha chng phng thc trong lp dn xut.

    Nhng hn chhngi tng ca C++Nhng hn ch ny l do C++ c pht trin t mt ngn ng lp trnh thun cu trc C.

    Cho php nh ngha v s dng cc bin d liu t do. Cho php nh ngha v s dng cc hm t do. Ngay c khi d liu c ng gi vo lp, d liu vn c th truy nhp trc tip nh d

    liu t do bi cc hm bn, lp bn (friend) trong C++.

    TNG KT CHNG 1

    Chng 1 trnh by tng quan v cc phng php lp trnh hin nay. Ni dung tp trung voba phng php lp trnh c lin quan trc tip n ngn ng lp trnh C++:

    Lp trnh tuyn tnh Lp trnh hng cu trc Lp trnh hng i tng.

    C++ l ngn ng lp trnh c m rng t ngn ng lp trnh cu trc C. Do , C++ va cnhng c trng ca lp trnh cu trc, va c nhng c trng ca lp trnh hng i tng.

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    12/186

    Chng 2: Con tr v mng

    11

    CHNG 2

    CON TR V MNG

    Ni dung ca chng ny tp trung trnh by cc vn cbn lin quan n cc thao tc trnkiu d liu con tr v mng trong C++:

    Khi nim con tr, cch khai bo v s dng con tr. Mi quan h gia con tr v mng Con tr hm Cp pht b nhcho con tr

    2.1 KHI NIM CON TR

    2.1.1 Khai bo con tr

    Con tr l mt bin c bit cha a ch ca mt bin khc. Con tr c cng kiu d liu vi kiud liu ca bin m n tr ti. C php khai bo mt con tr nh sau:

    *;

    Trong :

    Kiu dliu: C th l cc kiu d liu cbn ca C++, hoc l kiu d liu c cu trc,hoc l kiu i tng do ngi dng tnh ngha.

    Tn con tr: Tun theo qui tc t tn bin ca C++:- Chc bt u bng mt k t (ch), hoc du gch di _.- Bt u t k t th hai, c th c kiu k t s.- Khng c du trng (space bar) trong tn bin.- C phn bit ch hoa v ch thng.- Khng gii hn di tn bin.

    V d, khai bo mt bin con tr c kiu l int v tn l pointerInt, ta vit nh sau:

    int *pointerInt;

    Lu C th vit du con tr * ngay sau kiu d liu, ngha l hai cch khai bo sau l tng

    ng:

    int *pointerInt;

    int* pointerInt;

    Cc cch khai bo con tr nh sau l sai c php:*int pointerInt; // Khai bo sai con tr

    int pointerInt*; // Khai bo sai con tr

    2.1.2 Sdng con tr

    Con trc s dng theo hai cch:

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    13/186

    Chng 2: Con tr v mng

    12

    Dng con tr lu a ch ca bin thao tc Ly gi tr ca bin do con tr trn thao tc

    Dng con trlu a chca bin

    Bn thn con tr sc tr vo a ch ca mt bin c cng kiu d liu vi n. C php caphp gn nh sau:

    = &;

    Lu

    Trong php ton ny, tn con tr khng c du *.V d:

    int x, *px;

    px = &x;

    s cho con tr px c kiu int tr vo a ch ca bin x c kiu nguyn. Php ton &s cho a ch ca bin tng ng.

    Ly gi trca bin do con tr trn

    Php ly gi tr ca bin do con tr trn c thc hin bng cch gi tn:

    *;

    Lu

    Trong php ton ny, phi c du con tr *. Nu khng c du con tr, s tr thnhphp ly a ch ca bin do con tr tr ti.

    V d:int x = 12, y, *px;

    px = &y;

    *px = x;

    Qu trnh din ra nh sau:

    con tr px vn tr ti a ch bin y v gi tr ca bin y s l 12.

    Php gn gia cc con tr

    Cc con tr cng kiu c th gn cho nhau thng qua php gn v ly a ch con tr:

    = ;

    Lu

    Trong php gn gia cc con tr, bt buc phi dng php ly a ch ca bin do con trtr ti (khng c du * trong tn con tr) m khng c dng php ly gi tr cabin do con tr tr ti.

    x = 12 y = 0 px nullint x = 12, y, *px;

    px = &y; x = 12 y = 0 px

    px = x;x = 12 y=x =12 px

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    14/186

    Chng 2: Con tr v mng

    13

    Hai con tr phi cng kiu. Trong trng hp hai con tr khc kiu, phi s dng ccphng thc p kiu tng t nh trong php gn cc bin thng thng c kiu khcnhau.

    V d:

    int x = 12, *px, *py;px = &x;

    py = px;

    con tr py cng tr vo a ch ca bin x nh con tr px. Khi *py cng c gi tr 12 ging nh*px v l gi tr ca bin x.

    Chng trnh 2.1 minh ho vic dng con tr gia cc bin ca mt chng trnh C++.

    Chng trnh 2.1

    #include

    #include

    void main(void){

    int x = 12, *px, *py;

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    15/186

    Chng 2: Con tr v mng

    14

    x = 12

    px = &x, *px = 12

    *px = *px + 20, x = 32

    py = px, *py += 15, x = 37

    2.2 CON TR V MNG

    2.2.1 Con tr v mng mt chiu

    Mng mt chiu

    Trong C++, tn mt mng c coi l mt kiu con tr hng, c nh v ti mt vng nhxcnh v a ch ca tn mng trng vi a ch ca phn tu tin ca mng.

    V d khai bo:

    int A[5];th a ch ca mng A (cng vit l A) s trng vi a ch phn tu tin ca mng A (l&A[0]) ngha l:

    A = &A[0];

    Quan hgia con tr v mng

    V tn ca mng c coi nh mt con tr hng, nn n c thc gn cho mt con tr c cngkiu.

    V d khai bo:

    int A[5] = {5, 10, 15, 20, 25};

    int *pa = A;

    th con tr pa s trn mng A, tc l trn a ch ca phn t A[0], cho nn hai khai bo sau

    l tng ng:pa = A;

    pa = &A[0];

    Vi khai bo ny, th a ch tr ti ca con tr pa l a ch ca phn t A[0] v gi tr ca con trpa l gi tr ca phn t A[0], tc l *pa = 5;

    Php ton trn con tr v mng

    Khi mt con tr trn mng, th cc php ton tng hay gim trn con tr s tng ng vi phpdch chuyn trn mng.

    V d khai bo:int A[5] = {5, 10, 15, 20, 25};

    A[0]=5Aint A[5] = {5, 10, 15, 20, 25};

    int *pa = A;

    pa

    A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    A[0]=5A A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    16/186

    Chng 2: Con tr v mng

    15

    int *pa = &A[2];

    th con tr pa s trn a ch ca phn t A[2] v gi tr ca pa l: *pa = A[2] = 15.

    Khi , php ton:

    pa = pa + 1;

    sa con tr pa trn a ch ca phn t tip theo ca mng A, l a ch ca A[3]. Sau ,php ton:

    pa = pa 2;

    sa con tr pa trn a ch ca phn t A[1].

    Lu :

    Hai php ton pa++ v *pa++ c tc dng hon ton khc nhau trn mng, pa++ l thaotc trn con tr, tc l trn b nh, n sa con tr pa trn a ch ca phn t tiptheo ca mng. *pa++ l php ton trn gi tr, n tng gi tr hin ti ca phn t mngln mt n v.

    V d:

    int A[5] = {5, 10, 15, 20, 25};

    int *pa = &A[2];

    th pa++ l tng ng vi pa = &A[3] v *pa = 20.

    nhng *pa++ li tng ng vi pa = &A[2] v *pa = 15+1 = 16, A[2] = 16.

    A[0]=5Aint A[5] = {5, 10, 15, 20, 25};

    int *pa = &A[2];

    pa

    A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    A[0]=5A A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    pa = pa + 1;

    pa

    A[0]=5A A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    pa = pa - 2;

    pa

    A[0]=5A A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    17/186

    Chng 2: Con tr v mng

    16

    Trong trng hp:int A[5] = {5, 10, 15, 20, 25};

    int *pa = &A[4];

    th php ton pa++ sa con tr pa trn mt a ch khng xc nh. L do l A[4] lphn t cui ca mng A, nn pa++ s trn a ch ngay sau a ch ca A[4], a chny nm ngoi vng ch s ca mng A nn khng xc nh. Tng t vi trng hp

    pa=&A[0], php ton pa-- cng a pa trn mt a ch khng xc nh.

    V mng A l con tr hng, cho nn khng th thc hin cc php ton trn A m ch cth thc hin trn cc con tr trn A: cc php ton pa++ hoc pa--l hp l, nhng cc

    php ton A++ hoc A--l khng hp l.

    Chng trnh 2.2a minh ho vic ci t mt th tc sp xp cc phn t ca mt mng theo cch

    thng thng.

    A[0]=5Aint A[5] = {5, 10, 15, 20, 25};

    int *pa = &A[2];

    pa

    A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    A[0]=5A A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    pa ++;

    pa

    A[0]=5A A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    pa = &A[0];

    pa

    A[0]=5A A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    null

    pa --;

    pa

    A[0]=5A A[1]=10 A[2]=15 A[3]=20 A[4]= 25null

    A[0]=5Aint A[5] = {5, 10, 15, 20, 25};

    int *pa = &A[2];

    pa

    A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    A[0]=5A A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    pa ++;

    pa

    A[0]=5A A[1]=10 A[2]=15 A[3]=20 A[4]= 25

    Nhng *pa ++;

    pa

    A[0]=5A A[1]=10 A[2]=16 A[3]=20 A[4]= 25

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    18/186

    Chng 2: Con tr v mng

    17

    Chng trnh 2.2a

    void SortArray(int A[], int n){

    int temp;

    for(int i=0; i

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    19/186

    Chng 2: Con tr v mng

    18

    Khi , a ch ca ma trn A chnh l a ch ca hng u tin ca ma trn A, v cng l a chca phn tu tin ca hng u tin ca ma trn A:

    a ch ca ma trn A: A = A[0] = *(A+0) = &A[0][0]; a ch ca hng th nht: A[1] = *(A+1) = &A[1][0]; a ch ca hng th i: A[i] = *(A+i) = &A[i][0]; a ch phn t &A[i][j] = (*(A+i)) + j; Gi tr phn t A[i][j] = *((*(A+i)) + j);

    Nh vy, mt mng hai chiu c th thay th bng mt mng mt chiu cc con tr cng kiu:

    int A[3][3];

    c th thay th bng:

    int (*A)[3];

    Con tr tr ti con trV mt mng hai chiu int A[3][3] c th thay th bng mt mng cc con tr int (*A)[3]. Hnna, mt mng int A[3] li c th thay th bng mt con tr int *A. Do vy, mt mng hai chiuc th thay th bng mt mng cc con tr, hoc mt con tr trn con tr. Ngha l cc cchvit sau l tng ng:

    int A[3][3];

    int (*A)[3];

    int **A;

    2.3 CON TR HMMc d hm khng phi l mt bin c th nn khng c mt a ch xc nh. Nhng trong khichy, mi mt hm trong C++ cng c mt vng nhxc nh, do vy, C++ cho php dng contr trn hm. Con tr hm c dng truyn tham s c dng hm.

    Khai bo con tr hm

    Con tr hm c khai bo tng t nh khai bo nguyn mu hm thng thng trong C++,ngoi tr vic c thm k hiu con tr * trc tn hm. C php khai bo con tr hm nh sau:

    (*)([]);

    Trong :

    Kiu dliu tr v: l cc kiu d liu thng thng ca C++ hoc kiu do ngi dngtnh ngha.

    Tn hm: tn do ngi dng tnh ngha, tun th theo quy tc t tn bin trong C++. Cc tham s: c th c hoc khng (phn trong du [] l tu chn). Nu c nhiu tham

    s, mi tham sc phn cch nhau bi du phy.

    V d khai bo:

    int (*Calcul)(int a, int b);

    l khai bo mt con tr hm, tn l Calcul, c kiu int v c hai tham s cng l kiu int.

    Lu :

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    20/186

    Chng 2: Con tr v mng

    19

    Du () bao bc tn hm l cn thit ch ra rng ta ang khai bo mt con tr hm.Nu khng c du ngoc n ny, trnh bin dch s hiu rng ta ang khai bo mt hmthng thng v c gi tr tr v l mt con tr.

    V d, hai khai bo sau l khc nhau hon ton:

    // Khai bo mt con tr

    hm

    int (*Calcul)(int a, int b);

    // Khai bo mt hm tr v kiu con tr

    int *Calcul(int a, int b);

    Sdng con tr hm

    Con tr hm c dng khi cn gi mt hm nh l tham s ca mt hm khc. Khi , mt hmc gi phi c khun mu ging vi con tr hm c khai bo.

    V d, vi khai bo:

    int (*Calcul)(int a, int b);th c th gi cc hm c hai tham s kiu int v tr v cng kiu int nh sau:

    int add(int a, int b);

    int sub(int a, int b);

    nhng khng c gi cc hm khc kiu tham s hoc kiu tr v nh sau:

    int add(float a, int b);

    int add(int a);

    char* sub(char* a, char* b);

    Chng trnh 2.3 minh ho vic khai bo v s dng con tr hm.

    Chng trnh 2.3

    #include

    #include

    // Hm c s dng con tr hm nh tham s

    void Display(char[] str, int (*Xtype)(int c)){

    int index = 0;

    while(str[index] != \0){cout input;

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    21/186

    Chng 2: Con tr v mng

    20

    char reply;

    cout > reply;

    if(reply == l) // Hin th

    theo d

    ng lowercase

    Display(str, tolower);

    else // Hin th theo dng uppercase

    Display(str, toupper);

    return;

    }

    Chng trnh 2.3 khai bo hm Display() c s dng con tr hm c khun mu

    int (*Xtype)(int c);

    Trong hm main, con tr hm ny c gi bi hai th hin l cc hm tolower() v hmtoupper(). Hai hm ny c khai bo trong th vin ctype.h vi mu nh sau:

    int tolower(int c);

    int toupper(int c);

    Hai khun mu ny ph hp vi con tr hm Xtype trong hm Display() nn li gi hmDisplay() trong hm main l hp l.

    2.4 CP PHT B NHNG

    Xt hai trng hp sau y:

    Trng hp 1, khai bo mt con tr v gn gi tr cho n:int *pa = 12;

    Trng hp 2, khai bo con trn phn t cui cng ca mng ri tng thm mt n vcho n:

    int A[5] = {5, 10, 15, 20, 25};

    int *pa = &A[4];

    pa++;

    Trong c hai trng hp, ta u khng bit thc s con tr pa ang trn a ch no trong bnh: trng hp 1 ch ra rng con tr pa ang tr ti mt a ch khng xc nh, nhng li chagi tr l 12 do c gn vo. Trng hp 2, con tr pa trn a ch ngay sau a ch phn tcui cng ca mng A, cng l mt a ch khng xc nh. Cc a ch khng xc nh ny lcc a ch nm vng nh t do cn tha ca b nh. Vng nhny c th b chim dng bi

    bt k mt chng trnh no ang chy.

    Do , rt c th cc chng trnh khc s chim mt cc a ch m con tr pa ang tr ti. Khi, nu cc chng trnh thay i gi tr ca a ch, gi tr pa cng b thay i theo m takhng th kim sot c. trnh cc ri ro c th gp phi, C++ yu cu phi cp pht b nh

    mt cch tng minh cho con tr trc khi s dng chng.

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    22/186

    Chng 2: Con tr v mng

    21

    2.4.1 Cp pht b nhng cho bin

    Cp pht b nhng

    Thao tc cp pht b nhcho con tr thc cht l gn cho con tr mt a ch xc nh v a ach vo vng b chim dng, cc chng trnh khc khng th s dng a ch. C phpcp pht b nhcho con tr nh sau:

    = new ;

    V d, khai bo:

    int *pa;

    pa = new int;

    s cp pht b nhhp l cho con tr pa.

    Lu :

    Ta c th va cp pht b nh, va khi to gi tr cho con tr theo c php sau:int *pa;

    pa = new int(12);

    s cp pht cho con tr pa mt a ch xc nh, ng thi gn gi tr ca con tr *pa = 12.

    Gii phng b nhng

    a ch ca con tr sau khi c cp pht bi thao tc new s tr thnh vng nh b chimdng, cc chng trnh khc khng th s dng vng nh ngay c khi ta khng dng con trna. tit kim b nh, ta phi hu b vng nhca con tr ngay sau khi khng dng n contr na. C php hu b vng nhca con tr nh sau:

    delete ;

    V d:

    int *pa = new int(12); // Khai bo con tr pa, cp pht b nh

    // v gn gi tr ban u cho pa l 12.

    delete pa; // Gii phng vng nh va cp cho pa.

    Lu :

    Mt con tr, sau khi b gii phng a ch, vn c thc cp pht mt vng nhmihoc trn mt a ch mi:

    int *pa = new int(12); // Khai bo con tr pa, cp pht b nh// v gn gi tr ban u cho pa l 12.

    delete pa; // Gii phng vng nh va cp cho pa.

    int A[5] = {5, 10, 15, 20, 25};

    pa = A; // Cho pa trn a ch ca mng A

    Nu c nhiu con tr cng tr vo mt a ch, th ch cn gii phng b nhca mt contr, tt c cc con tr cn li cng b gii phng b nh:

    int *pa = new int(12); // *pa = 12

    int *pb = pa; // pb trn cng a ch pa.

    *pb += 5; // *pa = *pb = 17delete pa; // Gii phng c pa ln pb

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    23/186

    Chng 2: Con tr v mng

    22

    Mt con tr sau khi cp pht b nhng bng thao tc new, cn phi phng b nhtrckhi trn mt a ch mi hoc cp pht b nhmi:

    int *pa = new int(12); // pa c cp b nh v *pa = 12

    *pa = new int(15); // pa trn a ch khc v *pa = 15.

    // a ch c ca pa vn b coi l bn

    2.4.2 Cp pht b nhcho mng ng mt chiu

    Cp pht b nhcho mngng mt chiu

    Mng mt chiu c coi l tng ng vi mt con tr cng kiu. Tuy nhin, c php cp pht bnhcho mng ng mt chiu l khc vi c php cp pht b nhcho con tr thng thng:

    = new [];

    Trong :

    Tn con tr: tn do ngi dng t, tun th theo quy tc t tn bin ca C++. Kiu con tr: Kiu d liu cbn ca C++ hoc l kiu do ngi dng tnh ngha. di mng: s lng cc phn t cn cp pht b nhca mng.

    V d:

    int *A = new int[5];

    s khai bo mt mng A c 5 phn t kiu int c cp pht b nhng.

    Lu :

    Khi cp pht b nhcho con tr c khi to thng thng, ta dng du (), khi cp phtb nhcho mng, ta dng du []. Hai lnh cp pht sau l hon ton khc nhau:

    // Cp pht b nh v khi to cho mt con tr int

    int *A = new int(5);

    // Cp pht b nh cho mt mng 5 phn t kiu int

    int *A = new int[5];

    Gii phng b nhca mngng mt chiu

    gii phng vng nh c cp pht cho mt mng ng, ta dng c php sau:

    delete [] ;

    V d:// Cp pht b nh cho mt mng c 5 phn t kiu int

    int *A = new int[5];

    // Gii phng vng nh do mng A ang chim gi.

    delete [] A;

    Chng trnh 2.4 minh ho hai th tc khi to v gii phng mt mng ng mt chiu.

    Chng trnh 2.4

    void InitArray(int *A, int length){A = new int[length];

    for(int i=0; i

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    24/186

    Chng 2: Con tr v mng

    23

    A[i] = 0;

    return;

    }

    void DeleteArray(int *A){delete [] A;

    return;

    }

    2.4.3 Cp pht b nhcho mng ng nhiu chiu

    Cp pht b nhcho mngng nhiu chiu

    Mt mng hai chiu l mt con trn mt con tr. Do vy, ta phi cp pht b nh theo tng

    chiu theo c php cp pht b nhcho mng ng mt chiu.V d:

    int **A;

    const int length = 10;

    A = new int*[length]; // Cp pht b nh cho s dng ca ma trn A

    for(int i=0; i

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    25/186

    Chng 2: Con tr v mng

    24

    Chng trnh 2.5

    #include

    #include

    /* Khai bo nguyn mu hm */void InitArray(int **A, int row, int colum);

    void AddArray(int **A, int **B, int row, int colum);

    void DisplayArray(int **A, int row, int colum);

    void DeleteArray(int **A, int row);

    void InitArray(int **A, int row, int colum){

    A = new int*[row];

    for(int i=0; i

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    26/186

    Chng 2: Con tr v mng

    25

    void main(){

    clrscr();

    int **A, **B, row, colum;

    cout > row;cout > colum;

    /* Khi to cc ma trn */

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    27/186

    Chng 2: Con tr v mng

    26

    Mt con tr cn phi tr vo mt a ch xc nh hoc phi c cp pht b nhquaphp ton new v gii phng b nhsau khi dng bng thao tc delete.

    CU HI V BI TP CHNG 2

    1. Trong cc khai bo con tr sau, nhng khai bo no l ng:a. int A*;

    b. *int A;

    c. int* A, B;

    d. int* A, *B;

    e. int *A, *B;

    2. Vi khai bo:int a = 12;

    int *pa;

    Cc php gn no sau y l hp l:

    a. pa = &a;

    b. pa = a;

    c. *pa = &a;

    d. *pa = a;

    3. Vi khai bo:int A[5] = {10, 20, 30, 40, 50};

    int *pa = A+2;Khi , *pa = ?

    a. 10

    b. 20

    c. 30

    d. 40

    e. 50

    4. Vi on chng trnh:int A[5] = {10, 20, 30, 40, 50};

    int *pa = A;

    *pa += 2;

    Khi , *pa = ?

    a. 10

    b. 12

    c. 30

    d. 32

    5. Vi on chng trnh:int A[5] = {10, 20, 30, 40, 50};

    int *pa = A;

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    28/186

    Chng 2: Con tr v mng

    27

    pa += 2;

    Khi , *pa = ?

    a. 10

    b. 12

    c. 30d. 32

    6. Vi on chng trnh:int A[5] = {10, 20, 30, 40, 50};

    int *pa = A;

    pa += 2;

    Khi , pa = ?

    a. &A[0]

    b. A[2]c. &A[2]

    d. Khng xc nh

    7. Vi on chng trnh:int A[5] = {10, 20, 30, 40, 50};

    int *pa = A;

    pa -= 2;

    Khi , pa = ?

    a. &A[0]

    b. &A[2]

    c. &A[4]

    d. Khng xc nh

    8. Vi on chng trnh:int A[3][3] = {

    {10, 20, 30},

    {40, 50, 60},

    {70, 80, 90}

    };

    int *pa;

    Khi , c c kt qu *pa = 50, cc lnh no sau y l ng?

    a. pa = A + 4;

    b. pa = (*(A+1)) + 1;

    c. pa =&A[1][1];

    d. pa = *((*(A+1)) + 1);

    9. Gi s ta khai bo mt hm c s dng con tr hm vi khun mu nh sau:int Calcul(int a, int b, int (*Xcalcul)(int x, int y)){}

    V ta c ci t mt s hm nh sau:

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    29/186

    Chng 2: Con tr v mng

    28

    int add(int a, int b);

    void cal(int a, int b);

    int squere(int a);

    Khi , li gi hm no sau y l ng:

    a. Calcul(5, 10, add);b. Calcul(5, 10, add(2, 3));

    c. Calcul(5, 10, cal);

    d. Calcul(5, 10, squere);

    10.Ta mun cp pht b nhcho mt con tr kiu int v khi u gi tr cho n l 20. Lnhno sau y l ng:

    a. int *pa = 20;

    b. int *pa = new int{20};

    c. int *pa = new int(20);d. int *pa = new int[20];

    11.Ta mun cp pht b nhcho mt mng ng kiu int c chiu di l 20. Lnh no sauy l ng:

    a. int *pa = 20;

    b. int *pa = new int{20};

    c. int *pa = new int(20);

    d. int *pa = new int[20];

    12.Xt on chng trnh sau:int A[5] = {10, 20, 30, 40, 50};

    int *pa = A;

    pa = new int(2);

    Khi , *pa = ?

    a. 10

    b. 30

    c. 2

    d. Khng xc nh13.Xt on chng trnh sau:

    1> int A[5] = {10, 20, 30, 40, 50};

    2> int *pa = A;

    3> pa += 15;

    4> delete pa;

    on chng trnh trn c li dng no?

    a. 1

    b. 2

    c. 3

    d. 4

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    30/186

    Chng 2: Con tr v mng

    29

    14.Vit chng trnh thc hin cc php ton cng, tr, nhn, chia trn a thc. Cc a thcc biu din bng mng ng mt chiu. Bc ca a thc v cc h s tng ng cnhp t bn phm.

    15.Vit chng trnh thc hin cc php ton cng, tr, nhn hai ma trn kch thc m*n.Cc ma trn c biu din bng mng ng hai chiu. Gi tr kch cma trn (m, n) vgi tr cc phn t ca ma trn c nhp t bn phm.

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    31/186

    Chng 3: Kiu dliu cu trc

    30

    CHNG 3

    KIU DLIU CU TRC

    Ni dung chng ny tp trung trnh by cc vn lin quan n kiu d liu c cu trc trongC++:

    nh ngha mt cu trc S dng mt cu trc bng cc php ton cbn trn cu trc Con tr cu trc, khai bo v s dng con tr cu trc Mng cc cu trc, khai bo v s dng mng cc cu trc Mt s kiu d liu tru tng khc nh ngn xp, hng i, danh sch lin kt.

    3.1 NH NGHA CU TRC

    Kiu d liu c cu trc c dng khi ta cn nhm mt s bin d liu lun i km vi nhau.Khi , vic x l trn mt nhm cc bin c thc hin nh trn cc bin cbn thng thng.

    3.1.1 Khai bo cu trc

    Trong C++, mt cu trc do ngi dng tnh ngha c khai bo thng qua t kho struct:

    struct {

    ;

    ;

    ;

    };

    Trong :

    struct: l tn t kho khai bo mt cu trc, bt buc phi c khi nh ngha cu trc. Tn cu trc: l tn do ngi dng tnh ngha, tun th theo quy tc t tn bin trong

    C++. Tn ny s trthnh tn ca kiu d liu c cu trc tng ng.

    Thuc tnh: mi thuc tnh ca cu trc c khai bo nh khai bo mt bin thuc kiud liu thng thng, gm c kiu d liu v tn bin tng ng. Mi khai bo thuc tnh

    phi kt thc bng du chm phy ; nh mt cu lnh C++ thng thng.

    V d, qun l nhn vin ca mt cng ty, khi x l thng tin v mi nhn vin, ta lun phi xl cc thng tin lin quan nh:

    Tn Tui Chc v

    LngDo , ta s dng cu trc lu gi thng tin v mi nhn vin bng cch nh ngha mt cutrc c tn l Employeee vi cc thuc tnh nh sau:

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    32/186

    Chng 3: Kiu dliu cu trc

    31

    struct Employeee{

    char name[20]; // Tn nhn vin

    int age; // Tui nhn vin

    char role[20]; // Chc v ca nhn vin

    float salary; // Lng ca nhn vin

    };

    Lu :

    Cu trc ch cn nh ngha mt ln trong chng trnh v c thc khai bo bin cutrc nhiu ln. Khi cu trc c nh ngha, vic khai bo bin ln khc trongchng trnh c thc hin nh khai bo bin thng thng:

    , ;

    V d, sau khi nh ngha cu trc Employeee, mun c bin myEmployeee, ta khaibo nh sau:

    Employee myEmployeee;

    3.1.2 Cu trc lng nhau

    Cc cu trc c thc nh ngha lng nhau khi mt thuc tnh ca mt cu trc cng cn ckiu l mt cu trc khc. Khi , vic nh ngha cu trc cha c thc hin nh mt cu trcbnh thng, vi khai bo v thuc tnh l mt cu trc con:

    struct {

    ;

    // C kiu cu trc

    ;

    ;

    };

    V d, vi kiu cu trc Employee, ta khng quan tm n tui nhn vin na, m quan tm nngy sinh ca nhn vin. V ngy sinh cn c cc thng tin lun i vi nhau l ngy sinh, thngsinh, nm sinh. Do , ta nh ngha mt kiu cu trc con cho kiu ngy sinh:

    struct Date{

    int day;

    int month;

    int year;

    };

    khi , cu trc Employee trthnh:

    struct Employee{

    char name[20]; // Tn nhn vin

    Date birthDay; // Ngy sinh ca nhn vin

    char role[20]; // Chc v ca nhn vin

    float salary; // Lng ca nhn vin

    };

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    33/186

    Chng 3: Kiu dliu cu trc

    32

    Lu :

    Trong nh ngha cc cu trc lng nhau, cu trc con phi c nh ngha trc cu trccha m bo cc kiu d liu ca cc thuc tnh ca cu trc cha l tng minh ti thi

    im n c nh ngha.

    3.1.3 nh ngha cu trc vi tkho typedef

    trnh phi dng t kho struct mi khi khai bo bin cu trc, ta c th dng t kha typedefkhi nh ngha cu trc:

    typedef struct {

    ;

    ;

    ;

    } ;

    Trong :

    Tn kiu d liu cu trc: l tn kiu d liu ca cu trc va nh ngha. Tn ny sc dng nh mt kiu d liu thng thng khi khai bo bin cu trc.

    V d, mun c kiu d liu c cu trc nhn vin, c tn l Employee, ta dng t kho typedefnh ngha cu trc nh sau:

    typedef struct {

    char name[20]; // Tn nhn vinint age; // Tui nhn vin

    char role[20]; // Chc v ca nhn vin

    float salary; // Lng ca nhn vin

    } Employee;

    Khi , mun c hai bin l myEmployee1 v myEmployee2 c kiu cu trc Employee, ta chcn khai bo nh sau m khng cn t kho struct:

    Employee myEmployee1, myEmployee2;

    Trong v d khai bo lng cu trc Employee, dng t kho typedefcho kiu Date:

    typedef struct {int day;

    int month;

    int year;

    } Date;

    cu trc Employee trthnh:

    typedef struct {

    char name[20]; // Tn nhn vin

    Date birthDay; // Ngy sinh ca nhn vin

    char role[20]; // Chc v ca nhn vin

    float salary; // Lng ca nhn vin

    } Employee;

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    34/186

    Chng 3: Kiu dliu cu trc

    33

    Lu :

    Khi khng dng t kho typedef, tn cu trc (nm sau t kho struct) c dng khaibo bin. Trong khi , khi c t kho typedef, tn kiu d liu cu trc (dng cui cng

    trong nh ngha) mi c dng khai bo bin. Khi dng t kho typedefth khng th khai bo bin ng thi vi nh ngha cu trc.

    3.2 THAO TC TRN CU TRC

    Cc thao tc trn cu trc bao gm:

    Khai bo v khi to gi tr ban u cho bin cu trc Truy nhp n cc thuc tnh ca cu trc

    3.2.1 Khi to gi tr ban u cho cu trc

    Khi to bin c cu trc n

    Bin cu trc c khai bo theo cc cch sau:

    ;

    Ngoi ra, ta c th khi to cc gi tr cho cc thuc tnh ca cu trc ngay khi khai bo bng ccc php sau:

    = {

    ,

    ,

    };

    Trong :

    Gi tr thuc tnh: l gi tr khi u cho mi thuc tnh, c kiu ph hp vi kiu dliu ca thuc tnh. Mi gi tr ca thuc tnh c phn cch bng du phy ,.

    V d, vi nh ngha cu trc:

    typedef struct {

    char name[20]; // Tn nhn vin

    int age; // Tui nhn vin

    char role[20]; // Chc v ca nhn vin

    float salary; // Lng ca nhn vin

    } Employee;

    th c th khai bo v khi to cho mt bin nh sau:

    Employee myEmployee1 = {

    Nguyen Van A,

    27,Nhan vien,

    300f

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    35/186

    Chng 3: Kiu dliu cu trc

    34

    };

    Khi to cc bin c cu trc lng nhau

    Trong trng hp cc cu trc lng nhau, php khi to cng thc hin nh thng thng viphp khi to cho tt c cc cu trc con.

    V d vi khai bo cu trc nh sau:

    typedef struct {

    int day;

    int month;

    int year;

    } Date;

    v:

    typedef struct {

    char name[20]; // Tn nhn vinDate birthDay; // Ngy sinh ca nhn vin

    char role[20]; // Chc v ca nhn vin

    float salary; // Lng ca nhn vin

    } Employee;

    Th khai bo v khi to mt bin c kiu Employee c th thc hin nh sau:

    Employee myEmployee1 = {

    Nguyen Van A,

    {15, 05, 1980}, // Khi to cu trc con

    Nhan vien,

    300f

    };

    3.2.2 Truy nhp n thuc tnh ca cu trc

    Vic truy nhp n thuc tnh ca cu trc c thc hin bng c php:

    .

    V d, vi mt bin cu trc kiu Employee n:

    Employee myEmployee1 = {Nguyen Van A,

    27,

    Nhan vien,

    300f

    };

    ta c th truy xut nh sau:

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    36/186

    Chng 3: Kiu dliu cu trc

    35

    Employee myEmployee1 = {

    Nguyen Van A,

    {15, 05, 1980},Nhan vien,

    300f

    };

    ta c th truy xut nh sau:

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    37/186

    Chng 3: Kiu dliu cu trc

    36

    {Nguyen Van A, 27, Nhan vien, 300f};

    cout myEmployee.age;

    cout > myEmployee.role;

    cout > myEmployee.salary;

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    38/186

    Chng 3: Kiu dliu cu trc

    37

    void Display(Employee myEmployee){

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    39/186

    Chng 3: Kiu dliu cu trc

    38

    3.3 CON TR CU TRC V MNG CU TRC

    3.3.1 Con tr cu trc

    Con tr cu trc l mt con tr trn a ch ca mt bin c kiu cu trc. Cch khai bo v s

    dng con tr cu trc c thc hin nh con tr thng thng.

    Khai bo con tr cu trc

    Con tr cu trc c khai bo theo c php:

    *;

    V d, vi kiu khai bo cu trc:

    typedef struct {

    int day;

    int month;

    int year;

    } Date;

    v:

    typedef struct {

    char name[20]; // Tn nhn vin

    Date birthDay; // Ngy sinh ca nhn vin

    char role[20]; // Chc v ca nhn vin

    float salary; // Lng ca nhn vin

    } Employee;

    th ta c th khai bo mt con tr cu trc nh sau:

    Employee *ptrEmployee;

    Lu :

    Cng nh khai bo con tr thng thng, du con tr * c th nm ngay trc tn binhoc nm ngay sau tn kiu cu trc.

    Cng ging con tr thng thng, con tr cu trc c s dng khi:

    Cho n trn a ch ca mt bin cu trc Cp pht cho n mt vng nhxc nh.

    Gn a chcho con tr cu trc

    Mt con tr cu trc c th trn a ch ca mt bin cu trc c cng kiu thng qua php gn:

    = &;

    V d, khai bo v php gn:

    Employee *ptrEmployee, myEmployee;

    ptrEmployee = &myEmployee;

    sa con tr ptrEmployee trn a ch ca bin cu trc myEmployee.

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    40/186

    Chng 3: Kiu dliu cu trc

    39

    Cp pht b nhng cho con tr cu trc

    Trong trng hp ta mun to ra mt con tr cu trc mi, khng tr vo mt bin cu trc c snno, s dng con tr mi ny, ta phi cp pht vng nhcho n. C php cp pht vng nhcho con tr cu trc:

    = new ;

    V d, cu trc Employeec khai bo bng t kho typedef, ta c th cp pht vng nhchocon tr cu trc nh sau:

    Employee *ptrEmployee;

    ptrEmployee = new Employee;

    hoc cp pht ngay khi khai bo:

    Employee *ptrEmployee = new Employee;

    Sau khi cp pht vng nhcho con tr bng thao tc new, khi con tr khng c dng na, hoccn tr sang mt a ch khc, ta phi gii phng vng nhva c cp pht cho con tr bng

    thao tc:delete ;

    V d:

    Employee *ptrEmployee = new Employee;

    // Thc hin cc thao tc trn con tr

    delete ptrEmployee;

    Lu :

    Thao tc delete chc thc hin i vi con tr m trc , n c cp pht b nhng thng qua thao tc new:

    Employee *ptrEmployee = new Employee;

    delete ptrEmployee; //ng

    m khng th thc hin vi con tr ch trn a ch ca mt bin cu trc khc:

    Employee *ptrEmployee, myEmployee;

    ptrEmployee = &myEmployee;

    delete ptrEmployee; //li

    Truy nhp thuc tnh ca con tr cu trc

    Thuc tnh ca con tr cu trc c thc truy nhp thng qua hai cch:

    Cch 1:

    -> ;

    Cch 2:

    (*).;

    V d, thuc tnh tn nhn vin ca cu trc Employee c thc truy nhp thng qua hai cch:

    Employee *ptrEmployee = new Employee;

    cin >> ptrEmployee -> name;

    hoc:

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    41/186

    Chng 3: Kiu dliu cu trc

    40

    cin >> (*ptrEmployee).name;

    Lu :

    Trong cch truy nhp th hai, phi c du ngoc n () quanh tn con tr v php tontruy nhp thuc tnh . c u tin cao hn php ton ly gi tr con tr *.

    Thng thng, ta dng cch th nht cho n gin v thun tin.Chng trnh 3.2 ci t vic khi to v hin th ni dung ca mt con tr cu trc.

    Chng trnh 3.2

    #include

    #include

    #include

    typedef struct {

    int day;

    int month;

    int year;

    } Date;

    typedef struct {

    char name[20]; // Tn nhn vin

    Date birthDay; // Ngy sinh ca nhn vin

    char role[20]; // Chc v ca nhn vin

    float salary; // Lng ca nhn vin

    } Employee;

    /* Khai bo khun mu hm */

    void InitStruct(Employee *myEmployee);

    void Display(Employee *myEmployee);

    void InitStruct(Employee *myEmployee){

    myEmployee = new Employee;

    cout > myEmployee->name;

    cout > myEmployee->birthDay.day;

    cout > myEmployee->birthDay.month;

    cout > myEmployee->birthDay.year;

    cout > myEmployee->role;

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    42/186

    Chng 3: Kiu dliu cu trc

    41

    cin >> myEmployee->salary;

    }

    void Display(Employee myEmployee){

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    43/186

    Chng 3: Kiu dliu cu trc

    42

    Tuy nhin, cch cp pht b nhng cho mng cc cu trc khc vi mt con tr. y l cch chng trnh nhn bit ta ang dng mt con tr cu trc hay mt mng ng c cu trc. C

    php cp pht b nhcho mng ng nh sau:

    = new [];

    V d, khai bo:

    Employee *employees = new Employee[10];

    s cp pht b nhcho mt mng ng employees c 10 phn t kiu cu trc Employee.

    Truy nhp n phn tca mng cu trc

    Vic truy nhp n cc phn t ca mng cu trc c thc hin nh truy cp n phn t camng thng thng. V d mun truy nhp n thuc tnh tn nhn vin phn t nhn vin th itrong mng cu trc, ta vit nh sau:

    Employee *employees = new Employee[10];

    employees[i].name; Chng trnh 3.3 ci t vic khi to mt mng cc nhn vin ca mt phng trong mt cng ty.Sau , chng trnh s tm v in ra thng tin v nhn vin c lng cao nht v nhn vin clng thp nht trong phng.

    Chng trnh 3.3

    #include

    #include

    #include

    typedef struct {

    int day;

    int month;

    int year;

    } Date;

    typedef struct {

    char name[20]; // Tn nhn vin

    Date birthDay; // Ngy sinh ca nhn vin

    char role[20]; // Chc v ca nhn vin

    float salary; // Lng ca nhn vin

    } Employee;

    /* Khai bo khun mu hm */

    void InitArray(Employee *myEmployee, int length);

    Employee searchSalaryMax(Employee *myEmployee, int length);

    Employee searchSalaryMin(Employee *myEmployee, int length);

    void Display(Employee myEmployee);

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    44/186

    Chng 3: Kiu dliu cu trc

    43

    void InitArray(Employee *myEmployee, int length){

    myEmployee = new Employee[length];

    for(int i=0; i myEmployee[i].birthDay.year;

    cout > myEmployee[i].role;cout > myEmployee[i].salary;

    }

    return;

    }

    Employee searchSalaryMax(Employee *myEmployee, int length){

    int index = 0;

    int maxSalary = myEmployee[0].salary;for(int i=1; i maxSalary){

    maxSalary = myEmployee[i].salary;

    index = i;

    }

    return myEmployee[index];

    }

    Employee searchSalaryMin(Employee *myEmployee, int length){int index = 0;

    int minSalary = myEmployee[0].salary;

    for(int i=1; i

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    45/186

    Chng 3: Kiu dliu cu trc

    44

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    46/186

    Chng 3: Kiu dliu cu trc

    45

    3.4.1 Ngn xp

    Ngn xp (stack) l mt kiu danh sch cho php thm v bt cc phn tmt u danh sch,gi l nh ca ngn xp. Ngn xp hot ng theo nguyn l: phn t no c a vo sau, sc ly ra trc.

    nh ngha cu trc ngn xp

    V ta ch cn quan tm n hai thuc tnh ca ngn xp l:

    Danh sch cc phn t ca ngn xp V tr nh ca ngn xp

    nn ta c thnh ngha cu trc ngn xp nh sau (cc phn t ca ngn xp c kiu int):

    typedef SIZE 100;

    typedef struct {

    int top; // V tr ca nh

    int nodes[SIZE]; // Danh sch cc phn t

    } Stack;

    Tuy nhin, nh ngha ny tn ti mt vn , l kch thc (SIZE) ca danh sch cha ccphn t l tnh. Do :

    Nu ta chn SIZE ln, nhng khi gp ng dng ch cn mt s t phn t cho ngn xp thrt tn b nh.

    Nu ta khai bo SIZE nh, th khi gp bi ton cn ngn xp c nhiu phn t, ta s khngthm c cc phn t mi vo, chng trnh s c li.

    khc phc hn ch ny, ta c th s dng b nhng (mng ng thng qua con tr) ludanh sch cc phn t ca ngn xp. Khi , nh ngha cu trc ngn xp s c dng nh sau:

    typedef struct {

    int top; // V tr ca nh

    int *nodes; // Danh sch cc phn t

    } Stack;

    Ta s s dng nh ngha ny trong cc chng trnh ng dng ngn xp.

    Cc thao tc trn ngn xp

    i vi cc thao tc trn ngn xp, ta quan tm n hai thao tc cbn:

    Thm mt phn t mi vo nh ngn xp, gi l push. Ly ra mt phn t tnh ngn xp, gi l pop.

    Khi thm mt phn t mi vo ngn xp, ta lm cc bc nh sau:

    1. S phn t trong ngn xp c l (top+1). Do , ta cp pht mt vng nhmi luc (top+1+1) = (top+2) phn t.

    2. Sao chp (top+1) phn t c sang vng mi. Nu danh sch ban u rng (top = -1) thkhng cn thc hin bc ny.

    3. Thm phn t mi vo cui vng nhmi4. Gii phng vng nhca danh sch c

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    47/186

    Chng 3: Kiu dliu cu trc

    46

    5. Cho danh sch nodes tr vo vng nhmi.Chng trnh 3.4a ci t th tc thm mt phn t mi vo ngn xp.

    Chng trnh 3.4a

    void push(Stack *stack, int node){

    int *tmpNodes = new int[stack->top + 2];// Cp pht vng nh mi

    stack->top ++; // Tng ch s ca node nh

    for(int i=0; itop; i++) // Sao chp sang vng nh mi

    tmpNodes[i] = stack->nodes[i];

    tmpNodes[stack->top] = node; // Thm node mi vo nh

    delete [] stack->nodes; // Gii phng vng nh c

    stack->nodes = tmpNodes; // Tr vo vng nh mi

    return;

    }

    Khi ly ra mt phn t ca ngn xp, ta lm cc bc nh sau:

    Kim tra xem ngn xp c rng (top = -1) hay khng. Nu khng rng th thc hin ccbc tip theo.

    Ly phn tnh ngn xp ra Cp pht mt vng nhmi c (top+1) -1 = top phn t Sao chp top phn t t danh sch c sang vng nhmi (tr phn tnh). Gii phng vng nhc Cho con tr danh sch tr vo vng nhmi. Tr v gi tr phn tnh ly ra.

    Chng trnh 3.4b ci t th tc ly mt phn t t ngn xp.

    Chng trnh 3.4b

    int pop(Stack *stack){

    if(stack->top < 0){ // Kim tra ngn xp rng

    cout top];// Lu gi gi trnh

    int *tmpNodes = new int[stack->top];// Cp pht vng nh mi

    for(int i=0; itop; i++) // Sao chp sang vng nh mi

    tmpNodes[i] = stack->nodes[i];

    stack->top --; // Gim ch s ca node nh

    delete [] stack->nodes; // Gii phng vng nh c

    stack->nodes = tmpNodes; // Tr vo vng nh mi

    return result; // Tr v gi tr node nh

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    48/186

    Chng 3: Kiu dliu cu trc

    47

    }

    p dng

    Ngn xp c s dng trong cc ng dng tho mn nguyn tc: ci no t vo trc scly ra sau. Chng trnh 3.4c minh ho vic dng ngn xp o ngc mt xu k tc nhpvo t bn phm.

    Chng trnh 3.4c

    #include

    #include

    #include

    typedef struct {

    int top; // V tr node nh

    int *nodes; // Danh sch phn t

    } Stack;

    /* Khai bo nguyn mu hm */

    void init(Stack *stack);

    void push(Stack *stack, int node);

    int pop(Stack *stack);

    void release(Stack *stack);

    void init(Stack *stack){

    stack = new Stack; // Cp pht vng nh cho con tr

    stack->top = -1; // Khi to ngn xp rng

    }

    void push(Stack *stack, int node){

    int *tmpNodes = new int[stack->top + 2];// Cp pht vng nh mi

    stack->top ++; // Tng ch s ca node nh

    for(int i=0; itop; i++) // Sao chp sang vng nh mi

    tmpNodes[i] = stack->nodes[i];

    tmpNodes[stack->top] = node; // Thm node mi vo nh

    delete [] stack->nodes; // Gii phng vng nh c

    stack->nodes = tmpNodes; // Tr vo vng nh mi

    return;

    }

    int pop(Stack *stack){

    if(stack->top < 0){ // Kim tra ngn xp rng

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    49/186

    Chng 3: Kiu dliu cu trc

    48

    cout top];// Lu gi gi trnh

    int *tmpNodes = new int[stack->top];// Cp pht vng nh

    mi

    for(int i=0; itop; i++) // Sao chp sang vng nh mi

    tmpNodes[i] = stack->nodes[i];

    stack->top --; // Gim ch s ca node nh

    delete [] stack->nodes; // Gii phng vng nh c

    stack->nodes = tmpNodes; // Tr vo vng nh mi

    return result; // Tr v gi tr node nh

    }

    void release(Stack *stack){delete [] stack->nodes; // Gii phng vng danh sch

    delete stack; // Gii phng con tr

    return;

    }

    void main(){

    clrscr();

    Stack *stack;

    init(stack); // Khi to ngn xpchar strIn[250];

    // Nhp chui k t t bn phm

    cout > strIn;

    for(int i=0; itop > -1) // Ly ra t ngn xp

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    50/186

    Chng 3: Kiu dliu cu trc

    49

    nh ngha cu trc hngi

    Hng i c cc thuc tnh:

    Mt danh sch cc phn t c mt trong hng i. Ch s ca phn tng u ca danh sch (front). Ch s phn t cui ca danh sch (rear).

    Nu dng cu trc tnh nh ngha, hng i c cu trc nh sau:

    typedef SIZE 100;

    typedef struct {

    int front, rear; // V tr ca nh u, nh cui

    int nodes[SIZE]; // Danh sch cc phn t

    } Queue;

    Nu dng b nhng lu gi hng i, th phn t front lun l phn t th 0 ca danh sch.

    V rear s bng di danh sch tri 1. Cu trc ng ca hng i:typedef struct {

    int front, rear; // V tr ca nh u, nh cui

    int *nodes; // Danh sch cc phn t

    } Queue;

    Thao tc trn hngi

    Thm mt phn t vo cui hng i Ly mt phn tv tr u ca hng i

    Thao tc thm mt phn t vo cui hng i vi b nhng c thc hin tng t vi ngnxp. Chng trnh 3.5a ci t th tc thm mt phn t vo cui hng i ng.

    Chng trnh 3.5a

    void insert(Queue *queue, int node){

    int *tmpNodes = new int[queue->rear + 2];// Cp pht vng nh mi

    queue->rear ++; // Tng ch s ca node ui

    if(queue->front == -1) // Nu hng i c rng

    queue->front = 0; // th cp nh

    t front

    for(int i=0; irear; i++) // Sao chp sang vng nh mi

    tmpNodes[i] = queue->nodes[i];

    tmpNodes[queue->rear] = node; // Thm node mi vo ui

    delete [] queue->nodes; // Gii phng vng nh c

    queue->nodes = tmpNodes; // Tr vo vng nh mi

    return;

    }

    Thao tc ly ra mt phn tu ca hng i thc hin theo cc bc:1. Kim tra tnh rng (front = rear = -1) ca hng i. Nu khng rng mi thc hin tip

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    51/186

    Chng 3: Kiu dliu cu trc

    50

    2. Ly phn t nodes[0] ra.3. Sao chp danh sch cn li sang vng nhmi4. Gii phng vng nhc5. a danh sch tr vo vng nhmi6. Tr v gi tr phn t ly ra

    Chng trnh 3.5b ci t th tc ly ra mt phn t ca hng i ng.

    Chng trnh 3.5b

    int remove(Queue *queue){

    if((queue-front < 0)||(queue-rear < 0)){// Kim tra hng i rng

    cout front];

    int *tmpNodes;

    if(queue->rear > 0){ // Nu c hn 1 phn t

    tmpNodes = new int[queue->rear];// Cp pht vng nh mi

    for(int i=0; irear; i++)// Sao chp sang vng nh mi

    tmpNodes[i] = queue->nodes[i];

    }else // Nu ch c 1 phn t

    queue->front --; // Hngi thnh r

    ng

    queue->rear --; // Gim ch s ca node ui

    delete [] queue->nodes; // Gii phng vng nh c

    queue->nodes = tmpNodes; // Tr vo vng nh mi

    return result; // Tr v gi tr node u

    }

    p dng

    Hng i c p dng trong cc bi ton cn cch qun l ci no vo trc sc ly ratrc. Chng trnh 3.5c minh ho cch qun l tin trnh n gin nht ca hiu hnh: cctin trnh c qun l theo m tin trnh, khi xut hin, tin trnh c a vo cui ca mt hngi. Khi no CPU rnh th s ly tin trnh u hng i ra thc hin.

    Chng trnh 3.5c

    #include

    #include

    typedef struct {

    int front, rear; // V tr ca nh u, nh cui

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    52/186

    Chng 3: Kiu dliu cu trc

    51

    int *nodes; // Danh sch cc phn t

    } Queue;

    /* Khai bo cc nguyn mu hm */

    void init(Queue *queue);void insert(Queue *queue, int node);

    int remove(Queue *queue);

    void travese(Queue *queue);

    void release(Queue *queue);

    void init(Queue *queue){

    queue = new Queue; // Cp pht b nh cho con tr

    queue->front = -1; // Khi to danh sch rng

    queue->rear = -1;return;

    }

    void insert(Queue *queue, int node){

    int *tmpNodes = new int[queue->rear + 2];// Cp pht vng nh mi

    queue->rear ++; // Tng ch s ca node ui

    if(queue->front == -1) // Nu hng i c rng

    queue->front = 0; // th cp nht front

    for(int i=0; irear; i++) // Sao chp sang vng nh mitmpNodes[i] = queue->nodes[i];

    tmpNodes[queue->rear] = node; // Thm node mi vo ui

    delete [] queue->nodes; // Gii phng vng nh c

    queue->nodes = tmpNodes; // Tr vo vng nh mi

    return;

    }

    int remove(Queue *queue){

    if((queue-front < 0)||(queue-rear < 0)){// Kim tra hng i rngcout front];

    int *tmpNodes;

    if(queue->rear > 0){ // Nu c hn 1 phn t

    tmpNodes = new int[queue->rear];// Cp pht vng nh mi

    for(int i=0; irear; i++)// Sao chp sang vng nh mitmpNodes[i] = queue->nodes[i];

    }else // Nu ch c 1 phn t

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    53/186

    Chng 3: Kiu dliu cu trc

    52

    queue->front --; // Hng i thnh rng

    queue->rear --; // Gim ch s ca node ui

    delete [] queue->nodes; // Gii phng vng nh c

    queue->nodes = tmpNodes; // Tr vo vng nh mi

    return result; // Trvgi tr

    node

    u

    }

    void travese(Queue *queue){

    if(queue->front < 0){ // Khi danh sch rng

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    54/186

    Chng 3: Kiu dliu cu trc

    53

    cin >> maso;

    insert(queue, maso);

    break;

    case 2: // Ly ra khi hng i

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    55/186

    Chng 3: Kiu dliu cu trc

    54

    typedef struct{

    int nodeNumber; // S lng cc node

    SimpleNode *front, *rear;// Trn node u v cui danh sch

    } SimpleHeader;

    Cc thao tc trn danh sch lin ktn

    Cc thao tc cbn trn danh sch n bao gm:

    Chn thm mt node vo v tr th n trong danh sch Loi ra mt node v tr th n trong danh sch

    Vic chn thm mt node vo v tr th n trong danh sch c thc hin theo cc bc:

    1. Nu ns phn t ca danh sch, chn vo cui. Trng hpcn li, chn vo gia.

    2. Tm node th n: gi vt ca hai node th n-1 v th n.3. To mt node mi: cho node th n-1 tr tip vo node mi v node mi tr tip vo node

    th n.

    Chng trnh 3.6a ci t th tc chn mt node vo v tr th n ca danh sch.

    Chng trnh 3.6a

    void insert(SimpleHeader *list, int position, int value){

    SimpleNode *newNode = new SimpleNode;

    newNode->value = value;

    if(position next = list->front; // Chn vo trc node u

    list->front = newNode; // Cp nht li node u ds

    if(list->nodeNumber == 0) // Nu ds ban u rng th

    list->rear = newNode; // node ui trng vi node u

    }else if(position >= list->nodeNumber){// Chn vo cui ds

    list->rear->next = newNode; // Chn vo sau node cui

    list->rear = newNode; // Cp nht li node cui ds

    if(list->nodeNumber == 0) // Nu ds ban u rng th

    list->front = newNode; // node u trng node ui

    }else{ // Chn vo gia ds

    SimpleNode *prev = list->front, *curr = list->front;

    int index = 0;

    while(index < position){ // tm node n-1 v n

    prev = curr;

    curr = curr->next;

    index++;

    }

    newNode->next = curr; // chn vo trc node n

    prev->next = newNode; // v chn vo sau node n-1

    }

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    56/186

    Chng 3: Kiu dliu cu trc

    55

    list->nodeNumber++; // Cp nht s lng node

    return;

    }

    Vic xo mt node v tr th n trong danh sch c thc hin theo cc bc:1. Nu ns phn t ca danh sch, khng xo node no.2. Tm node th n: gi vt ca ba node th n-1, th n v th n+1.3. Cho node th n-1 tr tip vo node th n+1, xo con tr ca node th n.4. Tr v node th n.

    Chng trnh 3.6b ci t th tc xo mt node v tr th n ca danh sch.

    Chng trnh 3.6b

    SimpleNode* remove(SimpleHeader *list, int position){

    if((position < 0)||(position >= list->nodeNumber))

    return NULL; // Khng xo node no c

    SimpleNode* result;

    if(position == 0){ // Xo node u

    result = list->front; // Gi node cn xo

    list->front = list->front->next;// Cp nht node u

    if(list->nodeNumber == 1) // Nu ds ch c 1 node th

    list->rear = list->front;// Cp nht node cui ds

    }else if(position == list->nodeNumber 1){

    result = list->rear; // Gi node cn xo

    SimpleNode *curr = list->front;

    while(curr->next != list->rear)

    curr = curr->next; // Tm node trc ca node cui

    curr->next = NULL; // Xo node rear hin ti

    list->rear = curr; // Cp nht node cui ds

    }else{

    SimpleNode *prev = list->front, *curr = list->front;

    int index = 0;

    while(index < position){ // Tm node n-1 v n

    prev = curr;

    curr = curr->next;

    index++;

    }

    result = curr; // Gi node cn xo

    prev->next = curr->next; // Cho node n-1 trn node n+1

    }

    list->nodeNumber --; // Cp nht s lng node

    return result; // Tr v node cn xo

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    57/186

    Chng 3: Kiu dliu cu trc

    56

    }

    p dng

    Chng trnh 3.6c minh ho vic dng danh sch lin kt n qun l nhn vin vn phng vicc thng tin rt n gin: tn, tui v tin lng ca mi nhn vin.

    Chng trnh 3.6c

    #include

    #include

    #include

    typedef struct{

    char name[25]; // Tn nhn vin

    int age; // Tui nhn vin

    float salary; // Lng nhn vin

    } Employee;

    struct simple{

    Employee employee; // D liu ca node

    struct simple *next; // Trn node k tip

    };

    typedef struct simple SimpleNode;

    typedef struct{

    int nodeNumber; // S lng cc node

    SimpleNode *front, *rear; // Trn node u v cui ds

    } SimpleHeader;

    /* Khai bo cc nguyn mu hm */

    void init(SimpleHeader *list);

    void insert(SimpleHeader *list, int position, Employee employee);

    SimpleNode* remove(SimpleHeader *list);

    void travese(SimpleHeader *list);

    void release(SimpleHeader *list);

    void init(SimpleHeader *list){

    list = new list; // Cp pht b nh cho con tr

    list->front = NULL; // Khi to danh sch rng

    list->rear = NULL;

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    58/186

    Chng 3: Kiu dliu cu trc

    57

    list->nodeNumber = 0;

    return;

    }

    void insert(SimpleHeader *list, int position, Employee employee){SimpleNode *newNode = new SimpleNode;

    newNode->employee = employee;

    if(position next = list->front; // Chn vo trc node u

    list->front = newNode; // Cp nht li node u ds

    if(list->nodeNumber == 0) // Nu ds ban u rng th

    list->rear = newNode; // node ui trng vi node u

    }else if(position >= list->nodeNumber){// Chn vo cui ds

    list->rear->next = newNode; // Chn vo sau node cui

    list->rear = newNode; // Cp nht li node cui ds

    if(list->nodeNumber == 0)// Nu ds ban u rng th

    list->front = newNode; // node u trng node ui

    }else{ // Chn vo gia ds

    SimpleNode *prev = list->front, *curr = list->front;

    int index = 0;

    while(index < position){// tm node n-1 v n

    prev = curr;

    curr = curr->next;index++;

    }

    newNode->next = curr; // chn vo trc node n

    prev->next = newNode; // v chn vo sau node n-1

    }

    list->nodeNumber++; // Cp nht s lng node

    return;

    }

    SimpleNode* remove(SimpleHeader *list, int position){

    if((position < 0)||(position >= list->nodeNumber))

    return NULL; // Khng xo node no c

    SimpleNode* result;

    if(position == 0){ // Xo node u

    result = list->front; // Gi node cn xo

    list->front = list->front->next;// Cp nht node u

    if(list->nodeNumber == 1) // Nu ds ch c 1 node th

    list->rear = list->front;// Cp nht node cui ds}else if(position == list->nodeNumber 1){

    result = list->rear; // Gi node cn xo

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    59/186

    Chng 3: Kiu dliu cu trc

    58

    SimpleNode *curr = list->front;

    while(curr->next != list->rear)

    curr = curr->next;// Tm node trc ca node cui

    curr->next = NULL; // Xo node rear hin ti

    list->rear = curr; // Cp nh

    t node cu

    i ds

    }else{

    SimpleNode *prev = list->front, *curr = list->front;

    int index = 0;

    while(index < position){// Tm node n-1 v n

    prev = curr;

    curr = curr->next;

    index++;

    }

    result = curr; // Ginode c

    n xo

    prev->next = curr->next;// Cho node n-1 trn node n+1

    }

    list->nodeNumber --; // Cp nht s lng node

    return result; // Tr v node cn xo

    }

    void travese(SimpleHeader *list){

    if(list->nodeNumber

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    60/186

    Chng 3: Kiu dliu cu trc

    59

    void main(){

    clrscr();

    SimpleHeader *list;

    init(list); // Khi t

    o ds

    int function;

    do{

    clrscr();

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    61/186

    Chng 3: Kiu dliu cu trc

    60

    }

    break;

    case 3: // Duyt ds

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    62/186

    Chng 3: Kiu dliu cu trc

    61

    c. typedef struct Sinhvien{

    char name[20];

    int age;

    };

    2.

    Mt cu trc c nh ngha nh sau:struct Employee{

    char name[20];

    int age;

    };

    Khi , cch khai bo bin no sau y l ng:

    a. struct Employee myEmployee;

    b. struct employee myEmployee;

    c. Employee myEmployee;

    d. employee myEmployee;

    3. Mt cu trc c nh ngha nh sau:typedef struct employee{

    char name[20];

    int age;

    } Employee;

    Khi , cch khai bo bin no sau y l ng:

    a. Employee myEmployee;

    b. employee myEmployee;

    c. struct Employee myEmployee;

    d. struct employee myEmployee;

    4. Vi cu trc c nh ngha nh trong bi 3. Khi , cch khi to bin no sau y lng:

    a. Employee myEmployee = {A, 27};

    b. Employee myEmployee = {A, 27};

    c. Employee myEmployee = (A, 27);

    d. Employee myEmployee = (A, 27);

    5. Vi cu trc c nh ngha nh trong bi 3. Khi , cc cch cp pht b nhcho bincon tr no sau y l ng:

    a. Employee *myEmployee = new Employee;

    b. Employee *myEmployee = new Employee();

    c. Employee *myEmployee = new Employee(10);

    d. Employee *myEmployee = new Employee[10];

    6. nh ngha mt cu trc v mn hc ca mt hc sinh c tn Subject, bao gm cc thngtin:

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    63/186

    Chng 3: Kiu dliu cu trc

    62

    Tn mn hc, kiu char[]; im tng kt mn hc, kiu float;

    7. nh ngha cu trc v hc sinh tn l Student bao gm cc thng tin sau: Tn hc sinh, kiu char[]; Tui hc sinh, kiu int; Lp hc sinh, kiu char[]; Danh sch im cc mn hc ca hc sinh, kiu l mt mng cc cu trc Subject

    c nh ngha trong bi tp 6.

    Xp loi hc lc, kiu char[];8. Khai bo mt bin c cu trc l Student nh ngha trong bi 7. Sau , thc hin tnh

    im trung bnh ca tt c cc mn hc ca hc sinh , v vit mt th tc xp loi hcsinh da vo im trung bnh cc mn hc:

    Nu im tb nh hn 5.0, xp loi km Nu im tb t 5.0 n di 6.5, xp loi trung bnh. Nu im tb t 6.5 n di 8.0, xp loi kh Nu im tb t 8.0 trln, xp loi gii.

    9. Vit mt chng trnh qun l cc hc sinh ca mt lp, l mt dy cc cu trc c kiuStupid nh ngha trong bi 7. S dng th tc ci t trong bi 8 thc hin cc thaotc sau:

    Khi to danh sch v im ca cc hc sinh trong lp. Tnh im trung bnh v xp loi cho tt c cc hc sinh. Tm tt c cc hc sinh theo mt loi nht nh

    10.S dng cu trc ngn xp nh ngha trong bi i mt s t kiu thp phn sangkiu nh phn: Chi s nguyn cho 2, mi cho n khi thng

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    64/186

    Chng 3: Kiu dliu cu trc

    63

    Ring vi node u tin (front) ca danh sch, con tr prev ca n s trnNULL. Ging nh con tr next ca node rear.

    14.Ci t li hai tho tc thm vo mt node v xo mt node mt v tr xc nh trongmt cu trc danh sch lin kt kp nh ngha trong bi 13.

    15.p dng cc nh ngha v thao tc trong cc bi 13 v 14. Ci t li chng trnh qun lnhn vin chng trnh 3.6c bng danh sch lin kt kp.

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    65/186

    Chng 4: Vo ra trn tp

    64

    CHNG 4

    VO RA TRN TP

    Ni dung chng ny tp trung trnh by cc vn lin quan n cc thao tc trn tp d liutrong ngn ng C++:

    Khi nim tp, tp vn bn v tp nh phn Cc thao tc vo ra trn tp Phng thc truy nhp tp trc tip

    4.1 KHI NIM TP

    4.1.1 Tp dliuTrong C++, khi thao tc vi mt tp d liu, cn thc hin tun t theo cc bc nh sau:

    1. Mtp tin2. Thc hin cc thao tc c, ghi trn tp tin ang m3. ng tp tin

    thc hin cc thao tc lin quan n tp d liu, C++ cung cp mt th vin cha cc lp v cc hm phc v cho cc thao tc ny. Do vy, trong cc chng trnh lm vicvi tp tin, ta cn khai bo ch th dng th vin ny ngay tu chng trnh:

    #include

    Khai bo bin tp

    Trong C++, khi khai bo mt bin tp, ng thi ta s mtp tng ng theo c php tng qutbng cch dng kiu fstream nh sau:

    fstream (, );

    Trong :

    Tn bin tp: c tnh cht nh mt tn bin thng thng, n sc dng thc hincc thao tc vi tp gn vi n. Tn bin tp cng phi tun th theo quy tc t tn bin

    trong C++.

    Tn tp: l tn tp d liu m ta cn thao tc trn n. Ch mtp: l cc hng kiu bt c nh ngha sn bi C++. N ch ra rng ta

    ang mtp tin ch no: c hoc ghi, hoc cc ln ghi.

    V d, khai bo:

    fstream myFile(abc.txt, ios::in);

    l khai bo mt bin tp, c tn l myFile, dng mtp tin c tn l abc.txt v tp tin ny cmchc d liu (bt ch th ios::in).

    Lu :

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    66/186

    Chng 4: Vo ra trn tp

    65

    Tn tp tin c dng mt chui k t, nu khai bo tn tp c ng dn th mc \ thmi du \ phi c vit thnh \\ trnh b nhm ln vi cc k tc bit trong Cnh \n, \d

    V d, mun mmt tp tn l abc.txt trong th mc myDirc, ta phi khai bo nh sau:

    fstream myFile(myDir\\abc.txt, ios::in);

    Cc ch mtp tin

    Cc ch mtp tin c nh ngha bi cc bt ch th:

    ios::in: Mmt tp tin c. ios::out: Mmt tp tin c sn ghi. ios::app: Mmt tp tin c sn thm d liu vo cui tp. ios::ate: Mtp tin v t con tr tp tin vo cui tp. ios::trunc: Nu tp tin c sn th d liu ca n s b mt. ios::nocreate: Mmt tp tin, tp tin ny bt buc phi tn ti. ios::noreplace: Ch mtp tin khi tp tin cha tn ti. ios::binary: Mmt tp tin ch nh phn. ios::text: Mmt tp tin ch vn bn.

    Lu :

    Khi mun mmt tp tin ng thi nhiu ch khc nhau, ta kt hp cc bt ch thtng ng bng php ton hp bt |.

    V d, mun mmt tp tin abc.txt c (ios::in) ng thi vi ghi (ios::out) di ch vnbn (ios::text), ta khai bo nh sau:

    fstream myFile(abc.txt, ios::in|ios::out|ios::text);

    4.1.2 Tp vn bn

    mmt tp tin di ch vn bn, ta dng c php sau:

    fstream (, ios::text);

    Khi , cc thao tc c, ghi trn bin tp c thc hin theo n v l cc t, c phn cchbi du trng (space bar) hoc du xung dng (enter).

    V d, mun mtp tin baitho.txt di ch vn bn, ta khai bo nh sau:

    fstream myBaiTho(baitho.txt, ios::text);

    4.1.3 Tp nh phn

    mmt tp tin di ch nh phn, ta dng c php sau:

    fstream (, ios::binary);

    Khi , cc thao tc c, ghi trn bin tp c thc hin theo n v byte theo kch thc ccbn ghi (cu trc) c ghi trong tp.

    V d, mun mtp tin baitho.txt di ch nh phn, ta khai bo nh sau:

    fstream myBaiTho(baitho.txt, ios::binary);

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    67/186

    Chng 4: Vo ra trn tp

    66

    4.2 VO RA TRN TP

    4.2.1 Vo ra tp vn bn bng >> v

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    68/186

    Chng 4: Vo ra trn tp

    67

    do{

    cin >> input; // c k t t bn phm

    fileOut >: >>;

    3. ng tp tin bng lnh close():.close();

    Chng trnh 4.2 minh ho vic c d liu t tp tin va s dng trong chng trnh 4.1 ra mnhnh:

    Tn tp tin c ngi dng t nhp vo t bn phm. Chng trnh sc cc k t trong tp v hin th ra mn hnh, mi k tc phn cch

    nhau bi du trng (space bar).

    Chng trnh dng li khi kt thc tp tin.Chng trnh 4.2

    #include

    #include

    #include

    #include

    const int length = 25; // di ti a tn tp tin

    void main(){

    clrscr();

    char fileName[length], output;

    cout > setw(length) >> fileName; // Nhp tn tp tin

    /* M tp tin */

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    69/186

    Chng 4: Vo ra trn tp

    68

    ifstream fileIn(fileName, ios::in); // Khai bo v m tp tin

    if(!fileIn){ // Khng mc tp

    cout sourceFile; // Nhp tn tp tin ngun

    cout > setw(length) >> targetFile; // Nhp tn tp tin ch

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    70/186

    Chng 4: Vo ra trn tp

    69

    /* M tp tin ngun */

    ifstream fileIn(sourceFile, ios::in);// Khai bo v m tp ngun

    if(!fileIn){ // Khng mc tp ngun

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    71/186

    Chng 4: Vo ra trn tp

    70

    4.2.2 Vo ra tp nh phn bng read v write

    Ghi vo tp nhphn bng write

    Cc bc thc hin ghi d liu vo mt tp nh phn nh sau:

    1.

    Mtp tin theo ch ghi nh phn bng i tng fstream:fstream (, ios::out|ios::binary);

    2. Ghi d liu vo tp bng thao tc write():.write(char* ,

    int );

    3. ng tp tin bng lnh close():.close();

    Trong , thao tc write nhn hai tham su vo nh sau:

    Tham s th nht l con tr kiu char trn vng d liu cn ghi vo tp. V con tr btbuc c kiu char nn khi mun ghi d liu c kiu khc vo tp, ta dng hm chuynkiu:

    reinterpret_cast();

    Tham s th hai l kch cd liu c ghi vo tp. Kch cny c tnh theo byte, nnthng thng ta dng ton t:

    sizeof();

    Lu :

    Khi mun c, ghi cc d liu c cu trc (struct) vo t p th ta phi dng ch c/ghi tp nh phn m khng th dng chc/ghi ch vn bn.

    Khi c/ghi d liu c kiu cu trc, ton t sizeof() thc hin chnh xc th cc thnhvin ca cu trc khng c l kiu con tr. V ton t sizeof() i vi con tr ch chokch cca con tr m khng cho kch ctht ca vng d liu m con tr tr ti.

    Chng trnh 4.4 minh ho vic ghi d liu vo tp tin nh phn, d liu l kiu cu trc:

    Tn tp tin v s lng bn ghi c ngi dng t nhp vo t bn phm. Chng trnh s ghi vo tp cc bn ghi c cu trc do ngi dng g vo t bn phm.

    Chng trnh 4.4#include

    #include

    #include

    #include

    #include

    const int length = 25; // di ti a tn tp tin

    typedef struct {int day; // Ngy

    int month; // Thng

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    72/186

    Chng 4: Vo ra trn tp

    71

    int year; // Nm

    } Date;

    typedef struct {

    char name[20]; // Tn nhn vinDate birthDay; // Ngy sinh ca nhn vin

    char role[20]; // Chc v ca nhn vin

    float salary; // Lng ca nhn vin

    } Employee;

    void main(){

    clrscr();

    char fileName[length]; // Tn tp tin

    cout > setw(length) >> fileName; // Nhp tn tp tin

    int recordNumber; // S lng bn ghi

    cout > recordNumber; // Nhp s lng bn ghi

    /* M tp tin */

    // Khai bo v m tp tin

    fstream fileOut(fileName, ios::out|ios::binary);if(!fileOut){ // Khng mc tp

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    73/186

    Chng 4: Vo ra trn tp

    72

    cin >> myEmployee.salary; // Nhp tin lng

    // Ghi d liu vo tp

    fileOut.write(reinterpret_cast(&myEmployee),

    sizeof(Employee));}

    /* ng tp tin */

    fileOut.close(); // ng tp tin

    return;

    }

    c dliu ttp nhphn bng read

    Cc bc thc hin c d liu t mt tp tin nh phn nh sau:

    1. Mtp tin theo chc nh phn bng i tng fstream (mtp tin ch ghi):fstream (, ios::in|ios::binary);

    2. c d liu t tp bng thao tc read():.read(char* ,

    int );

    3. ng tp tin bng lnh close():.close();

    Chng trnh 4.5 minh ho vic c d liu t tp tin vo bin c cu trc:

    Tn tp tin c ngi dng t nhp vo t bn phm. Chng trnh sc cc cu trc nhn vin trong tp v hin th ra mn hnh. Chng trnh dng li khi kt thc tp tin.

    Chng trnh 4.5

    #include

    #include

    #include

    #include

    #include

    const int length = 25; // di ti a tn tp tin

    typedef struct {

    int day; // Ngy

    int month; // Thng

    int year; // Nm

    } Date;

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    74/186

    Chng 4: Vo ra trn tp

    73

    typedef struct {

    char name[20]; // Tn nhn vin

    Date birthDay; // Ngy sinh ca nhn vin

    char role[20]; // Chc v

    ca nhn vin

    float salary; // Lng ca nhn vin

    } Employee;

    void main(){

    clrscr();

    char fileName[length]; // Tn tp tin

    cout > setw(length) >> fileName; // Nhp tn tp tin

    /* M tp tin */

    // Khai bo v m tp tin

    fstream fileIn(fileName, ios::in|ios::binary);

    if(!fileIn){ // Khng mc tp

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    75/186

    Chng 4: Vo ra trn tp

    74

    4.3 TRUY NHP TP TRC TIP

    4.3.1 Con tr tp tin

    Con tr tp tin c vai tr nh mt u c tr vo mt v tr xc nh ca tp v thao tc truy nhp

    tp din ra tun t: Ti mi thi im, con tr tp tin xc nh mt v tr trn tp m ti , thao tc truy nhp

    tp (c/ghi) c thc hin.

    Sau thao tc truy nhp, con tr tp tng chuyn n v tr tip theo da vo kch thcn v d liu c truy nhp.

    Cch truy nhp tp tun t c nhc im l bao gicng phi bt u tu tp tin, i tun tcho n v tr cn truy nhp. Khi tp tin c kch thc ln th cch truy nhp ny rt tn thi gian.

    trnh nhc im ny, C++ cho php truy nhp trc tip n mt v tr xc nh trn tp tinbng cc php ton:

    Truy nhp v tr hin ti ca con tr tp tin Dch chuyn con tr tp tin n mt v tr xc nh

    4.3.2 Truy nhp v tr hin ti ca con tr tp

    C php truy nhp n v tr hin thi ca con tr tp ph thuc vo kiu bin tp ang dng l c hay ghi.

    Nu bin tp l kiu mtp c ifstream th c php l:.tellg();

    Nu bin tp l kiu mtp ghi ofstream th c php l:.tellp();

    Chng trnh 4.6a minh ho vic xc nh v tr hin thi ca con tr tp sau mt s thao tc ctp trc .

    Chng trnh 4.6a

    #include

    #include

    #include

    #include

    const int length = 25; // di ti a tn tp tin

    void main(){

    clrscr();

    char fileName[length], output;

    cout > setw(length) >> fileName; // Nhp tn tp tin

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    76/186

    Chng 4: Vo ra trn tp

    75

    /* M tp tin */

    ifstream fileIn(fileName, ios::in); // Khai bo v m tp tin

    if(!fileIn){ // Khng mc tp

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    77/186

    Chng 4: Vo ra trn tp

    76

    /* M tp tin */

    ofstream fileOut(fileName, ios::out);// Khai bo v m tp tin

    if(!fileOut){ // Khng mc tp

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    78/186

    Chng 4: Vo ra trn tp

    77

    V d:

    ifstream fileIn(abc.txt, ios::in);

    fileIn.seekg(sizeof(char)*7, ios::beg);

    s dch chuyn con tr tp tin n k t (kiu char) th 7+1 = 8 trong tp tin abc.txt c (gi s

    tp tin abc.txt lu cc k t kiu char).Lu :

    V khong cch cch dch chuyn c kiu s nguyn (int) cho nn c th nhn gi tr mhoc dng. Nu gi tr dng, dch chuyn v pha sau v tr lm mc, nu gi tr m,dch chuyn v pha trc v tr lm mc.

    Nu v tr dch chuyn n nm ngoi phm vi tp tin (pha sau v tr cui cng ca tphoc pha trc v tr u tin ca tp) s ny sinh li, khi = false.

    Chng trnh 4.7 ci t chng trnh truy nhp tp tin trc tip c gi tr k t (kiu char)trong tp:

    Tn tp tin (cha d liu kiu char) do ngi dng nhp vo t bn phm. Sau , mi khi ngi dng nhp vo mt s nguyn, chng trnh s dch chuyn n v

    tr mi, cch v tr cng bng tng y k t, tnh t v tr hin thi ca con tr tp.

    Chng trnh s kt thc khi ngi dng nhp vo s 0.Chng trnh 4.7

    #include

    #include

    #include

    #include

    const int length = 25; // di ti a tn tp tin

    void main(){

    clrscr();

    char fileName[length], output;

    cout > setw(length) >> fileName; // Nhp tn tp tin

    /* M tp tin */

    ifstream fileIn(fileName, ios::in); // Khai bo v m tp tin

    if(!fileIn){ // Khng mc tp

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    79/186

    Chng 4: Vo ra trn tp

    78

    int index = 1;

    do{

    cout > index;

    // Dch chuyn con tr tp t v tr hin thi

    fileIn.seekg(sizeof(char)*index, ios::cur);

    if(fileIn){ // ng

    fileIn >> output; // c k t t tp tin

    // Ghi k t ra mn hnh

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    80/186

    Chng 4: Vo ra trn tp

    79

    ng tp tin s dng bng thao tc close().

    CU HI V BI TP CHNG 4

    1. Mun mmt tp tin tn l abc.txt c d liu, lnh mtp no sau y l ng:a. fstream myFile(abc.txt, ios::in);

    b. fstream myFile(abc.txt, ios::out);

    c. fstream myFile(abc.txt, ios::app);

    d. fstream myFile(abc.txt, ios::ate);

    2. Mun mmt tp tin abc.txt nm trong th mc xyz ghi d liu vo. Lnh mno sauy l ng:

    a. fstream myFile(xyz\abc.txt, ios::out);

    b. fstream myFile(xyz\\abc.txt, ios::out);

    c. fstream myFile(xyz/abc.txt, ios::out);

    d. fstream myFile(xyz//abc.txt, ios::out);

    3. Mun mmt tp tin abc.txt ghi thm d liu vo cui tp, lnh no sau y l ng:a. fstream myFile(abc.txt, ios::out);

    b. fstream myFile(abc.txt, ios::app);

    c. fstream myFile(abc.txt, ios::out|ios::app);

    d. fstream myFile(abc.txt, ios::out||ios::app);

    4. Xt hai lnh khai bo sau:fstream myFile1(abc.txt, ios::out);

    ofstream myFile2(abc.txt, ios::out);

    Nhn nh no sau y l ng:

    a. myFile1 v myFile2 c chc nng ging nhau.

    b. myFile1 v myFile2 c chc nng khc nhau

    5. Xt hai lnh khai bo sau:fstream myFile1(abc.txt, ios::in);

    ifstream myFile2(abc.txt, ios::in);

    Nhn nh no sau y l ng:

    a. myFile1 v myFile2 c chc nng ging nhau.

    b. myFile1 v myFile2 c chc nng khc nhau

    6. Xt on chng trnh sau:ofstream myFile(abc.txt, ios::out);

    if(myFile) myFile

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    81/186

    Chng 4: Vo ra trn tp

    80

    d. Chng trnh s bo li.

    7. Xt on chng trnh sau:ifstream myFile(abc.txt, ios::in);

    char text[20];

    if(myFile) myFile >> text;

    Chng trnh s lm g, nu tp tin abc.txt c ni dung l dng ch abc.txt?

    a. Ghi ra mn hnh dng ch abc.txt

    b. Ghi vo tp tin abc.txt dng ch abc.txt

    c. c t tp tin abc.txt dng ch abc.txt

    d. Chng trnh s bo li.

    8. Xt on chng trnh sau:fstream myFile(abc.txt, ios::out);

    if(myFile) myFile > text;

    cout c;

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    82/186

    Chng 4: Vo ra trn tp

    81

    b. 1

    c. 8

    d. 16

    11.Xt on chng trnh sau, nu tp abc.txt cha mt s lng k t ln:ifstream myFile(abc.txt, ios::in);

    if(myFile){

    myFile.seekg(sizeof(char)*5, ios::beg);

    myFile.seekg(sizeof(char)*5, ios::cur);

    cout

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    83/186

    Chng 5: Lp

    82

    CHNG 5

    LP

    Ni dung chng ny tp trung trnh by cc vn lin quan n lp i tng trong C++:

    Khi nim, khai bo v s dng lp Khai bo v s dng cc thnh phn ca lp: cc thuc tnh v cc phng thc ca lp Phm vi truy nhp lp Khai bo v s dng cc phng thc khi to v hu b ca lp S dng lp thng qua con tri tng, mng cc i tng.

    5.1 KHI NIM LP I TNG

    C++ coi lp l s tru tng ha cc i tng, l mt khun mu biu din cc i tngthng qua cc thuc tnh v cc hnh ng c trng ca i tng.

    5.1.1 nh ngha lp i tng

    nh ngha mt lp trong C++, ta dng t kha class vi c php:

    class {

    };

    Trong :

    class: l tn t kha bt buc nh ngha mt lp i tng trong C++. Tn lp: do ngi dng tnh ngha. Tn lp c tnh cht nh tn kiu d liu s

    dng sau ny. Cch t tn lp phi tun th theo quy tc t tn bin trong C++.

    V d:

    class Car{

    };

    l nh ngha mt lp xe t (Car). Lp ny cha c bt k mt thnh phn no, vic nh nghacc thnh phn cho lp sc trnh by trong mc 5.2.

    Lu : T kha class l bt buc nh ngha mt lp i tng trong C++. Hn na, C++ c

    phn bit ch hoa ch thng trong khai bo cho nn chclass phi c vit bng chthng.

    V d:

    class Car{ // nh ngha ng

    };

    nhng:

    Class Car{ // Li t kha

    };

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N Studio

    84/186

    Chng 5: Lp

    83

    Bt buc phi c du chm phy ; cui nh ngha lp v C++ coi nh ngha mt lpnhnh ngha mt kiu d liu, cho nn phi c du chm phy cui nh ngha (tngtnh ngha kiu d liu kiu cu trc).

    phn bit vi tn bin thng thng, ta nn (nhng khng bt buc) t tn lp btubng m

    t ch

    in hoa v cc tn bi

    n b

    t

    u b

    ng m

    t ch

    in th

    ng.

    5.1.2 Sdng lp i tng

    Lp i tng c s dng khi ta khai bo cc th hin ca lp . Mt th hin ca mt lpchnh l mt i tng c th ca lp . Vic khai bo mt th hin ca mt lp c thc hinnh c php khai bo mt bin c kiu lp:

    ;

    Trong :

    Tn lp: l tn lp i tng c nh ngha trc khi khai bo bin. Tn bin lp: l tn i tng c th. Tn bin lp sc s dng nh cc bin thng

    thng trong C++, ngoi tr vic n c kiu lp i tng.

    V d, mun khai bo mt th hin (bin) ca lp Car c nh ngha trong mc 5.1.1, ta khaibo nh sau:

    Car myCar;

    Sau , ta c th s dng bin myCar trong chng trnh nh cc bin thng thng: truyn thams cho hm, gn cho bin khc

    Lu :

    Khi khai bo bin lp, ta khng dng li t kha class na. T kha class chc sdng khi nh ngha lp m khng dng khi khai bo bin lp.

    V d, khai bo:

    Car myCar; // ng

    l ng, nhng khai bo:

    class Car myCar; // Li c php

    l sai c php.

    5.2 CC THNH PHN CA LPVic khai bo cc thnh phn ca lp c dng nh sau:

    class {

    private:

    protected:

    public:

    };Trong :

    Smith Nguyen Studio.

  • 8/3/2019 Ngon Ngu Lap Trinh C++ HV BCVT - Smith.N