You are on page 1of 194

TRNG I HC M TP.

HCM

GIO TRNH LP TRNH C++

L PH HIU Bin son


TRNG I HC M TP.HCM

GIO TRNH LP TRNH C++


DNG CHO SINH VIN THUC KHI NGNH K THUT KHNG CHUYN V CNG NGH THNG TIN

Tc gi L Ph Hiu

THNH PH H CH MINH

LI NI U

C++ hin l ngn ng lp trnh (NNLT) c a chung v s dng rng ri do tnh nng mnh m, a dng ca n. y l NNLT c nhiu trng i hc v cao ng trong v ngoi nc s dng ging dy lp trnh ban u cho sinh vin. Gio trnh Lp trnh C++ ny c vit nhm phc v cho i tng l sinh vin cc h Cao ng v i hc thuc khi ngnh K thut (Khng chuyn v Cng ngh Thng Tin). Mc tiu ca gio trnh nhm cung cp kin thc c bn v ngn ng lp trnh C++, gii quyt nhng bi ton lp trnh trong nhiu lnh vc khc nhau nh: tnh ton, k thut, sinh hc, qun l, Vi s lng trang khim tn, gio trnh ny gii hn, khng cp n cch tip cn lp trnh hng i tng m ch nhn mnh n kiu lp trnh truyn thng, lp trnh n th (module), theo tip cn hng cu trc. Kiu lp trnh truyn thng l quan trng v theo kin c nhn l bt buc phi ging dy cho ngi mi bt u hc lp trnh trc khi chuyn sang hc lp trnh theo tip cn hng i tng. Gio trnh c t chc thnh 8 chng, cui mi chng u c cu hi v bi tp cng c kin thc phn l thuyt. Phn l thuyt c trnh by c ng, tp trung vo nhng kin ct li, cn thit p dng trong vit m
3

chng trnh. Phn gii bi tp s c thc hin trong ti liu khc. Cc chng trnh v d minh ha trong ti liu c th nghim v chy tt trong mi trng Visual C++ 6.0. Gio trnh ny c th c dng lm ti liu cho sinh vin t hc. Ging vin cng c th s dng tham kho trong ging dy mn lp trnh. Mc d c nhiu c gng nhng khng th trnh khi thiu st, rt mong nhn c s nhn xt, ph bnh ca ng nghip v bn c ti liu c hon thin hn. Tc gi

Mc lc
B GIO DC V O TO _________________________________ 1 CHNG 1. MT S KHI NIM C BN V LP TRNH _____ 13 1. Thut ton (Algorithm) ________________________________ 13 1.1. Khi nim ________________________________________ 13 1.2. Cc c trng ca thut ton __________________________ 13 1.3. Cc cng c biu din thut ton _______________________ 14 2. Ngn ng lp trnh (NNLT)_____________________________ 15 3. Chng trnh (my tnh) _______________________________ 16 4. Cc bc xy dng chng trnh ________________________ 17 5. Cu hi v bi tp _____________________________________ 18 CHNG 2. CC YU T C BN CA NNLT C/C++ __________ 21 1. B k t (character set) ________________________________ 21 2. Danh hiu (identifier) __________________________________ 21 3. T kha (keyword) ____________________________________ 22 4. Ch thch (comment) __________________________________ 22 5. Cc kiu d liu c bn (base type) ______________________ 23 5.1. S nguyn ________________________________________ 23

5.2. S thc ( chnh xc n 6 ch s l) ________________ 23 5.3. S thc ( chnh xc kp 15 ch s l): _______________ 24 5.4. K t _____________________________________________ 24 6. Hng (constant)_______________________________________ 25 Mt s k t c bit: ________________________________________ 26 7. Bin (variable)________________________________________ 27 8. Biu thc (expression) _________________________________ 29 9. Chuyn i kiu (type conversion) _______________________ 29 10. Cc ton t (operator) _________________________________ 30 10.1. Ton t s hc _____________________________________ 30 10.2. Ton t quan h (so snh) ____________________________ 30 10.3. Ton t logic ______________________________________ 31 10.4. Ton t gn _______________________________________ 31 10.5. Ton t iu kin ( ? : ) _____________________________ 32 10.6. Ton t tng (++), gim () mt n v _________________ 33 Biu thc c dng __________________________________________ 33 10.7. Ton t dch chuyn s hc ___________________________ 34 10.8. Ton t thao tc trn tng bt _________________________ 34

10.9. Ton t p kiu ( ni trn) ________________________ 34 10.10.Ton t ly a ch ca ( & ) ________________________ 34 10.11.Ton t sizeof: _____________________________________ 34 11. u tin v trt t kt hp cc ton t (precedence and associativity) _____________________________________________ 35 12. Cu lnh (statement, instruction) ________________________ 36 13. Xut / Nhp d liu n gin trong C/C++ ________________ 37 14. Mt vi chng trnh C/C++ n gin ___________________ 39 15. Cu hi______________________________________________ 46 16. Bi tp v php ton v biu thc ________________________ 49 CHNG 3. CC CU TRC IU KHIN (CONTROL STRUCTURES) ____________________________________________ 62 1. Cu trc r nhnh (if then else ) __________________ 62 2. Cu trc la chn (switch . . .)___________________________ 66 3. Cu trc lp while () _________________________________ 69 4. Cu trc lp do while ()____________________________ 71 5. Cu trc lp for () ___________________________________ 74 6. Cu lnh break _______________________________________ 77 7. Cu lnh continue (t dng) _____________________________ 78

8. Cu lnh goto ________________________________________ 78 9. Cu hi______________________________________________ 79 10. Bi tp ______________________________________________ 91 10.1. Cu trc r nhnh ___________________________________ 91 10.2. Cu trc la chn ___________________________________ 92 10.3. Cu trc lp _______________________________________ 93 CHNG 4. HM (FUNCTION) ____________________________ 102 1. Khi nim __________________________________________ 102 2. Khai bo v nh ngha hm ___________________________ 103 3. Lnh return _________________________________________ 104 4. Cc dng hm _______________________________________ 104 4.1. Hm khng c tham s _____________________________ 104 4.2. Hm vi nhiu tham s _____________________________ 106 4.3. Hm nguyn mu (function prototype) _________________ 107 4.4. T chc mt chng trnh C/C++ (trn cng 1 tp tin) ___ 108 5. Cc phng php truyn tham s _______________________ 109 6. Phm vi (scope) v cp lu tr (storage class) ca cc i tng __________________________________________________ 111 6.1. Phm vi _________________________________________ 111
8

6.2. Cp lu tr _______________________________________ 113 7. C ch gi hm v b nh stack ________________________ 120 8. Hm c tham s vi gi tr ngm nh (Function with default arguments) ______________________________________ 123 9. Np chng hm (Function overloading) __________________ 124 10. Mt s gi khi thit k hm __________________________ 126 11. Mt s v d minh ha ________________________________ 127 12. Cu hi_____________________________________________ 127 13. Bi tp _____________________________________________ 131 CHNG 5. KIU MNG (ARRAY) _________________________ 134 1. Khi nim __________________________________________ 134 2. Khai bo & khi to gi tr cc phn t mng trong C/C++ _______________________________________________ 134 3. Truy xut cc phn t ca mng _______________________ 136 4. Truyn tham s mng cho hm _________________________ 137 5. Cc thao tc c bn trn mng 1 chiu ___________________ 138 5.1. Nhp gi tr cho cc phn t mng. ____________________ 138 5.2. Xut gi tr cc phn t mng (ra mn hnh). ____________ 140 5.3. Thm 1 phn t vo mng. __________________________ 141

5.4. Xa mt phn t ra khi mng. _______________________ 142 5.5. Tm kim trn mng. _______________________________ 143 5.6. Sp xp mng. ____________________________________ 145 6. Cu hi_____________________________________________ 149 7. Bi tp _____________________________________________ 149 Mng 1 chiu _____________________________________________ 149 Mng 2 chiu _____________________________________________ 152 CHNG 6. CON TR (POINTER) __________________________ 153 1. Khi nim __________________________________________ 153 2. Khai bo bin con tr _________________________________ 153 3. Truy xut bin tr ___________________________________ 154 4. S hc con tr _______________________________________ 155 5. Lin h gia con tr v mng __________________________ 156 6. Con tr a cp_______________________________________ 157 7. Truyn tham s con tr cho hm _______________________ 158 8. Mng cc con tr ____________________________________ 158 9. T kha const vi con tr _____________________________ 159 10. Cp pht ng _______________________________________ 160

10

11. Con tr hm ________________________________________ 164 12. Con tr v chui k t ________________________________ 165 13. ng dng con tr ____________________________________ 167 14. S lc v kiu tham chiu (Reference) - Ch c trong C++. _ 167 15. Bi tp _____________________________________________ 168 CHNG 7. KIU STRUCT ________________________________ 175 1. Khi nim __________________________________________ 175 2. Khai bo v truy xut bin struct trong C ______________ 175 3. Lnh typedef ________________________________________ 177 4. Kiu enum __________________________________________ 178 Khai bo _________________________________________________ 178 5. Mng cc struct______________________________________ 179 6. Con tr tr n bin kiu struct ________________________ 180 7. Truyn tham s kiu struct cho hm ____________________ 181 8. Kiu union __________________________________________ 181 9. Bi tp _____________________________________________ 182 CHNG 8. File __________________________________________ 183 1. Gii thiu chung _____________________________________ 183

11

2. Thao tc trn kiu file ________________________________ 183 2.1. M File ( lin kt knh nhp/xut vi file a ) ___________ 183 2.2. X l File ________________________________________ 184 2.3. ng File ________________________________________ 185 2.4. V d Vo/Ra File nh dng _________________________ 185 2.5. V d Vo/Ra k t _________________________________ 188 2.6. V d Vo/Ra File nh phn __________________________ 189 3. Bi tp _____________________________________________ 191 TI LIU THAM KHO ___________________________________ 193

12

CHNG 1. MT
TRNH

S KHI NIM C BN V LP

1. Thut ton (Algorithm) 1.1. Khi nim Thut ton l khi nim c s ca ton hc v tin hc. Thut ton l phng php th hin li gii ca vn bi ton. Thut ton l dy cc thao tc, cc hng dn r rng, c sp xp theo mt trnh t xc nh, sao cho 2 b x l (ngi/my) khc nhau, vi cng iu kin u vo nh nhau th sau mt s bc hu hn thc hin, s cho kt qu ging nhau m khng cn bit ngha ca cc thao tc ny. Cn ch l khng phi mi dy thao tc, ch dn no cng u to ra thut ton. Phng php nu n, cch dng thuc,. .. u khng phi l thut ton do cc thao tc, cc ch dn l khng xc nh, khng r rng. 1.2. Cc c trng ca thut ton Tnh xc nh: Cc thao tc ca thut ton phi xc nh, khng c nhp nhng, m h c th d dng ci t trn mt h t ng ha. Tnh dng: Thut ton phi dng sau mt s hu hn bc thc hin. Tnh ng n: Thut ton phi cho kt qu ng theo yu cu ca bi ton t ra.

13

Tnh ph dng: Thut ton c th c s dng li gii mt lp bi ton tng t. Tnh hiu qu: Thut ton cn ti u v s dng b nh v p ng yu cu ca bi ton trong thi gian ngn nht c th c. Thc t rt kh t c c 2 yu cu ny trong mt thut ton. 1.3. Cc cng c biu din thut ton Ngn ng t nhin: l ngn ng lit k cc bc, m t thut ton theo ngn ng t nhin ca con ngi. V d: Thut ton xc nh tr ln nht trong 5 s nguyn. B1. Gi a, b, c, d, e l 5 bin lu tr cc tr nguyn cho trc (nhp t bn phm). B2. Gi max l bin lu tr tr ln nht trong 5 s nguyn trn, v gi s a c tr ln nht. B3. Ln lt so snh tr ca max vi cc bin b, c, d, e cn li. Nu tr ca max nh hn bt k bin no th gn tr ca bin cho max. B4. Xut kt qu tr bin max ra mn hnh Lu thut ton hay s khi (Flow chart): l cng c cho php biu din thut ton mt cch trc quan. Thng ch c th dng cng c lu i vi cc thut ton tng i ngn, c th c biu din trong mt trang giy. Cc hnh c bn s dng trong lu :

14

Hnh oval m t im xut pht / kt thc. Hnh ch nht m t mt hay nhiu ch th my cn thc hin. Hnh bnh hnh m t thao tc nhp/xut d liu. Hnh thoi m t s r nhnh, la chn, php kim tra iu kin Mi tn ch hng lu chuyn ca cc thao tc. M gi (Pseudo code) gn ging nh ngn ng t nhin, nhng c s dng cc cu trc chun ha (khai bo bin, ch thch, cu trc iu khin, . . .) do ngi thit k quy nh. Ngn ng lp trnh (Programming language) l h thng cc k hiu cho php m t cc quy trnh tnh ton di dng vn bn. 2. Ngn ng lp trnh (NNLT) Cc thnh phn c bn ca NNLT bao gm: B k t (character set) hay bng ch ci dng vit chng trnh. C php (syntax) l b quy tc vit chng trnh. Ng ngha (semantic) xc nh ngha cc thao tc, hnh ng cn phi thc hin, ng cnh (context) ca cc cu lnh trong chng trnh. Hin c hng nghn NNLT c thit k, v hng nm li c thm nhiu NNLT mi xut hin. S pht trin ca NNLT gn lin
15

vi s pht trin ca ngnh tin hc. Mi loi NNLT ph hp vi mt s lp bi ton nht nh. Phn loi NNLT: Ngn ng my (machine language) hay cn gi l NNLT cp thp c tp lnh ph thuc vo mt h my c th. Chng trnh vit bng ngn ng my s dng bng ch ci ch gm 2 k t 0, 1. Chng trnh ngn ng my c np trc tip vo b nh v thc hin ngay. Ngn ng lp trnh cp cao ni chung khng ph thuc vo loi my tnh c th. Chng trnh vit bng NNLT cp cao s dng b k t phong ph hn, v phi c chuyn i sang dng m my my tnh c th hiu c bng chng trnh dch. Mt s NNLT cp cao thng dng hin nay: Pascal, C, C++, Java, Smalltalk, Basic, Ruby, Fortran, Algol, Lisp, Prolog, Cobol, 3. Chng trnh (my tnh) L tp hp hu hn cc ch th my c b tr, sp xp theo mt trt t xc nh, nhm gii quyt yu cu ca bi ton t ra. Chng trnh c vit bng mt NNLT c th no . Cc chng trnh C/C++ (trong mi trng DOS) c to ra bng 1 trnh son tho vn bn (EDITOR) nh: SK, NC Editor, VRES . . . Hin nay, cc chng trnh dch u tch hp sn editor ring cho php USER son thn, bin dch, kim li, lin kt v thc hin chng trnh mt cch d dng.

16

Cc chng trnh ny (m ngun source code), thc cht l dng ngn ng t nhin, do phi c bin dch li di dng m my (object code) m my tnh c th hiu c. Vic ny c thc hin bi chng trnh dch. C 2 loi chng trnh dch: Trnh thng dch (interpreter): mi lnh c dch sang m my v cho thc hin ngay. Trnh bin dch (compiler): ton b chng trnh ngun c dch sang m my (tp tin.obj), sau trnh lin kt (linker) s kt ni cc module chng trnh to thnh tp tin EXE. Ni chung, mt chng trnh my tnh c b cc thnh 3 phn:

Nhp

X l

Xut

4. Cc bc xy dng chng trnh B1. Xc nh ng yu cu ca bi ton: Cn xc nh phm vi, cc gii hn, rng buc, cc gi thit ca bi ton. c bit cn khc phc sc v mt tm l trong qu trnh tm hiu bi ton. B2. Xy dng thut gii: Cn c kin thc lin quan n vn ang gii quyt. Cn xc nh r thut ton s tc ng trn nhng i tng (thng tin) no ? C bao nhiu i tng (bin) cn x l? Mi bin c th c lu tr di dng no, kiu g ? Gi tr ban u ca cc bin ? Hnh dung trc kt xut DL sau khi x l s nh th no?

17

B3. Th hin thut gii bng lu thut ton (nu c). B4. Ci t thut ton bng mt NNLT c th: Dng mt trnh son tho VB to chng trnh ngun (source code) theo mt NNLT no . B5. Th nghim thut ton, nu sai quay li B2. Cn xc nh li ca thut ton thuc loi no: li v mt c php (syntax error), li lc thc hin chng trnh (run-time error), v li logic. Li c php xy ra lc bin dch chng trnh, do vi phm cc quy nh v mt c php ca NNLT ang s dng. Li ny tng i d khc phc. Li run-time error nh: divide by zero, stack overflow, khng b nh, Li logic (logic error) kh pht hin hn nhiu. B6. Kt thc. 5. Cu hi v bi tp Thut ton (Algorithm) Thut ton l g? Nu cc c trng cn c ca mt thut ton. Cc cch biu din mt thut ton? Ngn ng lp trnh (Programming language) l g? Nu cc bc xy dng thut ton. Danh hiu (Identifier) Danh hiu c dng lm g? Nh th no l mt danh hiu hp l? Nguyn tc s dng danh hiu?

18

T kha l g? c im ca cc t kha trong NNLT C/C++? Kiu d liu (Data type) Trnh by cc kiu d liu n gin m Anh (Ch) bit. Hng (Constant) Hng l g? Hng c s dng khi no? Cho bit cch thc khai bo mt hng? Cho v d v cch biu din hng nguyn, thc, k t, chui k t. Bin (Variable) Bin l g? Bin c s dng lm g? Cho bit cch thc khai bo mt bin? Hy cho bit cch thc lm thay i ni dung (gi tr) ca mt bin? Biu thc (Expression) Biu thc l g? Kiu ca biu thc do . . . . . . . . . . . . . . . .. quyt nh? Khi no xy ra vic p kiu t ng? Khi no cn phi s dng ton t p kiu?
19

Trnh by nguyn tc NNLT C/C++ tnh tr cc biu thc? Ton t Hy trnh by cc ton t m Anh (Ch) bit. Cho v d v ton t iu kin (.. .? .. ..: .. .). Hy vit biu thc tng ng khng c ton t !: ! (x <= 5) ! (x > 5) ! (x > 2 && y!= 3) ! (x > 2 || y == 3) ! (x == 1 &&! (x!= 3) || x > 10) ! (x > 100 || x < 0 &&! (x == 0)) Cu lnh (Statement, Instruction) Cho bit cc loi cu lnh trong C/C++ ? Cho v d.

20

CHNG 2. CC YU T C BN CA NNLT C/C++

1. B k t (character set) NNLT C/C++ ch chp nhn cc k t sau: Cc k t ch hoa: A, B, C,. .. , Z Cc k t ch thng: a, b, c, . . . , z Cc ch s: 0, 1, . . . , 9 Cc k t du: , . ! ? : . . . Cc k t trng: ENTER, BACKSPACE, khong trng. Cc k t c bit khc: + - * / ^ | # $ & % ( ) [ ] _ = ~ . . . 2. Danh hiu (identifier) Dng t tn cho cc i tng nh hng, bin, hm, . . . di ti a ca 1 danh hiu (ty theo chng trnh dch) thng l 31-32 k t. Danh hiu hp l c bt u bng mt k t ch ci hoc du gch ni (underscore), tip theo sau l dy cc k t ch hoc s hoc du gch ni, v khng php c khong trng gia. Nn t danh hiu theo cc gi sau: t tn cho cc i tng mt cch gi nh (Mnemonic). Tn hng c t bng ch hoa.

21

Tn bin, tn hm c t nh sau: t u tin bng ch thng, cc t cn li bt u bng ch hoa. Tn kiu d liu do USER nh ngha c bt u bng ch hoa. Ch : Mi danh hiu phi c khai bo trc khi s dng. TRNH BIN DCH s bo li undefined symbol trong qu trnh bin dch chng trnh nu vi phm nguyn tc ny. C/C++ phn bit ch hoa v ch thng (Case sensitive). Trong cng mt phm vi (scope), khng c t trng danh hiu.. 3. T kha (keyword) L t dnh ring v c ng ngha xc nh do NNLT quy nh. Mi NNLT u c mt b t kha ring. Ngn ng lp trnh C/C++ (version 3.1) th hin cc t kha di dng cc k t mu trng, cc danh hiu di dng cc k t mu vng, s di dng mu xanh l, . . . 4. Ch thch (comment) c dng lm cho chng trnh d c, d hiu, d bo tr hn. Chng trnh dch s b qua nhng ni dung nm trong phn ch thch. C 2 loi ch thch: Ch thch trn mt dng:
22

// . . . phn ch thch (cho n cui dng) Ch thch trn nhiu dng: /*... phn ch thch (c th tri di trn nhiu dng)... */ 5. Cc kiu d liu c bn (base type) 5.1. S nguyn Tn kiu: int Kch thc: 2 bytes v c phm vi biu din gi tr 32768 . . 32767 Cc php ton p dng c trn kiu int:: Cc php ton s hc: +, -, *, /, % Cc php ton so snh: <, <=, >, >=, ==, != Cc php ton dch chuyn s hc: >>, v << Cc php ton trn bit: ~ (not bit), & (and bit), | (or bit), ^ (xor bit) 5.2. S thc ( chnh xc n 6 ch s l) Tn kiu: float Kch thc: 4 bytes v c phm vi biu din gi tr 3.4E 38 . . 3.4E +38 Cc php ton p dng c trn kiu float: Cc php ton s hc: + , -, *, / (khng c php ton %) Cc php ton so snh: <, <=, >, >=, ==, !=

23

5.3. S thc ( chnh xc kp 15 ch s l): Tn kiu: double (Mc nh trong Visual C++) Kch thc: 8 bytes v c phm vi biu din gi tr 1.7E 308 . . 1.7E+308 Cc php ton p dng c trn kiu double: nh kiu float 5.4. K t Tn kiu: char Kch thc: 1 byte v c phm vi biu din gi tr 128 . . 127 Cc php ton p dng c trn kiu char: Cc php ton s hc: +, -, *, /, % Cc php ton so snh: <, <=, >, >=, ==, !=

m rng cc kiu d liu c s, C/C++ a thm cc tin t (prefix): short, long, unsigned, signed vo trc tn cc kiu c s nh sau: Tn kiu unsigned char Char unsigned int (unsigned) short int Int 2 byres (32768 . . 32767) 2 bytes (32768 . . 32767) Kch thc 1 byte (0 .. 256) 1 byte (128 . . 127) 2 bytes (0 . . 65535)

24

unsigned long int 4 bytes (0 . . 4294967295) (unsigned long) long int (long) float double long double 6. Hng (constant) L i lng c gi tr khng thay i trong sut thi gian tn ti ca n. Tn hng phi l mt danh hiu hp l v phi c khai bo trc khi s dng. Hng c dng thay th cho cc con s ti ngha trong chng trnh. Vic s dng hng nhng lc cn thit l mt phong cch lp trnh tt v cn c khuyn khch. Hng s nguyn: c th c biu din di dng thp phn, nh phn, bt phn, v thp lc phn. Hng s thc: c th c biu din di dng k php thng thng hoc dng k php khoa hc. K php thng thng (cn gi l s thc du phy tnh) gm 2 phn, c phn cch bi du chm thp phn. V d: 1234.5 K php khoa hc (cn gi l s thc du phy ng) gm phn nh tr (l mt s thc) v phn m (l mt s 4 bytes (3.4E 38 . . 3.4E +38) 8 bytes (1.7E 308 . . 1.7E +308) 10 bytes (3.4 E 4932 . . 1.1E+4932) 4 bytes (2147483648 . . 2147483647)

25

nguyn). Hai phn ny c phn cch bi ch e hoc E. V d: 1.2345 E+03. Hng k t: c t trong cp nhy n v c th c biu din bng: K hiu trong bng m ASSCI. V d: A. Escape character (k t thot) bao gm cp k t \n, vi n l s th t ca k t trong bng m ASSCII. V d: \65, \7, \n Mt s k t c bit: K hiu \n \t \0 \ \ \\ .... ngha K t xung dng K t TAB K t NULL Du nhy n Du nhy kp Du s cho ngc (Backslash)

Hng chui k t: c t trong cp nhy i. Thc cht l mng cc k t c k t kt thc chui l k t NULL, k hiu \0 Khai bo hng: thng c t trong phn khai bo ton cc u chng trnh, ngay sau sau cc khai bo ch th tin x l. C 2 cch khai bo hng:

26

Dng ch th tin x l: #define <tn hng> <chui thay th> Dng t kho const: hng>=<gi tr>; V d: const int MAX = 10; hay #define MAX 10 7. Bin (variable) L i lng c gi tr c th thay i bng ton t gn (k hiu =). Bin c dng lu tr thng tin v cc i tng v c gi tr c th, xc nh ti mi thi im trong chng trnh. Tn bin phi l mt danh hiu hp l v khng c t trng vi t kha. Nn t tn bin sao cho c tnh gi nh, khng di qu v cng khng nn qu ngn. Nn trnh t tn bin trng vi tn cc hm th vin (sin, cos, . . . ). C/C++ cho php khai bo bin khp mi ni trong chng trnh, min sao m bo nguyn tc Mi danh hiu trc khi s dng phi c khai trc. Cch khai bo bin: <type> <variables list>; Trong :
27

const

<tn kiu>

<tn

<type> l mt kiu d liu hp l bt k c trong C/C++. <variables list> l mt hay nhiu bin, c phn cch bng du ,. Ch : lnh khai bo bin lun c kt thc bng du ; V d: khai bo bin k t char ch; // khai bo bin k t khai bo 2 bin nguyn: int x, y; // khai bo 2 bin kiu nguyn hoc int x; int y;

C th khai bo v ng thi khi to gi tr cho bin nh sau: <tn kiu> <tn bin> = <gi tr>; V d: int tong = 0, x = 5, y = 7;

28

8. Biu thc (expression) L cng thc tnh ton bao gm cc ton hng v cc ton t tng ng. Cc ton hng c th l mt bin, hng, li gi hm. Bn thn cc ton hng cng c th l mt biu thc con khc t trong cp ngoc n, hnh thnh nn mt biu thc phc hp. C cc loi biu thc thng dng sau: biu thc gn, biu thc s hc, biu thc logic. c bit, biu thc logic trong C/C++ c xem l c gi tr nguyn. Biu thc c tr khc 0 (k c s m) tng ng vi mnh logic TRUE, v biu thc c tr = 0 tng ng vi mnh logic FALSE. Trong C/C++, biu thc lun tr v mt gi tr. Kiu ca biu thc ph thuc vo kiu ca gi tr tr v. 9. Chuyn i kiu (type conversion) Chuyn i kiu ngm nh: Trong cng 1 biu thc, nu cc ton hng khng cng kiu vi nhau th trc khi tnh ton gi tr ca biu thc, chng trnh dch s thc hin vic chuyn i kiu ngm nh (nu c) theo nguyn tc Kiu c phm vi gi tr biu din nh hn s c chuyn sang kiu c phm v gi tr biu din ln hn. S chuyn i kiu ngm nh: char int long float double long double p kiu (type casting): Trong mt s trng hp, ta bt buc phi s dng n ton t p kiu to ra mt biu thc hp l nh sau: <tn kiu> (<biu thc>) hoc (<tn kiu>) <biu thc>

29

V d, to biu thc s hc hp l sau 8.0 % 3, ta cn thc hin p kiu nh sau: (int) 8.0 % 3 Hay int (8.0 % 3) 10. Cc ton t (operator) C/C++ rt giu v ton t. Sau y l mt s ton t thng dng: 10.1. Ton t s hc K hiu + * / %

ngha Cng Tr Nhn Chia Modulo

S ngi 2 2 2 2 2

Ton hng int, float, double, char - nt - nt - nt int, char (khng c kiu s thc)

10.2. Ton t quan h (so snh) K hiu < <= S ngi 2 2

ngha Nh hn Nh hn hoc bng

Ton hng int, char - nt float, double,

30

> >= == != 10.3. Ton t logic K hiu ! && || 10.4. Ton t gn

Ln hn Ln hn hoc bng So snh bng So snh khc nhau

2 2 2 2

- nt - nt - nt - nt -

ngha NOT logic AND logic OR logic

S ngi 1 2 2

Ton hng int, float, double, char - nt - nt -

Ton t gn dng thay i tr ca mt bin bng tr ca mt biu thc. K hiu: = Biu thc gn c dng: <bin> = <biu thc>, trong <bin> l mt danh hiu hp l (nm v tri), v <biu thc> (nm v phi) l biu thc c cng kiu vi kiu ca <bin>. Cch tnh tr ca biu thc gn: TRNH BIN DCH tnh tr ca <biu thc>, sau gn tr ny cho <bin>. Ton b biu thc gn ny cng tr v mt gi tr l tr ca <biu thc> va tnh c. V d: x = 1; // gn tr 1 cho bin nguyn x x = 2*y; // tnh tr 2*y, sau gn kt qu tnh c cho bin x
31

z = x + 2*y; // tnh tr x+2*y, sau gn kt qu tnh c cho bin z a = sin(2*b); // gi hm th vin tnh sin(2*b), sau gn kt qu cho a C/C++ cho php vit gn cc biu thc gn bng cc ton t gn sau: Dng thng i = i+<bt> i = i-<bt> i = i*<bt> i = i/<bt> i = i%<bt> 10.5. Ton t iu kin ( ? : ) L ton t 3 ngi, v c dng: <BT1> ? <BT2> : <BT3> Trong : <BT1> thng l mt biu thc so snh hay mt biu thc logic <BT2>, v <BT3> l mt biu thc thng thng no Kiu ca biu thc iu kin ph thuc vo kiu ca <BT2>, <BT3>.
32

vit

thng

Dng vit thu gn i += <bt> i -= <bt> i *= <bt> i /= <bt> i %= <bt>

ngha T cng T tr T nhn T chia T modulo

Cch tnh gi tr biu thc iu kin B1: Tnh tr ca <BT1> B2: Nu <BT1> c tr !=0 th ton b biu thc iu kin s nhn tr cho bi <BT2>. Ngc li th chng trnh dch s dng tr ca <BT3> lm tr ca ton b biu thc iu kin. V d Biu thc iu kin tr v tr nh nht gia 2 s nguyn cho trc x v y (x < y) ? (x) : (y) Biu thc iu kin tr v tr ln nht trong 3 s nguyn cho trc a, b, c (x > y) ? (x > z ? x : z) : (y > z ? y : z) 10.6. Ton t tng (++), gim () mt n v Biu thc c dng <bin>++ ++<bin> <bin>---<bin>

S khc nhau gia 2 dng tin t v hu t ch ny sinh khi biu thc nm trong mt biu thc khc nh sau: Dng tin t: tr ca <bin> c thay i trc khi tham gia biu thc chung

33

Dng hu t: biu thc chung s dng tr c ca <bin>, sau <bin> mi c thay i tr. 10.7. Ton t dch chuyn s hc K hiu << >> ngha Dch tri Dch phi S ngi 2 2 Ton hng int - nt -

10.8. Ton t thao tc trn tng bt K hiu ! & | ngha o bit AND bit OR bit S ngi 1 2 2 Ton hng int - nt - nt -

10.9. Ton t p kiu ( ni trn) 10.10. Ton t ly a ch ca ( & ) K hiu: & B nh trong ca my tnh bao gm cc nh lin tip c nh s t 0 n gii hn ca b nh. Mi bin khai bo trong chng trnh s chim 1 vng nh c kch thc qui nh bi kiu khai bo cho bin v c a ch l byte u tin c cp pht. Ta c th xc nh a ch ca bin nh vo ton t & nh sau: & <bin> 10.11. Ton t sizeof: sizeof(<biu thc>) tr v kch thc (s bytes) ca biu thc.

34

sizeof(<kiu>) tr v kch thc (s bytes) ca kiu. 11. u tin v trt t kt hp cc ton t (precedence and associativity) Trong qu trnh tnh tr ca cc biu thc, NNLT C/C++ cn c vo u tin v trt t kt hp ca cc ton t nh sau: Ton t c u tin cao nht c thc hin trc Trong trng hp ton hng gia 2 ton t c cng u tin th trt t kt hp (phi hoc tri) ca ton t s qui nh th t thc hin ca cc ton t. Mc 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Ton t () [] -> ! * / + << >> < <= > >= == != & ^ | && || ? : = += -= *= /= %= . . . ~ ++ -- - * & (type) sizeof() Trt t kt hp

35

12. Cu lnh (statement, instruction) C 3 loi cu lnh: Cu lnh n l mt biu thc c kt thc bng du ; v c th tri di trn nhiu dng. Cu lnh n c dng: <bin> = <biu thc>; hay <biu thc>; hay <li gi hm>; Cu lnh ghp hay cn gi l khi lnh bao gm t 2 cu lnh tr ln, v c t trong cp ngoc nhn { } nh sau: { <lnh 1>; <lnh 2>; ... <lnh n>; } Cu lnh iu khin c xy dng t cc cu trc iu khin nh: Cu trc r nhnh: cu lnh if else Cu trc la chn: cu lnh switch () Cu trc lp: cu lnh for () , cu lnh while(), cu lnh dowhile(). Ch : Cu lnh ; l mt cu lnh rng, nhng hp l.
36

Khai bo bin, khai bo hm nguyn mu cng c kt thc bng du chm phy ;) 13. Xut / Nhp d liu n gin trong C/C++ Xut d liu ra mn hnh: Trong C/C++, dng hm printf(. . .) khai bo trong tp tin tiu <stdio.h> (xem ti liu) Trong C++, dng i tng cout v ton t << khai bo trong <iostream.h> nh sau: cout<< BT1[<<BT2<<BT3 . . .]; trong : BT1, BT2, . . . l cc biu thc hp l (kiu char, int, float, double, char*). V d: Cout << 65; Cout << A; Cout << A; Cout << 65 << << ch << <<A<< << A\n; Nhp d liu t bn phm: Trong C/C++, ta dng hm scanf() khai bo trong tp tin tiu <stdio.h> (xem ti liu)

37

Trong C++, ta dng i tng cin v ton t >> khai bo trong <iostream.h> nh sau: Cin >> var1 [ >> var2 >> var3 ]; trong : var1, var2, l cc bin hp l (kiu char, int, float, double, char*). Lnh cin >> var yu cu c cc gi tr t bn phm cho bin var vi cc qui c sau: Cc gi tr s c phn cch bi cc k t trng (SPACE BAR, TAB, ENTER). Khi gp mt k t khng hp l (du . i vi s nguyn, ch ci i vi s, . . .) s kt thc vic c t cin. Cc k t khng hp l ny s c xem xt trong ln c sau. i vi gi tr k t, v xu k t du phn cch l SPACE BAR, TAB, ENTER. Khng c khi nim k t khng hp l trong vic nhp cc gi tr k t hay xu k t. V d: Gi s c cc khai bo sau: int x,y; double z; char ch; Ta c th vit cc lnh xut/nhp DL:

38

cin >> x >> y; cin >> z; cin >> ch; cout << x << << y << << ch << < < z << \n; Thng thng, nhp d liu cho bin ta dng cp cu lnh sau: cout << Nhap tri cho bien :; // cu dn hng cin >> var ; // nhp gi tr t bn phm cho bin var Ch : Lnh sau y l cu lnh hp l: cin >> x, y, z;// ngha ch nhp tr cho bin x nhp y tr cho 3 bin x, y v z: cin >> x >> y >> z; 14. Mt vi chng trnh C/C++ n gin Chng trnh rng ch c hm main() // Null.cpp void main(){ }

39

Gii thch: Mt chng trnh C/C++ l tp hp nhiu hm, trong hm main() l khng th thiu. Dng u tin l tiu hm main(). void l t kha cho bit hm main() khng tr v gi tr no. C th vit hm main() c tr tr v nh sau: int main(){ // cc cu lnh return 0; } Phn t trong cp du { v du } l thn ca hm main(). Chng trnh trn l rng, khng thc hin thao tc no (Phn nm gia cp du {} khng cha bt k cu lnh no). Tuy nhin l chng trnh hp l. Trong mi trng Visual C++: bin dch: n t hp phm CTRL+F. to ra tp tin .exe: n phm F7. chy chng trnh: n t hp phm CTRL+F5.

Chng trnh in ra mn hnh dng ch HELLO C!. // Hello.cpp


40

#include <iostream.h> // de su dung cout void main() { cout << HELLO C++\n; } Gii thch: Trong C/C++ c 2 dng ch thch: Ch thch trn dng: // . . . phn ch thch . . . Ch thch trn 1 hoc nhiu dng: /* . . . phn ch thch . . . */ Ch thch thng c dng nu r chc nng, nhim v ca 1 hm, bin, hng. Phn ch thch ch c ngha i vi programmer, chng trnh dch s b qua khng bin dch nhng ni dung nm trong phn ch thch. Dng u tin l ch th tin x l, yu cu chng trnh dch chn ni dung ca tp tin <iostream.h> ti v tr khai bo ch th tin x l. Tp tin <iostream.h> c gi l tp tin tiu , v c cha cc khai bo, nh ngha hng, bin, hm lin quan n vic xut nhp d liu trong c i tng cout v ton t <<. Trong phn thn ca hm main() ch c 1 cu lnh duy nht, yu cu chng trnh dch thc hin vic in dng ch HELLO C! t trong cp nhy i. Chng trnh m phng my tnh n gin.

41

// Calculator.cpp #include <iostream.h> void main() { int x,y; cout << Nhap tri cho cac bien x, y : ; cin >> x >> y; cout << x << + << y << = << x+y; cout << x << - << y << = << x-y; cout << x << * << y << = << x*y; //chu y, neu y=0 th Chng trnh dch se bao loi divide by zero cout << x << / << y << = << x/y; } Chng trnh nhp vo 3 s nguyn, sau in ra mn hnh cho bit s min, max ca 3 s ny. // MinMax.cpp #include <iostream.h> void main() { int a, b, c; cout << Nhap 3 so a, b, c : ; cin >> a >> b >> c;

42

cout << MAX = << (a>b ? (a>c ? a : c) : (b>c ? b : c)); cout << MIN = << (a<b ? (a<c ? a : c) : (b<c ? b : c)); } Chng trnh nhp 1 k t ch thng/hoa, sau in ra k t ch hoa/thng tng ng. // Kitu.cpp #include <iostream.h> #include <assert.h>//de su dung ham thu vien assert(<bt logic>) void main() { int kt; cout << Nhap 1 ki tu chu(thuong/hoa) : ; cin >> kt; assert(kt>=A && kt<=Z || kt>=a && kt<=z); cout << Ki tu tng ung la ; cout << char((kt>=a && kt<=z)?(kt-a+A):(kt-A+a)); } Chng trnh nhp mt s ch thng, v mt s ch nm. Sau in ra cho bit thng c bao nhiu ngy? // NumDays.cpp #include <iostream.h>
43

void main() { int m, y; cout << Nhap vao thang m = ; cin >> m; cout << Nhap vao nam y = ; cin>>y; // Kiem tra DL nhap tai day . . . int m30 = (m==4 || m==6 || m==9 || m==11); int leapyear = (y%400==0 || y%4==0 && y%!=100); int numDays = (m==28 ? 28+leaoyear : m30 != 0 ? 30 : 31); cout << So ngay cua thang << m << nam << y << la <<numDays; } Chng trnh nhp vo gi, pht, giy v tnh thi im 1 giy sau . // NextSec.cpp #include <iostream.h> void main() { int h, m, s; cout << Nhap gio, phut, giay : ; cin >> h >> m >> s;

44

// Kiem tra DL nhap tai day ++s>59 ? (++m>59 ? ++h : 0) : 0; s %= 60; m %= 60; h %= 24; cout << Thoi diem 1 giy sau : ; cout << h/10<<h%10 << : << m/10<<m%10 << : << s/10<< s%10; }

Chng trnh nhp vo ngy, thng, nm v tnh ngy hm sau, ngy hm trc? // NextDays.cpp #include <iostream.h> void main() { int d, m, y; cout << Nhap ngay, thang, nam : ; cin >> d >> m >>y; // Kiem tra DL nhap tai day int m30 = (m==4 || m==6 || m==9 || m==11);
45

int leapyear = (y%400==0 || y%4==0 && y%!=100); int numDays = (m==28 ? 28+leaoyear : m30 != 0 ? 30 : 31); ++d>numDays ? (d=1,++m>12 ? m=1,++y : 0) : 0; cout << Hm sau l ngy << d<</<<m<</<<y<<endl; } 15. Cu hi 1) Mt chng trnh C/C++ cha cc khai bo sau: int i, j;

long ix; short s; float x; double dx; char c; Hy xc nh kiu ca cc biu thc sau: i+c x+c (int) dx + ix i+x
46

s+j ix + j s+c ix + c 2) Cho 2 s nguyn M, N. Hy m t cc v t logic sau bng cc biu thc logic (theo M, N) tng ng trong NNLT C/C++: N l s m. N l s dng. N l s chn. N l s l. N l s m chn. N l s m l. N l s dng chn. N l s dng l. N l bi s ca M. N l c s ca M. N l s t nhin gm 3 ch s tha tnh cht P = Tng ca cc ch s bng Tch ca cc ch s. 3) Cho a, b, c l 3 s t nhin i din cho 3 cnh ca tam gic T. Hy m t cc mnh di y bng biu thc logic (theo a, b, c) tng ng trong NNLT C/C++: T l tam gic thng. T l tam gic cn.
47

T l tam gic vung. T l tam gic vung cn. T l tam gic u. 4) Gi N l s t nhin ch nm. Hy m t mnh nh ngha nm nhun bng biu thc logic (theo N) tng ng trong NNLT C/C++ nh sau: Nm nhun l nm chia chn cho 400 hoc nu n chia chn cho 4 th ng thi khng c chia chn cho 100. 5) Cho M l ma trn vung cp n x n, n > 0. Gi i, j l cc ch s hng v ct ca ma trn. Hy m t cc v t logic di y bng cc biu thc logic (theo cc ch s i, j) tng ng trong NNLT C/C++: Cc phn t nm trn hng u tin. Cc phn t nm trn hng cui cng. Cc phn t nm trn ct u tin. Cc phn t nm trn ct cui cng. Cc phn t nm trn ng cho chnh. Cc phn t nm trn ng cho ph. Cc phn t nm cao hn ng cho chnh. Cc phn t nm cao hn ng cho ph. Cc phn t nm pha di ng cho chnh. Cc phn t nm pha di ng cho ph. Cc phn t nm trn mt ng song song vi ng cho chnh. Cc phn t nm trn mt ng song song vi ng cho ph.

48

16. Bi tp v php ton v biu thc Mc tiu Lm quen vi mi trng Visual Studio 6.0 S dng php ton v biu thc gii mt s bi ton n gin. Yu cu Bit cch to mi chng trnh, m chng trnh c trn a, lu tr chng trnh, Hiu c cu trc ca mt chng trnh C/C++ n gin. Vit c mt s chng trnh c s dng php ton v biu thc gii mt s bi ton n gin. To mi chng trnh C/C++: Cch 1: Chn menu File New: (c th b bc ny) Xut hin hp thoi New.

49

G vo tn project

Xc nh v tr lu project

Chn mc Win32 Console Application, sau cung cp tn v th mc ni s lu project v click vo nt OK.

50

Chn mc An empty project, sau n nt Finish.

To file mi c tn dng *.cpp, chn menu File New

51

Chn mc C++ Source File, v t tn file trong hp vn bn File name (Khng cn g phn m rng .cpp), sau chn OK. Cch 2: Click vo biu tng New Text File

52

Mn hnh son tho cho php g vo m ngun (source code)

Chn menu File Save, hoc n t hp phm CTRL+S, hoc Click vo biu tng Save.

Nhp tn file dng *.cpp

Lu tp tin, nh ch tn phn m rng phi l .cpp G vo chng trnh u tin sau y: void main() { // statements
53

return; // c th b qua } Hoc int main() { // statements return 0; }

(BD): (Cn

bin

dch

Chn menu Build Compile (to file __.obj)

thit

phi

n t hp phm CTRL+F7 Click biu tng trn thanh Toolbar Chn menu Build Build (to file __.obj v file __.exe) Chn menu Build Rebuild All n phm F7 Click biu tng trn thanh Toolbar

thc hin ln u tin) bin dch v lin kt: (C th b qua)

54

bin dch, lin kt v chy chng trnh: (Ch c th thc hin sau khi BD)

Chn menu Build Execute n t hp phm CTRL+F5 Click biu tng trn thanh Toolbar

lu tr file chng trnh: Dng t hp phm CTRL+S, hoc dng menu File->Save, hoc dng biu tng save trn thanh toolbar. to mi chng trnh trc tin cn phi ng chng trnh ang chy (nu c) nh sau: Chn menu File Close Workspace

Chn Yes ng tt c cc ca s ti liu li. m file to trc : Chn biu tng Open, hoc n t hp phm CTRL+O, hoc chn menu File Open Chn file mun m, sau chn nt Open

55

G vo chng trnh th hai sau y: #include <iostream.h> void main() { cout << HELLO C++\n; } Kt qu sau khi bin dch (CTRL+F7) v cho thc hin chng trnh (CTRL+F5):

56

Cu hi: C th s dng chng trnh trn vit thm c cc chng trnh g? G vo chng trnh sau: #include <iostream.h> void main() { cout << 1 + 2 = << 1+ 2 << \n; cout << 1.0 / 2 = << 1.0 / 2 << \n; cout << 1 / 2.0 = << 1 / 2.0 << \n; cout << 1.0 / 2.0 = << 1.0 / 2.0 << \n; cout << 11 % 8 = << 11 % 8 << \n; cout << -11 % 8 = << -11 % 8 << \n; cout << 11 % -8 = << 11 % -8 << \n; cout << -11 % -8 = << -11 % -8 << \n; cout << (1 + 2 > 1 * 2) = << (1 + 2 > 1 * 2) << \n; cout << (1 + 2 <= 1 * 2) = << (1 + 2 <= 1 * 2) << \n; cout << (B > a && 1 + 2 > 1 * 2) = << (B > a && 1 + 2 > 1 * 2) << \n;

57

cout << (B > a || 1 + 2 > 1 * 2) = << (B > a || 1 + 2 > 1 * 2) << \n; cout << sizeof(int) = << sizeof(int) << \n; cout << sizeof(double) = << sizeof(double) << \n; cout << sizeof(long int) = << sizeof(Iong int) << \n; cout << sizeof(1.0 / 2) = << sizeof(int) << \n; cout << (4 & 5) = << (4 & 5) << \n; cout << (4 | 5) = << (4 | 5) << \n; cout << (4 ^ 5) = << (4 ^ 5) << \n; cout << (2 << 3 )= << (2 << 3) << \n; cout << (8 >> 3 )= << (8 >> 3) << \n; } Kt qu xut ra mn hnh:

58

Cu hi: mc tiu ca chng trnh trn l g ? G vo chng trnh sau: // chuong trinh doi do Fareinheit sang do Celsius #include <iostream.h> void main() { // B1. Nhap du lieu double f, c; cout << Nhap do Fareinheit f = ; cin >> f; // B2. Xu ly c = 5.0 / 9 * (f-32);

59

// B3. Xuat ket qua c cout << Do Celsius tuong ung la << c << \n; } Kt qu sau khi nhp tr 50 cho bin f:

Cu hi: C th pht trin chng trnh trn vit thm c cc chng trnh g ? Sinh vin t vit cc chng trnh sau: 6) Vit chng trnh lm calculator n gin (+, -, *, /, %) 7) Vit chng trnh tnh chu vi, din tch hnh trn. 8) Vit chng trnh tnh chu vi, din tch hnh tam gic theo 3 cnh. 9) Vit chng trnh in tr o ngc ca s nguyn gm 3 ch s (ch s hng n v khc 0). V d, nu nhp vo 483 th in ra 384. 10) Vit chng trnh hon i tr ca 2 s nguyn.

60

11) Vit chng trnh nhp vo 3 s nguyn. In ra cho bit s ln th nht, s ln th hai, v s nh nht. 12) Vit chng trnh nhp vo 1 k t. In ra cho bit: M ASCII ca k t K t ng sau v m ASCII ca k t . K t ng trc v m ASCII ca k t . 13) Vit chng trnh nhp vo 1 k t. Sau in ra k t hoa/thng tng ng ngc li. 14) Vit chng trnh th nghim ton t ++, --. 15) Vit chng trnh nhp vo 1 thi im (gi, pht, giy). In ra cho bit thi im 1 giy sau ? / 1 giy trc ? 16) Vit chng trnh nhp nm y. In ra cho bit nm y c nhun hay khng ? 17) Vit chng trnh nhp thng m, nm y. In ra cho bit thng m, nm y c ti a bao nhiu ngy ? 18) Vit chng trnh nhp ngy d, thng m, nm y. In ra cho bit ngy va nhp c hp l hay khng ? 19) Vit chng trnh nhp vo 1 b ngy thng nm. In ra cho bit ngy hm sau l ngy my? 20) Vit chng trnh nhp vo 1 b ngy thng nm. In ra cho bit ngy hm trc l ngy my?

61

CHNG 3. CC
STRUCTURES)

CU TRC IU KHIN (CONTROL

Hu ht cc thut ton u c th c ci t bng 1 trong 3 cu trc c bn sau: Cu trc tun t: Cc cu lnh c thc hin ln lt theo th t tuyn tnh t trn xung v t tri sang phi. Cu trc r nhnh hoc la chn: mt trong nhng c im c bn ca mt chng trnh my tnh l tnh d on v p ng. Chng trnh phi d on tt c cc trng hp c th c ca bi ton v phi p ng y cho tng trng hp ny. Nu khng thut ton s cho kt qu khng ng. Cu trc lp cho php th hin mt cch ngn gn mt s cu lnh lp i lp li v bn cht. Khi s dng cu trc lp, cn phi bo m tnh dng, tnh kt thc ca vng lp, trnh cho vng lp b qun, b lp v tn (LOOP). 1. Cu trc r nhnh (if then else ) C php (syntax) if (<K>) <lnh1> ; [else <lnh2>;] Trong
62

<K> thng l biu thc logic. Tng qut, <K> c th l 1 biu thc nguyn tnh (integral type) Phn else l khng bt buc phi c. Cu lnh if khng c phn else c gi l cu lnh if thiu. <lnh1>, <lnh2> l cu lnh hp l bt k: cu lnh n, hoc cu lnh ghp, hoc cu lnh iu khin. ngha Nu <K> tha th thc hin <lnh1> phn if, cn ngc li th thc hin <lnh2> phn else. Nh vy ch <lnh1> hoc <lnh2> c thc hin m thi. S thc hin cu lnh (Xem lu c php) B1: <K> c tnh tr. B2: Nu <K> c tr 0 (tng ng vi mnh TRUE) th <lnh1> trong phn if c thc hin. Cn ngc li, nu <K> c tr = 0 (tng ng vi mnh FALSE) th <lnh2> trong phn else c thc hin (nu c). B3: Chuyn quyn iu khin sang cu lnh k tip sau lnh if. Lu c php cu lnh if else

63

False

True

<Lnh else>

<Lnh if>

Ch Coi chng qun cp du (<K>) sau t kha if. if K S1; Coi chng d du ; if (K) ; S1; Coi chng thiu cp du bao quanh {<khi lnh>} if (K) S1; S2;

64

Mt s dng cu trc if else lng nhau Dng 1 if (K1) S1; else if (K2) S2; else S3; Dng 2 if (K1) if (K2) S1; else S2; else S3; Dng 3

65

if (K1) if (K2) S1; else S2; Dng 4 if (K1) { if (K2) S1; } else S2; 2. Cu trc la chn (switch . . .) C php (syntax) switch(<BT>) { case <val1>: [<lnh1>; break;] case <val2>: [<lnh2>; break;]
66

.... case <valn>: [<lnhn>; break;] [default: <lnh>; break;] } ngha Ty theo gi tr ca <BT> so trng vi <val> ca nhn case no th thc hin <lnh> tng ng cho n khi gp lnh break th thot khi cu lnh switch(). y l cu trc tng qut S thc hin cu lnh B1: <BT> c tnh tr. B2: Ln lt so snh tr ca <BT> va tnh c vi cc gi tr <val1>, <val2>, sau nhn case. Nu so trng th <lnhi> tng ng c thc hin, cho n khi gp lnh break. Nu khng c nhn gi tr no so trng vi tr ca <BT> th <lnh> phn default c thc hin (nu c). B3: Thot khi lnh switch(), v chuyn quyn iu khin sang cu lnh k tip. Lu c php cu lnh switch

67

<BT> Val1 <Lnh1> <break>

Val2

<Lnh2>

<break>

. . . <Lnhn> <break>

Valn

default

Ch Coi chng qun lnh break; Nu mun thc hin <lnh> trong mt s trng hp gi tr <vali> sau nhn case, ta t cc <vali> gn nhau, v ghi lnh ti <vali> cui cng ca nhm. Cch vit cu lnh switch: switch() { }

68

3. Cu trc lp while () C php (syntax) while (<K>) <lnh>; trong : <K> thng l biu thc logic. <lnh> c th l cu lnh n, khi lnh, hoc cu lnh iu khin. ngha Chng no m iu kin cn tha th thc hin <lnh>. S thc hin cu lnh (Xem lu c php) B1: Tnh tr ca <K>. B2: Nu tr ca <K>!=0 (k c s m tng ng vi mnh logic TRUE), thc hin <lnh>, sau quay v B1. Cn ngc li (<K>=0) th chuyn sang B3. B3: Thot khi vng lp, v chuyn quyn iu khin sang cu lnh k tip sau lnh while. Lu c php cu lnh while

69

K True <Lnh>

False

Nhn xt Do <K> c kim tra trc, nn phn <lnh> ca vng lp while c th khng c thc hin ln no. bo m cho vng lp while() khng b qun, th phi c t nht mt cu lnh trong phn thn vng lp c tc dng lm thay i vic nh gi li <K> thot sau mi ln lp. Ch Coi chng qun cp du (<K>) sau t kha while. while K // sai do thiu (K) { // } Coi chng d du ; sau cp du ()

70

while (K) ; { // } Coi chng thiu cp du bao quanh khi lnh {<khi lnh>} while (K) S1; S2; 4. Cu trc lp do while () C php (syntax) do{ <lnh>; }while (<K>); trong : <K> thng l biu thc logic. <lnh> c th l cu lnh n, khi lnh, hoc cu lnh iu khin.

71

ngha Thc hin <lnh> cho n khi <K> khng cn c tha. S thc hin cu lnh: B1: Thc hin <lnh>. B2: Tnh tr ca <K>. B3: Nu tr ca <K> != 0 (k c s m tng ng vi mnh logic TRUE), th quay v B1. Cn ngc li (<K> c tr = 0) th chuyn sang B4. B4: Thot khi vng lp, v chuyn quyn iu khin sang cu lnh k tip sau lnh while. Lu c php cu lnh do while

<Lnh> True K False

Nhn xt Khc vi vng lp while(), phn <lnh> trong do while() lun c thc hin t nht l 1 ln, do <K> c kim tra sau.
72

Trong trng hp vng lp do . . . while () b qun, ta nn xem xt v hiu chnh li cc cu lnh trong phn thn vng lp do while() c lin quan n <K> thot ca vng lp. Ch Coi chng qun cp du ngoc trn bao quanh <K> sau t kha while. do { // } while K // sai do thiu (K) Coi chng thiu du ; sau cp du () do { // } while (K) // sai do thiu ; Coi chng thiu cp du bao quanh khi lnh {<khi lnh>} do S1; S2;

73

while (K); 5. Cu trc lp for () C php (syntax) for ([<phn khi to>] ; [<K>] ; [<phn hiu chnh>]) <lnh>; Trong : <phn khi to> l mt hay nhiu biu thc gn (c phn cch bi du ,) c nhim v khi to gi tr ban u cho cc bin m. <K> thng l biu thc logic. <phn hiu chnh> l mt hay nhiu biu thc gn (c phn cch bi du ,) c nhim v thay i tr ca cc bin <phn khi to>. <lnh> c th l cu lnh n, khi lnh, hoc cu lnh iu khin. ngha Tng t nh cu trc while, v thng c dng cho cu lnh vi s ln lp xc nh. S thc hin cu lnh B1: Thc hin <phn khi to> (nu c). B2: Tnh tr ca <K>.

74

B3: Nu tr ca <K>0 (k c s m tng ng vi mnh logic TRUE), th thc hin <lnh>, sau thc hin <phn khi to> (nu c) v quay v B2. Cn ngc li (<K> c tr = 0) th chuyn sang B4. B4: Thot khi vng lp, v chuyn quyn iu khin sang cu lnh k tip sau lnh for. Lu c php cu lnh for

Nhn

<Phn khi to>

<K True <Lnh>

False

<Phn hiu chnh>

xt <phn khi to> ch c thc hin duy nht 1 ln.

75

Trong trng hp vng lp for b qun, ta nn xem xt v hiu chnh li cc cu lnh trong phn thn vng lp for c lin quan n <K> thot ca vng lp. C th chuyn i qua li gia 2 cu trc lp while () v for (). Cc dng khc ca cu lnh for () Ch Cc phn ca vng lp for c phn cch bng du chm phy ;. for (<KT>,<K>,<HC>) // sai dng du , phn cch cc phn { // } Coi chng d du ; sau cp du () for (<khi to>; <K>; <hiu chnh>) ; // d du ; { // } Coi chng thiu cp du bao quanh khi lnh {<khi lnh>} for (<khi to>; <K>; <hiu chnh>)
76

S1; S2; 6. Cu lnh break Dng thot khi cu lnh switch(). Dng thot khi vng lp trong cng cha n. Chng trnh dch s b qua cc cu lnh sau lnh break; V d 1: while (1) { if (K) break; // nhy khi vng lp while(1) } V d 2: while (1) {
77

for (; ; ) { if (K) break; // ch thot khi vng lp for (; ; ) cha n } } 7. Cu lnh continue (t dng) Khi gp cu lnh continue trong 1 vng lp, chng trnh dch b qua cc lnh cn li trong thn vng lp ny bt u mt ln lp mi. Thng thng, ta c th thay th thut ton c s dng lnh break, hoc lnh continue bng mt thut ton s dng cu trc iu khin khc. 8. Cu lnh goto Khi gp cu lnh goto case, vi case l nhn (c dng identifier:)c t ti v tr no , chng trnh dch chuyn quyn iu khin n cu lnh t ti v tr nhn v thc hin lnh ny. Cu lnh goto lm cho chng trnh kh theo di, kh kim sot, lm mt tnh cu trc ca chng trnh.
78

Cu lnh goto t c dng v c th c thay th bng cc cu lnh s dng cc cu trc iu khin khc. 9. Cu hi Trnh by c php, ngha, lu v cho v d v cc cu trc: if else switch () while () do while () for ( ; ; ) Cu no sau y l phn u ca cu lnh if hp l? i vi cu lnh khng hp l, hy cho bit ti sao? if ( delta > 0 ) if delta < 0 if ( delta == 0 ) if ( delta = = 0 ) if ( delta =< 0 ) if ( delta <= 0 ) if ( delta => 0 ) if ( delta >= 0 ) if ( delta != 0 ) if (delta ! = 0 ) if ( 1 + 2 ) if ( 2 2 )

79

Hy rt gn on chng trnh sau: if ( a > b ) { b = x; a = 1; } else { b = x; a = 0; } Hy rt gn on chng trnh sau: if ( a > b ) { a = b; c = x; } else

80

{ a += b; c = x; } Hy rt gn on chng trnh sau: if ( a > b ) { c = a; } else { c = a; a = 0; } Hy rt gn on chng trnh sau: if ( a > b ) { a = 1;


81

c = x; } else { b = 2; c = x; }

Hy chuyn i cu lnh for thnh cu lnh while: for ( int i = 0; i < 100; i++ ) cout << setw( 5 ) << i ; Hy chuyn i cu lnh for thnh cu lnh while: for ( int i = 2000; i > 0; i /= 2 ) cout << setw( 5 ) << i ; Hy chuyn i cu lnh for thnh cu lnh while: for ( int i = 0; i < 100; i++ ) { for ( int j = 0; j < 200; j++ )
82

cout << setw( 5 ) << i * j; cout << endl ; } Hy chuyn i cu lnh while thnh cu lnh for: int count = 0; while ( count < 100 ) { cout << count; count++; } Hy chuyn i cu lnh while thnh cu lnh for: int count = 0; while ( count < 100 ) { count++; cout << count; } Hy chuyn i cu lnh while thnh cu lnh for:
83

int x =10, i = x, y = 0, j = 0; while ( i > j ) { y += i; i; } Hy chuyn i cu lnh while thnh cu lnh do . . . while: int x =10, i = x, y = 0, j = 0; while ( i > j ) { y += i; i; } Xt cc on lnh sau. Hy cho bit kt qu xut ra mn hnh ca cc bin x, y. Gii thch. int x = 0, y = 1; for ( int i = 0; i < 5; i++ ) { for ( int j = 0; j < 5; j++ )

84

if ( ( i + j ) % 2 == 0 ) x++; y += x; } int x = 0, y = 1; for ( int i = 0; i < 5; i++ ) for ( int j = 0; j < 5; j++ ) { if ( ( i + j ) % 2 == 0 ) x++; y += x; } Nh bi tp trn
85

Nh bi tp trn

int x = 0, y = 1; for ( int i = 0; i < 5; i++ ) { for ( int j = 0; j < 5; j++ ) if ( (x + y ) % 2 == 0 ) x++; y += x; }

Nh bi tp trn int x = 0, y = 1; for ( int i = 0; i < 5; i++ ) for ( int j = 0; j < 5; j++ ) { if ( ( i + j ) % 2 == 0 ) x++; else y += x;

86

} Nh bi tp trn int i = 0, x = 0; do{ if ( x %5 == 0 ) { x++; cout << setw( 4 ) << x; } i++; } while ( i < 20 ); Nh bi tp trn int i = 0, x = 0; while ( i < 20 )
87

{ if ( x % 5 == 0 ) { x += i; cout << setw( 4 ) << x; } i++; } Nh bi tp trn int i, x = 0; for ( i = 1; i < 10; i*=2 ) { x++; cout << setw( 4 ) << x; }

88

Nh bi tp trn int i, x = 0; for (i = 1; i < 10; i++) { if ( i % 2 == 1 ) x += i; else x ; cout << setw( 4 ) << x; } Nh bi tp trn int i, j, k, x = 0; for ( i = 1; i < 5; i++ ) for ( j = 0; j < i; j++ ) {

89

k = (i + j 1); if ( k % 2 == 0 ) x += k; else if ( k % 3 ==0 ) x += k 2; cout << setw( 4 ) << x; } Nh bi tp trn int i, j, k, x = 0; for ( i = 1; i < 5; i++ ) for ( j = 0; j < i; j++ ) { switch ( i + j 1 ) { case 1:

90

case 0: x += 1; break; case 1: case 2: case 3: x += 2; break; default: x += 3; } cout << setw( 4 ) << x; } 10. Bi tp 10.1. Cu trc r nhnh 1) Vit chng trnh nhp vo mt s nguyn v cho bit s m hay dng, chn hay l. 2) Vit chng trnh hon i tr ca 2 bin nguyn. 3) Vit chng trnh gii phng trnh bc 1: Ax + B = 0. 4) Vit chng trnh gii phng trnh bc 2: Ax2 + Bx + C = 0. 5) Vit chng trnh gii phng trnh trng phng Ax4 + Bx2 + C = 0. 6) Vit chng trnh nhp 3 s nguyn dng i din cho 3 cnh ca 1 tam gic. Hin th ra mn hnh cho bit l tam gic u, vung cn, cn, vung, thng, hay khng phi l 3 cnh ca tam gic.
91

7) Vit chng trnh nhp 3 s nguyn. Sau hin th ra mn hnh cho bit s ln nht, s ln th hai, v s nh nht bng 2 cch: Cch 1: Dng cu trc IF . . . ELSE . . . lng nhau Cch 2: Dng ton t iu kin: exp1 ? exp2 : exp3 10.2. Cu trc la chn 1) Vit chng trnh tnh s ngy ti a ca thng m, nm y cho trc. 2) Cho trc 2 s nguyn v cc k hiu php ton sau: (+, -, *, /, %). Vit chng trnh tnh v xut kt qu php tnh ra mn hnh (c lu n li chia cho gi tr 0). 3) Vit chng trnh xp hng theo im nh sau (gi s khng c im l): im 1 4: Km

im 5: Trung bnh im 6: Trung bnh kh im 7: Kh im 8 9: Gii im 10: Xut sc 4) Vit chng trnh nhp vo 2 s nguyn v mt php ton (+, -, *, /, %). In kt qu ca php ton ra mn hnh (c ch n li chia khng). 5) B bi ty 52 l c nh s nh sau: ch Hai Ba Bn Nm Su By Tm Chn Mi Bi m Gi
92

C R Chun Bch

1 12 14 25 27 38 40 51

2 13 15 26 28 39 41 52

5 18 31 44

6 19 32 45

7 20 33 46

8 21 34 47

9 22 35 48

10 23 36 49

11 24 37 50

16 17 29 30 42 43

Vit chng trnh nhp mt s c gi tr trong on [1..52], sau in ra cho bit s tng ng vi l bi no? VD: vi N = 31 th hin th ra mn hnh Nm Chun. 6) Tng t nh bi trn, cc qun c c nh s nh sau: Tng S en Trng 1 8 2 9 Tng Xe 3 10 4 11 Pho 5 12 M 6 13 Cht 7 14

Vit chng trnh nhp mt s c gi tr trong on [1..14], sau in ra cho bit s tng ng vi qun c no? VD: vi N = 11 th hin th ra mn hnh Xe Trng. 10.3. Cu trc lp 1) Vit chng trnh in ra cc k t v th t ca cc k t ny theo bng m ASCII (Ch ch in ra cc k t c m ASCII > 32). 2) Vit chng trnh hin th ra mn hnh tt cc s trong on [100 . . 999] tha tnh cht P=Tng cc ch s = Tch cc ch s. VD: 123 l s tha tnh cht P.

93

3) Vit chng trnh tm tt c cc s gm 3 ch s tha tnh cht c ch s hng chc bng na tng ca ch s hng trm v ch s hng n v. 4) Vit chng trnh in cc s Amstrong (l s c tng lp phng ca cc ch s bng chnh n). 5) Cho trc s nguyn n>0. Vit chng trnh tm tt c cc b s Pithagore (x, y, z) tha mn:
x 2 + y 2 = z 2 x < y < z n

6) Cho trc s t nhin n (vi 1500 < n < 2000). Vit chng trnh cho hin ra mn hnh cc cch phn tch s n thnh dng tng lp phng ca 2 s t nhin x, y nh sau: n = x3+y3. 7) S hon thin (perfect number) l s t nhin c tng cc c s (k c 1) bng chnh n. VD: s t nhin 28 l s hon thin. Vit chng trnh hin th ra mn hnh tt c cc s hon thin < 1000. 8) Vit chng trnh tm s t nhin b nht c t nht 2 cch biu din n thnh tng ca 4 s chnh phng i mt khc nhau. V d, 78=9+16+9+4=36+25+16+1 9) Vit chng trnh nhp vo s n > 0. Sau tnh cc biu thc tng gm n s hng nh sau: S1 = 1 + 2 + 3 + . . . S2 = 1 2 + 3 4 + . . . S3 = 1 + 3 + 5 + 7 + . . . S4 = 1 + 2 + 4 + . . . S5 = 1! + 2! + 3! + . . .
94

10) Cho s t nhin n. Hy tnh: 2n n!


1 1 1 1 + 2 1 + 2 L 1 + 2 1 2 n

2 + 2 + 2 + K + 2 (n du cn)
1!.3!.5!... neu n le 2!.4!.6!... neu n chan

n!!=

11) Cho s thc a v s t nhin n. Hy tnh: an a(a+1) (a+n-1)


1 1 1 + + ... + a a (a + 1) a(a + 1) K (a + n)

12) Vit chng trnh m s ch s ca s t nhin n nhp vo t bn phm. 13) Cho trc s t nhin n. Vit chng trnh tnh tng ca cc ch s ca s n. 14) Cho trc s t nhin n. Vit chng trnh tnh v in tr o ngc ca s n. 15) Cho trc s t nhin n. Vit chng trnh kim tra tnh i xng ca s n. V d, vi n = 12321 th hin th thng bo s 12321 l s i xng. 16) Cho trc s t nhin n. Vit chng trnh kim tra tnh tun hon v in ra s chu k (nu c) ca s n. V d, vi n=12121212 th in ra s 12121212 tun hon vi cc chu k 12, 1212.

95

17) Cho trc s t nhin n. Vit chng trnh tnh s i ng ca s n. V d, vi n = 1047 th s i ng l 9063. 18) Cho trc s t nhin n. Hy cho bit: n c bao nhiu ch s ? Tnh tng cc ch s ca n. Tnh tch cc ch s ca n. Tm ch s u tin ca n. 19) Cho 2 s t nhin a, b. Hy: Tm c s chung ln nht ca chng. Tm bi s chung nh nht ca chng. 20) Cho s t nhin n. Hy xy dng s m bng cch loi b i trong s n tt c cc ch s 0 v ch s 5 (th t ban u ca cc ch s c gi nguyn). V d, vi n = 50915509 th m = 919. 21) Vit chng trnh in ra mn hnh bng cu chng theo chiu dc v theo chiu ngang. 22) Trm tru n c, tru ng n 5. tru nm n 3, ba tru gi n 1. Vit chng trnh hin th s tru theo tng loi. 23) Vit chng trnh kim tra xem 2 s t nhin a, b c nguyn t cng nhau? 24) Vit chng trnh nhp s nguyn n > 0 v mt s nguyn h ch h (c gi tr 2, 8 hoc 16). Sau hin th ra mn hnh tr tng ng ca N di dng ch nh bi h h (nh phn, bt phn, hoc thp lc phn). VD: nhp n = 65, h = 2 In ra : 0000000001000001 B

96

25) Vit chng trnh kim tra xem s n > 0 nhp vo t bn phm c phi l s nguyn t? 26) Vit chng trnh nhp vo s n > 0 v hin th ra mn hnh tt c cc s nguyn t < n. 27) Vit chng trnh nhp vo s n > 0 v hin th ra mn hnh n s nguyn t u tin. 28) Dy s Fibonacci: 1 1 2 3 5 8 13 21 34 55 Vit chng trnh kim tra xem s N nhp vo c phi l s Fibonacci? 29) Vit chng trnh nhp vo s n>0 v hin th ra mn hnh cc s Fibonacci < n. 30) Vit chng trnh nhp vo s n>0 v hin th ra mn hnh n s Fibonacci u tin. 31) Vit chng trnh v cc hnh sau y vi h l chiu cao nhp vo t bn phm: VD: vi h = 5 * ** *** **** ***** * ** * * * * * ***** **** *** ** ***** ** *** **** * ***** * *

**** *** ** *

***** * * * ** * * ** *

***** * ** * * * *

97

***** * *** ***** ******* *********

* * * * * *

*****

*********

********* ******* ***** *** *

********* * * * * * * *

32) Vit chng trnh nhp vo s n > 0 v hin th ra mn hnh theo dng sau: VD: vi n = 5 1 2 3 4 5 2 3 4 5 1 3 4 5 1 2 4 5 1 2 3
98

A B C D E B C D E A C D E A B D E A B C

5 1 2 3 4

E A B C D

33) Vit chng trnh ln lt nhp vo cc tr nguyn cho n khi nhp tr 0 th dng. Hy tnh: S lng cc s nhp tha tiu chun P (V d: l s m, l s l, l s nguyn t, l s Fibonacci, ) Tng cc s nhp tha tiu chun P. Trung bnh tng cc s nhp tha tiu chun P. 34) Vit chng trnh phn tch s nguyn n > 0 thnh tch cc tha s nguyn t theo cc dng sau: V d, vi n = 120 th: Dng 1: 120 = 2 * 2 * 2 * 3 * 5 Dng 2: 120 = 2 ^ 3 * 3 * 5 35) Vit chng trnh nhp vo cp ta x, y < 10. Sau v du * ti ta (x,y) va nhp nh sau: V d, nhp x = 8, y = 5

1 2 3 4 5 6 7 8 9 10 1 2 3 . . .

99

4 5 6 7 8 9 10

. ................ *

36) Vit chng trnh tnh cn bc 2, cn bc 3, cn bc 4, cn bc N ca s nguyn A, (N > 0, A > 0) theo h thc truy hi sau: Cn bc 2:
x0 = 1 A x n 1 + x n 1 x = n 2

Cn bc 3:
x0 = 1 A 2 x n 1 + 2 x n 1 x = n 3

Cn bc 4:

100

x0 = 1 A 3 x n 1 + 3 x n 1 x = n 4

Mt cch tng qut vi cn bc N:


x0 = 1 A (n 1) x n 1 + n 1 x n 1 x = n n

37) Cho trc sai s . Vit chng trnh tnh Ex, Sin(x), Cos(x) theo cc cng thc khai trin sau:
E x = 1+ x x2 x3 + + + ... 1! 2! 3! x3 x5 x7 + + ... 3! 5! 7! x2 x4 x6 + + ... 2! 4! 6!

sin( x) = x

cos( x) = 1

101

CHNG 4. HM (FUNCTION)
1. Khi nim gii quyt mt vn tng i ln, phc tp, ta thng c khuynh hng phn chia vn ban u thnh nhng vn con nh hn. V t nhng vn con ny, ta li tip tc phn r thnh nhng vn con nh hn na (nu c) ... cho n khi gp vn con s cp c th thy ngay cch gii quyt. Cch tip cn ny p dng t tng chia tr v c gi l phng php phn tch t trn xung (Top Down Analysis). Mi vn con l mt n th (module) m trch gii quyt mt chc nng c th, xc nh. Cc n th lin lc vi nhau thng qua cc thng s. Ta c th xem hot ng ca hm nh hot ng ca mt hp en. Cng mt d kin vo s cho ra cng kt qu. Hu ht cc NNLT cp cao (C, C++, PASCAL, FOX . . .) u h tr phng php lp trnh cu trc cho php t chc chng trnh my tnh thnh nhiu n th (module). Mi n th chng trnh tng ng vi 1 hm (trong C/C++). C 2 loi hm trong NNLT C/C++: Hm th vin do chng trnh dch cung cp. Hm t to do USE R nh ngha. Hm th vin (library functions): chng trnh dch C/C++ cung cp mt th vin s cc hm tin ch gip gim nh cng sc lp trnh v cho php USER tp trung nhiu hn vo logic ca vn ang gii quyt. s dng cc hm ny trong chng trnh, cn chn vo u chng trnh cc tp tin tiu cha cc khai bo v nh

102

ngha hng, bin, hm nguyn mu, . . . bng cc ch th tin x l #include <tn tp tin>. Hm t to: Ngoi ra, C/C++ cho php USER nh ngha thm cc hm khc phc v cho nhu cu lp trnh ca mnh. 2. Khai bo v nh ngha hm Gm c 2 phn: dng tiu v phn thn hm [<kiu gi tr tr v>] <tn hm>([<danh sch cc tham s>]) { // cc khai bo cc b .... // cc cu lnh .... } Trong : <kiu gi tr tr v>: M t kiu d liu ca gi tr m hm s tr v cho ni gi n. Ni chung, gi tr tr v ca hm c th thuc mt kiu d liu hp l bt k, ngoi tr C/C++ khng cho php tr v mt bin kiu mng. Nu ta b qua, khng m t <kiu gi tr tr v> th chng trnh dch s ngm hiu l kiu int.
103

M t <kiu gi tr tr v> l void nu ta mun hm khng tr v gi tr no (hm ny tng ng vi th tc trong PASCAL). <tn hm>: l danh hiu hp l <danh sch cc tham s> c dng: <tn kiu> <tn bin>, <tn kiu> <tn bin>, Phn thn hm t trong cp du { }, v cha cc cu lnh m t hot ng ca hm. 3. Lnh return Hm sau khi c khai bo v nh ngha, c th c gi thc hin bng li gi hm trong chng trnh. Hot ng ca c kt thc theo 1 trong 3 cch nh sau: Trng hp hm c gi tr tr v l void: hm kt thc hot ng sau khi thc hin cu lnh cui trc du } sau cng, hoc nu ta mun hm kt thc sm trong iu kin no th dng lnh return; Trng hp hm c gi tr tr v khc void: Khi gp lnh return <biu thc>; chng trnh dch s kt thc hot ng ca hm, v tr ca <biu thc> c tr v cho ni gi hm. 4. Cc dng hm 4.1. Hm khng c tham s V d 1: hm in dng ch HELLO C

104

void PrintHello() { cout << Hello C++\n; } Cch gi hm: PrintHello(); V d 2: hm gii phng trnh bc 2: void GiaiPTBac2() { double a, b, c; cout << Nhap cac he so a, b, c : ; cin >> a >> b >> c; double delta = b*b-4*a*c; if (delta<0) cout << Phuong trinh vo nghiem\n; else if (delta==0) cout << Phuong trinh co nghiem kep X = << -b/2/a; else // delta>0 cout << Phuong trinh co 2 nghiem phan biet:
105

<< \nX1 = << (-b-sqrt(delta))/2/a << \nX2 = << (-b+sqrt(delta))/2/a; } Cch gi hm: GiaiPTBac2(); 4.2. Hm vi nhiu tham s V d 1, hm tnh s max ca 2 s nguyn: int Max(int a, int b) { return (a > b ? a : b); } Cch gi hm: Max(x, y); // voi x, y co kieu int V d 2, hm v hnh vung c chiu cao h: void Draw(int h) { for (int i=1; i<=h; ++i) // lap h dong

106

{ for (int j=1; j<=h; ++j) // lap h cot cout << setw(3) << *; cout << endl; } } Cch gi hm: Draw(5) Hoc Draw(h), vi h c kiu int 4.3. Hm nguyn mu (function prototype) Hm nguyn mu c dng cung cp thng tin cho chng trnh dch v tn hm, kiu gi tr tr v, s lng, th t v kiu ca cc tham s ca hm. Chng trnh dch cn c vo cc thng tin ny kim tra cc li gi hm trong chng trnh. Hm nguyn mu c t sau phn khai bo ton cc v ngay trc hm main() hoc c th t trong tp tin khc. Khai bo: [<kiu gi tr tr v>] <tn hm>([<danh sch cc tham s>]) ;

107

Trong : <kiu gi tr tr v> m t kiu ca gi tr tr v bi hm <tn hm> l danh hiu hp l v nn t tn sao cho th hin c chc nng ca hm <danh sch cc tham s> m t cc kiu d liu v tn bin i din ca tng tham s., mi cp kiu d liu v tn bin c phn cch bi du phy , V d: Khai bo hm nguyn mu c chc nng xc nh tr min gia 2 s nguyn. int Min(int, int) ; hay int Min(int a, int b) ; // nn dng cch khai bo ny 4.4. T chc mt chng trnh C/C++ (trn cng 1 tp tin) Cch 1: chng trnh gm 3 phn PHN KHAI BO TON CC PHN KHAI BO V NH NGHA HM HM main() Cch 2: chng trnh gm 4 phn (nn dng cch ny) PHN KHAI BO TON CC PHN KHAI BO HM NGUYN MU
108

HM main() PHN NH NGHA HM 5. Cc phng php truyn tham s Tham s thc (actual parameter) l tham s trong li gi hm. Tham s hnh thc (formal parameter) l tham s trong phn khai bo v nh ngha. Tham s hnh thc ch l tn i din cho tham s thc tng ng. Kiu ca tham s hnh thc s qui nh kiu ca tham s thc. C 2 cch truyn tham s cho hm: Truyn bng gi tr (ch yu trong C/C++): Trong phng php ny, chng trnh dch cp pht vng nh ring cho tng tham s hnh thc, sau sao chp gi tr ca tham s thc tng ng vo cc tham s hnh thc. Sau khi kt thc thc hin hm, chng trnh dch s thu hi cc vng nh cp pht cho cc tham s hnh thc, v cc bin cc b khai bo bn trong hm. Nh vy, mi s thay i tr ca cc tham s hnh thc u khng nh hng n cc tham s thc bn ngoi hm. Truyn bng tham chiu (cn gi l truyn bng a ch): Ch c trong C++.Thay v cp pht vng nh ring nh trong phng php truyn bng gi tr, chng trnh dch s truyn a ch ca cc tham s thc tng ng cho cc tham s hnh thc. iu c ngha l ta c th xem tham s hnh thc cng chnh l tham s thc, hay ni cch khc tham s hnh thc l tn gi khc ca tham s thc. Nh vy, mi s thay
109

i tr ca tham s hnh thc bn trong hm chnh l thay i tr ca tham s thc bn ngoi hm. phn bit cch truyn tham chiu, vi cch truyn tr, ta t k hiu & trc tn bin hnh thc. V d: Khai bo hm nguyn mu c chc nng hon i tr ca 2 bin nguyn: void Swap(int &,int &); // truyn bng tham chiu hay void Swap(int & a,int & b); // truyn bng tham chiu

void F(int, int ); // truyn bng tr hay void F(int a, int b); // truyn bng tr Ch : Trong cch truyn tham chiu, tham s thc tng ng phi l mt bin. Cn trong cch truyn tr, tham s thc tng ng c th l bin, hng, li gi hm, hoc mt biu thc cng kiu vi tham s hnh thc. Cc tham s hnh thc trong cch truyn bng gi tr c gi l tham tr. Cn cc tham s hnh thc trong cch truyn bng tham chiu c gi l tham bin.

110

6. Phm vi (scope) v cp lu tr (storage class) ca cc i tng ti u ha vic s dng b nh v qun l vic truy xut cc i tng (bin, hng, hm) trong chng trnh, C/C++ a ra cc khi nim phm vi v cp lu tr. 6.1. Phm vi Phm vi l vng chng trnh m i tng c nhn bit v c th c s dng. Ni chung, phm vi ca mt i tng tri di t ni n c khai bo n cui khi, hm, hay tp tin cha i tng . C cc loi phm vi sau: Phm vi cuc b (local scope) Phm vi khi (Block scope) Phm vi hm (Function scope) Phm vi ton cuc (global scope) Phm vi tp tin (File scope) Phm vi chng trnh (Program scope) V d v phm vi: #include <iostream.h> int x=3; // bin x ton cc const int MAX = 10; void fct(int x);

111

void main(){ int x=1; // x cc b ca hm main() fct(x); { int y=4; x += y; } cout<<Y = <<y; // Sai v bin y b hy, khng th truy xut cout<<X ca hm main() = <<x; cout<<X ton cc = <<::x; } void fct(int x){ x += MAX; cout<<X bn trong hm fct() = <<x<<endl; } Bin khai bo bn trong khi hay hm c gi l bin cc b (local variable) ca khi, hm v ch c th c truy xut bn trong phm vi khi hay hm m thi. Cn bin khai bo bn ngoi

112

mi hm, mi khi uc gi l bin ton cc (global variable) v c th c truy xut mi ni trong chng trnh. Cc bin cc b c thi gian tn ti tng i ngn. Chng s b hy mi khi ra khi khi hay kt thc thc hin hm cha n. Ngc li, cc bin ton cc c thi gian tn ti l thi gian ca chng trnh. 6.2. Cp lu tr Cp lu tr (storage class) l cch thc NNLT cp pht vng nh v lu tr bin. Cp lu tr ca mt bin c xc nh bng cc t kha sau: auto, register, static, extern. Bin auto (cn gi l bin t ng, bin cc b) Mi bin khai bo bn trong mt khi hay hm mc nhin c tnh cht auto, tr khi xc nh r cp lu tr khc. V d, khai bo int x; tng ng vi khai bo auto int x;. Bin auto c phm vi cc b bn trong hm hay khi v c thi gian tn ti ngn, do c cp pht trong vng nh STACK.

Bin register (t dng) tng tc truy xut bin (thng l cc bin m trong vng lp for), ta t t kha register trc khai bo bin, yu cu chng trnh dch lu tr bin trong thanh ghi. Ch , chng trnh dch c
113

th b qua khng p ng li yu cu ny nu c qu nhiu li ngh loi ny hoc nu khng cn thanh ghi cp pht. Bin static (cn gi l bin tnh) L bin c cp pht trong vng nh DATA (trnh by s s dng b nh ca mt chng trnh C/C++), v do c tnh cht c nh, lu di. Thi gian tn ti ca bin static l thi gian ca chng trnh. Nh vy bin static khai bo bn trong mt khi, hay hm s khng b hy khi ra khi khi hay hm o, v vn lu gi gi tr c ca ln gi hm trc. Ch , bin static phi c khi to gi tr khi khai bo. Chng trnh dch s ch khi to gi tr cho bin static duy nht mt ln trong ln gi hm u tin. Bin extern Mt chng trnh C/C++ c th c t chc trn nhiu tp tin khc nhau. V phm vi ca mt bin no trong chng trnh c th c tri di trn nhiu tp tin nh vo t kha extern nh sau: ( v hnh ) T kha extern ng trc khai bo bin c ngha l bin c khai bo v nh ngha ni khc trong chng trnh (trong cng tp tin hay trong tp tin khc), chng trnh dch s khng cp pht thm vng nh cho bin c khai bo extern m s dng chung vng nh cp pht trc .

Tm tt v cp lu tr bin (Storage class)

114

V tr khai bo bin Hm Hm Hm Bn ngoi hm Bn ngoi hm Bn ngoi hm

T kha auto (default) register static static ----extern

Thi gian tn ti Phm vi Hm Hm Chng trnh Chng trnh Chng trnh Chng trnh Hm Hm Hm File File Nhiu File

V d 1: Minh ha tm vc, phm vi ca bin variables) (Visibility (Scope) of

115

File1.cpp int a; __ int b; __ ______________________________________________ int c; __ int d; __ _______________________________________ void main() { int e; _ auto int f; _ register int i;__ static int j; } int k; __ __________________________________ void F1() {

116

int m; ______________________________ }

File2.cpp extern int a; _

void F2() { extern int b; }

extern int c; _

117

void F3() { extern int d; }

V d 2: #include <iostream.h> #include "file3.cpp"

const int MAX=10; int x=3;

void main() { const int MAX = 5; int x = 1; x += ::MAX;

118

cout<<"X cuc bo trong ham main() = "<<x<<endl; cout<<"X toan cuc = "<<::x<<endl; f1(); f2(); } File3.cpp #include <iostream.h> extern int x; // dung chung bien x da khai bao o noi khac extern const int MAX; // dung chung hang MAX da khai bao o noi khac void F1() { int x=2; // x cuc bo cout<<"X cuc bo trong ham f1() = "<<x<<endl; cout<<"X toan cuc da khai bao trong ham main() = "<<::x<<endl; }

void F2()
119

{ const int MAX=15; // hang cuc bo cout<<"Hang MAX cuc bo trong ham f2() = "<<MAX<<endl; cout<<"Hang MAX toan cuc da khai bao trong File1 = " <<::MAX<<endl; cout<<"Bien x toan cuc da khai bao trong File1 = "<<::x<<endl; } 7. C ch gi hm v b nh stack Mt chng trnh C/C++ l tp hp cc hm trong hm main() l quan trng nht v khng th thiu do y l im u vo ca chng trnh. Khi ta cho thc hin chng trnh th hm main() c gi thc hin trc tin. Khi , hm main() c th gi chy cc hm khc, v cc hm ny li c th gi chy cc hm khc na, Khi mt hm c gi th C/C++ s to ra mt khung kch hot (activation frame) trong vng nh stack. Khung kch hat cha cc bin cc b v mu tin hot ng (active record) ca hm. Mu tin hot ng cha a ch tr v (return address) ca hm gi n v cc thng s khc. Sau khi kt thc thc hin hm, trnh bin dch s xa cc bin cc b cp pht cho hm (cc tham s hnh thc tr, cc bin cc b khai bo bn trong hm) v chuyn iu khin v dng lnh ti a ch tr v ca hm gi n. V d, xt chng trnh sau:
120

void A(); void B(); void C(); void D(); void E(); void main(){ D(); E(); } void A() { B(); } void B()

121

{ C(); } void C() { } void D() { A(); } void E() {

122

C(); } Ta c hnh nh sau:

B nh STACK

C B A D M M D M A D M B A D M B A D M A D M D M M E M C B E M B E M E M M

Thi gian chy chng trnh

8. Hm c tham s vi gi tr ngm nh (Function with default arguments) C++ cho php ci t hm vi tham s c gi tr ngm nh. Cc tham s ny phi c khai bo lin tc v theo th t t phi sang tri. Khai bo: <return type> <function name>(<type> <param1>=<val1>, <type> <param>=<val2>, );

123

Phn nh ngha c thc hin nh hm thng thng. <return type> <function name>(<type> <param1>, <type> <param2>,) { // cc cu lnh } 9. Np chng hm (Function overloading) C++ cho php dng chung mt danh hiu t tn cho cc hm khc nhau. Ta gi l np chng hm. Thng thng, ta ch np chng hm i vi nhng hm ging nhau v bn cht, nhng khc nhau s lng, v kiu d liu ca cc tham s. V d, tm tr max ca 2 s nguyn, 3 s nguyn, , hoc 2 s thc, 3 s thc, trong C chun, ta vit nhiu hm khc nhau, mi hm phi c t tn khc nhau. Trong C++, ta c th np chng, i.e., ta c th dng chung tn hm (VD max) cho tt c cc hm ny. Cc hm c np chng c th ging nhau v kiu ca tr tr v, nhng bt buc phi khc nhau s lng, hoc kiu ca cc tham s. Chng trnh dch s cn c vo cc yu t ny xc nh hm cn thc hin mi khi gp li gi hm c np chng.

124

Ch Kh nng np chng hm kt hp vi hm c tham s vi gi tr ngm nh c th gy ra tnh trng nhp nhng, m h nh sau:

void F(int=2, double=3.0); void F(int); void F(double); void main() { double x = 20.0; int y = 10; F(x, y); // m h! chng trnh dch khng bit gi hm no } void F(int, double) { } void F(int) {
125

} void F(double) { } 10. Mt s gi khi thit k hm Xc nh r chc nng, nhim v ca hm. Ch nn thit k hm theo phng chm mi hm ch thc hin mt nhim v duy nht, v nn thit k sao cho c th s dng li hm h tr cho cc vic khc (reusable). t tn hm sao cho c tnh gi nh (Mnemonic) Nn t ch thch, ghi r cc thng tin v hm nh chc nng, iu kin d liu vo, xc nh d liu ra ca hm, . . . Xc nh tr tr v: hm c cn tr v gi tr? Nu c, xc nh r kiu tr v. i vi cc hm c chc nng nhp/xut d liu, tr tr v thng l void (tng ng vi th tc trong Pasccal). Cn i vi loi hm kim tra mt tnh cht P no , ta thng tr v gi tr 0 hoc 1, i.e. tr v tr ca mt biu thc logic. Xc nh s lng tham s v kiu ca tng tham s: hm c nhn tham s hay khng? Bao nhiu tham s? Kiu ca tng tham s? Xc nh r phng php truyn tham s: nu khng c nhu cu lm thay i tr ca tham s thc truyn vo cho

126

hm th p dng phng php truyn bng gi tr. Cn ngc li th p dng cch truyn bng tham chiu. 11. Mt s v d minh ha 12. Cu hi Nu cch khai bo hm, nh ngha hm, cch gi hm. Phm vi ca mt i tng (bin, hng) trong chng trnh ? Trnh by cc phng php truyn tham s cho hm (truyn bng gi tr, bng tham chiu, v bng tham tr) Nu cch thit k hm m theo Anh (Ch) cho l t yu cu. Cho v d v hm xut/nhp. Cho v d v hm kim tra mt gi tr nguyn tha tnh cht P no . Cho v d v hm xc nh gi tr nguyn tha tnh cht P no . Trnh by cch t chc mt chng trnh C/C++. Trnh by cp lu tr ca mt i tng (auto, register, static, extern). Khai bo cc hm nguyn mu sau: Gii phng trnh bc 2 ax2 + bx + c = 0 Gii phng trnh bc 4 ax4 + bx2 + c = 0 In bng cu chng theo chiu dc. In bng cu chng theo chiu ngang. V hnh tam gic vi chiu cao h dng Phn tch s n > 0 thnh tch cc tha s nguyn t theo dng n = 120 = 2*2*2*3*5.

127

Phn tch s n > 0 thnh tch cc tha s nguyn t theo dng n = 120 = 2^3*3*5. Kim tra nm y c phi l nm nhun ? Kim tra 1 b ngy, thng, nm c hp l hay khng ? Kim tra s t nhin n > 0 c phi l s nguyn t ? Kim tra 2 s t nhin c nguyn t cng nhau ? Kim tra s t nhin n > 0 c phi l s thuc dy s Fibonacci ? Kim tra s n > 0 c phi l s i xng ? Kim tra s n [100 999] c phi l s tha tnh cht P = c tng cc ch s bng tch cc ch s ? Kim tra s n > 0 c phi l s hon thin ? Tnh tr max ca 2 s nguyn. Tnh tr min ca 2 s nguyn. Tnh USCLN ca 2 s t nhin. Tnh tng S ca n > 0 s hng u tin theo cng thc cho trc. Tnh tr o ca s t nhin. Tnh tr i ng b 10 ca s t nhin. Tnh s ngy ti a ca thng m, nm y. Tnh ngy hm sau ca 1 b ngy thng nm. Tnh khong cch gia 2 b ngy, thng, nm. nh ngha cc hm nguyn mu trn, v vit chng trnh ng dng. Cho chng trnh sau y: #include <iostream.h>

128

void mul(int&,int,int&); int main( ) { int x = 4, y = 3, z = 2; mul( y, z, x ); cout << "\nX = " << x; cout << "\nY = " << y; cout << "\nZ = " << z; return 0; } void mul( int & x,int y, int & z ) { x *= y; y *= z; z *= x; } Hy cho bit tr in ra mn hnh ca cc bin x, y, v z. Gii thch theo mu bng sau: Cu lnh

Hm main() X Y Z

Hm mul() X Y Z

129

Cho chng trnh sau y:

#include <iostream.h> void f( int x, int & y, int z ); void g( int & x, int y, int & z ); int main() { int x = 2, y = 3, z = 4; f( y, z, x ); cout << "\nX = " << x; cout << "\nY = " << y; cout << "\nZ = " << z; return 0; } void f( int x, int & y, int z ){ g( z, y, x ); x += y; y += z; z += x; }

130

void g( int & a, int b, int & c ) { a *= b; b *= c; c *= a; } Hy cho bit tr in ra mn hnh ca cc bin x, y, v z. Gii thch theo mu bng sau: Cu lnh

Hm main() X Y Z

Hm f() X Y Z

Hm g() A B C

13. Bi tp 1) Vit hm xc nh s Max trong 2 s nguyn. Sau vit chng trnh p dng in ra mn hnh s Max trong 5 s nguyn. 2) Vit hm hon i tr 2 bin nguyn. Sau vit chng trnh ng dng. 3) Vit hm xc nh USCLN ca 2 s t nhin. Sau vit chng trnh p dng nhp vo 2 s t nhin v cho bit 2 s c nguyn t cng nhau ? Sau tnh BSCNN ca 2 s ny. 4) Cho trc s t nhin n. Vit hm xc nh s nguyn t th n. Sau vit chng trnh p dng. 5) Cho trc s t nhin n. Vit hm xc nh s Fibonacci th n. Sau vit chng trnh p dng.
131

6) Cho trc s t nhin n. Vit hm kim tra s n c phi l s nguyn t hay khng ? Sau vit chng trnh p dng. 7) Vit hm kim tra 2 s c nguyn t cng nhau hay khng ? Sau vit chng trnh p dng. 8) Cho trc s t nhin n. Vit hm kim tra s n c phi l s Fibonacci hay khng ? Sau vit chng trnh p dng. 9) Cho trc s t nhin n. Vit hm kim tra s n c phi l s i xng hay khng ? Sau vit chng trnh p dng. 10) Cho tnh cht P=Tng cc ch s ca 1 s nguyn bng tch ca cc ch s ca n. Vit hm kim tra mt s (gm 3 ch s) c tha tnh cht P hay khng ? Sau vit chng trnh p dng. 11) Vit hm in ra mn hnh bng cu chng dc (ngang). Sau vit chng trnh p dng. 12) Vit cc hm in ra mn hnh cc loi tam gic c v rng vi chiu cao h. Sau vit chng trnh p dng to mt menu cho php chn dng hnh tam gic in ra mn hnh. 13) Vit chng trnh bao gm cc hm sau: Hm kim tra nm y cho trc c nhun hay khng ? Hm xc nh s ngy ti a ca thng m trong nm y cho trc. Hm kim tra tnh hp l ca mt b ngy, thng, nm cho trc. Hm xc nh ngy k tip ca mt b ngy, thng, nm cho trc.

132

Hm xc nh N ngy k tip ca mt b ngy, thng, nm cho trc. Vit chng trnh p dng cc hm trn. 14) Vit chng trnh tnh khong cch ngy gia 2 b ngy thng nm.

133

CHNG 5. KIU MNG (ARRAY)


1. Khi nim Kiu mng cho php gii quyt nhiu bi ton lp trnh lin quan n mt lng ln d liu mt cch gn, sc tch. V d: bi ton xc nh s min, max ca nhiu s nguyn, tm kim, sp xp trn 1 dy cc s liu, . . . Mng l kiu d liu c cu trc bao gm nhiu phn t cng kiu v c b tr vng nh lin tc. Kiu ca cc phn t mng gi l kiu c s. Mi phn t mng l mt bin c kiu c s. Mng c kch thc l s phn t trong mng. Kch thc mng bt buc phi l biu thc hng nguyn c th cp pht vng nh lc bin dch. Mng c th c 1 chiu hay nhiu chiu. Mng n chiu (n>1) c th c coi nh mng 1 chiu m mi phn t l mng n-1 chiu. S phn t ca mng nhiu chiu bng tch ca kch thc cc chiu. V d: mng cc s nguyn, cc s thc, cc k t, 2. Khai bo & khi to gi tr cc phn t mng trong C/C++ <kiu c s> <tn bin mng> [<kch thc>]; Trong : <kiu c s> c th l kiu d liu hp l bt ky trong C/C++.

134

<tn bin mng> l 1 danh hiu hp l v c gi tr l a ch ca vng nh ca phn t u tin ca mng. <kch thc> l mt gi tr hng nguyn hoc mt biu thc hng nguyn (khng th l 1 bin) v c t trong cp du []. Trng hp mng c nhiu chiu, th mi chiu phi c xc nh r kch thc bng [<kch thc 1>][<kch thc 2>]. . . V d: khai bo mng nguyn 1 chiu c tn arr1D gm 5 phn t. int arr1D[5]; khai bo mng nguyn 2 chiu c tn arr2D gm 6 phn t (2 dng 3 ct) int arr2D[2][3]; Ta c th khi to gi tr ban u cho cc phn t ca mng 1 chiu nh sau: int arr1D[5] = {3,5,4,6,2}; int arr1D[ ] = {3,5,4,6,2}; int arr1D[5] = {3}; //phn t u = 3, cc phn t cn li = 0 khai bo v khi to mng 1 chiu vi tt c cc phn t c tr = 0: int arr1D[5] = {0};
135

Ta c th khi to gi tr ban u cho cc phn t ca mng 2 chiu nh sau: int arr2D[2][3] = {3,5,6,2,4,1}; int arr2D[ ][3] = {3,5,6,2,4,1}; int arr2D[2 ][3] = {{3,5,6},{2,4,1}}; int arr2D[ ][3] = {{3,5,6},{2,4,1}}; khai bo v khi to mng 2 chiu vi tt c cc phn t c tr = 0: int arr2D[2 ][3] = {0}; 3. Truy xut cc phn t ca mng Cc phn t mng c th c truy xut thng qua ch s ca n trong mng. Cc phn t mng c nh s th t bt u t 0, s th t ny gi l ch s mng. Cc phn t mng c th c truy xut nh sau: <tn bin mng>[ch s] V d: mng 1 chiu
a

0 22

1 55

2 44

3 11

4 33

V d: mng 2 chiu

136

a 0 0 1 22 11 1 55 33 2 44

66

Ch Chng trnh dch C/C++ khng kim tra vic vi phm bin mng. Kch thc ca mng phi l biu thc hng 4. Truyn tham s mng cho hm Trong phn khai bo v nh ngha hm, i vi mng 1 chiu ta ghi cp du [] ngay sau tn kiu c s ca mng. i vi mng nhiu chiu, ta phi ghi y s lng cp du [] bng ng s chiu v t ngay sau tn kiu c s, cc chiu phi ghi r kch thc, ngoi tr kch thc ca chiu u tin trng nh i vi mng 1 chiu. Trong li gi hm, ta ch cn ghi tn bin mng ti v tr tng ng vi tham s mng hnh thc. Thc cht ca vic truyn tham s mng cho hm l s truyn gi tr a ch ca tham s thc cho tham s mng hnh thc. iu ny c ngha l trc khi cho thc hin hm chng trnh dch s cp pht vng nh ring cho tham s mng hnh thc nh mt bin cc b. Tham s cc b ny nhn tr ban u l bn sao gi tr a ch ca vng nh u tin ca mng truyn vo cho hm v s b hy khi kt thc thc hin hm. Tuy nhin, do tham s thc truyn a ch ca n

137

cho tham s hnh thc nn mi s thay i tr ca cc phn t mng trong hm s lm thay i tr ca cc phn t mng bn ngoi hm. 5. Cc thao tc c bn trn mng 1 chiu Nhp gi tr cho cc phn t mng. Xut gi tr cc phn t mng (ra mn hnh). Thm 1 phn t vo mng. Xa mt phn t ra khi mng. Tm kim trn mng. Sp xp mng. Cc thao tc trn thc cht l duyt mng v x l trn tng phn t mng nh vo cu trc lp mt cch tng qut nh sau: i vi mng 1 chiu gm MAX phn t: for (i=0; i<MAX; i++) x l phn t a[i]; i vi mng 2 chiu gm ROWS dng, COLS ct: for (i=0; i<ROWS; i++) for (j=0; j<ROWS; j++) x l phn t a[i][j]; 5.1. Nhp gi tr cho cc phn t mng. Gi s khai bo mng 1 chiu cc s nguyn gm MAX=20 phn t
138

Hm nhp gi tr cho cc phn t mng t bn phm void Input(int a[], int n) { for (int i=0; i<n; i++) { cout << a[ << i << ] = ; cin >> a[i]; } } Hm to gi tr ngu nhin cho cc phn t mng trong on [-M M] void InitArray(int a[], int n) { //hm khi ng b to s ngu nhin khai bo trong <stdlib.h> srand(time(0)); for (int i=0; i<n; i++) a[i] = rand()(2*M+1) M; } Hm to gi tr ngu nhin tng dn cho cc phn t mng, phn t u tin c tr trong on [x y], vi 0<x<y.
139

void InitArray(int a[], int n, int x, int y) { srand(time(0)); a[0] = rand()%(b-a+1) + a; for (int i=1; i<n; i++) a[i] = a[i-1]+ rand()%10; } 5.2. Xut gi tr cc phn t mng (ra mn hnh). Hm xut gi tr cho cc phn t mng 1 chiu ra mn hnh void Output(const int a[], int n) { for (int i=0; i<n; i++) cout << setw(4) <<a [i]; cout << endl; } // Hm xut gi tr cho cc phn t mng 2 chiu gm ROWS dng, COLS ct ra mn hnh void Output(const int a[][COLS], int m, int n)

140

{ for (int i=0; i<m; i++) { for (int j=0; j<n; j++) cout << setw(4) << a[i][j]; cout << endl; } } 5.3. Thm 1 phn t vo mng. Hm thm gi tr x vo cui mng void InsertLast(int a[], int &n, int x) { a[n] = x; n++; } Hm thm gi tr x vo mng ti v tr c ch s pos th t tng quan ban u ca cc phn t mng l khng quan trng void Insert(int a[], int &n, int x, int pos)

141

{ a[n] = a[pos]; a[pos] = x; n++; } Hm thm gi tr x vo mng ti v tr c ch s pos th t tng quan ban u ca cc phn t mng khng thay i void Insert(int a[], int &n, int x, int pos) { for (int i=n; i>pos; i--) a[i] = a[i-1]; a[pos] = x; n++; } 5.4. Xa mt phn t ra khi mng. Hm xo phn t ti v tr c ch s pos ra khi mng, th t mng l khng quan trng void Remove(int a[], int &n, int pos) {
142

a[pos] = a[n]; n--; } Hm xo phn t ti v tr c ch s pos ra khi mng, th t mng l quan trng void Remove(int a[], int &n, int pos) { for (int i=pos; i<n-1; i++) a[i] = a[i+1]; n--; } 5.5. Tm kim trn mng. Hm tm kim gi tr x, tr v ch s ca phn t u tin c tr = x, nu khng tm thy th tr v tr 1 (hoc n). Hm tm kim tuyn tnh trn mng cha c th t int LinearSearch(const int a[], int n, int x) { for (int i=0; i<n; i++) if (a[i]==x)
143

return i; return 1; } Hm tm kim gi tr x, tr v ch s ca phn t u tin c tr=x, tr v tr 1 (hoc n) nu khng tm thy, mng c th t tng dn Tm kim tuyn tnh int LinearSearch(const int a[], int n, int x) { for (int i=0; i<n && a[i]<x; i++) if (a[i]==x) return i; return 1; } Tm kim nh phn int BinarySearch(const int a[], int n, int x) { int first=0, last=n-1, mid; while(first<=last) { mid = (first + last) / 2;

144

if (a[mid]<x) first= mid + 1; // tm x phn na sau ca mng else if (a[mid]>x) last = mid 1; else // a[mid]==x return i; } return 1; } 5.6. Sp xp mng. sp xp mng gm n phn t, ta tm cch t (n-1) phn t vo ng v tr ca n theo tiu chun sp xp. ln xp phn t th i, ta so snh phn t ny vi cc phn t cn li ca mng v thc hin i ch khi cn thit tha mn tiu chun sp xp. Cui cng ta c mt mng c xp th t. a. Phng php sp xp n gin (simple sort) Ni dung phng php: bc th i (i=0, 1, . . . , n-2) ta so snh phn t a[i] vi cc phn t a[j] cn li (j=i+1, . . . , n-1) xc nh phn t nh nht, sau i ch phn t nh nht ny vi a[i]. void Swap (int &x, int &y) {

145

int z = x; x = y; y = z; } void SimpleSort(int a[], int n) { int i, j; for (i=0; i<n-1; i++) for (j=i; j<n; j++) if (a[i] > a[j]) swap(a[i],a[j]); } b. Phng php sp xp la chn (selection sort) void SelectionSort(int a[], int n) { int i, j, min, tam; for (i=0; i<n-1; i++) { tam = a[i];

146

min = i; for (j=i; j<n; j++) if (a[min] > a[j]) min = j; a[i] = a[min]; a[min] = tam; } } c. Phng php sp xp ni bt (bubble sort) Ni dung phng php: bc th i (i=0, 1, . . . , n-2) ta ln lt so snh tng cp phn t a[j], a[j-1], vi (j=i+1, . . . , n-1), sau i ch 2 phn t ny nu a[j-1]>a[j]. void BubbleSort(int a[], int n) { int i, j; for (i=0; i<n-1; i++) for (j=n-1; j>i; j--) if (a[j-1] > a[j]) swap(a[j-1],a[j]); }
147

d. Phng php sp xp chn (insertion sort) Ni dung phng php: Gi s dy con (a[0] . . a[i-1]) c sp. bc th i (i=1, . . ., i<n-1), ta xc nh v tr thch hp ca a[i] chn vo dy con c sp th t bng phng php tm kim tun t t a[i] tr v a[0]. void InsertionSort(int a[], int n) { int i, j, tam; for (i=1; i<n; i++) { tam = a[i]; for (j=i-1; j>=0; j--) { if (a[j]<=tam) break; a[j+1] = a[j]; } a[j+1] = tam; } }

148

e. Phng php sp xp l tng chn gim Ni dung phng php: Cch tin hnh ging nh thut ton simple sort, ch khc tiu chun so snh thc hin vic hon i tr ca cc phn t. 6. Cu hi Nu li ch ca vic dng mng. Nu cch khai bo v khi to gi tr cho bin mng mt chiu, bin mng hai chiu. Nu cch truyn tham s mng cho hm, cch gi hm c tham s mng. Trnh by cc thao tc c bn trn kiu mng (1 chiu): Nhp/Xut gi tr cho cc phn t mng Thm phn t mi vo mng Xa mt phn t trong mng tha tiu chun P no . Tm kim trn mng Sp xp mng. 7. Bi tp Mng 1 chiu 1) Cho trc n>0. Lit k tt c cc s nguyn t n dng phng php sng Erathosthene. 2) Cho trc mng nguyn kch thc MAX=100. Cho trc tiu chun P (V d: L s chn, L s dng, L s chnh phng, L s nguyn t, ). Xy dng cc hm sau y v vit chng trnh p dng:

149

Lit k tt c cc phn t mng tha tiu chun P. m s lng cc phn t mng tha tiu chun P. Tnh tng cc phn t mng tha tiu chun P. Tnh trung bnh tng cc phn t mng tha tiu chun P. Cho trc mng nguyn kch thc MAX=100. Vit chng trnh thng k s ln xut hin cc phn t trong mng. 3) Cho trc mng nguyn c kch thc gm MAX=100. Vit cc hm sau y: Khi to gi tr cho cc phn t ca mng (nhp t bn phm). Khi to gi tr ngu nhin cho cc phn t ca mng, mi phn t c tr trong on [ab], vi 0<a<b. Khi to gi tr ngu nhin cho cc phn t ca mng, sao cho mng c th t tng dn. Xut gi tr ca cc phn t ca mng ra mn hnh. Kim tra mng c th t tng ? gim ? hay khng c th t? o ngc th t cc phn t trong mng. Xoay tri/phi cc phn t trong mng k>0 ln. Tm kim gi tr x trong mng. Xa phn t u tin trong mng tha tiu chun P. Xa tt c cc phn t trong mng tha tiu chun P. Sp xp mng theo th t tng dn. Sp xp mng theo th t l tng chn gim.

150

Sp xp theo th t tng dn v loi b cc phn t trng nhau. m s dy con tng dn trong mng v xut cc dy con ny ra mn hnh, mi dy con trn 1 dng. Xut dy con tng dn c s lng phn t nhiu nht. Xut dy con tng dn c tng cc phn t ln nht. Vit chng trnh p dng cc hm xy dng trn. 4) Cho trc mng nguyn c kch thc gm MAX=100. Vit chng trnh sp xp mng theo th t tng, ng thi loi b cc phn t trng nhau. 5) Vit chng trnh trn 2 mng nguyn c th t tng/gim dn, thnh mng nguyn mi cng c th t tng/gim dn. 6) Vit hm v biu ng, v hm v biu ngang. Vit chng trnh p dng. V d, vi mng nguyn int a[5]={4, 7, 10, 6, 3} ta c: Biu ngang Biu ng

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* * * * * * * *
151

* * * * * * * * * * * * * * * * * * * * * * Mng 2 chiu 1) Vit chng trnh in ma phng bc l. 2) Vit chng trnh in mng 2 chiu kch thc MAX*MAX theo th t xon c sau: V d, vi MAX = 4: 1 12 11 10 2 13 16 9 3 14 15 8 4 5 6 7

3) Tng t nh bi trn, vit chng trnh sp xp mng 2 chiu theo th t xon c vi cc phn t mng c tr ngu nhin. 4) Vit chng trnh xc nh cc phn t yn nga (nu c) ca mng 2 chiu cho trc. Phn t yn nga c gi tr min dng v max ct hoc max dng v min ct.

152

CHNG 6. CON TR (POINTER)


1. Khi nim Con tr (Pointer) l kiu d liu c bit, c gi tr l a ch vng nh ca mt i tng (bin, hm). Tng ng vi mi kiu d liu s c mt kiu bin tr ring bit. VD ta c con tr char*, int*, float*, double*, . . . cha a ch ca bin char, int, float, double. Tu theo h my, kch thc ca bin tr l 2 bytes (h my PC) hoc 4 bytes (h my tnh ln). Bin tr cho php truy xut i tng mt cch gin tip, i.e. thm chiu n 1 i tng khc thng qua a ch ca n. Vic cp pht ng cho mng c thc hin thng qua con tr. nm bt kiu con tr, cn phn bit ni dung ca vng nh v a ch ca n. 2. Khai bo bin con tr <type> * <tn bin tr>; trong : <type> l kiu d liu ca bin m con tr ang tr n,. <tn bin tr> l danh hiu hp l. Nh vy, <type> * l kiu con tr. Cng nh cc kiu d liu khc, ta c th khai bo ng thi khi to gi tr cho bin tr nh sau:

153

int x; int *px = &x; // px cha a ch ca bin x. Ch : int *px, x, *py, y; 3. Truy xut bin tr Sau khi khai bo bin tr, ta c th truy xut n thng qua tn bin nh mt bin thng thng. Khi , ta c gi tr (ni dung) ca bin tr l a ch ca mt vng nh no . Nu mun truy xut ni dung ca vng nh m bin tr ang tr n, ta dng ton t * (gi l kh tham chiu dereference) t trc tn bin tr nh sau: *<tn bin tr> Gi s c cc khai bo sau: int x =5, y= 7; int *px, *py; Ta c th gn tr ca px, py nh sau: px = &x; py = &y; Cc bin x, y c th c truy xut gin tip nh sau: *px = 2; // tng ng vi cu lnh gn x = 2;
154

*py = 3; // tng ng vi cu lnh gn y = 3; Ch : Cn phn bit *px = *py; //gn tr ca vng nh m py ang tr n cho vng nh m px ang tr n. vi px = py; //sau lnh ny px v py cng tr n cng 1 vng nh.

Con tr NULL l con tr khng cha a ch ca bt k vng nh no. Nn khi to gi tr NULL hoc a ch ca vng nh no cho bin tr lc khai bo. Cn lu , vic truy xut vng nh thng qua con tr NULL l li v c php. int *py = NULL; // py khng tr n bt k vng nh no. Con tr void * l con tr a nng, v tng thch vi mi kiu d liu m 1 bin tr tr n, i.e. ta c th gn gi tr ca con tr thuc mt kiu bt k no cho con tr void *. Khng c php thc hin cc php tnh s hc trn con tr void*. 4. S hc con tr Ngoi php gn tr ca 1 bin tr cho bin tr khc cng kiu vi n, ta c th thc hin cc php ton s hc sau trn bin tr:

155

Php cng con tr ptr vi mt s nguyn N s cho kt qu a ch vng nh cch con tr ptr N v tr nh sau: (v hnh) Php tr 2 bin tr cng kiu ptr1 v ptr2 s cho kt qu khong cch (s phn t) gia 2 bin tr trn nh sau: (v hnh) Php so snh 2 con tr cng kiu vi nhau c thc hin da trn v tr vng nh tng ng vi 2 bin tr (v kt qu tr v l tr 0 hoc 1). 5. Lin h gia con tr v mng Do tn bin mng l 1 gi tr hng a ch ca phn t u tin ca mng, nn ta c th gn gi tr a ch ny cho con tr c kiu nn cng kiu vi kiu c s ca bin mng. Gi s c cc khai bo sau: int a[5]; int *pa=a; Khi , ta c th truy xut cc phn t mng v a ch ca chng nh sau: a[0] *(a+0) *(pa+0) pa[0] &pa[0] a[1] *(a+1) *(pa+1) pa[1] &pa[1] a[2] *(a+2) *(pa+2) pa[2] &pa[2] &a[2] a+2 pa+2 &a[1] a+1 pa+1 &a[0] a+0 pa+0

156

a[3] *(a+3) *(pa+3) pa[3] &pa[3] a[4] *(a+4) *(pa+4) pa[4] &pa[4] 6. Con tr a cp

&a[3] a+3 pa+3

&a[4] a+4 pa+4

Bn thn bin tr cng c a ch, do ta c th cha a ch ca n trong 1 bin tr khc. Ta gi bin tr ny l con tr tr n con tr, hay con tr 2 cp. S lng du * xc nh cp ca 1 bin tr. Ta c con tr 2 cp, con tr 3 cp, . . . Con tr 2 cp c lin quan mt thit vi mng 2 chiu. Gi s c cc khai bo sau: int a[2][3]; int **ppa = new int*[2]; ppa[0] = a[0]; ppa[1] = a[1]; Khi , ta c th truy xut cc phn t mng nh sau: a[0][0] *(*(a+0)+0) *(*(ppa+0)+0) ppa[0][0] a[0][1] *(*(a+0)+1) *(*(ppa+0)+1) ppa[0][1] a[0][2] *(*(a+0)+2) *(*(ppa+0)+2) ppa[0][2] a[1][0] *(*(a+1)+0) *(*(ppa+1)+0) ppa[1][0]
157

a[1][1] *(*(a+1)+1) *(*(ppa+1)+1) ppa[1][1] a[1][2] *(*(a+1)+2) *(*(ppa+1)+2) ppa[1][2] truy xut a ch cc phn t mng: &a[0][0] &(a+0) &(ppa+0) &a[0][1] &(a+0) &(ppa+1) &a[0][2] &(a+0) &(ppa+2) &a[1][0] &(a+1) &(ppa+0) &a[1][1] &(a+1) &(ppa+1) &a[1][2] &(a+1) &(ppa+2) 7. Truyn tham s con tr cho hm Trong phn khai bo v nh ngha hm, ta khai bo kiu d liu con tr l <type> *. Cn trong li gi hm, ta phi cung cp biu thc c tr l a ch ca vng nh cng kiu vi kiu ca tham s bin tr tng ng. V d: hm Swap( int*, int* ); // c 2 tham s l bin tr 8. Mng cc con tr Kiu phn t ca bin mng c th l kiu con tr Khi ta s c mt mng cc con tr, v ta c th xem cc bin c a ch cha trong cc phn t mng con tr l mt mng, nhng c vng nh khng lin tc. (V hnh)

158

9. T kha const vi con tr Ta bit mt cng dng ca t kha const trong vic nh ngha mt bin hng. Khi ta khai bo const int MAX = . . .; th TBD s cp pht vng nh cho hng MAX ( y l 2 bytes) v khng cho php USER thay i gi tr ca MAX trong chng trnh. Tng t, cc khai bo sau: // px v *px c th thay i gi tr. <datatype>* px;

// px l con tr tr n vng nh c gi tr khng i, i.e. px c th thay i, *px th khng c php thay i. const <datatype>* px;

// px l con tr hng, i.e. *px c th thay i, px th khng c php thay i. <datatype>* const px;

// px l con tr hng tr n vng nh c gi tr khng i. const <datatype>* const px;

159

10. Cp pht ng Cp pht ng l cp pht vng nh lc thc hin chng trnh. Cn cp pht vng nh lc bin dch c gi l cp pht tnh. Vng nh ca cc i tng (bin) cp pht ng s c t ti HEAP. Vic cp pht ng c thc hin nh vo cc hm cp pht b nh sau: Trong C, dng cc hm malloc( . . . ), calloc( . . . ), realloc( . . . ), . . . c khai bo trong <alloc.h>, <stdlib.h> // size_t l kiu d liu nh ngha trong <stdlib.h> v tng ng vi mt unsigned int. void* malloc(size_t size); void* calloc(size_t nitems, size_t size); void* realloc(void * ptr, size_t size); Trong C++, dng ton t new : // xin cp pht vng nh trn HEAP c kch thc = sizeof(<type>) <bin> = new <type>; // xin cp pht vng nh trn HEAP kch thc = sizeof(<type>)*n <bin> = new <type>[n];

160

Khi khng cn s dng cc vng nh cp pht ng, ta phi thu hi chng, c th s dng vo vic khc. Nu khng lm nh vy th b nh s nhanh chng cn kit. Vic thu hi cc vng nh cp pht ng c thc hin nh vo hm sau: Trong C, dng hm free(ptr) , vi ptr l bin tr ch n vng nh c cp pht ng bng cc hm malloc(), calloc(), realloc() Trong C++, dng ton t delete: delete <bin>; delete [] <bin>; // Chng trnh cp pht ng mng mt chiu #include <iostream.h> #include <iomanip.h> #include <stdlib.h> #include <alloc.h> void randomInit( int* a, int n ); void output( const int* a, int n ); void main() { int* a; int n;

161

cout << Cho bit s phn t ? : ; cin >> n; // a = (int* ) calloc( n, sizeof( int ) ); a = new int [ n ]; randomInit( a, n ); output( a, n ); // free( a ); delete [] a; } void randomInit( int* a, int n ) { for ( int i = 0; i < n; i++ ) a[ i ] = rand()% 100; } void output( const int* a, int n ) { for ( int i = 0; i < n; i++ ) cout << setw( 4 ) << a[ i ]; cout << endl; // Chng trnh cp pht ng mng 2 chiu #include <iostream.h>

162

#include <iomanip.h> #include <stdlib.h> #include <alloc.h> void randomInit( int** a, int m, int n ); void output( const int** a, int m, int n ); void main() { int** a; int m, n; cout << Cho bit s dng ? : ; cin >> m; cout << Cho bit s ct ? : ; cin >> n; a = new int [ m ]; for ( int i = 0; i < m; i++ ) a[ i ] = new int [ n ]; randomInit( a, m, n ); output( a, m, n ); for ( i = 0; i < m; i++ ) delete [] a[ i ]; delete [] a;

163

} void randomInit( int** a, int m, int n ) { for ( int i = 0; i < m; i++ ) for ( int j = 0; j < n; j++ ) a[ i ][ j ] = rand()% 100; } void output( const int** a, int m, int n ) { for ( int i = 0; i < m; i++ ) { for ( int j = 0; j < n; j++ ) cout << setw( 4 ) << a[ i ][ j ]; cout << endl; } } 11. Con tr hm Trong NNLT C/C++, tn hm l a ch vng nh ca ch th u tin ca hm v do ta c th gn gi tr a ch ny cho 1 bin
164

tr c kiu nn cng kiu vi kiu gi tr tr v ca hm. Ta gi con tr ny l con tr hm. Ta c th gi thc hin mt cch gin tip mt hm no thng qua con tr hm. Mt khc, mt hm no c th c dng lm tham s cho mt hm khc nh vo con tr hm. Con tr hm c khai bo nh sau: <type> (* <tn con tr hm>) ([Danh sch cc tham s]); Gi s c cc khai bo sau: int a, b; void swap( int* px, int* py ); void (* pf) ( int *, int* ); Khi ta c th gi thc hin hm swap mt cc gin tip nh sau: pf = swap; pf( &a, &b ); 12. Con tr v chui k t Chui ( string ) l mt dy cc k t lin tip trong b nh c kt thc bng k t NUL (\0). Nh vy s dng bin chui cha MAX k t, ta khai bo nh sau: char s[MAX+1]; Ta cng c th khai bo bin chui nh sau: char* s;
165

C th khi to bin chui nh sau: char s[ ] = Hello C++; C th nhp/xut chui k t bng lnh cin ( dng km vi >> ) v cout ( dng km vi << ). Tuy nhin cn lu , lnh cin >> s; ch cho php nhp vo chui k t khng c khong trng. Hm nhp chui ca i tng cin: // c cc k t t cin vo s, k c k t khong trng. getline( char* s, int size, char delim=\n ); read( char* s, int size ); // cin.read( s, 5 ); // cho php c tng k t t cin vo trong ch v tr v tr 1. Hm tr v tr 0 nu gp k t \n. get( char ch ); Hm xut chui ca i tng cout: put( char ); // cout.put( ch ).put( ch ); write( const char* s, int size ); // cout.write( s, 1 ).write( s+1, 2 ); Mt s hm thng dng khai bo trong <string.h> cho php thao tc, x l chui t t: size_t strlen( const char* s );

166

int strcmp( const char* s1, const char* s2 ); int strcmpi( const char* s1, const char* s2 ); char* strcpy( char* dest, const char* src ); char* strcat( char* dest, const char* src ); 13. ng dng con tr Sp xp mng cc con tr Danh sch lin kt Cp pht mng ng 14. S lc v kiu tham chiu (Reference) - Ch c trong C++. NNLT C++ cung cp kh nng tham chiu n a ch vng nh ca bin tn ti trc . V bn cht, tham chiu l b danh ca mt i tng (bin) xc nh trong chng trnh. Sau khi khai bo 1 bin, ta c th khai bo bin tham chiu n bin nh sau: int x; int &rx = x; // rx l bin tham chiu n bin x. Sau cu lnh trn, ta c th xem rx l tn gi khc (b danh) ca bin x.

167

Ch , bin kiu tham chiu phi tham chiu n mt bin tn ti, i.e. bin khai bo trc. Khng th c khai bo bin tham chiu nh sau: int &rx; // sai !! rx l b danh ca bin no ??? Ta thng dng kiu tham chiu trong vic truyn tham s cho hm. Cc tham s thc tng ng (theo v tr) c th b thay i gi tr ngay bn trong hm. V d: hm swap(int &, int &); Hng tham chiu khc c th tham chiu n mt bin hay mt hng trc kin no . V d, ta c cc khai bo sau: int x = 5, y = 7; const int &rx = 123; // ok const int &ry = y; ry++; // sai Tuy nhin hng tham chiu khc vi bin tham chiu ch: ta khng th dng hng tham chiu lm thay i vng nh m n tham chiu n. 15. Bi tp 1) Gi s c cc khai bo sau: int i1 = 11,

168

i2 = 22; double d1 = 3.45, d2 = 6.78; Vit cc khai bo sao cho bin p1 v p2 c gi tr ca n l a ch trong b nh, ni m mt gi tr double c th cha. Vit cu lnh gn a ch ca d1 cho p1, hoc gii thch ti sao iu ny khng th thc hin. Vit cu lnh gn a ch ca i2 cho p2, hoc gii thch ti sao iu ny khng th thc hin. Vit cc khai bo khi to bin ptr1 v ptr2 tr n i1 v i2 tng ng. Vit cu lnh p1 v p2 tr n cng mt a ch. Vit cu lnh chp gi tr c cha ti a ch m ptr2 tr n vo a ch m ptr1 tr n. Vit cc cu lnh s dng p1 v p2 hon i gi tr ca d1 v d2. 2) Vit chng trnh C++ thc hin tng bc cc yu cu sau: Khai bo bin con tr kiu char c tn l charPtr. 3) Cp pht mt vng nh nc danh v cho charPtr tr n . 4) Nhp mt k t v cha n vo vng nh nc danh. 5) Hin th ni dung trong vng nh nc danh. 6) Nu ni dung ca vng nh nc danh l k t hoa th chuyn thnh k t thng v hin th kt qu ra mn hnh.
169

7) Vit chng trnh C++ thc hin tng bc cc yu cu sau: Khai bo bin con tr kiu double c tn l doublePtr. Cp pht vng nh nc danh cho mt mng c n (nhp t bn phm) phn t kiu double v cha a ch ca n vo doublePtr. Nhp gi tr cho tt c cc phn t trong mng. Tnh v hin th trung bnh cng cc gi tr trong mng. Gii phng vng nh cp pht cho mng. Hin th a ch v gi tr ca 3 phn t u tin trong mng c vng nh va c gii phng. 8) Vit chng trnh khi to mt con tr tr n mng unsigned int c 20 phn t. Sau gn gi tr cho cc phn t trong mng l nhng s chn bt u t 2, hin th cc gi tr ny ra mn hnh theo nhiu cch khc nhau (nu c th) thnh 4 dng, mi dng c 5 phn t. 9) Vit chng trnh c tn l binary khi thc hin ti du nhc lnh 10) C:\>binary DecimalValue 11) chng trnh s tnh v hin th gi tr nh phn ng vi gi tr thp phn nhp. Trong , DecimalValue l gi tr thp phn 2 byte (32768 n 32767). 12) Gi tr trung bnh ca mt dy c n s l mt s thc v c nh ngha l gi tr m n c n/2 gi tr ln hn n, v n/2 gi tr nh hn n. Vit chng trnh c tn l median khi thc hin ti du nhc lnh 13) C:\>median FileName

170

14) chng trnh s tnh v hin th gi tr trung bnh ca cc gi tr trong tp tin FileName, nhng nu g lnh 15) C:\>median 16) chng trnh s tnh v hin th gi tr trung bnh ca n (2 n 10) gi tr c nhp t bn phm. 17) Vit chng trnh thc hin sao chp tp tin File1 thnh tp tin File2: 18) C:\>copy File1 File2 19) Vit chng trnh khi thc hin lnh 20) C:\>page File 21) th ni dung tp tin c ch nh s hin th ln mn hnh theo tng trang (23 dng), ngi s dng c th n phm bt k xem trang k tip. 22) Vit chng trnh x l chui k t bao gm cc chc nng sau: (Ch : dng con tr ci t v khng c dng hm th vin) Tnh chiu di ca chui nhp. Sao chp 2 chui vi nhau. So snh 2 chui vi nhau. Tm mt k t trong chui nhp. Tm chui con trong chui nhp. Thm chui con vo trong chui nhp ti v tr k. Xo chui con trong chui nhp. Loi b cc khong trng tha (k t Space, Tab) trong chui nhp. Chun ha chui nhp. o ngc chui nhp.

171

Kim tra 2 chui nhp c gm cng cc k t hay khng ? Kim tra chui nhp c i xng hay khng ? Kim tra chui nhp c tun hon hay khng ? m tn s xut hin ca cc k t trong chui nhp. m s t trong chui nhp. m s k t, s t v s dng trong chui nhp. Chuyn t cui cng thnh t u tin trong chui nhp. 23) Vit chng trnh khai bo chui c tn l last_first c ni dung l Smith, Bill, sau tch tn v h ca chui ny ri kt hp chng li thnh Bill Smith v gn cho chui first_last. Hin th hai chui ra mn hnh. 24) nh ngha mt hm c ba tham s, mi tham s l mt chui k t gm: tn, tn lt, v h. Hm ny tr v mt chui cha ba tham s trn theo th t h, tn, v k t u ca tn lt. V d, nu ba tham s ln lt c ni dung l John, Quincy, v Doe th hm tr v chui Doe, John Q.. Vit chng trnh p dng. 25) Tng t nh cu 2, nhng nh ngha hm ch c mt tham s. V d, nu tham s c ni dung l John Quincy Doe th hm tr v chui Doe, John Q.. 26) nh ngha mt hm nhn vo s th t ca mt thng v tr v tn ca thng . Vit chng trnh p dng. 27) nh ngha mt hm nhn vo tn ca mt thng v tr v s th t ca thng . Vit chng trnh p dng. 28) nh ngha hai hm: hm th nht chuyn chui k t bt k thnh chui k t thng, hm th hai chuyn thnh chui k t hoa. Vit chng trnh p dng.

172

29) Vit chng trnh c nh ngha mt hm vi tn l replace_all, biu thc replace_all(str, substring, newSubstring) tr v mt chui m tt c nhng xut hin ca substring trong str c thay th bng newSubstring. 30) Mt chui c gi l i xng (palindrome) nu n khng thay i khi th t ca cc k t c o ngc. V d: madam, 463364, ABLE WAS I ERE I SAW ELBA l cc chui i xng. Vit hm nhn vo mt chui v cho bit chui ny c i xng khng. Vit chng trnh p dng. 31) Vit chng trnh c nh ngha mt hm nhn vo hai chui v cho bit chui th nht c phi l mt hon v ca cc k t trong chui th hai hay khng. V d chui dear l mt hon v ca chui read hay dare. 32) Khng s dng cc hm th vin x l chui ca C++. Gi s chiu di chui khng ln hn 80 k t v chui c nhp t bn phm. Hy vit chng trnh c nh ngha cc hm cho mi yu cu sau: Sao chp chui s1 sang chui s2. Hin th hai chui ln mn hnh. Ly n (gi tr nhp) k t u tin ca chui ngun, hin th chui ngun v chui kt qu ra mn hnh. Ly n (gi tr nhp) k t cui cng ca chui ngun, hin th chui ngun v chui kt qu ra mn hnh. Chn mt chui vo chui khc ti v tr c ch nh (nu v tr ch nh khng hp l th chng trnh s khng thc hin thao tc ny). Hin th chui kt qu ra mn hnh.

173

Xo mt s k t trong mt chui ti v tr bt u v s k t cn xo c ch nh (cn kim tra tnh hp l ca hai tham s ny). Hin th chui cn li ra mn hnh. 33) Vit chng trnh c vo mt chui ti a 80 k t v nh ngha cc hm thc hin cc yu cu sau: Hin th s ln m k t xut hin trong chui. Cc k t c sp theo th t alphabet. V d nhp Le Van B, th hin th k t 'a' c mt ln, 'b' c mt ln, 'c' khng c, ... Hin th s ln m cc t mt k t, hai k t, ba k t, ... xut hin trong chui. Gi s chiu di ti a ca mt t l 10 k t.

174

CHNG 7. KIU STRUCT


1. Khi nim Khc vi kiu mng, struct l kiu d liu c cu trc bao gm nhiu thnh phn c th thuc nhiu kiu d liu khc nhau. Kiu struct cho php lu tr thng tin v mt i tng vi y cc thuc tnh ca n trong mt bin. Mi thuc tnh l mt bin thnh phn. Kiu d liu ca cc bin ny c th l kiu c s hay kiu mng, thm ch mt kiu struct khc. 2. Khai bo v truy xut bin struct trong C Cch 1: struct <tn cu trc>{ <kiu> <tn bin thnh phn>; }; struct <tn cu trc> <danh sch bin cu trc>; Cch 2: struct <tn cu trc>{ <kiu> <tn bin thnh phn>;
175

} <danh sch bin kiu struct>; Cch 3: struct { <kiu> <tn bin thnh phn>; } <danh sch bin kiu struct>; Mi khai bo struct l s m t mt kiu d liu mi, v ch l s m t cu trc khung chung cho mi bin th hin ca n. Mi bin kiu struct sau khi khai bo u bao gm bn trong n cc thnh phn thuc tnh c m t trong phn khai bo kiu struct. Cc thnh phn thuc tnh ca mi bin th hin c th c truy xut nh vo ton t du chm . nh sau: <tn bin struct>.<tn bin thnh phn> Du chm . c gi l ton t truy nhp thnh phn cu trc. Nu bn thn thnh phn cu trc cng li l mt kiu struct khc th vn p dng ton t ny xc nh thnh phn su hn trong cc cu trc thnh phn. <tn bin struct>.<tn bin struct thnh phn>.<tn bin tp>

176

3. Lnh typedef Cho php t tn mi cho mt kiu d liu khai bo v nh ngha trc: typedef <tn kiu c> <tn mi>; V d: typedef unsigned char byte; Sau cu lnh ny, byte l tn gi khc ca kiu unsigned char. Khi , 2 khai bo sau y l tng ng nhau: byte c; v unsigned char c; Lnh typedef thng c s dng nh ngha cc kiu d liu phc hp thnh mt tn duy nht. V d: lnh typedef int * PTR_INT; nh ngha kiu d liu con tr nguyn. Sau ny khi cn khai bo mt con tr nguyn, ta ch cn vit: PTR_INT px; // tng ng vi khai bo int * px;

177

Ta c th n gin cch vit khai bo bin cu trc bng cch s dng lnh typedef nh sau: typedef struct{ <kiu> <tn bin thnh phn>; } <tn mi>; V d: ta nh ngha phn s nh l kiu cu trc typedef struct{ int tuso, mauso; }PHANSO; Sau , ta nh ngha cc bin kiu PHANSO PHANSO ps1, ps2; 4. Kiu enum Cho php dng danh hiu t tn cc gi tr nguyn mt cch gi nh. Cc tr nguyn trong enum c bt u t tr 0, tr khi xc nh r tr khc. Cc tr nguyn k tip c gi tr bng tr nguyn trc cng thm mt. Khai bo

178

enum <tn kiu enum>{Danh sch cc tr nguyn}; V d: enum Weekdays{Sunday, Monday, Tuesday, Wedneday,

Thirsday, Friday, Satyurday}; Khi : Sunday c tr = 0, Monday c tr = 1, Tuesday c tr = 2, 5. Mng cc struct const MAX = 20; const MONHOC = 3; typedef struct{ int d, m, y; }NGAYSINH; typedef struct{ char * ho; char * ten; NGAYSINH ngsinh; float diem[MONHOC]; // . . . . }SINHVIEN;
179

SINHVIEN sv[MAX]; 6. Con tr tr n bin kiu struct typedef struct{ <kiu> <tn bin thnh phn>; } <tn mi>; <tn mi> * <tn bin tr>; V d: typedef struct{ int tuso, mauso; }PHANSO; PHANSO *pps; Ta truy xut cc bin thnh phn ca pps nh sau: (*pps).tuso (*pps).mauso hay

180

pps->tuso pps->mauso 7. Truyn tham s kiu struct cho hm Truyn bng tham tr: chng trnh s chm i do phi tn thi gian sao chp gi tr ca bin cu trc dng lm tham s thc cho tham s hnh thc. Truyn bng tham bin hay tham tr: d kch thc ca bin cu trc c ln th a ch ca bin vn ch l kch thc ca a ch vng nh. 8. Kiu union Mt bin kiu union cng bao gm nhiu thnh phn ging nh mt bin cu trc, nhng khc nhau ch: cc trng thuc tnh trong bin cu trc c cp pht cc vng nh khc nhau, cn cc trng ca bin union c cp pht chung vng nh. di ca bin union bng di ca thnh phn di nht trong bin. Khai bo bin union ging nh khai bo bin struct V d: typedef union { unsigned int n; unsigned char ch[2];

181

}VAL; VAL x; x.n=0x1B1A; khi : ch[0] = 1A v ch[1]=1B 9. Bi tp 1) Cho trc mt thi im gi, pht, giy. Vit chng trnh tnh thi im 1 giy sau, 1 giy trc. 2) Vit chng trnh tnh khong cch (s giy) gia 2 thi im cho trc. 3) Cho trc mt b ngy, thng, nm. Vit chng trnh tnh ngy hm sau, ngy hm trc. 4) Vit chng trnh tnh khong cch (s ngy) gia 2 b ngy, thng, nm cho trc. 5) Vit chng trnh thc hin cc php tnh (+, -, *, /) trn phn s. 6) Vit chng trnh thc hin cc php tnh (+, -, *, /) trn s phc. 7) Vit chng trnh thc hin php cng, v php nhn 2 ma trn.

182

CHNG 8. File
1. Gii thiu chung File l c ch cho php lu tr d liu mt cch lu di, vi s lng ln (v mt l thuyt l khng hn ch). C++ xem File ch n thun l mt dy cc byte. File c nh du kt thc bng k hiu c bit (CTRL+Z cho DOS v CTRL+D cho UNIX, . . .) c th lm vic vi File a, trc ht ta phi lin kt file vi dng (stream) nhp/xut bng cch to ra i tng File thuc lp: fstream (dng cho vic Vo/Ra File), ofstream(dng cho Ghi ra File), ifstream (dng cho c File). Cc lp ny c khai bo trong tp tin tiu <fstream.h>. C 2 loi Vo/Ra file a c bn trong C++: Vo/Ra file nh dng (formatted file I/O), v Vo/Ra file nh phn (binary file I/O) Quy trnh thao tc file: m file kim tra x l file ng file 2. Thao tc trn kiu file 2.1. M File ( lin kt knh nhp/xut vi file a ) Dng hm thit lp: <fstream> filevar( <filename> ); Hoc dng hm thnh phn open ca i tng lung nhp/xut: <fstream> filevar; filevar.open( <filename>, <i/o mode> ); Cc ch m file:

183

Ch ios::in ios::out ios::ate ios::app ios::trunc ios::nocreate ios::noreplace

M t M c ( mc nh cho ifstream ) M ghi ( mc nh cho ofstream ) Bt u c/ghi cui file Bt u ghi cui file Ct b file (TRUNCate) Li nu file khng tn ti Li khi m ghi ra nu file tn ti, tr khi ate hoc app c thit lp

ios::binary

M file trong ch nh phn ( mc nh l vn bn)

2.2. X l File Trc khi c/ghi file, cn kim tra file c m thnh cng hay khng: if (!file) else Trong qu trnh lm vic vi file, cn dng hm kim tra kt thc tp tin trong vng lp: while(!file.eof()) Vo/Ra k t: hm get() v put() lm cc hm thnh phn ca ofstream v ifstream cho php c k t t file, v ghi k t ra file. Vo/Ra file nh phn: hm read() v write() cho php thc hin vic c/ghi mt s lng ln cc byte d liu t b m sang file. Cc tham s cho hm read() v write() l a ch ca b m d liu v kch thc ca chng. a ch phi p thnh kiu char v kch thc c tnh bng byte.
184

Vo/Ra i tng (objects I/O): dng ch m file nh phn, v cc hm read(), write(). Con tr file: mi i tng file kt hp vi n 2 gi tr nguyn gi l get pointer ( con tr c ) v put pointer ( con tr ghi ). Hai gi tr ny cho bit v tr c v v tr ghi hin ti ca con tr trong qu trnh lm vic vi file. iu khin con tr file phc v cho vic c/ghi file ti v tr ty , ta dng hm seekg(), seekp() ( di chuyn con tr file n v tr mong mun), tellg(), tellp() ( c v tr hin hnh ca con tr file). Hm seekg() v tellg() cho php thit lp v kim tra con tr c, cn cc hm seekp() v tellp() thc hin tng t i vi con tr ghi. Hm seekg() v seekp() c 2 tham s: tham s th 1 biu din lch (offset), tnh t v tr c th xc nh bi tham s th 2 (ios::beg, ios::cur, ios:end) 2.3. ng File Dng hm close() ca i tng file. 2.4. V d Vo/Ra File nh dng Hm ghi file s nguyn void WriteIntFile() { ofstream outf( test.dat, ios::out ); if ( ! outf ) { cerr << Cannot open file test.dat . . .\n; exit( 1 );

185

} for ( int i = 0; i < 100; i++ ) outf << i + 1 << ; outf.close(); } Hm c file s nguyn void ReadIntFile() { ifstream inf( test.dat, ios::in ); if ( ! inf ) { cerr << Cannot open file test.dat . . .\n; exit( 1 ); } int i; while ( ! inf.eof() ) { inf >> i; cout << setw( 4 ) << i; } inf.close();

186

} Hm c/ghi file s nguyn void IntFile() { fstream file; file.open( test.dat, ios::out | ios::in ); if ( ! file ) { cerr << Cannot open file test.dat . . .\n; exit( 1 ); } for ( int i = 0; i < 100; i++ ) outf << i + 1 << ; file.seekg( 0, ios::beg ); // ve dau file while ( ! file.eof() ) { inf >> i; cout << setw( 4 ) << i; } file.close(); }

187

2.5. V d Vo/Ra k t Hm ghi k t ra file void ReadCharFile() { ofstream outf( test.txt, ios::out ); if ( ! outf ) { cerr << Cannot open file test.txt \n; exit( 1 ); } char str[] = KHOA TIN HOC; int i = 0; while ( s[ i ] ) { outf.put( s[ i ] ); // outf << s[ i ] i++; } outf.close(); } Hm c k t t file void ReadCharFile() {

188

ifstream inf( test.txt, ios::in ); if ( ! inf ) { cerr << Cannot open file test.txt . . .\n; exit( 1 ); } char ch; while ( ! inf.eof() ) { inf.get( ch ); cout << ch; } inf.close(); } 2.6. V d Vo/Ra File nh phn #include <iostream.h> #include <fstream.h> const int MAX = 100; void main() { int buffer[ MAX ] = { 0 };

189

for ( int i = 0; i < MAX; i++ ) buffer[ i ] = i; ofstream outf( test.dat, ios::binary ); if ( ! outf ) { cout << Cannot open file test.dat . . .\n; exit( 1 ); } outf.write( ( char* ) buffer, MAX * sizeof( int ) ); for ( i = 0; i < MAX; i++ ) buffer[ i ] = 0; ifstream inf( test.dat, ios::binary ); if ( ! inf ) { cout << Cannot open file test.dat . . .\n; exit( 1 ); } inf.read( ( char* ) buffer, MAX * sizeof( int ) ); for ( i = 0; i < MAX; i++ ) if ( buffer[ i ] = i ) {

190

cerr << Du lieu khong dung . . .\n; return; } cout << Du lieu dung . . .\n; } 3. Bi tp 1) Vit chng trnh ni hai tp tin vn bn, tp tin th hai c ni vo cui tp tin th nht. Hin th ni dung ca tp tin sau khi ni ra mn hnh. Tn hai tp tin c nhp t bn phm. 2) Vit chng trnh c mt tp tin vn bn, tn tp tin c nhp t bn phm. Sau m s t trong tp tin v hin th ra mn hnh. 3) Vit chng trnh c mt tp tin vn bn, m s ln xut hin ca mt chui (nu c) trong tp tin v hin th ra mn hnh. Tn tp tin v chui cn tm c nhp t bn phm. 4) Vit chng trnh sao chp mt tp tin vn bn thnh mt tp tin vn bn khc v mi dng trong tp tin ch phi c nh s th t pha bn tri. Tn hai tp tin c nhp t bn phm. 5) Vit chng trnh c mt tp tin vn bn c tn c nhp t bn phm, m s k t trn mi dng. Chng trnh phi hin th s dng, chiu di ca dng ngn nht, di nht, v gi tr trung bnh ca cc k t trn mi dng.

191

6) Vit chng trnh chun ho mt tp tin vn bn thnh tp tin khc, tn hai tp tin c nhp t bn phm. Chng trnh s b nhng dng trng v khong trng d tha vi qui c nh sau: Ch gi li mt khong trng sau du phy hay du chm v c 5 khong trng cho mi u dng. Gi s tp tin ch cha cc k t ch ci, khong trng, du phy, v du chm. 7) Vit chng trnh c tp tin vn bn, m s k t khc trng, s dng khc trng, s t, v s cu. Sau tnh trung bnh s k t trn mi t v s t trn mi cu. Gi s tp tin ch cha cc k t ch ci, khong trng, du phy, du chm, du chm phy, v du hai chm. Mt t l mt dy cc k t ch ci lin tip nhau, mt cu l mt dy cc t c phn cch bng khong trng, du phy, du chm phy, hay du hai chm v kt thc bng du chm. 8) Vit chng trnh c tp tin vn bn v hin th ni dung ca n trong mt khi c ti a 20 dng. Nu sau khi hin th m ni dung tp tin vn cha c c ht th cn thng bo cho ngi s dng bit c mun hin th khi k tip khng. Ngc li, kt thc chng trnh. 9) Gi s mi dng trong tp tin vn bn cha thng tin v mt sinh vin, bao gm: S th t (t 1 n 100), h tn, v im (s thc). Vit chng trnh nhp mt s th t t bn phm v hin th thng tin v sinh vin c s th t tng ng.

192

TI LIU THAM KHO 1. Nguyn xun Huy, Thut ton, Nh xut bn Khoa Hc v K Thut. 2. Hong Kim, Gii mt bi ton trn my tnh nh th no, Nh xut bn Gio dc. 3. Nguyn Thanh Thy (ch bin), Nhp mn lp trnh Ngn ng C, Nh xut bn Khoa hc v K thut. 4. Trn Vn Lng, Lp trnh hng i tng s dng C++, Nh xut bn Thng K. 5. GS. Phm Vn t, C++ v lp trnh hng i tng, Nh xut bn Khoa hc v K thut. 6. Nguyn Thanh Thy, Lp trnh hng i tng, Nh xut bn Khoa hc v K thut. 7. T Oai Hng, Gio trnh C s lp trnh s dng ngn ng C++, Ti liu lu hnh ni b (Trng i Hc M TP. HCM) 8. Joel Adams & Larry Nyhoff, C++ An Introduction to Computing, Prentice Hall 2002, Third Edition. 9. H.M. Deiteil & P.J. Deitel, C++ How to Program, Prentice Hall, New Jersey, 2003, Fourth Edition. 10. Bjarne Stroustrup, The C++ Programming Language, Addition Wesley Longman, 1997, Third Edition.

193

Bin son L PH HIU

194

You might also like