NGÔN NGỮ LẬP TRÌNH (1)

download NGÔN NGỮ LẬP TRÌNH (1)

of 137

Transcript of NGÔN NGỮ LẬP TRÌNH (1)

  • 8/13/2019 NGN NG LP TRNH (1)

    1/137

    NGN NG LP TRNH

    C/C++

    V Song Tng

    1

  • 8/13/2019 NGN NG LP TRNH (1)

    2/137

    NI DUNG

    c im ca C/C

    Cc thnh phn c bn

    Biu thc v ton t

    Hm, mng v con tr

    Kiu d liu tru tng

    Cc cu trc d liu c bn

    2

    3

    5

    22

    45

    77

    123

  • 8/13/2019 NGN NG LP TRNH (1)

    3/137

    I. cimcaC/C++

    3

    Ngn nglptrnh hm

    Linh hottrong vicsdngcc kiubin

    Truy cptrctipbnhthng qua cc con

    tr nhnghacc kiubinmibngccstruct

    C thchia nhchngtrnh thnh nhium-un

  • 8/13/2019 NGN NG LP TRNH (1)

    4/137

    I. cimcaC/C++

    4

    Kthacc cimcaC

    ahnh bngkthutxpchng(overload)

    Hngitngbngcc lp(class)

    Sdnglicc m bngkthutktha(inheritance)

  • 8/13/2019 NGN NG LP TRNH (1)

    5/137

  • 8/13/2019 NGN NG LP TRNH (1)

    6/137

    II. Cc thnh phncbn

    6

    Chci thng: az

    Chci hoa : AZ Chs: 09 Phnlncc du(tr@ v $)

    V d

    #include

    voidmain()

    { intArr[] = { 1, 2, 3, 4 };for(inti = 0; i < 4; i++)

    std::cout

  • 8/13/2019 NGN NG LP TRNH (1)

    7/137

    II. Cc thnh phncbn

    7

    Dng m tmthm hay mtonchngtrnh

    // Hm tnh x^n

    // x - s thc, n - s nguyn dng

    doublepower(doublex, intn){

    /*

    double g = 1;

    for (int i = 0; i < n; i++)

    g *= x;

    return g;

    */

    if(n == 0)

    return1; // x^0 = 1

    returnx * power(x, n - 1);

    }

    M thm

    C thdng btmthimtonchngtrnh

    Lm r ngha

  • 8/13/2019 NGN NG LP TRNH (1)

    8/137

    II. Cc thnh phncbn

    8

    Tn ctcho cc hm, cc bin, cc kiudliu

    v.v Cc quy tcnhdanh Chcdng cc chci, chshocdugchni K tutin khng l chs Khng cphp trng tkha

    Ch . Ngn ngC/C++ phn bitchci hoa v chcithng

    V d

    void_foo() // ngquy cch{

    intso nguyen; // sai v c chaducchintsoNguyen; // ngquy cch

    }

  • 8/13/2019 NGN NG LP TRNH (1)

    9/137

    II. Cc thnh phncbn

    9

    Cc gi trcthtrong chngtrnh

    C thl snguyn, sthc, k thocxu kt

    V d

    5 // snguyn kiuint05 // snguyn biudintrong h8

    0x5 // snguyn biudintrong h16

    5u // U hocu snguyn kiuunsigned

    5l // L hocl snguyn kiulong

    5.0 // snguyn kiudouble'5' // k tc gi trs(m ASCII) bng53

    'A' // k tc gi trs(m ASCII) bng65

    "5" // xu k tgmk t'5' v k tNULL

  • 8/13/2019 NGN NG LP TRNH (1)

    10/137

    II. Cc thnh phncbn

    10

    Bng2.1. Cc k tcbit

    K t M t

    \t TAB

    \n ENTER

    \ Nhy n\ Nhy kp

    \\ \

    \0 K tNULL (gi trbng0)

  • 8/13/2019 NGN NG LP TRNH (1)

    11/137

    II. Cc thnh phncbn

    11

    L mtvng trong bnhRAM dng lutrtmthicc gi trcxc nhbngmttn bin

    Phn loi Binn Binmng

    Bincon tr

  • 8/13/2019 NGN NG LP TRNH (1)

    12/137

  • 8/13/2019 NGN NG LP TRNH (1)

    13/137

    II. Cc thnh phncbn

    13

    Bng2.2. Cc kiubin

    KiuKch thc

    (byte)Vng gi tr

    Snguy

    n

    char 1 -128 127

    short 2 32,768 32,767

    int 4 2,147,483,648 2,147,483,647unsigned 4 0 4,294,967,295

    long 4 2,147,483,648 2,147,483,647

    long long 8 9,223,372,036,854,775,808 9,223,372,036,854,775,807

    Sthc float 4 3.4E38

    double 8 1.7E308

    long double 8 1.7E308

  • 8/13/2019 NGN NG LP TRNH (1)

    14/137

  • 8/13/2019 NGN NG LP TRNH (1)

    15/137

    II. Cc thnh phncbn

    15

    Mtvi ch Kch thccacc kiuphthucvo hthngm

    chngtrnh cbin dch

    Dng ton tsizeof(...)lykch thccamtkiu, mthnghay mtbin

    // Chngtrnh Win32 Console Application

    intsz;

    sz = sizeof(sz); // sz = 4

    sz = sizeof(longlong); // sz = 8

    sz = sizeof("12345"); // sz = 6

  • 8/13/2019 NGN NG LP TRNH (1)

    16/137

    II. Cc thnh phncbn

    16

    Kiulitk Dng nhdanh cho cc gi trkiuint

    enum tn_kiu{ danh sch tn };

    V d

    enumBoolean { False, True };

    // False = 0, True = 1

    enumKeys { Enter = 13, Escape = 27, A = 65, B, C };

    // B = 66, C = 67

  • 8/13/2019 NGN NG LP TRNH (1)

    17/137

    II. Cc thnh phncbn

    17

    Dng cc chunvo/ra trong thviniostream

    lm vicvimn hnh v bn phm Chunvo (cin) sdngton tlungvo (>>) Cc chunra (cout, cerr) sdngton tlungra (> b >> c; // Dng ducch, TAB hocENTER phn bitcc lung

    if(a != 0)

    {

    cout

  • 8/13/2019 NGN NG LP TRNH (1)

    18/137

  • 8/13/2019 NGN NG LP TRNH (1)

    19/137

    II. Cc thnh phncbn

    19

    PhuongTrinhBac2.cpp

    #include // thvinvo/ra

    usingnamespacestd; // ni khai bo cc thnh phnchun

    voidmain()

    {

    doublea, b, c;cout > a >> b >> c;

    if(a != 0) {

    // on biu thc gii v binlunphngtrnh //

    }

    else

    cerr

  • 8/13/2019 NGN NG LP TRNH (1)

    20/137

    II. Cc thnh phncbn

    20

    PhuongTrinhBac2.cpp

    // Giiv binlunphngtrnh

    doubled = b*b - 4*a*c;

    if(d >= 0)

    {

    if(d > 0){

    cout

  • 8/13/2019 NGN NG LP TRNH (1)

    21/137

  • 8/13/2019 NGN NG LP TRNH (1)

    22/137

    III. Biuthcv ton t

    Biu thc

    Cc ton t n

    Cc ton t c cu trc

    22

  • 8/13/2019 NGN NG LP TRNH (1)

    23/137

    V d

    III. Biuthcv ton t

    23

    Tphpcacc ton hngv ton t

    Ktthc bngduchmphy

    C thrng

    (-b sqrt(d)) / (2 * a)

    Cc ton t: () - / *

    Cc ton hng: Bin: a, b, d Hng: 2 Hm: sqrt

  • 8/13/2019 NGN NG LP TRNH (1)

    24/137

    III. Biuthcv ton t

    24

    Bng3.1. Phn loicc ton tn

    Nhm Cc ton t Ghi ch

    Gn =

    Shc + - * / % C thkthpvi=

    Tng/Gim ++ --

    So snh == != > < >= C thkthpvi=

    Con tr & * new delete

    Truy cpthnh vin :: . ->Cc loikhc {} () [] ,

    Thtutin cc ton ttham khotihttp://www.cplusplus.com/doc/tutorial/operators/

    http://www.cplusplus.com/doc/tutorial/operators/http://www.cplusplus.com/doc/tutorial/operators/
  • 8/13/2019 NGN NG LP TRNH (1)

    25/137

    III. Biuthcv ton t

    25

    Ton tgn:

    a = 5; // gn 5 vo a

    a = b = c = 5; // tng ng: c= 5; b = c; a = b;

    a = b + (c = 5); // tng ng: c= 5; a = b + c;

    C php lvalue = rvalue

    lvalue tn_bin, rvalue mtbiuthc

    V d

  • 8/13/2019 NGN NG LP TRNH (1)

    26/137

    V d

    III. Biuthcv ton t

    26

    Cc ton tshc

    a = 1 / 5; // a = 0a = 1.0 / 5; // a = 0.2a = (double)1 / 5; // a = 0.2a = 11 % 3; // a = 2

    // Kt hp vi ton t gna += b; // tng ng: a = a + b;a *= b + 1; // tng ng: a = a * (b + 1);

    + Cng / Chia

    - Trhocidu % Chia d

    * Nhn

  • 8/13/2019 NGN NG LP TRNH (1)

    27/137

    V d

    III. Biuthcv ton t

    27

    Cc ton ttng/gim

    ++a; // tng ng: a = a + 1;

    a++; // tng ng: a = a + 1;

    a = b++; // tng ng: a = b; b = b + 1;

    a = ++b; // tng ng: b = b + 1; a = b;

    ++ Tng1

    -- Gim1

  • 8/13/2019 NGN NG LP TRNH (1)

    28/137

    III. Biuthcv ton t

    28

    Cc ton tso snh

    5 == 3 // cho gi tr 0

    5 != 3 // cho gi tr 1

    5 > 3 // cho gi tr 15 < 3 // cho gi tr 0

    5 >= 3 // cho gi tr 1

    5 Lnhn >= Lnhnhocbng

    < Nhhn

  • 8/13/2019 NGN NG LP TRNH (1)

    29/137

    III. Biuthcv ton t

    29

    Ton tkimtra:

    Biu thc logic? Biu thc 1: Biu thc 2

    V d

    5 == 3? 5: 3 // cho gi tr 3

    5 != 3? 5: 3 // cho gi tr 5

    a > b? a: b // cho gi tr ln nht ca a v b

    a < 0? a: a // cho gi tr tuyt i ca a

    h

  • 8/13/2019 NGN NG LP TRNH (1)

    30/137

    III. Biuthcv ton t

    30

    Cc ton tlogic

    V d

    !(a == b) // tng ng: a != bx >= a && x b // kim tra x ngoi khong [a, b]

    && V

    || Hoc

    ! Phnh

    III i h

  • 8/13/2019 NGN NG LP TRNH (1)

    31/137

    III. Biuthcv ton t

    31

    Cc ton tlogic Cc gi trkhc 0ccoi l 1

    Trong biuthcA && B, nuA = 0th khng cnxc nhB

    Trong biuthcA || B, nuA = 1th khng cnxc nhB

    !!5 // cho gi tr 1

    x >= a && x b // kim tra x ngoi khong [a, b]

    V d

    III Bi h

  • 8/13/2019 NGN NG LP TRNH (1)

    32/137

    III. Biuthcv ton t

    32

    Cc ton txl bit

    V d

    5 & 0xFE // cho gi tr 4

    5 | 2 // cho gi tr 7

    5 ^ 4 // cho gi tr 1~5 // cho gi tr 0xFFFFFFFA

    5 > 1 // cho gi tr 2

    & AND ~ NOT

    | OR > SHR (dchphi)

    III Bi th t t

  • 8/13/2019 NGN NG LP TRNH (1)

    33/137

    III. Biuthcv ton t

    33

    Bng 3.2. Mt vi phng n s dng

    Cc ton txl bit

    Biuthc M t

    a &= 0xFE Xa bit a0(a thuckiu1 byte)

    (a & (1

  • 8/13/2019 NGN NG LP TRNH (1)

    34/137

    III. Biuthcv ton t

    34

    Ton tduphy:Dng phn bithai hay nhiubiuthc

    void_foo(intx, inty) // cc tham s ca hm

    {

    intA[] = { 1, 2, 3, 4 };// cc biu thc khi to mng

    inta, b; // cc biu thc khai bo bin

    a = (b = 3, b + 2); // tng ng: b = 3; a = b+2;_foo(a, b); // cc biu thc truyn cho hm

    }

    III Biu thc v ton t

  • 8/13/2019 NGN NG LP TRNH (1)

    35/137

    III. Biuthcv ton t

    35

    Ton tiukin: if

    if(biu thc logic)

    khi biu thc

    // tm tr tuyt i ca x

    a = x;if(a < 0)

    a = -x;

    V d

    III Biu thc v ton t

  • 8/13/2019 NGN NG LP TRNH (1)

    36/137

    III. Biuthcv ton t

    36

    Ton tiukin: if elseif(biu thc logic)

    khi biu thc 1

    else

    khi biu thc 2

    // tm gi tr nh nht ca a v b

    if(a < b)

    min = a;

    else

    min = b;

    V d

  • 8/13/2019 NGN NG LP TRNH (1)

    37/137

    III Biu thc v ton t

  • 8/13/2019 NGN NG LP TRNH (1)

    38/137

    III. Biuthcv ton t

    38

    Ton tlp: dowhile

    do

    khi biu thc

    while(biu thc logic);

    //

    V d

    III Biu thc v ton t

  • 8/13/2019 NGN NG LP TRNH (1)

    39/137

    III. Biuthcv ton t

    39

    Ton tlp: for

    for(bt khi to; bt logic; bt bin i)

    khi biu thc

    // tm N!

    int gt = 1;for(inti = 2; i

  • 8/13/2019 NGN NG LP TRNH (1)

    40/137

    III. Biuthcv ton t

    40

    Ton tlachn: switch

    switch(biu thc)

    {

    casegi_tr_1: cc biu thc #1

    break;

    ...

    casegi_tr_n: cc biu thc #n

    break;

    default: cc biu thc #khc}

    #k khi (biu thc) c gi tr = gi_tr_k

    #khc khi gi tr ca (biu thc) khc cc gi tr lit k

  • 8/13/2019 NGN NG LP TRNH (1)

    41/137

    III Biu thc v ton t

  • 8/13/2019 NGN NG LP TRNH (1)

    42/137

    III. Biuthcv ton t

    42

    Ton tiukhin: breakvcontinue breakacon trchngtrnh ra khicc vng lpv khiswitch

    continueacon trchngtrnh vucc vng lp

    // tm tng cc gi tr chn v l// ca cc s nguyn dng nhp vo t bn phmint odd = 0, even = 0, input;while(1) { // vng lp v cng

    cin >> input;if(input < 0) continue;if(input == 0) break;

    if(input & 1)even += input;

    elseodd += input;

    }

    V d

    III Biu thc v ton t

  • 8/13/2019 NGN NG LP TRNH (1)

    43/137

    III. Biuthcv ton t

    43

    Vitchngtrnh in ra mn hnh cc gi trt1 nkdidngma

    trnmxnvik= mxn, mv nckhitotrong hm main().

    Vitchngtrnh xc nhdngtam gic ccho bi3 cnha, b, c lcc sthc. Yu cu:

    Nhp3 cnhcatam gic

    In ra mn hnh kiucatam gic: Tam giac thuong

    Tam giac vuong

    Tam giac can

    Tam giac vuong can

    Tam giac deu Chngtrnh chktthc khi a, b, c khng tothnh tam gic

    III. Biu thc v ton t

  • 8/13/2019 NGN NG LP TRNH (1)

    44/137

    III. Biuthcv ton t

    44

    Vitchngtrnh in ra mn lchcanmnay theo mucanm2000:

    Thang 1

    CN T2 T3 T4 T5 T6 T7

    1

    2 3 4 5 6 7 8

    9 10 11 12 13 14 15

    16 17 18 19 20 21 2223 24 25 26 27 28 29

    30 31

    Thang 2

    CN T2 T3 T4 T5 T6 T7

    1 2 3 4 56 7 8 9 10 11 12

    13 14 15 16 17 18 19

    20 21 22 23 24 25 26

    27 28 29 30

  • 8/13/2019 NGN NG LP TRNH (1)

    45/137

    IV. Hm, mngv con tr

    Mng

    Con tr v tham chiu

    Hm

    45

    IV. Hm, mng v con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    46/137

    IV. Hm, mngv con tr

    46

    Khai bo binmng

    kiu tn_bin[kch thc];// kch thcphi l hng s nguyn

    kiu tn_bin[kch thc] = { danh sch biu thc };// s biu thc trong danh sch biu thc phi nh// hn hoc bng kch thc

    kiu tn_bin[] = { danh sch biu thc };

    // kch thc ca mng bng s biu thc trong// danh sch biu thc

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    47/137

    , g co t

    47

    Khai bo binmngV d

    intA[2];

    shortB[] = { 10, 256, 1024 };

    charS[100] = { 'A', 'B', 'C', 0 };

    A

    A[0]

    A[1]

    0x0A

    0x00

    0x00

    0x010x00

    0x04

    B

    B[0]

    B[2]

    B[1]

    0x41

    0x42

    0x43

    0x00

    S[0]

    S[99]

    S

    S[3]

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    48/137

    , g

    48

    Xu k t(string) Mngcc k t, ktthc bngk tNULL

    Binxu k tckhai bo bngmtmngkiuchar(biuthckhitoc thl mthngxu k t)

    V d

    // nhpv kimtra mtkhucharpwd[] = "12345678";chars[100];

    cout

  • 8/13/2019 NGN NG LP TRNH (1)

    49/137

    , g

    49

    Thit k v ci t chng trnh thc hin cc thao tc sau:

    Khai bo mt mng cha 1000 s nguyn t gi tr ngu nhin t 1 .. 1000 cho cc phn t ca mng (dng hm

    rand())

    m s lng s chn, s l v s chia ht cho 8 ca mng

    Vit chng trnh thc hin cc thao tc sau: Nhp gi tr cho xu k t s(cha c nhiu nht 49 k t khc NULL)

    In sra mn hnh vi cc ch ci thng (VD. s = 123ABC123abc)

    i sthnh s nguyn v gn cho bin a(VD. s = 123abca = 123)

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    50/137

    , g

    50

    Cc khi nim Con trl mtbincbit, dng chaach

    camtbinkhc

    Tham chiul mtbinidincho duy nhtmtbinno

    Kiucon tr kiu*

    Truy cpnidung con tr *tn_bin_con_tr

    Lyach &tn_bin

    Kiutham chiu kiu&

    Bng 4.1. Cc ton t ca con tr v tham chiu

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    51/137

    g

    51

    Cc khi nimV d

    inta; // gi s a nm a ch 0x000000A0

    int b; // gi s b nm a ch 0x000000B0

    int*p = &a; // p trvo a -> p = 0x000000A0int&r = a; // r l tham chiu ca a

    r = 10; // -> a = 10

    b = *p; // p ang tr vo a -> b = 10

    p = &b; // p trvo b -> p = 0x000000B0

    *p = 5; // -> b = 5

  • 8/13/2019 NGN NG LP TRNH (1)

    52/137

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    53/137

    53

    Cppht bnhng Cpbnhcho mtbintheo nhu cucthca

    chngtrnh

    Binccpbnhphil con tr

    Sdngton tnew

    Giiphng bnhbngton tdelete

    newkiunewkiu[kch_thc]

    deletetn_bin;delete[]tn_bin;

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    54/137

    54

    Cppht bnhngV d

    int*p;

    p = newint; // cpvng nh4 byte cho p

    // . . .deletep;

    p = newint[10]; // cpvng nh40 byte cho p

    // . . .

    delete[]p;

    p = newint[5]; // cpvng nh20 byte cho p

    // . . .

    delete[]p;

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    55/137

    55

    Thit k v ci t chng trnh thc hin cc thao tc sau:

    Khai bo mt mng cha ns nguyn vi nc nhp t bn phm t gi tr ngu nhin t 1 .. 1000 cho cc phn t ca mng (dng hmrand())

    m s lng s chn, s l v s chia ht cho 8 ca mng

    Debug on biu thc sau:

    chars[100] = "1234567890"; short*p = (short*)s;

    *(p += 2) = 0x41; cout

  • 8/13/2019 NGN NG LP TRNH (1)

    56/137

    56

    Cutrc cahm

    kiu tn_hm(danh sch tham s)

    {

    cc biu thc

    }

    Vi d

    intfactorial(intn) { ... }

    doublepower(doublex, intn) { ... }

    void main() { ... }

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    57/137

    57

    prototype cahm

    kiu tn_hm(danh sch kiu);

    Vi d

    intfactorial(int);

    doublepower(double, int );

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    58/137

    58

    Bng 4.2. Quy tc tham s

    Tham s Khai bo

    Tham tr kiu tn

    Mng kiu tn*+

    Con tr kiu tn

    Tham chiu kiu & tn

    Ch :

    Dng tham s con tr thay cho mng trong prototype ca hm

    VD. intsum(int*, int);

    C th dng t kha const cm thay i gi tr cc tham s trong hm VD. intmax(constint, constint);

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    59/137

    59

    Tham smcnh

    ctsngi tr Khai bo cuidanh sch tham s Chcntruyniskhi gi trcaiskhc gi tr

    mcnh

    V d

    doublepower(doublex, intN = 2) {...

    }

    a = power(3); // N = 2

    a = power(3, 4); // N = 4

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    60/137

    60

    Ton treturn

    return;

    // thot khi hm

    // dng cho cc hm kiu void

    Vi d

    voidmain()

    {

    // cc biu thc

    if(a == 0)return;

    // cc biu thc

    }

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    61/137

    61

    Ton treturn

    return(biu thc);

    // thot khi hm

    // dng cho cc hm khc kiu void

    // tr v cho hm gi tr ca biu thc

    Vi d

    // hm tnh gi tr ln nht ca a v b

    intmax(inta, intb)

    {

    if(a > b) //returna; // return (a > b? a: b);

    returnb; //

    }

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    62/137

    62

    Gihm

    tn_hm(danh sch i s)

    //tn_hm phi c khai bo trc khi gi

    // danh sch i s phi ph hp vi danh sch tham s

    // v s lng v kiu

    Vi d

    voidmain()

    {

    intf = Factorial(5);doublep = power(2.5, 3);

    }

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    63/137

    63

    Bng4.2. Quy tc truyn i s

    is/ Tham s Tham tr Mng Con trThamchiu

    Hng gi tr - - -

    Binn tn - &tn tn

    Tham chiu tn - &tn tn

    Con tr *tn tn tn *tn

    Mng - tn tn -

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    64/137

    64

    Quy tc truyn i s

    // hm tnh tng N phn t ca mng A

    intsum(intA[], intN)

    {

    ints = 0;

    for(inti = 0; i < N; i++)

    s += A[i];

    returns;

    }

    voidmain()

    {intarr[] = { 1, 2, 3, 4 };

    ints = sum(arr, 4);

    }

  • 8/13/2019 NGN NG LP TRNH (1)

    65/137

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    66/137

    66

    Cc m hnh nhnghahm

    // 1.cpp

    voidfoo(inta){

    // khng thgigoo}

    voidgoo(inta, intb){

    // c thgifoo}

    // 2.cpp

    // prototype cafoo v gooexternvoidfoo(int);externvoidgoo(int, int);

    // 1.cpp

    // prototype cafoo v gooexternvoidfoo(int);externvoidgoo(int, int);

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    67/137

    67

    Cc m hnh nhnghahm

    // 1.cpp

    // prototype cafoo v goovoidfoo(int);voidgoo(int, int);

    voidfoo(inta){

    // c thgigoo}

    voidgoo(inta, intb)

    {// c thgifoo

    }

    // 2.cpp

    // prototype cafoo v gooexternvoidfoo(int);externvoidgoo(int, int);

    // 3.cpp

    // prototype cafoo v gooexternvoidfoo(int);externvoidgoo(int, int);

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    68/137

    68

    Cc m hnh nhnghahm

    // 1.cpp#include "1.h"

    voidfoo(inta){

    // c thgigoo}

    voidgoo(inta, intb){

    // c thgifoo}

    #include "1.h"// c thgittc

    // cc hm khai bo// trong 1.h

    // 1.h#pragma once

    voidfoo(int);voidgoo(int, int);

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    69/137

    69

    Hm inline

    Chng trnh dchthay cc biuthccahm inlinevo biuthcgihm

    Khng nn cha cc vng lp

    V d

    inlinedoublemodul(doublea, doubleb)

    {

    returnsqrt(a * a + b * b);

    }

    voidmain(){

    cout

  • 8/13/2019 NGN NG LP TRNH (1)

    70/137

    70

    Con tr hmV d

    intfoo(int n) {

    if(n < 2) return1;

    returnn * foo(n 1);

    }intgoo(inta) { returna * a; }

    intget(intx, int(*f)(int)) { returnf(x); }

    voidmain(){

    cout

  • 8/13/2019 NGN NG LP TRNH (1)

    71/137

    71

    Hm tr v tham chiuV d

    int& max(int&a, int&b) {

    return(a > b? a: b);

    }

    voidmain()

    {

    intx = 5, y = 10;

    cout

  • 8/13/2019 NGN NG LP TRNH (1)

    72/137

    72

    Cc hm xpchng(overload)

    Cc hm cng tn Phn bitbngkiuhocdanh sch tham s

    doublepower(double

    x) {returnx * x;}doublepower(doublex, intN) {

    if(N == 0) return 1;if(N < 0) return 1/power(x, -N);returnx * power(x, N 1);

    }doublepower(doublex, doubley) {

    returnexp(y * log(x));}

    V d

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    73/137

    73

    Cc hm xpchng(overload)

    Chngtrnh dchstgihm ph hpdavocc istruyncho hm

    doublea;

    a = power(2); // gihm: double power(double)

    a = power(2, 3); // gihm: double power(double, int)

    a = power(2, 3.0); // gihm: double power(double, double)

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    74/137

    74

    Hm mu

    Dng sinh ra cc hm c cutrc gingnhau, chphn bitvkiucacc tham s

    V d

    template

    _T abs(_T x){

    return(x < 0? x: x);

    }

    void main()

    {

    cout

  • 8/13/2019 NGN NG LP TRNH (1)

    75/137

    IV. Hm, mngv con tr

  • 8/13/2019 NGN NG LP TRNH (1)

    76/137

    76

    Ci thm sau:

    IsSorted 1. . ; *0, 1 0, 1

    1 1 = 1 > + 1 0

    = 0 < + 1 0

    1

    Ci tcc hm spxpv tm kim

    Vitchngtrnh so snh cc thutton spxpvicc mng100,

    1000, 10000 v 100000 phnt

  • 8/13/2019 NGN NG LP TRNH (1)

    77/137

    V. Kiudliutrutng

    Cc khi nim

    Xy dng ADT

    Cc ton t

    K tha

    77

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    78/137

    78

    Kiudliutrutng(ADT)kiuc

    nhngham tcho mtsvtCc tnh cht

    nggicc binv cc hm ckhai bo trong

    mtkhi, cho php che ducc thnh vin KthaADT (dnxut) cxy dngtrn nnmtADT khc (cs), c thsdnglicc thnhphncaADT cs

    itngmtbinthucmtADT

  • 8/13/2019 NGN NG LP TRNH (1)

    79/137

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    80/137

    80

    V d(struct):structRectangle

    {

    doublex1, y1;

    doublex2, y2;

    doubleArea() { return(y2 - y1) * (x2 - x1); }

    };

    structElipse : publicRectangle

    {

    doubleArea()

    {returnRectangle::Area() * 3.14 / 4;

    }

    };

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    81/137

    81

    V d(class):classRectangle{public:

    doublex1, y1;doublex2, y2;doubleArea() { return(y2 - y1) * (x2 - x1); }

    };

    classElipse : publicRectangle{public:

    doubleArea()

    {returns = Rectangle::Area() * 3.14 / 4;

    }};

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    82/137

    82

    V d(cc itng):

    voidmain()

    {

    Rectangle r = { 1, 1, 6, 3 };

    Elipse e;

    e.x1 = 12; e.y1 = 2;

    e.x2 = 17; e.y2 = 7;

    cout

  • 8/13/2019 NGN NG LP TRNH (1)

    83/137

    83

    Cc vng truy cp

    protectedpublic private

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    84/137

    84

    Cutrc caADTclasstn_ADT

    {

    private|protected|public:

    // cc binthnh vin (cc thuctnh)

    private|protected|public:

    // cc hm topublic:

    // hm hy

    private|protected|public:

    // cc hm thnh vin khc (cc phngthc)

    public:

    // cc ton tthnh vin

    // cc hm v cc ton tfriend

    };

  • 8/13/2019 NGN NG LP TRNH (1)

    85/137

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    86/137

    86

    Cutrc caADT Cc hm phctpnn nhnghangoi khikhai

    bo ADT

    classtn_ADT

    {kiutn_hm(danh sch tham s);

    };

    kiutn_ADT::tn_hm(danh sch tham s)

    {// cc biuthc

    }

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    87/137

    87

    Hm tov hm hyHm to(constructor)

    Dng thitlpgi trcho cc binhoccpphtbnhcho cc mngng

    cgitrong cc biuthckhai bo itnghoccppht bnh

    Hm hy(destructor)

    Dng giiphng bnhcppht cgikhi ktthc khikhai bo itnghoc

    trong biuthcgiiphng bnh

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    88/137

    88

    Hm tov hm hy

    classtn_ADT

    {

    public:

    tn_ADT(); // hm tomcnh

    tn_ADT(danh sch tham s); // hm tothitlp

    tn_ADT(const tn_kiu&); // hm tocopy

    ~tn_ADT(); // hm hy

    };

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    89/137

    89

    nhnghahm to(inline)

    classtn_ADT

    {

    public:

    tn_ADT(danh sch tham s): tn_bin(biuthc)

    , ...

    {

    // cc biuthc

    }

    };

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    90/137

    90

    V d(class Time)classTime

    {

    longticks;

    public:

    Time() { ticks = 0; }

    Time(longvalue) : ticks(value) { }

    Time(constTime & t) : ticks(t.ticks) { }

    ~Time() { }

    public:

    longSeconds() { returnticks / 1000; }longMinutes() { returnSeconds() / 60; }

    longHours() { returnSeconds() / 3600; }

    };

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    91/137

    91

    V d(class Time)

    voidmain(){

    Time *p;Time t1; // giTime()Time t2(1000); // giTime(long)

    Time t3 = t2; // giTime(const Time &)

    p = newTime(100); // giTime(long)

    cout

  • 8/13/2019 NGN NG LP TRNH (1)

    92/137

    92

    V d(class String)

    Cc binthnh vin v cc hm static

    classString

    {

    char*data; // Vng dliuchacc k tintlen; // Sk t

    public:

    // Lydi xu src

    static intGetLength(constchar* src);

    // copy xu src vo dst

    static voidCopy(char* dst, constchar* src);

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    93/137

    93

    V d(class String)

    Cc hm privateprivate:

    // Hm toilngchacn k tString(intn) { createData(n); }

    // copy xu src vo datavoidcopyData(constchar* src) { Copy(data, src); }

    // Tovng dliuchan k tvoidcreateData(intn){

    len = n;data = newchar[n + 1];data[n] = 0;

    }

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    94/137

    94

    V d(class String)

    Cc hm tov hm hypublic:

    String() { createData(0); }

    String(constchar* src) {createData(GetLength(src));copyData(src);

    }

    String(constString & src) {createData(src.len);

    copyData(src.data);}

    ~String() { delete[] data; }

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    95/137

    95

    V d(class String)

    Cc hm public

    public:

    // Lysk t

    intLength() { returnlen; }

    // So snh viitngsrc

    intCompare(constString & src) const

    {

    returnCompare(src.data);

    }

    // So snh vixu src

    intCompare(constchar* src) const;

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    96/137

    96

    V d(class String)

    Cc ton t

    public:String operator=(constchar* src);

    String operator=(String & src);

    // Cc ton tkhc

    }; // class String

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    97/137

    97

    V d(class String)

    nhnghacc hm

    intString::GetLength(constchar* src)

    {

    registerinti = 0;

    while(src[i]) ++i;returni;

    }

    voidString::Copy(char*dst, constchar* src)

    { for(registerinti = 0; src[i]; i++)

    dst[i] = src[i];

    }

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    98/137

    98

    V d(class String)

    nhnghacc hm

    intString::Compare(constchar*src) const

    {

    for(inti = 0; i src[i]? 1: -1);

    }

    return0;

    }

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    99/137

    99

    Ton tgn

    {

    Time t1, t2;

    String s1, s2;

    t1 = t2;

    s1 = s2;

    }

    t1.ticks = t2.ticks

    s1.len = s2.lens1.data = s2.data

    delete[] s2.datadelete[] s1.data sinh ra liv s1.data bxa

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    100/137

    100

    Ton tgn

    // Bsung ton tgn cho String

    String& operator=(const String & right)

    {

    delete[] data; // xa vng dliuc

    createData(right.len); // tovng dliumi

    copyData(right.data); // copy dliutsrc

    return*this; // trvbnthn itng

    }

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    101/137

    101

    Cc ton tshc// Bsung ton tshccho TimeTime operator+(const Time right)

    {

    returnTime(ticks + right.ticks);

    }

    // Bsung ton tshccho String

    String operator+(constString & right)

    {

    String s(len + right.len);

    copy(s.data, data);

    copy(s.data + len, right.data);

    returns;

    }

    (const Time right)(const String & right)

    C g khc nhau ?

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    102/137

    102

    Cc ton tkthp// Bsung ton tkthpcho TimeTime & operator+=(const Time right) {

    ticks += right.ticks;return*this;

    }

    // Bsung ton tkthpcho StringString operator+=(constString & right) {

    String s(len + right.len);copy(s.data, data);copy(s.data + len, right.data);

    len = s.len;char*p = data; data = s.data; s.data = p;return*this;

    }

  • 8/13/2019 NGN NG LP TRNH (1)

    103/137

  • 8/13/2019 NGN NG LP TRNH (1)

    104/137

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    105/137

    105

    Ton thm

    kiuoperator()(danh sch tham s) { ... }

    V d

    Lygi trcahm theo mttpcc is Truy cpphntcamngn chiu

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    106/137

    106

    Cc ton ttng/gim// Bsung ton t++ cho Time

    // Trnghpton t bn phi

    Time & operator++() {

    ticks++;

    return*this;

    }

    // Trnghpton t bn tri

    friendTime & operator++(Time & right) {

    right.ticks++;

    returnright;

    }

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    107/137

    107

    Cc ton tlungvo/ra// Bsung ton tlungra cho Timefriendostream & operator

  • 8/13/2019 NGN NG LP TRNH (1)

    108/137

    108

    Cc ton tp kiu

    // Bsung ton tp sang kiulong cho Time

    operatorlong() { returnticks; }

    // Bsung ton tp sang kiuxu k tcho String

    operatorchar*() { returndata; }

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    109/137

    109

    Xy dng class PhanSo m t kiu phn s gm cc thnh phn sau:

    Hai bin a, bcha t s v mu s

    Cc hm to

    Cc ton t cng, tr, nhn, chia v kt hp

    Ton t lung ra

    VD. PhanSo a(2, 4); cout

  • 8/13/2019 NGN NG LP TRNH (1)

    110/137

    110

    M hnh

    classADT_c_s{

    protected|public:

    virtualvoidfoo() { ... }

    };

    classADT_dn_xut: public|protected|privateADT_c_s{protected|public:

    void foo()

    {

    // phnmrng

    ADT_c_s::foo();// phnmrng

    }

    };

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    111/137

    ADT_dn_xut: public ADT_c_s

    111

    Cc vng truy cp

    ADT_c_s

    protectedpublic private

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    112/137

    112

    V d v s k thaclassB {protected: intx;public:

    B(inta = 0) : x(a) { }virtualvoidPrint() { cout

  • 8/13/2019 NGN NG LP TRNH (1)

    113/137

    113

    V d v s k tha

    voidmain()

    {

    B b(5);

    D d(1, 2);

    d.Inc();

    B *p = &b;

    p->Print(); // giB::Print() -> 5

    p = &d;p->Print(); // giD::Print() -> 1, 3

    }

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    114/137

    114

    Lp c s trutng

    classADT_c_s{

    ...

    virtualvoidfoo() = 0;

    };

    classADT_dn_xut: public|protected|privateADT_c_s{

    ...

    void foo()

    {

    // ...}

    };

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    115/137

    115

    Lp c s tru tng

    classShape

    {

    String _name;

    public:

    Shape(constchar*name) : _name(name) { }

    voidPrint()

    {

    cout

  • 8/13/2019 NGN NG LP TRNH (1)

    116/137

    116

    K tha t lp c s tru tng

    classRectangle : publicShape

    {

    int_w, _h;public:

    Rectangle(inta, intb)

    : Shape("Rectangle"), _w(a), _h(b) { }

    doubleArea() { return_w * _h; }

    };

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    117/137

    117

    K tha lp c s tru tng

    classTriangle : publicShape

    {

    int_a, _b, _c;

    public:

    Triangle(inta, intb, intc): Shape("Triangle"), _a(a), _b(b), _c(c) { }

    doubleArea()

    {

    doubles = (_a + _b + _c) / 2;

    returnsqrt(s * (s - _a) * (s - _b) * (s - _c));}

    };

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    118/137

    118

    V dvoidmain()

    {

    Shape *s[2];

    s[0] = newRectangle(2, 5);

    s[1] = newTriangle(3, 4, 5);

    for(inti = 0; i < 2; i++)

    {

    s[i]->Print();

    deletes[i];

    }

    }

    Rectangle: Area = 10

    Triangle: Area = 12

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    119/137

    119

    ADT mutemplate classShape{

    _T edge[n]; // cc cnhpublic:

    _T Bound();};

    template _T Shape::Bound(){

    intc = 0;for(inti = 0; i < n; i++) c += edge[i];returnc;

    }

    voidmain(){

    Shape tamGiac; // tora class Shape c 3 cnhkiuintShape tuGiac;// tora class Shape c 4 cnhkiudouble

    }

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    120/137

    120

    class Matrix m t mt ma trn c cho di y

    template classMatrix {

    _T **data;introws, cols; // s hng v s ct

    voidcreateData(); // to vng d liu t rows v cols

    voidcreateData(intm, intn); // to vng d liu m hng, n ct

    voiddeleteData(); // xa d liu

    public:

    Matrix() : data(0) { }

    Matrix(intm, intn = 0); // to ma trn mxn hoc mxm

    Matrix(intm, intn, const_T*); // to ma trn mxn kiu u tin

    // hng t mng 1 chiu

    Matrix(constMatrix& M);

    ~Matrix() { deleteData(); }

    _T& operator()(inti, intj) { returndata[i][j]; }

    };

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    121/137

    121

    nh ngha cc hm ca Matrix

    template voidMatrix::createData()

    {

    data = new_T *[rows];

    for(inti = 0; i < rows; i++)

    data[i] = new_T[cols];

    }

    template voidMatrix::deleteData()

    {

    if(data == 0) return;

    for(inti = 0; i < rows; i++)delete[]data[i];

    deletedata;

    }

    V. Kiudliutrutng

  • 8/13/2019 NGN NG LP TRNH (1)

    122/137

    122

    Cc yu cu: Hon thnh tt c cc hm ca class Matrix

    B sung ton t gn, v cng ma trn Xy dng class Graphic m t th c hng khng trng s k

    tha t Matrix v c th s dng trong on biu thc sau:

    intM[] = {

    0, 1, 1, 0, 1,1, 0, 1, 0, 0,

    1, 0, 0, 1, 1,

    0, 0, 1, 0, 1,

    0, 1, 0, 1, 0

    };Graphic g(5, M);

    g.DFT(2); // in ra mn hnh ch s cc nh

    // theo chiu su bt u t nh 2

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    123/137

    Array, BoundStack vBoundQueue

    LinkedList

    Binary Search Tree

    123

    Link n file code y :https://docs.google.com/open?id=0B4vBa0QnLWSraGRyVkJKaFUwekE

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    124/137

    124

    template classArray {

    protected:

    T *data;

    intsize;

    public:

    Array();

    Array(intlength);

    Array(constArray& a);~Array();

    public:

    voidCopyFrom(T *);

    intSize();

    public:

    T& operator[](intindex);

    Array& operator=(constArray& a);

    };

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    125/137

    125

    template classBoundStack : protectedArray {

    inttop;public:

    BoundStack();

    BoundStack(intsize);

    public:

    voidPush(T value);

    T Pop();

    T Top();

    intIsEmpty();

    intIsFull();

    intCount();T operator[](intindex);

    };

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    126/137

    126

    template classBoundQueue : protectedArray {

    intfront, rear;

    intcount;

    voidInc(int&i);

    public:

    BoundQueue();

    BoundQueue(intsize);

    public:voidEnqueue(T value);

    T Dequeue();

    intIsEmpty();

    intIsFull();

    intCount();

    T operator[](intindex);

    };

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    127/137

    127

    ngdngstack trong QuickSort

    template classSort {classSegment {public:

    intLb, Ub;Segment() { }Segment(intl, intr) : Lb(l), Ub(r) { }

    voidSwap(T &a, T &b) { T t = a; a = b; b = t; }intDoPart(Array &); // Phn onArray

    // Sp xp Array trong on [Lb, Ub] bngInsertSortvoidDoSort(Array &);

    }; // Segmentpublic:

    staticvoidDoSort(Array &);};

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    128/137

    128

    ngdngstack trong QuickSorttemplate voidSort::DoSort(Array &a)

    {

    intn0 = 10, len = a.Size();

    BoundStack s(len/n0 + 1);

    s.Push(Segment(0, len - 1));

    while(!s.IsEmpty()) {Segment b = s.Pop();

    if(b.Ub - b.Lb + 1 > n0) {

    intj = b.DoPart(a);

    if(b.Lb < j - 1) s.Push(Part(b.Lb, j - 1));

    if(b.Ub > j + 1) s.Push(Part(j + 1, b.Ub));

    } else

    b.DoSort(a);

    }

    }

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    129/137

    129

    S dng class Sort#include"stdafx.h"

    #include"ds.h"

    #include

    usingnamespacestd;

    intmain(){

    intv[] = { 7, 5, 4, 8, 9, 1, 3, 2, 0, 6 };

    Array a(10);

    a.CopyFrom(v);

    Sort::DoSort(a);

    for(inti = 0; i < a.Size(); i++) cout

  • 8/13/2019 NGN NG LP TRNH (1)

    130/137

    130

    class LinkedListtemplate classLinkedList{protected:

    // on nh ngha cc lp con //baseList h;intn;

    public:

    LinkedList() : n(0) { }~LinkedList() { h.makeEmpty(); }

    intIsEmpty() { returnn == 0; }intCount() { returnn; }

    _Ti PopBegin();

    _Ti PopEnd();voidRemoveAll() { h.makeEmpty(); n = 0; }voidPushBegin(const_Ti& i);voidPushEnd(const_Ti& i)

    };

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    131/137

    131

    Cc lp conclassbaseList {

    public:

    baseList *next, *prev;

    baseList() { next = prev = this; }

    voidinsertAfter(const_Ti& info);voidremove();

    voidmakeEmpty();

    };

    classinfoList : publicbaseList {

    public:_Ti info;

    infoList(const_Ti& i) : info(i) { }

    };

  • 8/13/2019 NGN NG LP TRNH (1)

    132/137

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    133/137

    133

    class c s

    template classbaseBST {

    public:

    baseBST() { }

    virtualbaseBST * insert(const_Ti& ) = 0;

    virtualbaseBST * contents(const_Ti& ) { return0 ; }

    virtualbaseBST * remove(const_Ti& ) { returnthis; }

    virtualbaseBST * getSuccessor() { return0; }

    virtualvoidmakeEmpty() { }

    virtual_Ti * Info() { return0; }

    };

    template

    int_compare(const_Ti& a, const_Ti& b){

    return(a < b? -1: a > b);

    }

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    134/137

    134

    class BSTtemplateclassBST {

    // on nh ngha cc class con //nullBST nullBST;baseBST * root;

    public:BST() { root = (baseBST *)&nullBST; }

    ~BST() { root->makeEmpty(); }

    voidInsert(const_Ti& info) {root = root->insert(info);

    }voidDelete(const_Ti& i) {

    root = root->remove(i);

    }boolContents(const_Ti& i) {

    returnroot->contents(i);}

    };

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    135/137

    135

    nh ngha cc class conclassnullBST : baseBST {public:

    baseBST * insert(const_Ti& i) { returnnewinfoBST(i, this); }};

    classinfoBST : baseBST {_Ti info;

    baseBST *left, *right;public:

    infoBST(const_Ti& i, baseBST *nullBST) : info(i) {left = right = nullBST;

    }

    voidmakeEmpty();

    baseBST * insert(const_Ti& );baseBST * contents(const_Ti& );baseBST * remove(const_Ti& );baseBST * getSuccessor();

    };

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    136/137

    136

    ng dng kim tra khai bo bin#include"ds.h"#include

    usingnamespacestd;

    classVarDef

    {

    public:string name;

    intline;

    VarDef() { }

    VarDef(constchar* s, intl) : name(s), line(l) { }

    staticintcompare(constVarDef& a, constVarDef& b)

    {

    returna.name.compare(b.name);

    }

    };

    VI. Cc cutrc dliucbn

  • 8/13/2019 NGN NG LP TRNH (1)

    137/137

    ng dng kim tra khai bo binvoidmain(){

    charvars[][100] ={ "x", "y", "a", "b", "x", "k", "i", "k", "m", "n"};

    BST bst;BoundQueue e(10);

    for(inti = 0; i < 10; i++) {VarDef v(vars[i], i + 1);if(!bst.Contents(v)) bst.Insert(v);elsee.Enqueue(v);

    }

    for(inti = 0; i < e.Count(); i++) {

    VarDef v(e[i]);cout