You are on page 1of 102

B cng thng

Trng i hc cng nghip h ni --- & ---

cng chi tit


mn hc

k thut lp trnh
(Ti liu ging dy)

h: i hc
(lu hnh ni b)

H ni 4/2007

cng chi tit thuat lap trinh

Ki

Ti liu tham kho 1. K thut lp trnh C GS.TS. Phm Vn t 2. Ngn ng lp trnh C++ - GS. TS. Phm vn t. 3. K thut lp trnh - Nguyn Tin Huy Trn Hnh Nhi. 4. Ngn ng lp trnh C++ - Ng Trung Vit. . Ni dung Chng I. Tng quan v C++ Chng II. Cc cu trc iu khin Chng III. Chng IV. K thut lp trnh n th K thut lp trnh dng mng

Chng V. K thut lp trnh dng con tr Chng VI. K thut lp trnh vi tp Chng VII. D liu kiu cu trc Phn b thi gian: 30 tit l thuyt + 60h thc hnh iu kin tin quyt: hc mn Nhp mn tin hc, Pascal Thang im: 10 S bi kim tra: 04 bi S bi thi: 01 bi thi gia hc phn + 01 bi thi ht hc phn.
Ti liu ging dy- Lu hnh ni b Trang

cng chi tit thuat lap trinh

Ki

Bin son: ThS. Nguyn Mnh Cng

Ti liu ging dy- Lu hnh ni b Trang

cng chi tit thuat lap trinh Chng I. tng quan v C++ I. Quy trnh lm vic trong C++

Ki

I.1. Cc bc lp chng trnh bng C++ thc hin vic vit v thc thi mt chng trnh n gin trong C++, ngi ta thng lm theo cc bc sau: - Vo mi trng son tho m lnh ca C++: lm c vic ny, trn my tnh phi c ci t phn mm Turbo C 3.0 (hoc cao hn, hoc Booland C). Tm file TC.exe trong th mc TC\BIN (hoc TC30\BIN) v thc thi file ny. - Son tho m lnh ca chng trnh: Mi trng son tho ca TC l mt ca s son tho v h thng menu tr gip qu trnh son tho cng nh dch v thc thi chng trnh. Ta tin hnh son tho m lnh ca chng trnh trong ca s ny theo ng c php ca C++. - Sot li, dch chng trnh: Sau khi son tho m lnh bng ngn ng C++, ta tin hnh dch chng trnh thnh ngn ng my. Qu trnh dch ch thnh cng khi ton b m lnh ta son tho khng c li c php. V vy, trong qu trnh dch, TC s tin hnh sot li. Qu trnh sot li c tin hnh ln lt qua cc dng lnh t trn xung. Khi gp li, chng trnh dch s bo li ti v tr gn ni xy ra li. lm cc cng vic dch sot li, ta bm phm F9, nu chng trnh bo li, hy tin hnh sa li. Nu mun qu trnh dch cho ta mt file thc thi c ca chng trnh trn a (file .exe) ta cn m bo trn menu: Options\ Linker\ Settings\ Output\ Standard exe ang c chn. - Thc thi chng trnh: Khi chng trnh ht li ta c th thc thi chng trnh bng cch bm t hp phm Ctrl F9. Kt thc qu trnh thc thi s quay v mi trng son tho m lnh ban u.
Cc thao tc khi son tho:

Ti liu ging dy- Lu hnh ni b Trang

cng chi tit Ki thuat lap trinh M file mi: Chn File\ New hoc bm phm chc nng F3, g tn file mi vo v bm Enter. M file c sn: Chn File\ Open hoc bm phm chc nng F2 ri chn file cn m v bm Enter. Lu file: Chn File\ Save hoc bm phm chc nng F2 ri t tn file v bm Enter. Ch trong C++, phn m rng ca file m ngun l .CPP. ng file: Bm t hp phm Alt F3. Nu file cha lu, C++ s yu cu lu file hoc b qua vic lu file, hy bm Y hoc N nu mun lu file hoc khng lu file. Phng to, thu nh ca s son tho: Bm phm chc nng F5. Chuyn n ca s son tho b n ng sau ca s hin ti: bm phm chc nng F6. Thot khi mi trng C++: Bm t hp phm Alt X. Bi en vng m lnh: kch, gi v r chut ln vng cn bi en hoc chuyn con tr v u vng cn bi en ri gi phm Shift trong lc di chuyn con tr qua vng cn bi en. Sao chp vng bi en: Chn Edit\ Copy hoc bm t hp phm Ctrl + Insert. Dn vng m lnh sao chp: Chn Edit\ Paste hoc bm t hp phm Shift + Insert. Sao chp nhanh vng bi en: Di chuyn n v tr mi v bm phm K ri C trong lc gi phm Ctrl. Di chuyn vng bi en: Chuyn n v tr mi v bm phm K ri V trong lc gi phm Ctrl. Xo vng m lnh bi en: Bm phm K ri Y trong lc gi phm Ctrl. B bi en: Bm phm K ri K trong lc gi phm Ctrl hoc c th bm phm K ri H trong lc ang gi phm Ctrl. Chuyn con tr v u dng: Bm phm Home. Chuyn con tr v cui dng: Bm phm End.

I.2. Cu trc mt chng trnh n gin trong C++ Mt chng trnh n gin trong C++ thng c vit trong mt ca s son tho (iu ny khng hon ton ng trong cc chng trnh ln).
Ti liu ging dy- Lu hnh ni b Trang

cng chi tit thuat lap trinh

Ki

Mt chng trnh bt k trong C++ u c to nn t rt nhiu hm (tm gi l nhng n v chng trnh), trong c mt hm c bit c xem nh chng trnh chnh v c gi l hm main. Thng thng hm main c vit ra gi (s dng) cc hm khc nhm gii quyt bi ton. Tuy nhin, y ta ch xt mt chng trnh n gin bao gm duy nht mt hm main, ta vit theo cu trc sau: 1#include <tn th vin> 2void main() 3{ 4Cc lnh trong thn hm main 5} Dng 1: c gi l cc ch th tin x l. Dng ny c nhim v khai bo cc th vin s s dng trong chng trnh. Trong C++, cc lnh (hm) thng c t trong cc th vin, l cc file .h (c th tm thy chng trong th mc Include ca b TC). Nu trong chng trnh mun s dng cc lnh ny th cn phi khai bo s s dng cc th vin tng ng ti y. C rt nhiu th vin c th s dng nhng nhng th vin hay dng l: conio.h, stdio.h, iostream.h, math.h, iomanip.h, string.h, ofstream.h, ifstream.h, fstream.h, Dng 2: l t kho void main() khai bo bt u hm main. Dng 3 v 5: cc du { v } bo hiu bt u v kt thc thn hm main hoc bt u v kt thc mt khi lnh. Dng 4: l ni ta t cc lnh ca chng trnh chnh. V d: chng trnh in ra mn hnh dng ch Hello wold !
#include iostream.h Ti liu ging dy- Lu hnh ni b Trang

cng chi tit thuat lap trinh void main() { cout<< Hello world !; }

Ki

xem trong mt th vin c cha nhng hm no, trn menu ta chn Help\ Index ri g tn th vin v bm Enter. xem mt hm ta ang s dng thuc vo th vin no, ta cng chn help\ Index ri g tn hm v bm Enter. Trong C++ c phn bit ch hoa v ch thng. Sau mi lnh u c du ; bo kt thc lnh. t li ng dn ti cc th vin: Trong mt chng trnh ta thng s dng cc hm trong cc th vin khc nhau c khai bo ti dng 1 (nh trn). Thng thng, cc th vin t trong cc th mc TC\INCLUDE. Mi trng lp trnh C++ t thit t ng dn ti cc th vin ny. Tuy nhin, trong trng hp ng dn b thay i, chng trnh dch s khng tm thy chng v bo li, khi ta cn phi thit t li: B1: Trong Menu chnh, chn Option\ Directories. B2: Trong Include, t ng dn ti cc th vin c ui .h(v d: C:\TC\INCLUDE). Trong Libraries, t ng dn ti cc th vin ui .lib (v d: C:\TC\LIB). II. Bin, biu thc, cc lnh nhp xut

II.1. Bin hiu khi nim v bn cht bin, ta xt chng trnh n gin sau: Nhp vo cc s nguyn a, b. Gi P l tng ca a v b, S l tch ca a v b. Tnh K=S*P/(S+P). Ta d dng biu din bi ton bng m hnh sau: a b K

C th coi u vo ca bi ton l a, b v u ra l K. Cc gi tr P v S l cc gi tr trung gian.


Ti liu ging dy- Lu hnh ni b Trang

cng chi tit thuat lap trinh

Ki

Khi ngi dng nhp vo cc gi tr a v b, chng cn c lu tr trong b nh. Tng t nh vy cc gi tr P, S, K nu cn cng s c lu tr trong b nh. Vy ti a ta cn s dng 5 nh lu tr chng. Cc nh ny gi l cc bin. Bin l mt vng nh c t tn. Mi nh (bin) u c t 1 tn tun theo quy c t tn nh sau: - Tn bin bao gm ch ci, ch s hoc du gch ni _ - K t u tin ca tn bin khng c l mt ch s. - Khng c trng vi t kho. - Trong cng mt phm vi khng c 2 bin trng tn. Trong chng trnh, ta s dng tn bin truy cp vo nh ca bin. Khi tn bin chnh l gi tr ang cha trong nh ca n. Tt c cc bin khi s dng u phi khai bo. C php nh sau:
<kiu bin> <tn bin>;

Trong : <kiu bin>: mi bin dng cha mt loi gi tr khc nhau nh: s nguyn, s thc, k t .v.v.., do vy chng phi c kiu tng ng. Mt s kiu c bn nh sau: Kiu s: bao gm + S nguyn int/ short int: l kiu d liu c di 2 byte, dng khai bo cc bin nguyn c gi tr trong khong 32768 -> 32767 + S nguyn khng du: unsigned int: di 2 byte, khai bo cc bin nguyn c gi tr t 0 ti 65535. + S nguyn di long: l kiu d liu c di 4 byte, dng khai bo cc bin nguyn c gi tr trong khong 2.147.483.648 -> 2.147.483.647. 8

Ti liu ging dy- Lu hnh ni b Trang

cng chi tit thuat lap trinh

Ki

+ S nguyn di khng du: unsigned long: di 4 byte, khai bo cc bin c gi tr t 0 ti 4.294.967.295. + S thc (du phy ng) float: kch thc 4 byte khai bo cc bin thc t 3.4*10-38 -> 3.4*1038. + S thc (du phy ng, chnh xc kp) double: kch thc 8 byte, c phm vi t 1.7*10-308 - > 1.7*10308 + S thc (du phy ng, chnh xc kp) di long double: kch thc 10 byte, khai bo cc bin t 3.4 * 10 -4932 ti 1.1 * 104932. Kiu k t: bao gm + Kiu k t char: khai bo bin cha mt k t. + Kiu con tr k t char *: tng ng vi chui k t. <tn bin>: c t tu tun theo cc quy c t tn bin trn. V d: int a, b;
float c;

y, ta khai bo 2 bin a v b c cng kiu s nguyn v bin c c kiu s thc. Khi chng trnh s cp pht 2 nh c kch thc 2 byte mi v t tn l a, b; mt nh kch thc 4 byte c t tn c. V tr khai bo: C th khai bo bin ti bt k u trong thn chng trnh trc khi s dng. II.2. Biu thc Mt biu thc bao gm 2 thnh phn: cc ton t (php ton) v cc ton hng (s hng). Cc ton t: Trong C++, cc ton t c tm phn chia lm 4 loi theo chc nng ca chng. Sau y l mt s ton t hay dng: - Cc ton t s hc:
Stt 1 2 Ton t Cng Tr Cch vit + -

Ti liu ging dy- Lu hnh ni b Trang

cng chi tit thuat lap trinh 3 4 5 6 7 Nhn Chia ng d Tng 1 n v Gim 1 n v Ton t V Hoc Ph nh * / % ++ --

Ki

- Cc ton t Logic:
Stt 1 2 3 Cch vit && || ! Cch vit > < >= <= == !=

- Cc ton t so snh:
Stt 1 2 3 4 5 6 Ton t Ln hn Nh hn Ln hn hoc bng Nh hn hoc bng Bng Khng bng Ton t Gn

- Ton t gn:
Stt 1 Cch vit =

Mt bng tng i y cc ton t trong C++ nh sau: [] () * + % << == != = *= >>= &= . >> ^ /= ^= -> ~ < | %= |= ++ ! > && += , -& sizeof / <= >= || ?: -= <<= # ##

Cc ton hng: C th chia cc ton hng lm 3 loi gm: hng, bin v hm.

Ti liu ging dy- Lu hnh ni b Trang

1 0

cng chi tit thuat lap trinh

Ki

Hng: gm hng s, hng xu k t v hng k t. Hng xu k t khi vit cn c t gia hai du nhy kp ; hng k t c t gia hai du nhy n cn hng s th khng. Hm: gm nhng hm tr v mt gi tr no v gi tr ny c s dng trong biu thc. C rt nhiu hm c sn trong cc th vin m ta c th s dng cho biu thc. Sau y l mt s hm ton hc (th vin math.h) thng dng:
STT Tn hm 1. Sin(x) 2. 3. 4. 5. 6. 7. 8. Cos(x)
x

Cch vit sin(x) cos(x) sqrt(x) exp(x) log(x) log10(x) abs(x) fabs(x)

ex Ln(x) Log10(x) |x| (x nguyn) |x| (x thc)

V d: xt biu thc ton hc sau ((2ex + |x|.Ln(x)) >


x/

sin(x)) (x < 5)

Biu thc c vit di dng ngn ng C++ nh sau: (2*exp(x) + fabs(x)*log(x) > sqrt(x)/ sin(x)) && (x < 5) Trong biu thc ny, cc ton t s hc gm: +, *; ton t logic gm: &&; cc ton t so snh gm: >, <; cc ton hng l hng s gm: 2, 5; ton hng l bin gm: x; cc ton hng l hm gm: exp(x), fabs(x), log(x), sqrt(x), sin(x). II.3. Cc lnh nhp-xut a. Cc lnh nhp xut trong IOStream.h - Lnh xut: cout<< <Ni dung cn xut>;
Ti liu ging dy- Lu hnh ni b Trang

1 1

cng chi tit thuat lap trinh

Ki

Trong : <<: c gi l ton t xut. <Ni dung cn xut>: c th l Hng k t, Hng xu k t, Bin, Hm hoc phng thc nh dng. V d:
cout<<Sin(x) =; cout<<sin(x);

C th s dng lin tip nhiu ton t xut trn mt dng cout, chng hn: cout<<Sin(x) =<<sin(x); Nu mun xut d liu trn nhiu dng ta c th s dng ton t endl xung dng. V d: cout<<Sin(x) =<<endl<<sin(x); s xut d liu trn 2 dng. nh dng d liu trc khi xut: Ta c th s dng mt trong 2 cch sau: Cch 1: s dng ton t nh dng: cout.width(int n): ch nh ti thiu n v tr dnh cho vic xut d liu. Nu gi tr xut chim t hn n v tr th mc nh l cc k t trng s chn vo pha trc. Nu gi tr xut chim nhiu hn n v tr, s v tr dnh cho gi tr xut s c tng ln sao va th hin gi tr xut. cout.fill(char ch): Ch nh k t ch s c in vo nhng v tr trng (nu c). cout.precision(int n): ch nh chnh xc ca gi tr s khi xut l n k t phn thp phn. V d: gi s ta c bin thc a: float a = 123.4523; Nu mun xut a ra mn hnh di dng: 000123.45 ta c th nh dng nh sau:
cout.width(9); cout.fill(0); cout.precision(2); cout<<a;

Cch 2: s dng cc hm nh dng: 1 2

Ti liu ging dy- Lu hnh ni b Trang

cng chi tit thuat lap trinh

Ki

Tng t nh cc phng thc nh dng, cc hm nh dng tng ng l: setw(int n) tng t nh cout.width(int n). setfill(char ch) tng t nh cout.fill(char ch). setprecision(int n) tng t nh cout.precision(int n). Cch dng: s dng cc hm nh dng ngay trn cc dng cout, trc khi a ra gi tr xut. Vi v d trn, ta c th vit:
cout<<setw(9)<<setfill(0)<<setprecision(2)<<a;

- Lnh nhp: Trong :

cin >> <Bin>;

>>: c gi l ton t nhp. Dng cin dng nhp cc gi tr (thng thng l) t bn phm vo cc bin. V d: nhp gi tr cho bin a, ta vit:
cout<< a= ; cin>>a;

C th dng lin tip nhiu ton t nhp trn mt dng cin nhp gi tr cho nhiu bin, chng hn: cin>>a>>b>>c;
Lnh cin ch thch hp cho vic nhp cc bin kiu s. Vi cc bin kiu xu k t th xu nhp vo phi khng cha du cch v lnh cin s kt thc khi ta nhp vo du cch hoc phm Enter.

V d: Vit chng trnh nhp vo mt s thc x, in ra mn hnh gi tr ca F(x) = sin 2(x) + |x| + eln(x) vi chnh xc 2 ch s sau du phy.
#include <conio.h> #include <math.h> #include <iostream.h> void main() { clrscr(); float x, F; cout<<nhp s thc x ; cin>>x; cout.precision(2); cout<<Gi tr F(<<x<<) =; cout<<sin(x)*sin(x) + fabs(x) + exp(log(x)); getch(); Ti liu ging dy- Lu hnh ni b Trang

1 3

cng chi tit thuat lap trinh }

Ki

b. Cc lnh nhp xut trong Stdio.h - Lnh xut: printf(chui cn xut , <Bin 1>, <Bin 2>); Trong : - chui cn xut c th gm: - Hng k t, hng xu k t: L cc k t cn in ln mn hnh. - Cc c t hay k t i din, bao gm:
%d: i din cho bin nguyn. %f: i din cho bin thc. %c: i din cho bin kiu k t (mc nh).

- Mi bin cn a ra mn hnh cn c mt c t tng ng ti v tr mun a ra, nh vy s lng bin bng s lng cc c t. V d: Cn a ra cc gi tr ca cc bin a, b, c kiu nguyn, ta vit:
printf (Gi tr ca a b c la %d %d %d, a, b, c);

- Lnh nhp: scanf(chui cc c t, &<Bin 1>, &<Bin


2>);

Trong , mi bin cn phi c mt c t tng ng. Lnh scanf nhp gi tr vo cc bin thng qua a ch ca bin. Ton t & c t trc tn bin ly a ch ca bin. c. Cc lnh nhp xut trong Conio.h - Lnh xut: puts(p); Trong p l mt con tr xu k t, tc p c kiu char* hoc l mt mng kiu char. Lnh puts(p) s a cc k t c con tr p tr ti ln mn hnh. - Lnh nhp: gets(p); Trong p l mt con tr xu k t, tc p c kiu char* hoc l mt mng kiu char. Lnh gets(p) c chc nng cho Ti liu ging dy- Lu hnh ni b 1 Trang 4

cng chi tit thuat lap trinh

Ki

php ngi s dng nhp vo mt xu k t v cha xu va nhp vo bin p. Nu s dng lin tip nhiu lnh gets th xen gia cc lnh gets ta cn lm sch b m bn phm bng lnh :
fflush(stdin); Cc lnh gets, puts thch hp cho vic nhp xut cc bin kiu xu k t.

V d sau y minh ho cc s dng cc lnh nhp xut mt cch ph hp cho tng loi bin: Nhp vo H tn, qu qun, s ngy cng ca mt cng nhn. In cc thng tin va nhp ln mn hnh km theo tin cng, bit rng mi ngy cng c tr 50.000.
#include "iostream.h" #include "stdio.h" #include "conio.h" void main() { char HoTen[30]; char Que[50]; int NgayCong; cout<<"Nhap ho ten: "; gets(HoTen); fflush(stdin); cout<<"Nhap que quan: "; gets(Que); cout<<"Nhap ngay cong: "; cin>>NgayCong; long Luong = (long) NgayCong*50000; cout<<"Thong tin vua nhap la: "<<endl; cout<<"Ho ten:"<<HoTen<<endl<<"Que:"<<Que<<endl;
cout<<"Ngay cong:"<<NgayCong<<endl<<"Luong:"<<Luong;

getch(); }

V NgayCong l bin kiu int nn khi ta nhn vi 50000 s c mt con s thuc kiu int. Tuy nhin con s ny qu ln so vi d liu kiu int nn khi gn sang bin long Luong ta cn chuyn n v kiu long bng cch vit: (long) NgayCong*50000; Cch vit ny gi l p kiu. p kiu mt biu thc ta vit: (<kiu>) <Biu thc>; c bit trong C++ lun quy nh php chia mt s nguyn cho mt s nguyn s thu c thng cng l mt s
Ti liu ging dy- Lu hnh ni b Trang

1 5

cng chi tit thuat lap trinh

Ki

nguyn. V vy mun thu c thng l s thc ta cn p kiu thng s ny. V d: ni n nguyn dng, php chia 1/n s cho ta kt qu l 1 s nguyn (ly phn nguyn ca thng). ly kt qu l s thc ta vit: (float) 1/n.

Ti liu ging dy- Lu hnh ni b Trang

1 6

cng chi tit thuat lap trinh Chng II. Cc cu trc iu khin trong C++ I. Cu trc r nhnh v cu trc chn

Ki

I.1. Cu trc r nhnh Trong thc t, khi gii quyt mt cng vic thng ta phi la chn nhiu phng n gii quyt khc nhau. Ngi ta thng biu din vn ny bng 2 mnh logic sau:
[1]. Nu th ; [2]. Nu th ngc li th

m phng hai mnh , trong ngn ng lp trnh C++ a ra cu trc r nhnh. C php:
if (<biu thc iu kin>) [else <Lnh 2>;] <Lnh 1>;

ngha: Nu <biu thc iu kin> nhn gi tr ng (TRUE), s thc hin <Lnh1>, ngc li, nu <biu thc iu kin> nhn gi tr sai (FALSE) s thc hin <Lnh2>; (nu c thnh phn [else <Lnh 2>;]). - <Lnh 1> v <Lnh 2> c th l mt lnh, mt khi lnh hoc mt, mt khi cc cu trc iu khin. Cc khi lnh hoc khi cu trc iu khin c t trong hai du { }. Cu trc r nhnh c hai dng (tu thuc vo s c hay khng c thnh phn [else <Lnh 2>;]) nh trong s khi di y.

<BTK>
FALSE

TRUE

TRUE

<BTK>

FALSE

<Lnh1> <Lnh>

<Lnh 2>

Ti liu ging dy- Lu hnh ni b Trang

1 7

cng chi tit thuat lap trinh

Ki

V d: Lp chng trnh nhp vo mt s nguyn. Kim tra tnh chn l ca s v thng bo ra mn hnh.
#include <conio.h> #include <stdio.h> #include <iostream.h> void main() { clrscr(); int a; cout<< nhp s nguyn a ; cin>>a; if (a%2 = = 0) cout<<s <<a<< chn; else cout<<s <<a<< l; getch(); }

a). M t mnh [1] [2]

b) M t mnh

Cc lnh if c th lng nhau theo ngha: Cc cu lnh bn trong mt mnh if li c th l cc mnh if. Mi lnh if y s cho php la chn 2 kh nng thc hin. Trong trng hp c n kh nng la chn v cc kh nng loi tr nhau, ta c th s dng n-1 lnh if y lng nhau. V d: Vit chng trnh thc hin vic nhp vo s tin phi tr ca khch hng. Nu s tin nhp vo t 300 ti 400, khuyn mi 20% s tin phi tr. Nu s tin t 400 tr ln, khuyn mi 30%. Cc trng hp khc khng c khuyn mi. Tnh v in s tin khuyn mi ca khch ln mn hnh.
#include <conio.h> #include <stdio.h> #include <iostream.h> void main() { clrscr(); int T, km; cout<<Nhp s tin ; cin>>T; if (T>=300 && T <=400) km = T*0.2; else if (T>400) km = T*0.3; Ti liu ging dy- Lu hnh ni b Trang

1 8

cng chi tit thuat lap trinh else km = 0; cout<<S tin khuyn mi <<km; getch(); }

Ki

Nu n kh nng l loi tr nhau th khi c th s dng n-1 lnh if lng nhau hoc c th s dng n lnh if ri nhau cho n kh nng la chn. Trng hp ngc li, ta nn s dng cc lnh if ri nhau.
V d: Vit chng trnh nhp vo im tng kt v xp loi o c ca mt sinh vin. Sau tnh s tin hc bng cho sinh vin nh sau: Nu tng kt >=7.00 th c 300000. Nu im tng kt >=9.00 v o c = T th c cng thm 100000.

Xt on trnh sau:
#include <conio.h> #include <stdio.h> #include <iostream.h> void main() { clrscr(); float tk; char hk; long T; cout<<Nhap im tong ket; cin>>tk; cout<<Nhap hanh kiem; cin>>hk; T=0; if (tk >= 7) T = 300000; else if (tk>=9 && hk = = T) T += 100000; cout<<Hc bng <<T; getch(); }

on trnh trn s cho kt qu sai trong trng hp sinh vin tng kt >=9.0 v o c tt. L do l s dng hai lnh if lng nhau khi cc kh nng khng loi tr nhau. on trnh trn c th c vit li nh sau:
#include <conio.h> #include <stdio.h> #include <iostream.h> void main() { clrscr(); float tk; char hk; long T; cout<<Nhap im tong ket; Ti liu ging dy- Lu hnh ni b Trang

cin>>tk;

1 9

cng chi tit thuat lap trinh cout<<Nhap hanh kiem; cin>>hk; T=0; if (tk >= 7) T = 300000; if (tk>=9 && hk = = T) T += 100000; cout<<Hc bng <<T; getch(); }

Ki

I.2. Cu trc chn Trong trng hp c qu nhiu kh nng la chn v cc kh nng loi tr nhau, nu s dng nhiu lnh if lng nhau s lm cho chng trnh phc tp, kh kim sot. V vy C++ cung cp mt cu trc iu khin khc s dng trong trng hp ny, l cu trc chn. C php:
switch (<Bin nguyn>) { case <GT 1>: <Lnh 1;> break; case <GT 2>: <Lnh 2;> break; case <GT n>: <Lnh n;> break; [default: <Lnh mc nh>;] }

ngha: Kim tra gi tr ca <Bin nguyn>: Nu <Bin nguyn> nhn gi tr <GT1>, thc hin <Lnh 1> Nu <Bin nguyn> nhn gi tr <GT2>, thc hin <Lnh 2> <Lnh 1> Bin =
GT1 Nu <Bin nguyn> nhn gi tr <GTn>, thc hin <Lnh n>

Nu c thnh phn [default: ], thc hin <lnh GT2 mc nh> khi bin nguyn khng nhn gi tr no trong n gi tr trn. S khi:

Bin =

<Lnh 2>

Bin = GTn Ti liu ging dy- Lu hnh ni b Lnh mc Trang nh

<Lnh n>

2 0

cng chi tit thuat lap trinh

Ki

- Lnh switch ch thc hin trn bin nguyn. Cc cu lnh <Lnh 1>, <Lnh 2> c th l mt khi lnh hoc khi cc cu trc iu khin (tc nhiu lnh, nhiu cu trc iu khin t gia hai k t { v }). Sau phi c lnh break; nu khng lnh switch s chy sai ngha ca n. - Thnh phn [default: ] l khng bt buc. Nu c thnh phn ny, <Lnh mc nh> s c c thc hin sau khi tt c cc trng hp case u khng tha mn. V d 1: Vit chng trnh nhp vo m hc v (l mt s nguyn) ca mt nhn vin. In ra hc v tng ng vi quy nh:
M =1: C nhn. M =2: K s. M =3: Thc s. M =4: Tin s. Cc m khc: Khng xp loi hc v. void main() { clrscr(); int M; cout<<Nhp m hc v; cin>>M; switch (M) { case 1: cout<<C nhn; break; case 2: cout<<K s; break; case 3: cout<<Thc s; break; case 4: cout<<Tin s; break; Ti liu ging dy- Lu hnh ni b Trang

2 1

cng chi tit thuat lap trinh default: } getch(); } cout<<Khng xp loi hc v;

Ki

V d 2: Vit chng trnh nhp vo mt thng ca mt nm no . In s ngy ca thng ra mn hnh.


#include <conio.h> #include <stdio.h> #include <iostream.h> void main(void) { clrscr(); int T, N; cout<<Nhp thng; cin>>T; cout<<Nhp nm ; cin>>N; switch (T) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: cout<<Thng c 31 ngy; break; case 4: case 6: case 9: case 11: cout<<Thng c 30 ngy; break; case 2: if (N%4 = = 0) cout<<Thng c 28 ngy; else cout<<Thng c 29 ngy; break; } getch(); }

Chuyn i gia cu trc chn v r nhnh: Vi cu trc r nhnh, cc bin trong biu thc iu kin c th c kiu bt k. Ngc li, vi cu trc chn, ch la chn cc trng hp ca bin nguyn. Do vy, vic chuyn i t cu trc chn sang cu trc r nhnh bao gi cng thc hin c mt cch d dng, iu ngc li khng ng. chuyn i mt cu trc r nhnh m biu thc iu kin c cc bin khng phi kiu nguyn sang cu trc chn cn s dng thm mt bin nguyn m ho cc trng hp ca n, sau ta p dng cu trc chn trn bin nguyn ny.
II. Cu trc lp Ti liu ging dy- Lu hnh ni b Trang

2 2

cng chi tit thuat lap trinh

Ki

II.1. Vng lp vi s ln lp xc nh Gi s cn thc hin mt vng lp vi n ln lp. Trong Pascal ta thng vit: For i:=1 to n do <Lnh lp>; Khi thc hin lnh lp ny, my tnh phi thc hin tun t cc cng vic sau: (1) Gn i:=1; (2) Kim tra xem i vt qu n cha, tc kim tra gi tr ca biu thc: i<=n; v (3) Tng gi tr ca i ln 1 n v sau mi ln lp: i:=i+1; Nh vy, d thy my tnh cn thc hin 3 biu thc ca vng lp: i:=1; i<=n; i:=i+1;. Mi vng lp, bao gi cng phi xc nh cho c 3 biu thc ny. Ta tm gi chng l cc biu thc <BT1>, <BT2>, <BT3>. Trong C++, vng lp xc nh cng c xc nh bng 3 biu thc dng nh trn. C php nh sau:
for (<BT1>; <BT2>; <BT3) <Lnh lp>;

Trong , <BT1> thng nhn nhim v khi gn gi tr ban u cho bin chy; <BT2> l mt biu thc logic c dng lm iu kin dng cho vng lp. Vng lp s dng khi <BT2> nhn gi tr sai (FALSE); <BT3> c dng thay i gi tr ca bin chy sau mi ln lp. <Lnh lp> c th l mt lnh, mt khi lnh hoc mt, mt khi cc cu trc iu khin. ngha:
B1: Thc hin <BT1> B2: Kim tra <BT2>. Nu sai, thot khi vng for. Ngc li, sang B3. B3: Thc hin <Lnh lp>, thc hin <BT3>, quay li B2.

S khi:

<BT1>

<BT3>
TRUE <BT2> Ti liu ging dy- Lu hnh ni b FALSE Trang

<Lnh lp>

2 3

cng chi tit thuat lap trinh

Ki

Cc trng hp c bit ca vng lp for Trng hp 1: Cc biu thc <BT1>, <BT2>, <BT3> c th khuyt
nhng cc du ; phi c gi nguyn.

V d: Vit chng trnh tnh n! (n nguyn) Cch 1: S dng vng lp for thng thng
void main() { clrscr(); int n; long GT=1; cout<<Nhap n ; cin>>n; for (int i=2;i<=n; i++) GT*=i; cout<<n<< Giai thua : <<GT; getch(); }

Cch 2: Vng for khuyt <BT1>.


void main() { clrscr(); int n; long GT=1; cout<<Nhap n ; cin>>n; int i=2; for (;i<=n; i++) GT*=i; cout<<n<< Giai thua : <<GT; getch(); }

Cch 3: Vng for khuyt <BT1> v <BT3>


void main() { clrscr(); int n; long GT=1; cout<<Nhap n ; cin>>n; int i=2; for (;i<=n; ) { GT*=i; i++; } cout<<n<< Giai thua : <<GT;

Ti liu ging dy- Lu hnh ni b Trang

2 4

cng chi tit thuat lap trinh getch(); }

Ki

Cch 4: Vng for khuyt c 3 biu thc. Trong trng hp ny, vng for khng th dng mt cch t nhin c (do thiu iu kin dng l <BT2>). Khi ta cn thot khi vng lp mt cch c ch nh. Cc cch thot khi vng lp for khi thiu <BT2> + Cch 1: s dng lnh break; Khi gp lnh break; trong thn vng for, chng trnh s lp tc thot khi vng lp for v chuyn ti lnh tip theo bt k <Biu thc 2> vn nhn gi tr ng hoc khuyt <BT2>. + Cch 2: s dng lnh goto; Lnh goto c dng: goto <Nhn>; . Trong ,<Nhn> c dng:
<Tn nhn> :

<Tn nhn> tu t theo quy c t tn trong C. Khi gp lnh goto <Nhn>;, chng trnh s nhy ti v tr t nhn. Nu nhn t ngoi vng for, chng trnh s thot khi vng for. Cn ch trong trng hp 2 lnh for lng nhau, khi lnh break ch lm cho chng trnh thot khi vng for gn nht cha lnh break. Do vy, thot khi c 2 vng for lng nhau, ta c th s dng lnh goto. Thot khi for s dng break:
void main() { clrscr(); int n; long GT=1; cout<<Nhap n ; cin>>n; int i=2; for (;;) { if (i==n) break; GT*=i; i++; } Ti liu ging dy- Lu hnh ni b Trang

2 5

cng chi tit thuat lap trinh cout<<n<< Giai thua : <<GT; getch(); }

Ki

Thot khi for, s dng goto:


void main() { clrscr(); int n; long GT=1; cout<<Nhap n ; cin>>n; int i=2; for (;;) { if (i==n) goto Ex; // nhn l Ex, tn t t. GT*=i; i++; } Ex: cout<<n<< Giai thua : <<GT; getch(); }

V rc ri ca chng trnh (i vi chng trnh dch) t l thun vi s lnh goto s dng trong chng trnh, v vy nn hn ch s dng goto. Trng hp 2: Cc <BT1>, <BT3> c th l cc biu thc phc hp
(tc l gm nhiu biu thc con). Khi , cc biu thc con c t cch nhau bi du phy.

V d 2: Cho dy s nguyn x[] = { 1, 4, 5, 7, 3, 2}. Vit chng trnh o ngc dy s trn v in kt qu ln mn hnh. gii quyt bi ton trn, c th c nhiu cch. Cch gii sau minh ho cch vit khc ca vng for vi <BT1> v <BT3> l cc biu thc phc hp.
#include "conio.h" #include "iostream.h" #include "stdio.h" void main() { clrscr(); int x[ ] = {1, 4, 5, 7, 3, 2}, n; n=sizeof(x)/ sizeof(int); //n l s phn t ca x (6) Ti liu ging dy- Lu hnh ni b Trang

2 6

cng chi tit thuat lap trinh for (int i=0, j=n-1; i<n/2; i++, j--) { int tg = x[i]; x[i]=x[j]; x[j]=tg; } for (i=0; i<n; i ++) cout<<x[i]<<" "; getch(); }

Ki

Thm ch, c th vit li li gii trn bng cch s dng vng for vi cc lnh thn vng for c a vo<BT3> nh sau:
void main() { clrscr(); int x[ ] = {1, 4, 5, 7, 3, 2}, n; n=sizeof(x)/ sizeof(int); int tg; for (int i=0, j=n-1; i<n/2; tg=x[i], x[i]=x[j], x[j]=tg, i++, j--) for (i=0; i<n; i ++) cout<<x[i]<<" "; getch(); }

II.2. Vng lp vi s ln lp khng xc nh Trong C++, ta chia vng lp vi s ln lp khng xc nh ra lm hai loi: a. Lp kim tra iu kin trc: Trc tin, kim tra biu thc iu kin. Nu biu thc iu kin cn ng, s thc hin lnh lp. Nu biu thc iu kin sai, ra khi vng lp. S khi:

<BTK>
FALSE

TRUE

<Lnh lp>;

Ti liu ging dy- Lu hnh ni b Trang

2 7

cng chi tit thuat lap trinh

Ki

Nh vy: Lnh lp c th khng c thc hin ln no nu <BTK> sai ngay t u hoc cng c th lp v hn nu <BTK> lun ng. C php:
while (<BTK>) <Lnh lp>;

- <Lnh lp> c th l mt lnh, mt khi lnh hoc mt, mt khi cu trc iu khin. ngha: B1: Kim tra biu thc iu kin <BTK>. Nu biu thc iu kin sai, thot ra khi vng lp. Nu biu thc iu kin ng, chuyn qua bc 2. B2: Thc hin <Lnh lp>. Quay li B1. V d 1. Vit chng trnh tm s ly tha 2 u tin ln hn 1000.
#include <conio.h> #include <stdio.h> #include <iostream.h> void main() { clrscr(); int So=2; while (So <=1000) So *=2; cout<<S cn tm l <<So; getch(); }

V d 2. Vit chng trnh nhp vo im o c ca mt hc sinh (thang im 100, nguyn) v s ngy i hc mun ca hc sinh . Nu hc sinh i hc mun 1 ngy, tr 1 im. Tnh v in s im cn li ca hc sinh.
#include <conio.h> #include <stdio.h> #include <iostream.h> void main() { clrscr(); int D, HM; cout<<Nhp im o c;

cin>>D;

Ti liu ging dy- Lu hnh ni b Trang

2 8

cng chi tit thuat lap trinh cout<<Nhp cin>>HM; while (HM>0) { D - -; HM - -; } cout<<im cn li <<D; getch(); } s ngy i hc

Ki mun;

b. Lp kim tra iu kin sau: Tng t nh vng lp kim tra iu kin trc, ch khc ch biu thc iu kin c kim tra mi khi thc hin lnh lp. Nh vy, lnh lp lun c thc hin t nht mt ln. S khi:

<Lnh lp>;

<BTK>
FALSE

TRUE

C php:
do <Lnh lp>; while (<BTK>);

- <Lnh lp> c th l mt lnh, mt khi lnh hoc mt, mt khi cu trc iu khin. ngha: B1: Thc hin <Lnh lp>; B2: Kim tra biu thc iu kin <BTK>. Nu biu thc iu kin sai, thot ra khi vng lp. Nu biu thc iu kin ng, chuyn qua bc 1.
Ti liu ging dy- Lu hnh ni b Trang

2 9

cng chi tit thuat lap trinh

Ki

V d 1: Vit chng trnh tm s nguyn x u tin ln hn 5 m tha mn sin(x) = 1


void main() { clrscr(); int x=0; do x +=1; while (x <=5 | | sin(x) !=1); cout<<S cn tm l <<x; getch(); }

V d 2: Vit chng trnh nhp vo mt s nguyn x. Kim tra xem s ln hn 10 hay cha. Nu cha, yu cu nhp li cho ti khi s nhp vo ln hn 10. Kim tra xem s c phi l s nguyn t khng, in kt lun ln mn hnh.
void main() { clrscr(); int So; do { cout<<Nhp mt s nguyn ; cin>>So; if (So <=10) cout<<S khng tha mn. Nhp li : ; } while (So <=10);
//Kim tra xem So c phi l s nguyn t khng

int kt=0; int d =2; do { if (So % d ==0) kt = 1; d++; } while (d<So); if (kt==0) cout<<S <<So<< L s nguyn t; else cout<<S <<So<< Khng l s nguyn t; getch(); }

thot khi vng lp khng xc nh, ta cng c th s dng break hoc goto. Tuy nhin, cc trng hp ny t xy ra do c th ca vng lp.
Ti liu ging dy- Lu hnh ni b Trang

3 0

cng chi tit thuat lap trinh

Ki

Chuyn i gia cc cu trc lp: T vng lp xc nh (for), ta c th chuyn sang vng lp khng xc nh (while hoc do/ while) bng cch s dng thm mt bin m kiu nguyn trong thn vng lp khng xc nh. Trc khi lp ta khi gn gi tr ca bin m ny bng 0. Mi khi thc hin mt ln lp, ta tng gi tr ca bin m ny ln 1. iu kin dng l khi s ln lp . chuyn i ngc li (t cu trc lp khng xc nh sang cu trc lp xc nh) th ni chung, ta phi s dng cc vng for khuyt biu thc 2, di dng:
for (<Biu thc 1> ; ; <biu thc 3>)

bi v ta khng bit chc s ln lp ca cu trc. Khi ta phi s dng lnh break hoc goto trong thn vng for thot cng bc. II.3. Cc v d minh ho s dng vng lp V d 1. Vit chng trnh nhp vo mt s nguyn n, sau tnh tng cc s nguyn t thuc on [1..n]. Cho bit c bao nhiu s nguyn t thuc on trn?
void main() { clrscr(); int n, Tong, Dem; cout<<Nhp s nguyn; cin>>n; Tong =Dem=0; for (int i=1; i<=n; i++) { int Check = 0; for (int j=2; j<n; j++) if (i%j==0) Check = 1; if (Check ==0) { Tong +=i; Dem++; } } cout<<Tng cc s nguyn t <<Tong; cout<< C <<Dem<<s nguyn t trong on 1..n; getch(); } Ti liu ging dy- Lu hnh ni b Trang

3 1

cng chi tit thuat lap trinh

Ki

V d 2. Vit chng trnh nhp vo mt s nguyn n v mt s thc x, sau tnh gi tr biu thc:
2 3 n x + x + x2 + .. + x Nu nchn F= 3 3 3n1 0 Nu nl

void main() { clrscr(); int n; float x, F, ts, ms; cout<<Nhp x; cin>>x; cout<<Nhp n; cin>>n; F=0; if (n%2==0) { F=x; ts=1; ms=1; for(int 2=1; i<=n; i++) { ts*=pow(x,i); ms*=3; F+=ts/ms; } } cout<<Gi tr ca biu thc <<F; getch(); }

Ti liu ging dy- Lu hnh ni b Trang

3 2

cng chi tit thuat lap trinh Chng III. K thut lp trnh n th I. n th v lp trnh n th

Ki

I.1. Khi nim v phn loi n th Khi vit mt chng trnh, chng ta c th trin khai theo hai cch: Cch 1: Ton b cc lnh ca chng trnh c vit trong hm main. Cc lnh c vit theo trnh t gii quyt bi ton t ra. Cch 2: Chng trnh c chia nh thnh cc n v chng trnh tng i c lp gi l n th. Cc n th thc hin nhng nhim v nht nh v c s dng trong chng trnh thng qua nhng li gi n th trong hm main. u nhc im: - Vi cch 1: s thch hp khi vit nhng chng trnh c kch thc nh. Ton b bi ton, thut ton c th hin trong mt on m tun t t trn xung. Tuy nhin, cch ny khng ph hp vi cc chng trnh ln do:
+ Kch thc chng trnh cng knh, kh kim sot, chnh sa. + Cc on m c th lp i lp li, chng trnh di khng cn thit.

- Vi cch 2: Chng trnh c chia nh thnh cc n th khc phc c hai nhc im c bn trn. c bit ph hp vi cc chng trnh c kch thc ln v phc tp. Phn loi n th: Trong C++, n th c th l: [1]. Cc lp i tng: Chng trnh bao gm mt s on m m t cc lp cc i tng no s s dng trong chng trnh chnh. Loi n th ny c nghin cu trong ni dung mn hc Lp trnh hng i tng. [2]. Cc hm: Chng trnh c cu to t cc hm. Mi hm thc thi mt nhim v tng i c lp, trong c
Ti liu ging dy- Lu hnh ni b Trang

3 3

cng chi tit thuat lap trinh

Ki

mt hm main ng vai tr nh chng trnh chnh s dng cc hm khc. Trong phm vi mn hc, ta ch xem xt cc n th di dng cc hm. Cc c trng ca hm: - Tn hm: do ngi lp trnh t t v c nhng c im sau:
+ Tn hm thng mang tnh i din cho cng vic m hm s m nhim. + Tn hm c t theo quy c t tn trong C++ (xem quy c t tn bin).

- Kiu gi tr tr v ca hm: Nu hm tr v mt gi tr th gi tr c gn vo tn hm v n phi thuc mt kiu d liu no m ta gi l kiu gi tr tr v ca hm. Kiu gi tr tr v ca hm c th l cc kiu d liu chun hoc mt kiu do ngi lp trnh t nh ngha. - Kiu v tn cc i ca hm: Nu hm s dng cc i (cc gi tr u vo) th cc i phi thuc mt kiu d liu no . Khi thit lp mt hm, ta cn ch ra danh sch cc i ca hm v kiu d liu ca mi i. - Thn hm: l ni dung chnh ca hm, cha ton b cc lnh ca hm. Phn loi hm Trong pascal, ta c hai loi chng trnh con: th tc (procedure) v hm (function). Trong C++, chng ta c duy nht mt loi chng trnh con (m ta gi l n th), l hm. Mt chng trnh trong C++ c cu to t cc hm, trong hm main l hm bt buc phi c, ng vai tr nh chng trnh chnh. Nu trong Pascal, tt c cc hm u tr v mt gi tr no th trong C++ cc hm c chia lm hai loi: - Hm khng c gi tr tr v: L hm ch c chc nng thc hin mt cng vic no m ta khng quan tm Ti liu ging dy- Lu hnh ni b 3 Trang 4

cng chi tit thuat lap trinh

Ki

ti gi tr tr v ca hm. N tng ng vi th tc trong Pascal. - Hm c gi tr tr v: Ngoi vic thc hin mt cng vic no , ta cn quan tm ti gi tr thu c sau khi hm thc thi dng trong nhng on trnh tip theo. Ty theo ngun gc ca hm ngi ta phn ra: - Cc hm c sn: L cc hm cha trong cc th vin ca C++, l cc file c phn m rng l .h, c nh ngha t trc. Ngi lp trnh ch vic s dng thng qua cc ch th: #include <Tn th vin cha hm>. - Cc hm t nh ngha: L cc hm do ngi lp trnh t nh ngha. Cc hm ny cng c th c tp hp li trong mt file .h dng nh mt th vin c sn. I.2. nh ngha v s dng hm nh ngha hm Mt hm thng c cu trc nh sau:

<Kiu tr v> <Tn hm> ([kiu i] [tn i]) { Cc lnh trong thn hm; }

Trong : - <Kiu tr v>: l kiu ca gi tr tr v ca hm. Nu hm khng c gi tr tr v, ta dng kiu tr v l void. Ngc li, ta thng s dng cc kiu chun nh int, float, double, char. - <Tn hm>: do ngi dng t nh ngha theo quy c t tn bin. - ([kiu i] [tn i]): lit k danh sch cc i ca hm v kiu d liu ca i (nu c). Nu hm c nhiu i th cc i cch nhau bi du phy. Mt nguyn tc trong C+ + l mi i u phi c mt kiu i km trc tn i. V d 1: Hm tnh n! n gin c vit nh sau:
Ti liu ging dy- Lu hnh ni b Trang

3 5

cng chi tit thuat lap trinh long GT(int n) { long kq=1; for (int i=1; i<=n; i++) kq *=i; return kq; }

Ki

- Nu hm c gi tr tr v th cn c cu lnh return <Gi tr tr v>; gn gi tr ny vo tn hm. Tuyt i khng c gn <Tn hm> = <Gi tr tr v>;. <Gi tr tr v> c th l mt biu thc, mt bin hoc mt hng. Nu khng c lnh return ny, chng trnh s bo li. return. Nh vy, ring hm void (kiu tr v l void) s khng c lnh

V d 2. Vit hm gii phng trnh bc nht vi i vo l hai h s a, b.


void PTBN(float a, float b) { if (a==0 && b==0) cout<<Phng trnh v s nghim; else if (a==0 && b!=0) cout<<phng trnh v nghim; else cout<<Phng trnh c nghim <<-b/a; }

S dng hm

Hm c s dng thng qua li gi ca n. Thng thng, chng c s dng trong hm main gii quyt bi ton t ra. Tuy nhin, v nguyn tc mt hm bt k u c th gi ti cc hm khc, min l cc hm c nh ngha trc. Khi gi hm, ta gi ti tn hm. Nu hm c i s, ta phi truyn cc tham s ph hp v kiu vo v tr cc i s ny. S lng tham s truyn vo khi gi hm phi bng s lng cc i s v theo ng th t khi ta nh ngha hm.
Ti liu ging dy- Lu hnh ni b Trang

3 6

cng chi tit thuat lap trinh

Ki

Cch vit mt li gi hm nh sau:


<Tn hm> <([danh sch cc tham s thc s])>

Nh vy: - Cc tham s phi c kiu trng vi kiu ca i s tng ng. - Nu hm khng c i s th li gi hm vn phi s dng du () km tn hm: <Tn hm> (). Tuy nhin, v hm c 2 loi: c v khng c gi tr tr v nn cch s dng hai loi hm ny cng khc nhau.
- Nu hm c gi tr tr v th tn hm c s dng nh mt bin, tc l ta khng th s dng hm mt cch c lp m li gi hm c th c t v phi ca php gn, trong biu thc hoc km vi mt lnh khc. - Ngc li, nu hm khng c gi tr tr v, tn hm c s dng nh mt lnh, tc l li gi hm c vit c lp, khng vit trong php gn, trong biu thc hay km vi mt cu lnh khc.

V d: Hm tnh n! c vit 2 dng: c v khng c gi tr tr v:


long GT(int n) { long kq=1; for (int i=1; i<=n; i+ +) kq *=i; return kq; } void GT(int n) { long kq=1; for (int i=1; i<=n; i+ +) kq *=i; cout<< Kt qu:<<kq; }

C th nhn thy 2 im khc bit ca hai cch vit cho cng mt hm. Tuy nhin, ta quan tm ti s khc nhau trong cch gi (s dng) hai hm trn. hm th nht, do l hm c gi tr tr v nn n c s dng nh mt bin. Gi s ta cn tnh 5!, vy ta c th gi hm ny theo cc cch nh bng sau:
Cch gi sai GT(5); Cch gi ng b = GT(5); ngha Ti v phi ca php gn

Ti liu ging dy- Lu hnh ni b Trang

3 7

cng chi tit thuat lap trinh cout<< GT(5); b = GT(5) + 1; Dng km vi lnh cout Dng trong biu thc

Ki

Tuy nhin, hm th 2 th cch s dng ngc li

Cch gi sai b = GT(5); cout<< GT(5); b = GT(5) + 1;

Cch gi ng GT(5);

I.3. T chc cc hm Khi mt chng trnh c nhiu hm, ta quan tm ti vic t chc chng nh th no cho khoa hc. Thng thng c 2 cch t chc cc hm: Cch 1: cc hm t trong cng mt tp vi chng trnh chnh. Chng trnh ngoi hm main cn c cc hm khc th cc hm c th t trc hoc sau hm main u c: Cc hm t trc hm main:
#include <Hm 1> <Hm 2> void main() { Thn hm main; }

Cc hm t sau hm main:
#include <Nguyn mu ca hm 1>; <Nguyn mu ca hm 2>; void main() Ti liu ging dy- Lu hnh ni b Trang

3 8

cng chi tit thuat lap trinh { Thn hm main; } <Hm 1> <Hm 2>

Ki

Trong , <Nguyn mu ca hm> chnh l dng u tin ca hm c km theo du chm phy ;. Nguyn mu ca hm c dng:
<Kiu tr v> <Tn hm> ([Kiu i] [Tn i]);

Nh vy, nu hm c t sau hm main th cn khai bo nguyn mu ca hm trc hm main chng trnh dch c th bit trc s tn ti ca chng khi dch hm main. Cc hm lun t ri nhau. Mt hm khng bao gi c php t trong mt hm khc. V d 1. Vit chng trnh kim tra mt s nguyn n c phi l s nguyn t khng, nu n l s nguyn t, hy tnh n!. Chng trnh c chia lm hai hm: hm kim tra xem n c phi s nguyn t khng v hm tnh n!. Mt hm main s dng hai hm trn gii quyt bi ton. Hai hm t trc hm main:
int NT(int n) { if (n ==1 | | n ==2) return =1; else {Check =0; for (int i=2; i<n; i++) if (n%i==0) Check =1; if (Check == 0) return 1; else return 0; } } //================= long GT(int n) { long kq=1; for (int i=1; i<=n; i++) kq *=i; return kq; } void main() Ti liu ging dy- Lu hnh ni b Trang

3 9

cng chi tit thuat lap trinh

Ki

{ int a; cout<<Nhp a; cin>>a; if (NT(a) == 0) cout<<S <<a<< Khng phi nguyn t; else { cout<<S <<a<< l s nguyn t; cout<< Giai tha ca <<a<< <<GT(a); } getch(); }

Hai hm t sau hm main:


//Khai bo nguyn mu ca hm: int NT(int n); long GT(int n); //hm main---------------------------void main() { int a; cout<<Nhp a; cin>>a; if (NT(a) == 0) cout<<S <<a<< Khng phi nguyn t; else { cout<<S <<a<< l s nguyn t; cout<< Giai tha ca <<a<< <<GT(a); } getch(); } int NT(int n) { if (n ==1 | | n ==2) return =1; else {Check =0; for (int i=2; i<n; i++) if (n%i==0) Check =1; if (Check == 0) return 1; else return 0; } } //================= long GT(int n) { long kq=1; for (int i=1; i<=n; i++) kq *=i; Ti liu ging dy- Lu hnh ni b Trang

4 0

cng chi tit thuat lap trinh return kq; }

Ki

Cch 2: Cc hm t trong tp th vin: B1: Vit cc hm (tr hm main() )trong mt file sau lu di nh dng .h. File ny thng c gi l file th vin (hoc header file). ( thun tin cho vic sot li, tt nht trc tin nn t chc cc hm nh cch 1, sau khi m bo cc hm chy tt, di chuyn ton b cc hm ( tr hm main()) sang mt file mi v lu li vi ui .h) B2: Vit hm main() trong mt tp ring. hm main() c th s dng cc hm vit trong file th vin to trong B1, cn thm ch th:
#include <[ ng dn] Tn th vin.h>

Nu t th vin trn trong th mc TC\ Include th trong ch th #include khng cn thm ng dn. Ngc li, cn thm y ng dn ti file th vin ni trn. V d: To file .h vi ni dng sau, (v d file TV.h):
int NT(int n) { if (n ==1 | | n ==2) return =1; else {Check =0; for (int i=2; i<n; i++) if (n%i==0) Check =1; if (Check == 0) return 1; else return 0; } } //================= long GT(int n) { long kq=1; if (n==0 | | n==1) kq=1; else for (int i=1; i<=n; i++) kq *=i; Ti liu ging dy- Lu hnh ni b Trang

4 1

cng chi tit thuat lap trinh return kq; }

Ki

Gi s file TV.h ny c t trong th mc C:\TC\BIN. Ta m mt file mi v vit hm main() nh sau:


#include <conio.h> #include <stdio.h> #include <iostream.h> #include <C:\TC\BIN\ TV.h void main() { int a; cout<<Nhp a; cin>>a; if (NT(a) == 0) cout<<S <<a<< Khng phi nguyn t; else { cout<<S <<a<< l s nguyn t; cout<< Giai tha ca <<a<< <<GT(a); } getch(); }

- Cc file th vin .h khng cn phi c cc ch th tin x l #include - Khng th sot li bng cch bm F9 trong file th vin .h. I. 4. Phm vi hot ng ca bin Theo phm vi hot ng ca bin, ta chia ra: - Bin ton cc: (global) L cc bin c phm vi hot ng trong ton b chng trnh, k t v tr khai bo bin. Bin ton cc c v tr khai bo nm ngoi cc hm (k c hm main). Thng thng n c khai bo ngay t nhng dng u tin ca chng trnh (sau cc ch th tin x l).
Nu chng trnh c vit trn nhiu tp, phm vi hot ng ca bin bao gm c cc tp khc, ta cn thm ch danh extern vo trc khai bo bin ton cc. Trong trng hp ny, t kho extern cn c t trc cc nguyn mu ca hm vi ngha tng t.

Ti liu ging dy- Lu hnh ni b Trang

4 2

cng chi tit thuat lap trinh

Ki

- Bin cc b: (private) l cc bin c khai bo trong thn mt hm, thm tr trong mt khi lnh no ca thn hm. Phm vi hot ng: Nu bin c khai bo trong thn mt khi no s c phm vi hot ng ch trong khi, k c cc khi con nm bn trong khi . Kt thc khi, bin cc b s c gii phng.
Mun bin ny tn ti trong sut thi gian chng trnh lm vic, ta cn thm t kha static trc khai bo bin khai bo bin di dng bin tnh.

V d:
int x; void Ham(int a) { cout<<Bin x trong hm <<x; if (a%2==0) { int x=5; x+=a; cout<<Bin x trong hm << x;} } void main() { x=1; int a = 2; Ham(a); cout<< Bin x trong hm main <<x; int x = 3; cout<<Bin x trong hm main <<x; getch(); }

- Bin x di dng ton cc c phm vi hot ng trong ton b chng trnh, k t khi khai bo. - Nu trong mt khi c khai bo bin cc b trng tn vi bin ton cc th k t khi khai bo, khi s s dng bin cc b m khng s dng bin ton cc.
II. K thut quy

II.1. Khi nim v quy Trong C++, mt hm c th gi n chnh n, tnh cht ny ca hm gi l tnh quy. Khi mt hm th hin tnh quy, ta gi hm l hm quy.
Ti liu ging dy- Lu hnh ni b Trang

4 3

cng chi tit thuat lap trinh

Ki

V d: Xt hm tnh n!. Ngoi cch vit s dng vng lp nh trn, ta c th c cch tip cn khc gii quyt bi ton: Ta nh ngha: n! = (n-1)! * n. Vi nh ngha ny, gi s n=5 th n! c tnh nh sau: 5! = 4! * 5 = 3! * 4 * 5. = 2! * 3 * 4 * 5. = 1! * 2 * 3 * 4 * 5. Vi 1! = 1, ta hon ton c th tnh c 5! bng cch tnh cc gi tr 2!, 3!, 4! ri thay vo cng thc 5!= 4! *5. Mt cch tng qut, nu ta c hm GT(n) tnh n! th GT(n) = GT(n-1) * n. y chnh l cng thc th hin tnh quy. T cng thc ny, hm quy tnh n! c th vit nh sau:
long GT(int n) { if (n==1) return 1; else return GT(n-1) * n; }

hiu bn cht ca quy, ta xt qu trnh tnh 3!. Qu trnh ny c th hin qua s sau:
Bt u : tnh 3!
Tin trnh GT(2) Tin trnh GT(1)

GT(2) * 3

GT(1) * 2

GT(0) * 1

B qua lnh gi quy

Kt thc Return 1*2*3

Return 1*2

Return 1

Ti liu ging dy- Lu hnh ni b Trang

4 4

cng chi tit thuat lap trinh

Ki

Khi gp li gi GT(3) tnh 3!, my tnh to ra mt tin trnh (process) vi u vo l 3. Tuy nhin, khi thc hin, tnh 3!, tin trnh ny gp phi li gi quy 3*GT(2). Khi , ton b tin trnh ny phi dng li v ch my tnh to ra mt tin trnh mi (qu trnh thc thi hm mi) vi i vo l 2. Khi tin trnh mi ny thc hin xong (tc l tnh xong 2!) n s quay v tin trnh ban u vi kt qu 2! tnh c v tip tc thc thi tin trnh ban u vi kt qu l 2!*3. Tuy nhin, tin trnh tnh 2! li gp li gi quy tnh 1! Nn n cng phi tm dng v ch 1 tin trnh th 3 c to ra tnh 1!. Rt may l trong tin trnh tnh 1! khng c li gi quy (v if(n==1) return 1;) nn qu trnh dng-chto tin trnh mi khng xy ra. Do vy cc tin trnh ang ch trc ln lt c phc hi v tr v kt qu mong mun. Nh vy, khi gp mt li gi quy, my tnh s:
- Tm dng tin trnh hin ti, lu a ch ca dng lnh gi quy vo ngn xp. - To mt tin trnh hon ton mi, cp pht cc vng nh mi cho cc bin cc b, thc hin tin trnh mi ny. - Khi vic thc thi tin trnh mi hon thnh, chng trnh quay v ngn xp, ly a ch ca dng lnh gi quy v quay v tin trnh ban u.

Mt cch tng qut ta c s qu trnh thc thi hm quy nh sau:


Bt u Bn sao 1 Bn sao n

Gi quy

Gi quy

Gi quy

B qua lnh gi quy

Kt thc Ti liu ging dy- Lu hnh ni b Trang

4 5

cng chi tit thuat lap trinh

Ki

Ni chung, mt hm c vit theo kiu quy s tn b nh hn, thc thi phc tp hn v do vy ngi ta thng tm cch kh quy (tc vit chng trnh khng theo kiu quy). Tuy nhin, cch tip cn quy li t ra rt c hiu qu vi cc bi ton lin quan ti duyt cy, th, danh sch tuyn tnh .v.v II.2. Thit k hm quy. Cc bi ton p dng gii thut quy thng c c im sau:
- Bi ton d dng gii quyt trong mt s trng hp ring ng vi cc gi tr c bit ca tham s. Trong trng hp ny, ta c th gii quyt bi ton m khng cn gi quy. Ta gi trng hp ny l trng hp suy bin. - Trong trng hp tng qut, bi ton c th quy v bi ton cng dng nhng gi tr ca tham s thay i. V sau mt s hu hn bc bin i quy, s dn ti trng hp suy bin.

Trng hp suy bin rt quan trng trong bi ton quy. Nu khng c trng hp ny, qu trnh to tin trnh mi s khng th dng li v ta gp phi trng hp quy v hn. Nu trng hp tng qut m sau mt s hu hn ln gi quy khng th quy v trng hp suy bin th cng khng th thot khi qu trnh gi quy v hn ny. Gi s bi ton tnh n!, d dng thy: - Vi n = 0 hoc n = 1 th n! = 1. Khi ta khng cn gi quy vn c th tnh c n!. y l trng hp suy bin. - Trng hp tng qut, n! = n* (n-1)!. Tc l tnh n!, ta c th quy v bi ton tnh (n-1)!. Sau mt s hu hn bc bin i, ta c th quy v bi ton tnh 1!. Nh vy:
Ti liu ging dy- Lu hnh ni b Trang

4 6

cng chi tit thuat lap trinh

Ki

- Trng hp suy bin: n=0 hoc n=1. Cng thc trong trng hp ny : n! = 1; - Trng hp tng qut: l cc trng hp cn li (n >1) khi : n! = n* (n-1)!. T pht hin trn, ta c th tm chp nhn phng php thit k hm quy theo 3 bc nh sau:
Bc 1: - Xc nh trng hp suy bin, gi tr ca tham s, cng thc tnh ton trong trng hp ny. - Xc nh trng hp tng qut, gi tr ca tham s, cng thc tnh ton trong trng hp ny. Bc 2: Vit ni dung quy dng: if (suy bin) return <cng thc suy bin>; else return <cng thc tng qut>; Bc 3: Hon thin hm quy.

V d 1: thit k hm quy tnh n!.


Bc 1: - Suy bin : n=0 hoc n = 1; Cng thc n! = 1; - Tng qut: n khc 0 v n khc 1; Cng thc n! = n* (n-1)!. Bc 2: if (n= = 0 || n= = 1) return 1; else return n * GT(n-1); Bc 3: Hon thin thu c hm quy tnh n!.

V d 2: Dy s Catalan c pht biu quy nh sau: C1 = 1; Cn =

C C
i= 1 i

n 1

n i

Hy xy dng hm quy tm s CataLan th n. Hm quy c thit k nh sau:


Bc 1: Suy bin: n = 1; Cng thc suy bin: Cn = 1;

Ti liu ging dy- Lu hnh ni b Trang

4 7

cng chi tit Ki thuat lap trinh - Khng suy bin: n khc 1; cng thc tng qut: C n =

C C
i= 1 i

n 1

n i

Bc 2: if (n = = 1) return 1; else { int C =0; for (int i=1; i<n; i++) C+= CataLan(i) * CataLan(n-i); return C; }

Vi phn thit k trn, hm quy tnh s CataLan th n c vit nh sau (bc 3):
int CataLan(int n) { if (n==1) return 1; else { int C=0; for (int i=1; i<n; i++) C+=CataLan(i)*CataLan(n-i); return C; } }

II.3. quy v cc dy truy hi Khi nim: Mt dy truy hi l dy m cc s hng ng sau c


nh ngha da trn cc s hng ng trc ca dy.

V d: cho dy sau: a[1] = 1; a[n] = a[n-1] * n; D dng thy y chnh l dy cc giai tha ca cc s t nhin: 1!, 2!, 3!, 4!Vi s hng th n c nh ngha t s hng th n-1. Hoc dy cc s Fibonacci: F[1] = 1; F[2] = 1; F[n] = F[n-1] + F[n-2] (vi n>2).
Ti liu ging dy- Lu hnh ni b Trang

4 8

cng chi tit thuat lap trinh

Ki

c im ca cc dy truy hi: - Lun tn ti mt hoc mt s s hng ng u dy. Cc s hng ny d dng c xc nh hoc c cho trc. y chnh l trng hp suy bin cho bi ton quy tm s hng th n. - Lun tn ti mt cng thc truy hi m s hng sau c xc nh da vo s hng ng trc. Vy theo cng thc truy hi ta lun xc nh c s hng th n t cc s hng u dy (sau mt s hu hn ln truy hi). Vy cng thc truy hi chnh l cng thc trong trng hp tng qut cho bi ton quy tm s hng th n. Do vy, vi cc dy truy hi, ngi ta thng s dng cc gii thut quy xc nh chng. II.4. Mt s v d v quy
V d 1: USCLN ca hai s nguyn a, b c nh ngha nh sau: USCLN(a, b) = a nu b =0

= USCLN(b, a%b) nu b khc 0. Vit hm lp v quy tnh USCLN ca hai s nguyn a, b.

Hm lp:
int USCLN_Lap(int a, int b) { int Sodu; while (y !=0) { Sodu = a%b; a = b; b = Sodu; } return a; }

Hm quy:
Bc 1: - Suy bin : b=0; cng thc suy bin: USCLN(a, b) = b; - Khng suy bin: b khc 0; cng thc tng qut: USCLN(a, b) = USCLN(b, a%b); Bc 2: if(b==0) Ti liu ging dy- Lu hnh ni b Trang

4 9

cng chi tit thuat lap trinh return a; else return USCLN(b, a%b) Bc 3: int USCLN_DQ(int a, int b) { if (b==0) return a; else return USCLN_DQ(b, a%b); } V d 2: Cc s Fibonacci c nh ngha quy nh sau: F[0] = F[1] = 1; F[i] = F[i-1] + F[i-2];

Ki

VD: 1, 1, 2, 3, 5, 8, 13 Vit hm quy tm s Fibonacci th n.


Bc 1: Suy bin: n <=1; cng thc suy bin: Fibo(n) = 1; Khng suy bin: n >1; cng thc tng qut: Fibo(n) = Fibo(n-1) + Fibo(n-2). Bc 2: if(n<=1) return 1; else return Fibo(n-1) + Fibo(n-2); Bc 3: int Fibo(int n) { if(n<=1) return 1; else return Fibo(n-1) + Fibo(n-2); } III. K thut truyn tham s

III.1. Khi nim v phn loi tham s Khi nh ngha hm, thng thng cc gi tr u vo c nh ngha mt cch hnh thc (gi nh) v chng c gi l cc i s (hay tham s hnh thc). Khi s dng hm, nu hm c i s (tham s hnh thc), khi gi hm ta phi truyn cc tham s (i s thc s) tng ng
Ti liu ging dy- Lu hnh ni b Trang

5 0

cng chi tit thuat lap trinh

Ki

cho hm. Cc tham s l cc gi tr c th v tng ng v kiu vi cc i s ca hm, chng c th l cc bin hoc cc hng gi tr. y ta ch xt cc tham s l bin. Tham s l bin c chia lm 2 loi: [1]. Tham tr: L cc bin thng thng c truyn vo hm. Khi truyn tham s di dng tham tr, tham s s khng c truy cp trc tip. Hm s cp pht mt vng nh mi v sao chp gi tr ca tham s vo . Cc lnh trong thn hm s thao tc trn vng nh mi ny. Nh vy, mt tham s khi truyn vo mt hm s khng b thay i gi tr ca n khi ra khi hm. [1]. Tham chiu: L a ch ca cc bin thng thng hoc cc bin con tr (v bn thn con tr ang cha a ch ca cc bin thng). Khi truyn tham s di dng tham chiu, tham s l cc bin v tham s s c truy cp trc tip. Nh vy, cc mt tham s khi truyn vo mt hm c th b bin i gi tr ca n.

Bin

Vng nh ca bin Thc thi hm

Bin

Vng nh ca bin Thc thi hm

Vng nh mi

Gi hm

Gi hm

a) truyn tham chiu

b) Truyn tham tr

III.2. Truyn tham s Khi ta truyn mt bin thng thng vo hm tc l ta truyn di dng tham tr. Hm s cp pht vng nh mi v sao chp gi tr ca bin vo nh ny s dng. Nh vy, ra khi thn hm, nh mi c cp pht b xa ngay v gi tr ca bin khng h thay i. V d 1. Xt hm sau:
Ti liu ging dy- Lu hnh ni b Trang

5 1

cng chi tit thuat lap trinh int tang(int a) { a++; } void main() { int n=1; cout<<Gi tr trc khi gi hm <<n; tang(n); cout<<Gi tr sau khi gi hm <<n; getch(); }

Ki

Bin n l mt bin thng thng v ang mang mt gi tr c th (n=1;), c truyn vo hm di dng tham tr nn sau khi ra khi hm, gi tr ca n khng h thay i (vn l 1) mc d trong thn hm int tang(int a) th gi tr ca i s b thay i (a++). V d 2. Xt hm sau
int Ham(int a, int b) { a+=1; b+=a; cout<<Gi tr a trong thn hm <<a; cout<<Gi tr b trong thn hm <<b; } void main() { int a, b; a=1; b=2; cout<<Gi tr a trc khi gi hm <<a; cout<<Gi tr b trc khi gi hm <<b; Ham(a, b); cout<<Gi tr a sau khi gi hm <<a; cout<<Gi tr b sau khi gi hm <<b; getch(); }

Ti liu ging dy- Lu hnh ni b Trang

5 2

cng chi tit thuat lap trinh

Ki

V a, b c truyn vo hm di dng tham tr nn mc d trong thn hm cc gi tr ny b thay i nhng khi ra khi hm n li gi nguyn gi tr ban u. Nguyn nhn l do trong thn hm, ch thay i gi tr trn cc bn sao ca bin truyn vo. Nu ta ch truyn a ch ca bin vo hm th vic truyn nh vy gi l truyn tham chiu. K hi hm s tham chiu trc tip ti bin v thao tc trn vng nh ca bin truyn vo. Kt qu l gi tr ca bin c th b thay i do tc ng ca hm.
int tang(int * a) { (*a)++; } void main() { int n=1; cout<<Gi tr trc khi gi hm <<n; tang(&n); cout<<Gi tr sau khi gi hm <<n; getch(); }

D thy khi gi hm ta ch truyn a ch ca n vo hm (tang(&n)). Do vy hm int tang(int *a) s s dng bin n (cho i s *a) thao tc. Kt qu sau khi ra khi hm, bin n b thay i gi tr (tng ln 1 n v).
Nh vy, nu mun truyn tham chiu th i s tng ng ca hm c nh ngha trc phi l con tr.

Nu trong hm main, bin n l con tr th bn thn con tr cha a ch ca bin khc nn khi truyn n vo l truyn tham chiu. y l iu d gy nhm ln cn phi c ch . V d: vi hm int tang(int *a) nh trn, ta c hm main sau:
void main() { int *n; int a=1; n=&a; // n ang tr ti a cha a ch ca a cout<<Gi tr trc khi gi hm <<(*n); Ti liu ging dy- Lu hnh ni b Trang

5 3

cng chi tit thuat lap trinh tang(n); // truyn tham chiu cout<<Gi tr sau khi gi hm <<(*n); getch(); }

Ki

Trong li gi tang(n); ta truyn tham s n vo di dng tham chiu bi v n ang cha a ch ca bin a.

Ti liu ging dy- Lu hnh ni b Trang

5 4

cng chi tit thuat lap trinh Chng IV. K thut lp trnh dng mng I. Mng mt chiu

Ki

I.1. Khai nim v cch khai bo Bi ton: hy lu tr mt dy s gm 5 phn t: {2, 5, 3, 6, 7} Cch 1: S dng 5 nh (5 bin) cng kiu. Cc bin c t tn ln lt l: a, b, c, d, e. Khi , cc phn t c cha trong 5 nh ny nh sau: 2 a 5 b 3 c 6 7 d

e V cn lu tr 5 gi tr khc nhau nn vic dng 5 nh khc nhau l cn thit. Tuy nhin, phng php ny t khng kh thi do s dng qu nhiu tn bin, dn ti kh kim sot cc bin, c bit trong trng hp s phn t ca dy qu ln. Cch 2: Vn s dng 5 nh cng kiu nhng tt c cc c t chung mt tn (a chng hn). phn bit cc vi nhau, ngi ta nh ch s cho tng . Ch s l cc s nguyn lin tip, tnh t 0. Nh vy ta thu c: 2
a[0] a[4]

5
a[1]

6
a[2]

7
a[3]

Kt qu ta c c mt cu trc d liu khc phc c nhc im ca cch 1. Cu trc d liu ny gi l mng mt chiu.
Mng l mt cu trc b nh bao gm mt dy lin tip cc nh cng tn, cng kiu nhng khc nhau v ch s, dng lu tr mt dy cc phn t cng kiu.

C php khai bo mng:


<Kiu mng> <Tn mng> [<S phn t ti a>];

Trong : <Kiu mng>: L kiu d liu ca mi phn t trong mng, c th l mt kiu d liu chun hoc kiu d liu t nh ngha.
Ti liu ging dy- Lu hnh ni b Trang

5 5

cng chi tit thuat lap trinh

Ki

<Tn mng>: c t tu tun theo quy c t tn bin trong C++. <S phn t ti a>: L mt hng s ch ra s nh ti a c dnh cho mng cng nh s phn t ti a m mng c th cha c. V d: Khai bo int a[3]; s cp pht 3 nh lin tip cng kiu nguyn (2 byte) dnh cho mng a. Mng ny c th cha c ti a 3 s nguyn. I.2. Cc thao tc c bn trn mng mt chiu - Nhp mng: Gi s ta cn nhp mng a gm n phn t. Cch duy nht l nhp tng phn t cho mng. Do vy, ta cn s dng mt vng lp for duyt qua tng phn t v nhp d liu cho chng. Nhng trc tin, cn nhp s phn t thc t ca mng (n).
for(int i=0; i<n; i++) { cout<< a[<<i<< ]=; cin>>a[i]; }

- Xut mng: tng t nh nhp mng, ta cng cn s dng vng lp for xut tng phn t ca mng ln mn hnh.
for(i = 0; i<n; i++) cout<<a[i]; cout<<a[i]<< ; cout<<a[i]<<endl;

- Duyt mng: l thao tc thm ln lt tng phn t ca mng. Thao tc duyt mng c trong hu ht cc bi ton s dng mng.
for(i = 0; i<n; i++) {thm phn t a[i]}

I.3. Cc bi ton c bn a. Bi ton sp xp mng Bi ton: cho mt dy gm n phn t. Hy sp xp dy theo chiu tng dn.
Ti liu ging dy- Lu hnh ni b Trang

5 6

cng chi tit thuat lap trinh

Ki

gii quyt bi ton ny, trc tin ta cn lu tr dy cc phn t cho vo b nh, nh vy ta cn s dng mt mng mt chiu. Sau , c rt nhiu phng php sp mt mng theo chiu tng dn. Sau y ta xem xt mt s cch ph bin: Phng php 1: Sp xp ni bt bubble sort tng ca phng php nh sau: - Sp ln lt tng phn t ca dy, bt y t phn t u tin. - Gi s cn sp phn t th i, ta tin hnh duyt ln lt qua tt c cc phn t ng sau n trong dy, nu gp phn t no nh hn phn t ang sp th i ch. Gi s ta sp mng a gm n phn t, gii thut c m t chi tit nh sau:
for(i = 0; i < n; i++)// vi mi phn t a[i] for(j = i+1; j<n; j++) if(a[j] < a[i]) i ch a[i] cho a[j]

i ch a[i] cho a[j], ta s dng mt bin tg c cng kiu v gn mt trong 2 gi tr (a[i] hoc a[j]) vo . Sau gn gi tr cn li sang gi nh va gn vo tg. Cui cng ta gn gi tr ang cha trong tg vo nh ny.
for(i = 0; i < n; i++) for(j = i+1; j<n; j++) if(a[j] < a[i]) { tg = a[i]; a[i] = a[j]; a[j] = tg; } Sp xp bng phng php ny trung bnh cn n2/ 2 ln so snh v n2/2 ln hon v. Trong trng hp ti nht ta cng cn s ln so snh v hon v nh vy.

Gi s ta c mng a = {3, 5, 2, 7, 4, 8}. Hnh nh ca a sau cc ln lp sp xp ni bt nh sau:


Bt u sp i = 0

8 5 7

Ti liu ging dy- Lu hnh ni b Trang

cng chi tit thuat lap trinh Ht 1 vng = 1; Ht mt i=2; Ht mt i=3; Ht mt i=4;

Ki lp j; vng vng vng i j; j; j;

2 2 2 2

5 3 3 3

3 5 4 4

7 7 7 5

4 4 5 7

8 8 8 8

Phng php sp xp chn Selection sort Trong phng php sp sp ni bt, sp mt phn t nhiu khi ta phi i ch nhiu ln phn t ang sp vi cc phn t ng sau n. Mt tng rt hay l lm sao ch i ch 1 ln duy nht khi sp mt phn t trong dy. y chnh l tng ca phng php sp xp chn. lm c iu ny, khi sp phn t th i, ngi ta tin hnh tm phn t nh nht trong s cc phn t ng sau n k c phn t ang sp ri tin hnh i ch phn t nh nht tm c vi phn t ang sp. V d: Vi dy a = {1, 6, 4, 2, 5, 7}, sp phn t th 2 (6) ngi ta tin hnh tm phn t nh nht trong s cc phn t {6, 4, 2, 5, 7}. Khi Min(6, 4, 2, 5, 7) = 2 v phn t 2 c o ch cho phn t 6. Kt qu thu c:
1 2 4 6 5 7

Trc tin ta xem xt bi ton tm phn t nh nht ca mt dy cc phn t: - Ly mt phn t ngu nhin trong dy lm phn t nh nht (Min) (thng ly phn t u tin). - Duyt qua tt c cc phn t ca dy, nu gp phn t no nh hn Min th gn Min bng phn t . V d: Tm s nh nht trong mng a gm n phn t:
Min = a[0]; for(i = 0; i<n; i++) if (a[i] < Min) Min = a[i];

Ti liu ging dy- Lu hnh ni b Trang

5 8

cng chi tit thuat lap trinh

Ki

Khi kt thc vng lp, ta thu c gi tr nh nht ca dy ang cha trong bin Min. Tuy nhin, p dng gii thut ny vo phng php sp xp chn ta cn phi lu mt s im. Chng hn ta cn bit chnh xc v tr ca phn t Min nm u tin hnh i ch ch khng quan tm ti gi tr Min l bao nhiu. Tuy nhin gii thut tm Min li ch cho bit gi tr Min m khng cho bit v tr. Nu mun bit, ta li phi s dng 1 vng lp duyt li t u tm v tr Min. Do vy, khi ci t phng php sp xp chn, trnh trng hp s dng nhiu vng lp s lm tng phc tp ca gii thut, ta ch ch ti vic tm v tr phn t Min.
- Sp xp tng phn t ca dy, bt u t phn t u tin. - Gi s sp phn t a[i], ta gn Min = i ri duyt qua cc phn t ng sau n (i+1 tr i). Nu phn t a[j] no nh hn phn t a[Min] th gn Min bng v tr ca a[j] (tc Min=j). Cui cng ta i ch a[i] cho a[Min]. for(i = 0; i < n; i++) { Min = i; for(j = i+1; j<n; j++) if(a[j] < a[Min]) Min = j; tg = a[i]; a[i] = a[Min]; a[Min] = tg; } Sp xp bng phng php chn cn n2/2 ln so snh v n ln hon v.

Gi s ta c mng a = {3, 5, 2, 7, qua cc ln lp sp xp chn nh sau: 3 5 2 7 4 2 5 3 7 4 2 3 5 7 4 2 3 4 7 5 2 3 4 5 7 2 3 4 5 7

4, 8}. Hnh nh ca a 8 8 8 8 8 8
Min Min Min Min Min Min = = = = = = 2 3 4 5 7 8

Sau y l hm sp xp chn vi i vo l mng a gm n phn t:


Ti liu ging dy- Lu hnh ni b Trang

5 9

cng chi tit thuat lap trinh void SapChon(int a[100], int n) { for (int i=0; i<n-1; i++) { int min = i; for (int j = i+1; j<n; j++) if (a[j] < a[min]) min = j; int tg = a[i]; a[i] = a[min]; a[min]=tg; } }

Ki

Phng php sp xp chn Mt thut ton gn nh n gin ngang vi thut ton sp xp chn nhng c l mm do hn, l sp xp chn. y l phng php ngi ta dng sp xp cc thanh ngang cho mt chic thang. u tin, ngi ta rt ngu nhin 1 thanh ngang v t vo 2 thanh dc lm thang. Tip , ngi ta ln lt chn tng thanh ngang vo sao cho khng ph v tnh c sp ca cc thanh c t trn 2 thanh dc. Gi s vi mng a = {3, 5, 2, 7, 4, 8}. Gi s cc phn t 3 v 5 c chn vo ng v tr ( c sp):
3 5

Ta xem xt qu trnh chn phn t tip theo vo mng (gi s chn 2 vo). Khi , qu trnh din ra nh sau: 2 Tg

3527483574835748235748

- t phn t 2 vo bin tg. - Duyt qua cc phn t ng trc phn t 2 (cc phn t c sp). Nu gp phn t no ln hn 2 th y phn t
Ti liu ging dy- Lu hnh ni b Trang

6 0

cng chi tit thuat lap trinh

Ki

sang phi 1 v tr. Ngc li, nu gp phn t nh hn 2 th chn 2 vo ngay sau phn t nh hn ny. Nu duyt ht cc phn t ng trc m vn cha tm thy phn t nh hn 2 th chn 2 vo u mng. Kt thc qu trnh ny, phn t 2 c chn ng v tr v 3 phn t c sp l:
2 3 5

Ton b qu trnh sp mng a c biu din trong bng sau: 3 3 3 2 2 2 2 5 5 3 3 3 3 2 7 4 8

5 5 4 4

7 5 5

7 7

Nh vy trong qu trnh thc hin, chn 1 phn t vo ng v tr ca n, ta lun thc hin 2 cng vic: y mt phn t sang phi 1 v tr hoc chn phn t cn chn vo v tr ca n. Nu gi phn t cn chn l a[i] ang cha trong bin tg v j l bin duyt qua cc phn t ng trc a[i] th: - Khi cha ht mng v gp mt phn t ln hn phn t cn chn th y n sang phi 1 v tr: while ( j >= 0 && a[j]
> tg) a[j+1] = a[j];

- Ngc li th chn tg vo sau j: a[j+1] = tg;


void SapChen(int a[100], int n) { for (int i=1; i< n; i++) { int Tg = a[i]; int j = i-1; while (j > = 0 && a[j] > Tg) { a[j+1] = a[j]; j--; } a[j+1]=Tg; Ti liu ging dy- Lu hnh ni b Trang

6 1

cng chi tit thuat lap trinh } }

Ki

Sp xp bng phng php chn trong trng hp trung bnh cn n 2/ 4 ln so snh v n2/ 8 ln hon v. Trng hp ti nht gp i s ln ny.

Phng php sp xp trn: Merge sort Bi ton trn: Cho mng a gm n phn t v mng b gm m phn t sp tng. Hy trn hai mng thu c mt mng th 3 cng c sp tng. Trc tin, ta xt hai mng a v b nh v d nh sau:
a 2 3 5 b 1 4 6 7 9

Mng c sau thu c sau khi trn a v b l: c c mng c, ta lm nh sau:


c 1 2 3 4 5 6 7 9 1 0

1 0

B1. Cho bin i xut pht t u mng a (i=0) v bin j xut pht t u mng b (j=0). B2. Ta so snh a[i] v a[j] ri ly phn t nh hn trong hai phn t t vo mng c. Nu ly a[i], ta phi tng i ln 1 n v (i++) v tng t, nu ly b[j], ta tng j ln 1 n v (j++). Lp li B2 cho ti khi 1 trong 2 mng c ly ht.

Vi mng a,b trn, d thy gii thut trn s dng li khi mng a c ly ht. Tuy nhin, khi , mng b vn cn cc phn t 6, 7, 9, 10 cha c ly. Cng vic tip theo l chuyn ton b cc phn t cn tha ny t b sang c. Hm sau thc hin trn 2 mng a, b theo thut ton trn.
int c[100]; void Tron(int a[50],int n, int b[50], int m) { int i=0, j=0, k=0; while(i<n&&j<m) if(a[i]<b[j]) {c[k]=a[i]; i++; k++;} else {c[k]=b[j]; j++; k++;} // Gn ui-----------------------------if(i<n) for(int t=i; t<n; t++) {c[k]=a[t]; k++;} else Ti liu ging dy- Lu hnh ni b Trang

6 2

cng chi tit thuat lap trinh for(int t=j; t<m; t++) {c[k]=b[t]; k++;} }

Ki

D thy qu trnh cho i chy trn a v j chy trn b s buc phi dng li khi 1 trong 2 mng c duyt ht. Nu khng, bin i hoc j s chy qu gii hn ca mng a hoc b. Khi dng li, mt trong 2 mng c th cha c duyt ht v cn tha mt s phn t v qu trnh chuyn cc phn t ny sang c c din ra. Mt ci tin nh gip cho i v j khng bao gi chy vt qu gii hn ca 2 mng a v b cho ti khi ta ly xong tt c cc phn t ca a v b t sang c. Mun vy, trc khi thc hin gii thut trn, ta lm nh sau:
- Gi Max l phn t ln nht trong s cc phn t ca c a v b. - Chn gi tr Max + 1 vo v tr cui cng ca mng a v mng b.

Vi mng trn, gi tr Max = 10 v hai mng sau khi chn Max+1 vo cui s c dng:
a 2 3 5 1 1 b 1 4 6 7 9 1 0 1 1

Khi i hoc j chy ti cui mng, ta gp phi gi tr 11 l gi tr ln hn bt k gi tr mo ca hai mng a v b ban u, do , theo gii thut th i v j s b dng li ti v khng th chy vt ra khi gii hn ca mng.
int c[100]; void Tron2(int a[50],int n, int b[50], int m) { int Max=a[n-1]; if(Max<b[m-1]) Max=b[m-1]; a[n]=b[m]=Max+1; //-----------------------int i=0, j=0; for(int k=0; k<n+m; k++) if(a[i]<b[j]) {c[k]=a[i]; i++;} else {c[k]=b[j]; j++;} }

tng ca gii thut sp xp trn nh sau: - Gi s c mng a cha sp:


Ti liu ging dy- Lu hnh ni b Trang

6 3

cng chi tit thuat lap trinh

Ki

- Chia mng a lm hai phn bng nhau v sp trn 2 na ca a.

- Trn 2 na sp thu c mng a cng c sp: Vic sp trn 2 na ca a cng c p dng phng php sp xp trn ny, do 2 na li tip tc c chia i, trn Nh vy ta c mt gii thut quy. Gii thut sau s dng mng b lm mng trung gian. Mi khi cn trn 2 na ca mng a ta sao mt na u ca a sang b, mt na cn li cng t vo cui ca b nhng theo th t ngc li v tin hnh trn vi i chy t u mng b cn j chy t cui mng b. Vic trn 2 na sau khi 2 na c t chung vo 1 mng b nh vy s khng cn phi s dng phn t chn Max+1 nh trn na.
int a[100], b[100]; void MergeSort(int l, int r) { if(r>l) { int m=(l+r)/2; MergeSort(l,m); MergeSort(m+1, r);
//Sao chep nua dau cua a sang b //Sao chep nua con lai cua a sang b theo thu tu nguoc lai

for(int i=m; i>=l; i--) b[i]=a[i]; for(int j=m+1; j<=r;j++) b[r+m+1-j]=a[j];


//i chay tu dau mang b, j chay tu cuoi mang b va tron

i=l; j=r; for(int k=l; k<=r; k++) if(b[i]<b[j]) {a[k]=b[i];i++;} else {a[k]=b[j];j--;} } } Sp xp bng trn s dng khong n lg(n) ln so snh sp bt k mt mng no gm n phn t.

Ti liu ging dy- Lu hnh ni b Trang

6 4

cng chi tit thuat lap trinh

Ki

Sp xp bng trn cng s dng thm mt mng b ph tr c kch thc n. Ngi ta chng minh sp xp bng trn l n nh v khng b nh hng bi th t ban u ca d liu. b. Bi ton tm kim Cho mt mng a gm n phn t v mt phn t c cng kiu. Hi c c xut hin trong a khng? Phng php tm kim tun t: Mt phng php n gin gii quyt bi ton trn l duyt mng. Gii thut c trnh by nh sau: - S dng mt bin m d = 0; - Duyt qua cc phn t ca mng, nu gp c ta tng bin m: d++; Kt thc qu trnh duyt mng, nu d bng 0 chng t c khng xut hin trong mng v ngc li.
Phng php trn cn thit phi quyt qua tt c cc phn t ca mng mt cch tun t, do vy, phc tp ca gii thut l O(n) vi n l kch thc ca mng.

Nu mng a c sp (tng hoc gim) th do tnh cht c bit ny, ta c th gii quyt bi ton m khng cn duyt qua tt c cc phn t ca mng. Phng php gi l tm kim nh phn. Phng php tm kim nh phn: Gi s ta cn tm kim c trong mt on t v tr L ti v tr R trong mng a (trng hp tm kim trn ton b mng th L=0 v R=n-1). Ta lm nh sau: - Gi M l v tr gia ca on mng ta ang tm kim (M = (L+R)/2). Trc tin ta tin hnh kim tra a[M]. Khi , ch c th xy ra mt trong 3 trng hp sau: a[M] = c: kt lun c c trong mng a v ta c th dng qu trnh tm kim. a[M] > c: v mng c sp (gi s sp tng) nn r rng c (nu c) ch nm trong on bn phi tc [M+1, R]. Ta Ti liu ging dy- Lu hnh ni b 6 Trang 5

cng chi tit thuat lap trinh

Ki

tin hnh lp li qu trnh tm kim trn on [M+1, R], tc cn tri L=M+1. a[M] < c: khi c (nu c) ch nm trong on bn tri ca mng tc [L, M-1]. Ta tin hnh lp li qu trnh tm kim trn on [L, M-1], tc cn phi R = M-1. Kt thc qu trnh tm kim l khi xy ra mt trong hai trng hp:
[1]. Nu L > R chng t C khng xut hin trong a. [2]. Nu a[M] = c chng t c xut hin trong a ti v tr M.

Vy qu trnh chia i-tm kim s c lp li nu: (a[M] !=c && L<=R). Hm sau thc hin vic tm kim nh phn trn mt mng a c kch thc n vi mt kho c cn tm, s dng vng lp:
void TKNP_Lap(int a[100], int n, int c) { int L=0, R=n-1, M; do { M = (L+R)/2; if (a[M]>c) R=M-1; if (a[M]<c) L=M+1; } while(a[M]!=c && L<R); if(a[M]==c) cout<<c<<" xuat hien tai "<<M; else cout<<c<<" khong xuat hien"; }

Vic chia i v tm kim trn mt na ca mng c lp i lp li cho ti khi xy ra 1 trong 2 trng hp : tm thy v khng tm thy gi cho ta mt ci t quy cho hm ny: - Trng hp suy bin: l trng hp a[M] = c hoc L > R. Khi , nu a[M]=c hm tr v gi tr M l v tr cut hin ca c trong mng; nu L > R th c khng xut hin trong mng v hm tr v gi tr -1. - Trng hp tng qut: l trng hp a[M] > c hoc a[M] < c. Khi vic gi quy l cn thit vi cc cn L hoc R c thay i cho ph hp.
Ti liu ging dy- Lu hnh ni b Trang

6 6

cng chi tit thuat lap trinh


int TKNP_DQ(int a[100], int c, int L, int R) { int M=(L+R)/2; if(a[M]==c) return M; else if(L>R) return -1; else //trng hp tng qut if(a[M]>c) return TKNP_DQ(a,c,L,M-1); else return TKNP_DQ(a,c,M+1,R); }

Ki

Gii thut trn ging nh vic ta thm phn t chnh gia ca on mng ang tm kim, nu khng gp c ta c th r sang bn tri hoc bn phi tm tip tu thuc vo gi tr ca phn t chnh gia ny. Vic ny ging nh vic tm kim trn cy nh phn (cy m mi nt c 2 con sao cho cc gi tr thuc nhnh tri nh hn gi tr ca nt v cc gi tr ca nhnh bn phi ln hn gi tr ca nt). Gi s ta c mng a nh sau:
a 1 4 6 7 9 1 0 1 1

Cc gi tr ca a c th biu din trn cy nh phn tm kim nh sau:


7

10

11

Nu ta cn tm mt gi tr c bt k, gi s c = 9, ta ch cn i ht chiu cao ca cy. (ng i trong trng hp ny c t m). Gi s mng c n phn t, khi ta lun c th s dng
mt cy c chiu cao khng qu lg 2(n) biu din cc gi tr ca mng trn cy. Do vy, phc tp trong trng ca gii thut ny l O(lg2(n))

Ti liu ging dy- Lu hnh ni b Trang

6 7

cng chi tit thuat lap trinh II. Mng hai chiu

Ki

II.1. Cc thao tc c bn trn mng hai chiu Mng 2 chiu l mt cu trc b nh gm nhiu nh cng tn, cng kiu nhng khc nhau v ch s dng lu tr mt bng cc phn t cng kiu. Mi bng cc phn t bao gm nhiu dng v nhiu ct, do vy, ch s ca mt phn t ca mng c xc nh bi ch s ca dng v ca ct tng ng. Gii s bng cc phn t c n dng v m ct. Cc dng c nh ch s bt u t 0: 0, 1, 2, , n-1 v cc ct cng c nh ch s t 0: 0, 1, 2, , m-1. Phn t ti dng i, ct j c ch s l [i][j]. Mt mng a gm 3 dng, 4 ct c dng nh sau:
a0123012

a[1][2]

Khai bo mng 2 chiu:


<Kiu mng> <Tn mng> [<S dng ti a>] [<S ct ti a>];

V d: int a[5][10]; khai bo mt mng a c ti a 5 dng v 10 ct. Mng a c th cha c ti a 50 phn t kiu nguyn. Vn to dng ma trn: Khi th hin mng hai chiu ln mn hnh, ta thng s dng cu lnh gotoxy to dng ma trn cho mng. Cu lnh ny c tc dng a con tr mn hnh ti ta (x,y) ch ra trn mn hnh nhp hoc xut cc phn t ca mng. C php: gotoxy(x, y);

Ti liu ging dy- Lu hnh ni b Trang

6 8

cng chi tit thuat lap trinh

Ki

Vi x l ta theo phng X (ct x) ca mn hnh, c gi tr t 1 ti 80, y l ta theo phng Y (dng y) ca mn hnh, c gi tr t 1 ti 25.
1 x 8 0

y 2 5

To mn hnh trong ch text mode Nh vy, to dng ma trn cho mng khi nhp, xut ta s dng cu lnh sau: gotoxy( x + k*j, x + i); Vi (x, y) l to nh tri trn ca ma trn v k l bc nhy theo trc x (hay khong cch gia cc ct ca mng - thng chn k=3). Thng thng ta hay nhp xut mng ti 4 v tr ca mn hnh tng ng vi cc lnh gotoxy sau:
gotoxy(5 + 3 *j, 5 + i); gotoxy(5 + 3 *j, 15 + i); gotoxy(35 + 3 *j, 5 + i); gotoxy(35 + 3 *j, 15 + i);

Nhp mng: - Ta s dng hai vng lp for lng nhau nhp tng phn t cho mng. on trnh sau nhp gi tr cho mt mng s a gm n dng, m ct to dng ti v tr c to (5,5) :
for(i=0; i<n; i++) for(j=0; j<m; j++) { gotoxy(5 + 3 * j, 5 + i); cin>>a[i][j]; }

Xut mng: Ta cng s dng hai vng for lng nhau v to dng ma trn cho mng khi xut. on trnh sau xut mng a gm n dng, m ct to dng ti to (35, 5):
Ti liu ging dy- Lu hnh ni b Trang

6 9

cng chi tit thuat lap trinh for(i=0; i<n; i++) for(j=0; j<m; j++) { gotoxy(35 + 3 * j, 5 + i); cout<<a[i][j]; }

Ki

Duyt mng: Vic thm ln lt tt c cc phn t ca mng cn phi s dng 2 vng lp for lng nhau:
for(i=0; i<n; i++) for(j=0; j<m; j++) { //Thm phn t c ch s [i][j] }

Thao tc duyt mng l thao tc thng xuyn s dng trong cc bi tp v mng. Ngay vic nhp, xut mng v bn cht cng l thao tc duyt mng. II.2. Cc bi ton c bn trn mng 2 chiu Cc bi ton trn ma trn: V mt hnh thc, mng c dng ma trn. Do vy, mt dng bi tp ph bin v mng l thc hin cc bi ton trn ma trn. Thuc dng ny c cc bi nh: Cng, tr, nhn hai ma trn; chuyn v ma trn, i du ma trn, nghch o ma trn V d 1: Nhp vo mt ma trn a (n x k) v b (k x m) cc phn t thc. Tnh ma trn c = a * b. Vi hai ma trn a, b cho, tch ca chng l ma trn c c kch thc n x m vi:
c[i][j] =

a[i][t ] * b[t ][j ]


t =0

k 1

void main() { int a[50][50], b[50][50], c[50][50]; int n, m, k; clrscr(); cout<<"n="; cin>>n; cout<<"m="; cin>>m; cout<<"k="; cin>>k; for(int i=0; i<n; i++) Ti liu ging dy- Lu hnh ni b Trang

7 0

cng chi tit thuat lap trinh for(int j=0; j<k; j++) { gotoxy(5+3*j, 5+i); cin>>a[i][j]; } for(i=0; i<k; i++) for(j=0; j<m; j++) { gotoxy(35+3*j, 5+i); cin>>b[i][j]; } for(i=0; i<n; i++) for(j=0; j<m; j++) { c[i][j]=0; for(int t=0; t<k; t++)c[i][j]+=a[i][t]*b[t][j]; gotoxy(5+3*j, 15+i); cout<<c[i][j]; } getch(); }

Ki

Thng k trn ma trn Mt dng bi ton kh ph bin trn mng hai chiu l thng k trn ma trn. Vic thng k mt i lng no nhm mc ch kim tra mt tnh cht no ca mng. Mt vn kh khn t ra l xc nh chnh xc xem cn thng k i lng no nu bi cha ni r. V d 1: Nhp vo mt ma trn vung a (n x n) cc phn t thc. Ma trn a c gi l hp l nu tt c cc phn t trn dng cho chnh u bng 0; cc phn t pha trn ng cho chnh u dng v cc phn t cn li u m. Hy kim tra xem ma trn va nhp c hp l khng? Ta biu din iu kin ma trn vung a l hp l nh sau:
i = j, a[i ][j ] = 0 i < j, a[i ][j ] > 0 i > j, a[i ][j ] < 0

(IV.1)

Ly ph nh ca iu kin ny ta thu c iu kin mt ma trn vung l khng hp l nh sau:


i = j,a[i ][j ] 0 i < j,a[i ][j ] 0 i > j,a[i ][j ] 0

(IV.2) 7 1

Ti liu ging dy- Lu hnh ni b Trang

cng chi tit thuat lap trinh

Ki

Nh vy vic gii bi ton s tr nn d dng. Theo , ta thng k cc phn t a[i][j] tho mn iu kin IV.2. Nu khng tn ti phn t no tho mn IV.2 th ma trn l hp l.
void main() { int a[50][50];int n; clrscr(); cout<<"n="; cin>>n; for(int i=0; i<n; i++) for(int j=0; j<n; j++) { gotoxy(5+3*j, 5+i); cin>>a[i][j]; } int d=0; for(i=0; i<n; i++) for(j=0; j<n; j++) { if(i==j && a[i][j]!=0) d++; if(i<j && a[i][j]<=0) d++; if(i>j && a[i][j]>=0) d++; } if(d==0) cout<<"Ma tran la hop le !"; else cout<<"Ma tran la khong hop le !"; getch(); }

V d 2: C n ca hng kinh doanh trong m thng. Doanh thu ca mi ca hng trong mi thng u c lu tr trong mt ma trn c n dng, m ct. Mt ca hng s b ng ca nu doanh thu ca n gim lin tip trong m-1 thng (tr thng u tin). Hy cho bit ca hng no trong s n ca hng trn s b ng ca? Bi ton c gii quyt bng cch duyt qua tng ca hng (0 -> n-1). Vi mi ca hng i, ta m s ln gim doanh thu ca n. Nu ca hng no c ng m-1 ln gim doanh thu, ca hng s b ng ca.
void main() { int a[50][50];int n,m; clrscr(); cout<<"Nhap so cua hang n="; cin>>n; cout<<"Nhap so thang m="; cin>>m; cout<<"Nhap dt cua tung cua hang-tung thang:"; for(int i=0; i<n; i++) Ti liu ging dy- Lu hnh ni b Trang

7 2

cng chi tit Ki thuat lap trinh for(int j=0; j<m; j++) { gotoxy(5+3*j, 5+i); cin>>a[i][j]; } for(i=0; i<n; i++) { int d=0; for(j=0; j<m-1; j++) if(a[i][j]>a[i][j+1]) d++; if (d==m-1) cout<<"Cua hang "<<i+1<<" se bi dong cua !"; } getch(); } III. Xu k t mng cc k t

III.1. Mt s lu khi s dng xu k t Xu k t (hay chui k t) l mt dy lin tip cc k t. Nh vy, v bn cht xu k t ging vi mt mng mt chiu m mi phn t ca mng l mt k t. Tuy nhin, ngoi cc c im nh mng, xu k t cn c c th ring. Khai bo bin kiu xu k t: C hai cch khai bo bin xu k t: - Khai bo nh mng:
char <Tn bin xu> [<s k t ti a trong xu>]; (1)

- Khai bo nh con tr xu:


char * <Tn bin xu>; (2)

Vi cch khai bo (1), ta cn ch ra di ti a ca xu. di ny khng vt qu 256. Vi cch khai bo (2), di xu cha xc nh. Nh vy xu c th cha ti a 256 k t. V d: ta khai bo:
char S[30]; char * T;

Ta thu c hai bin xu. Bin xu S ch cha c cc xu c di khng qu 30 k t. Bin xu T c di cha


Ti liu ging dy- Lu hnh ni b Trang

7 3

cng chi tit thuat lap trinh

Ki

xc nh v n c th cha c xu c di bt k khng qu 256 k t. Nhp xu: Mc d xu c bn cht ging mng nh vic nhp xu khng phc tp nh nhp mng (khng cn s dng vng lp). Thng thng ngi ta hay s dng lnh gets cho vic nhp xu:
gets( <Bin xu>);

V d: nhp xu S, ta vit: gets(S); Ta cng c th s dng lnh scanf cho vic nhp xu hoc thm ch lnh cin nhp cc xu khng cha du cch. Nu s dng lin tip nhiu lnh gets nhp nhiu xu th gia cc lnh gets phi xo b m bng lnh fflush(stdin); Xut xu: Tng t nhp xu, vic xut xu cng tr nn rt n gin bng cch s dng mt trong cc lnh xut puts, printf, cout. V d: Xut xu S ln mn hnh, ta vit: cout<<S; hoc puts(S); Duyt xu: Vic duyt xu cng tng t nh duyt mng. Tuy nhin, ta cn s dng hm strlen(<Bin xu>) tr v di ca xu cn duyt (hm ny c sn trong th vin string.h). Gi s duyt xu S, ta vit:
for(i=0; i < strlen(S); i++) { //Thm k t S[i]; }

Php gn xu: Nu a v b l hai bin khng phi kiu xu, ta d dng gn a sang b v ngc li bng cch vit: a=b; hoc b = a;
Ti liu ging dy- Lu hnh ni b Trang

7 4

cng chi tit thuat lap trinh

Ki

Tuy nhin, nu a v b l hai bin kiu xu, vic s dng php gn trn l khng hp l. gn xu b sang xu a, ta phi s dng hm copy xu:
strcpy(a, b);

Mt cch tng qut, hm copy xu c vit nh sau:


strcpy(S1, S2);

Trong , S1 l mt bin xu cn S2 c th l mt bin xu hoc mt hng xu. Khi , xu k t S2 s c gn sang S1. V d:


char S1[30], S2[30]; strcpy(S1, Ha Noi); //Gn Ha Noi vo S1 strcpy(S2, S1); //Gn S1 vo S2, S1 v S2 c cng ni dung l Ha Noi

Php so snh xu: so snh 2 bin xu, ta cng khng c php s dng ton t so snh (==) m s dng hm so snh xu: int strcmp(S1, S2); Hm ny s tr v gi tr bng 0 nu hai xu bng nhau; gi tr dng nu S1 > S2 v gi tr m nu S1 <S2. V d:
char S1[30], S2[30]; gets(S1); fflush(stdin); gets(S2); if (strcmp(S1, S2)==0) cout<< Xau S1 bang xau S2; else cout<< Xau S1 khac xau S2;

Hai hm strcpy v strcmp c sn trong th vin string.h. Ly m ASCII ca mt k t trong xu: Mt s bi ton ta cn ly m ASCII ca cc k t. Cng vic ny trong C++ c thc hin mt cch d dng m khng cn s dng ti hm ly m ASCII. ly m ASCII ca mt k t S[i], ta ch cn t ton t p kiu (int) ngay trc k t :
Ti liu ging dy- Lu hnh ni b Trang

7 5

cng chi tit thuat lap trinh

Ki

V d: Vi S l mt xu, ng nhin S[i] l mt k t ca xu. Hai cu lnh sau s cho kt qu khc nhau:
cout<<S[i]; (1) (2) cout<<(int) S[i];

Cu lnh (1) in ra mn hnh k t S[i], cn cu lnh (2) ch in ra m ASCII ca k t . Chuyn m ASCII thnh k t: Tng t nh trn, vic chuyn m ASCII thnh k t cng c thc hin d dng bng ton t p kiu (char). Gi s mun in ra mn hnh k t c m 65 (ch A), ta ch cn vit:
cout<<(char) 65;

Khi k t A s c in ra mn hnh do n c m ASCII l 65. III.2. Mt s bi ton c th trn xu Ngoi cc bi ton tm kim, sp xp nh trn mt mng thng thng, cc bi ton trn xu cn c m rng do tnh c th ca xu. Sau y l mt s dng ph bin: - Thng k trn xu: chng hn thng k s k t, s t, s cu, s du chm,. - Chun ho xu: Ct cc k t trng hai u xu, xo bt du cch nu c 2 du cch lin nhau trong thn xu. Trc du chm cu khng c du cch, sau du chm cu c 1 du cch; k t u cu vit hoa V d 1: Nhp vo mt xu k t bt k. Mt t trong xu l mt dy lin tip, di nht cc k t khc k t trng. Hy cho bit xu va nhp c bao nhiu t. D thy vi mt xu cha chun th s t khng t l thun vi s du cch. Do vy vic m s du cch l khng ph hp.

Ti liu ging dy- Lu hnh ni b Trang

7 6

cng chi tit thuat lap trinh

Ki

Thay vo , ta i m s ln bt u ca mt t, l s ln S[i] bng du cch v S[i+1] khc du cch. Tuy nhin, trong trng hp S[0] khc du cch th ta vn m thiu 1 t u tin nn phi tng bin m ln 1.
void main() { char S[30]; cout<<"S="; gets(S); int d=0; for(int i=0; i<strlen(S)-1; i++) if(S[i]==' ' && S[i+1] !=' ') d++; if(S[0]!=' ') d++; cout<<"Xau co: "<<d<<" tu !"; getch(); }

V d 2: Nhp mt xu k t S bt k. Hy m s ln xut hin ca tt c cc ch ci c trong S. Nu khng phn bit ch hoa v ch thng th bng m ASCII c tng cng 26 ch ci. Trng hp ti nht l c 26 ch ci ny u xut hin trong S. Do vy ta s dng 26 bin m (mng d gm 26 phn t nguyn). Nu ta gp mt k t no trong S th bin m tng ng ca n s c tng ln 1. Bng sau ch ra s tng ng gia bin m v k t:
Ch ci hoa (m ASCII) A (65) B (66) C (67) S[i] ((int) S[i]) Ch ci thng (m ASCII) a (97) b (98) c (99) S[i] ((int) S[i]) Bin m tng ng d[0] = d[65-65] d[1] = d[66-65] d[2] = d[67-65] d[(int) S[i]-65] Bin m tng ng d[0] = d[97- 97] d[1] = d[98-97] d[2] = d[99-97] d[(int) S[i]-97]

Nh vy ta cn chia hai trng hp:


Ti liu ging dy- Lu hnh ni b Trang

7 7

cng chi tit thuat lap trinh

Ki

Trng hp th nht: nu ch ci S[i] c m ASCII nh hn 97 th S[i] s l ch ci hoa. M ASCII ca n l k = (int) S[i]. Khi ta cn tng bin m d[k-65]. Trng hp th 2: nu ch ci S[i] c m ASCII ln hn hoc bng 97 th S[i] s l ch ci thng. M ASCII ca n l k = (int) S[i]. Khi ta cn tng bin m d[k-97]. Kt thc qu trnh m, ta duyt li mng d. Nu thy d[i] khc 0 th chnh l s ln xut hin ca ch ci (char) (i+65) hoc (char) (i+97).
void main() { char S[30]; cout<<"S="; gets(S); int d[26]; for(int i=0; i<26; i++) d[i]=0; for(i=0; i<strlen(S); i++) { if((int)S[i] <97) d[(int)S[i]-65]++; else d[(int)S[i]-97]++; } for(i=0; i<26; i++) if(d[i]>0)
cout<<"ky tu "<<(char)(i+97)<<" xuat hien "<<d[i]<<" lan !"<<endl;

getch(); }

Ti liu ging dy- Lu hnh ni b Trang

7 8

cng chi tit thuat lap trinh Chng V. K thut lp trnh dng con tr I. Tng quan v con tr

Ki

I.1. Khi nim v cch khai bo - Mi byte trong b nh u c nh a ch, l mt con s h thp lc phn. a ch ca bin l a ch ca byte u tin trong vng nh dnh cho bin. Thng thng, khi ta khai bo mt bin, my tnh s cp pht mt nh vi kch thc tng ng trong vng 64Kb dnh cho vic khai bo bin (m hnh tiny). nh ny c th dng lu tr cc gi tr khc nhau, gi l gi tr ca bin. Bn cnh , mi bin cn c mt a ch l mt con s h thp lc phn.
Con tr (hay bin con tr) l mt bin c bit dng cha a ch ca cc bin khc.

Nh vy, con tr cng ging nh bin thng (tc cng l mt nh trong b nh) nhng im khc bit l n khng th cha cc gi tr thng thng m ch dng cha a ch ca bin. Con tr cng c nhiu kiu (nguyn, thc, k t ). Con
tr thuc kiu no ch cha a ch ca bin thuc kiu .

C php khai bo:


<Kiu con tr> * <Tn con tr>;

Trong : <Kiu con tr> c th l mt trong cc kiu chun ca C++ hoc kiu t nh ngha. <Tn con tr> c t tu theo quy c t tn trong C++. V d: dng khai bo int a, *p; float b, *q; khai bo a v p kiu nguyn, b v q kiu thc, trong , p v q l hai con tr. Khi , p c th cha a ch ca a v q c th cha a ch ca b. I.2. Mt s thao tc c bn trn con tr Ly a ch ca bin t vo con tr: Gi s a l mt bin nguyn v p l mt con tr cng kiu vi a. ly a ch ca a t vo p ta vit:
Ti liu ging dy- Lu hnh ni b Trang

7 9

cng chi tit thuat lap trinh

Ki

P = &a; Ton t & cho php ly a ch ca mt bin bt k. Khi , ta ni p ang tr ti a. Mt cch tng qut, ly a ch ca mt bin t vo con tr cng kiu, ta vit:
<Tn con tr> = & <Tn bin>;

Php gn con tr cho con tr: Nu p v q l hai con tr cng kiu, ta c th gn p sang q v ngc li, ta vit: p = q; hoc q = p; Khi , a ch ang cha trong con tr v phi s c t vo con tr v tri v ta ni hai con tr cng tr ti mt bin. V d:
int a, *p, *q; p=&a; //cho p tr ti a q = p; //p v q cng tr ti a

S dng con tr trong biu thc: Khi s dng bin con tr trong biu thc th a ch ang cha trong con tr s c s dng tnh ton gi tr ca biu thc. Nu mun ly gi tr ca bin m con tr ang tr ti s dng trong biu thc th ta thm du * vo ng trc tn bin con tr. V d:
int a=5, b=3, *p, *q; p=&a; q=&b; int k = p + q; int t = *p + *q;

Khi , hai bin k v t c gi tr khc nhau. Trong biu thc k, a ch ang cha trong con tr p v q s c cng li v t vo k; ngc li t s c gi tr = a + b = 8.
II. Con tr - mng v hm

II.1. Con tr v mng Con tr l mng


Ti liu ging dy- Lu hnh ni b Trang

8 0

cng chi tit thuat lap trinh

Ki

Khi khai bo mng, ta c cp pht mt dy cc nh lin tip, cng kiu c gi l cc phn t ca mng. iu c bit l tn mng chnh l mt con tr tr ti phn t u tin ca mng. Nh vy tn mng nm gi a ch ca nh u tin trong mng v do vy, ta c th s dng tn mng qun l ton b cc phn t ca mng. V d: gi s ta khai bo: int a[10]; Khi , 10 nh c cp pht cho mng a nh sau:

Cc phn t ln lt l a[0], a[1], a[2],.a[9]. Tuy nhin, a l mt nh ring bit v nh ny ang cha a ch ca a[0] (a tr ti a[0]):
a

D thy c s tng ng sau:


a a+1 a+2 a+i l a ch ca a[0] l a ch ca a[1] l a ch ca a[2] l a ch ca a[i] l a[0] l a[1] l a[2] l a[i]

Nh vy th
*a *(a+1) *(a+2) *(a+i)

Vy ta c th s dng cch vit th hai cho cc phn t ca mng. Thay v vit a[i], ta c th vit *(a+i) Con tr l mng Mt con tr p bt k cng tng ng vi mt mng mt chiu. Tht vy, gi s con tr p ang cha a ch ca mt nh a no , khi ta c th s dng p qun l mt dy cc nh lin tip bt u t a. Nh vy:
p p+1 l a ch ca a l a ch ca nh ngay sau a

Ti liu ging dy- Lu hnh ni b Trang

8 1

cng chi tit thuat lap trinh p+i

Ki

l a ch ca nh th i k t a. pap+1p+2

Vy, vi p l con tr th ta c th coi n nh mng mt chiu v truy cp ti phn t th i ca p ta c th vit *(p+i) hoc thm ch vit p[i]. II.2. Con tr v hm Phn loi i s Mt hm trong C++ c th khng tr v gi tr no m n gin ch thc hin mt cng vic no (hm void). Tuy nhin, vi nhng hm c gi tr tr v, gi tr s c t vo tn hm (tr v thng qua tn hm) bng lnh return <gi tr tr v>;. Lnh return ny tng t nh vic ta gn <tn hm> = <gi tr tr v>; Vi mt hm, tn hm ch c mt nn hm ch c th tr v duy nht mt gi tr thng qua tn hm. Tuy nhin, c nhng hm i hi phi tr v nhiu hn mt gi tr, chng hn hm gii phng trnh bc hai. Hm ny c cc i vo l cc h s a, b, c ca phng trnh bc hai v nu c nghim th hm s tr v 2 nghim x1 v x2. a b c
GPTB 2

x1 x2

Nu vit hm theo kiu c gi tr tr v nh cch thng thng (tr v qua tn hm) ta s gp kh khn do mt tn hm khng th cha cng lc hai gi tr x1 v x2. gii quyt kh khn , ta s dng k thut i ra cho hm. Theo , cc i ca hm c chia lm hai loi: - i vo: l cc bin mang gi tr u vo cho hm - i ra: l cc bin cha gi tr u ra ca hm.

Ti liu ging dy- Lu hnh ni b Trang

8 2

cng chi tit thuat lap trinh

Ki

Nu hm tr v nhiu gi tr th cc gi tr thng khng c t vo tn hm (qua lnh return) m c tr v qua i ra. Nu i ra l bin thng th khi s dng hm, ta ch c th truyn tham s di dng tham tr. iu c ngha l sau khi ra khi hm, cc tham s ny li quay tr v gi tr ban u nh trc khi n c truyn vo hm. Nh vy chng khng thc hin c phn s ca mnh l mang cc gi tr u ra ra khi hm. Do vy, ch c th s dng cch truyn tham s theo kiu tham chiu, tc l:
Cc i ra bt buc phi l con tr.

V d 1: vit hm tr v cc nghim (nu c) ca phng trnh bc hai. Hm sau s tr v gi tr -1 qua tn hm nu phng trnh bc hai v nghim. Ngc li, n tr v gi tr +1. Khi , hai nghim c t vo hai i ra. Nh vy hm c 3 i vo v 2 i ra ng thi hm tr v gi tr nguyn qua tn hm (hm int):
int GPTB2(float a,float b,float c,float *x1,float *x2) { float DT=b*b-4*a*c; if(DT<0) return -1; else { *x1=(-b+sqrt(DT))/(2*a); *x2=(-b-sqrt(DT))/(2*a); return 1; } } void main() { float a,b,c; cout<<"a="; cin>>a; cout<<"b="; cin>>b; cout<<"c="; cin>>c; float x1, x2; int k=GPTB2(a,b,c,&x1,&x2); if(k==-1) cout<<"Phuong trinh vo nghiem"; else cout<<"Pt co 2 nghiem x1="<<x1<<" x2="<<x2; getch(); Ti liu ging dy- Lu hnh ni b Trang

8 3

cng chi tit thuat lap trinh }

Ki

V d 2: Vit hm tr v ng thi 3 gi tr l tng cc s chn, tng cc s l v tng cc s chia ht cho 3 trong mt mng n phn t nguyn. Cc i vo: mng nguyn a, kch thc thc t ca mng n. Cc i ra: T1- tng cc s chn trong mng; T2- tng cc s l trong mng; T3- tng cc s chia ht 3 trong mng.
void TinhTong(int *a, int n, int *T1, int *T2, int *T3) { *T1=*T2=*T3=0; for(int i=0; i<n; i++) { if(a[i]%2==0) *T1+=*(a+i); else *T2+=*(a+i); if(a[i]%3==0) *T3+=*(a+i); } } void main() { int *a;int n; cout<<"n="; cin>>n; for(int i=0; i<n; i++) cin>>a[i]; int T1, T2, T3; TinhTong(a,n,&T1,&T2,&T3); cout<<"Tong chan="<<T1<<endl; cout<<"Tong le="<<T2<<endl; cout<<"Tong chia het 3="<<T3; getch(); }

Hm TinhTong() trn khng tr v gi tr no thng qua tn hm (hm void) nhng li tr v ng thi 3 gi tr thng qua 3 i ra. Cc tham s T1, T2, T3 c truyn vo hm ch lm nhim v duy nht l cha cc tng tnh c v mang ra khi hm.
III. Cp pht v gii phng b nh cho con tr

III.1. Cp pht b nh ng cho con tr Vic s dng con tr thay cho mng s gip tit kim b nh nu nh ta cp pht b nh ng cho con tr (tc s dng ti u, cp pht ti ).
Ti liu ging dy- Lu hnh ni b Trang

8 4

cng chi tit thuat lap trinh

Ki

Vic cp pht b nh cho con tr s dng cc hm nh v b nh (allocation memory) ca C++. C rt nhiu hm lm cng vic ny, tuy nhin ta hay s dng hai hm calloc v malloc Hm calloc: C php:
<con tr> = (<Kiu con tr>*) calloc(<n>, <size>);

Trong , <n> l s nh cn cp pht (s phn t ca mng); <size> l kch thc ca mt nh. Hm calloc nu thc hin thnh cng s cp pht mt vng nh c kch thc <n>*<size> Byte v <con tr> s tr ti nh u tin ca vng nh ny. Ngc li, nu thc hin khng thnh cng (do khng b nh hoc <n> hoc <size> khng hp l) hm s tr v gi tr NULL (tc con tr tr ti NULL). Gi s p l mt mng nguyn, khi kch thc mi nh l 2 Byte (tc <size> = 2). Nu p l mng thc th <size> =4 .v.vTon t sizeof s cho ta bit kch thc ca mi nh thuc mt kiu bt k. Mun vy ta ch cn vit: sizeof(<kiu>). V d sizeof(int) = 2; sizeof(float) = 4; .v.v
Hm calloc thuc th vin alloc.h.

V d 1: Nhp mt mng p gm n phn t nguyn, s dng hm calloc cp pht b nh ng.


int *p, n; cout<< Nhp n=; cin>>n; p = (int *) calloc(n, sizeof(int)); if(p==NULL) cout<< Cap phat bo nho khong thanh cong; else //Nhap mang for(int i=0; i<n; i++) { cout<< p[<<i<< ]=; cin>>p[i]; }

Hm malloc:
Ti liu ging dy- Lu hnh ni b Trang

8 5

cng chi tit thuat lap trinh

Ki

Tng t nh hm calloc, hm malloc s cp pht mt vng nh cho con tr. C php nh sau:
<Con tr> = (<Kiu con tr>*) malloc(<size>);

Trong <size> l kch thc ca nh cn cp pht tnh bng Byte. Chng hn ta cn cp pht b nh cho mt mng a gm 10 phn t nguyn. Khi kch thc vng nh cn cp pht = 10 * sizeof(int) = 10*2=20 Byte, ta vit:
a = (int*) malloc(20); hoc a = (int*) malloc(10 * sizeof(int));

V d 2: Nhp mt mng p gm n phn t nguyn, s dng hm malloc cp pht b nh ng.


int *p, n; cout<< Nhp n=; cin>>n; p = (int *) malloc(n*sizeof(int)); if(p==NULL) cout<< Cap phat bo nho khong thanh cong; else //Nhap mang for(int i=0; i<n; i++) { cout<< p[<<i<< ]=; cin>>p[i]; }

V d 3. Nhp mt mng a gm n phn t thc bng cch s dng con tr v cp pht b nh ng. Tm phn t ln nht v ln th nh trong mng.
void main() { float *a;int n; cout<<"n="; cin>>n; a = (float*) calloc(n, sizeof(float)); if(a==NULL) cout<<"cap phat bo nho that bai!"; else { for(int i=0; i<n; i++) { cout<<"a["<<i<<"]="; cin>>*(a+i); Ti liu ging dy- Lu hnh ni b Trang

8 6

cng chi tit thuat lap trinh } int Max1, Max2; //Tim phan tu lon nhat chua vao Max1 Max1=a[0]; for(i=0; i<n; i++) if(Max1<*(a+i)) Max1=*(a+i); //Tim phan tu lon thu nhi chua vao Max2 i=0; while(a[i]==Max1) i++; Max2=a[i]; for(i=0; i<n; i++) if(Max2<*(a+i) && *(a+i) !=Max1) Max2=*(a+i); //In ket qua ra man hinh cout<<"Phan tu lon nhat = "<<Max1<<endl; cout<<"Phan tu lon thu nhi = "<<Max2<<endl; } getch(); }

Ki

Gii thut trn s khng cho kt qu ng khi tt c cc phn t ca mng bng nhau (khng tn ti s ln th nh). Ta c th khc phc iu bng cch kim tra trc trng hp ny. III.2. Cp pht li hoc gii phng b nh cho con tr i khi, trong qu trnh hot ng, kch thc ca mng li thay i. Nu ta s dng cp pht b nh ng th kch thc ca mng va dng nn nu kch thc ny tng hoc gim (khi chng trnh thc thi mi pht sinh iu ny) th cn thit phi cp pht li b nh cho con tr. lm iu , ta s dng hm realloc. Hm ny c nhim v cp pht mt vng nh vi kch thc mi cho mng (con tr) nhng vn gi nguyn cc gi tr vn c ca mng. C php:
<Con tr> = (<Kiu con tr>*) realloc(<Con tr>, <Kch thc mi>);

Trong , <Kch thc mi> c tnh bng Byte. V d: Nhp vo mt mng a gm n phn t nguyn. Hy sao chp cc gi tr chn ca mng t vo cui mng. Gi s ta c mng a ban u gm cc phn t nh sau:
Ti liu ging dy- Lu hnh ni b Trang

8 7

cng chi tit thuat lap trinh 1 4 3 2 6 5

Ki

Sau khi sao chp cc phn t chn t vo cui mng, mng a c dng:
1 4 3 2 6 5 4 2 6

R rng kch thc ca mng a b thay i (tng ln). Mi khi c mt phn t chn c t vo cui mng th kch thc ca mng c tng ln 1. Do cn cp pht li b nh cho a vi kch thc tng thm 1 nh (2 Byte).
void main() { int *a;int n; cout<<"n="; cin>>n; a = (int*) calloc(n, sizeof(int)); if(a==NULL) cout<<"cap phat bo nho that bai!"; else { for(int i=0; i<n; i++) { cout<<"a["<<i<<"]="; cin>>*(a+i); } int m=n; for(i=0; i<m; i++) if(a[i]%2==0) { a = (int*) realloc(a,(n+1)*sizeof(int)); a[n]=a[i];n++; } } for(int i=0; i<n; i++) cout<<a[i]<<" "; getch(); }

Gii phng b nh ang chim gi bi con tr Khi khng s dng ti con tr na, nu ta khng gii phng vng nh cp pht cho con tr th hin nhin vng nh ny vn b n chim gi v khng th cp pht cho cc con tr khc (nu c). c bit trong cc hm c cp pht b nh
Ti liu ging dy- Lu hnh ni b Trang

8 8

cng chi tit thuat lap trinh

Ki

ng cho con tr, khi m vic gi hm xy ra thng xuyn nhng khi kt thc hm ta khng gii phng vng nh cp pht th b nh s b chim dng mt cch nhanh chng. Gii phng vng nh ang b con tr chim gi n gin l xo a ch ang lu tr trong con tr . Vic ny s ct t mi lin h gia con tr v vng nh m n qun l. lm nh vy, hy s dng lnh free. C php:
free(<Tn con tr mun gii phng>);

V d: Gi s con tro p c cp pht b nh. Mun gii phng n, ta vit: free(p);

Ti liu ging dy- Lu hnh ni b Trang

8 9

cng chi tit thuat lap trinh

Ki

Mt s Bi tp thc hnh mn k thut lp trnh H: i hc Chng I: m u 1. Nhp hai s nguyn, tnh tng, hiu, tch, thng, ng d. 2. Nhp mt s nguyn <= 9999, in ra mn hnh cch c s nguyn (VD: s 1523 c l: 1 ngn 5 trn 2 chc 3 n v). Nhn xt v cch lm va p dng nu s nguyn nhp vo khng c gii hn? Th a ra phng n c s hon ton? (V d: vi s 1304 c l: mt nghn ba trm linh t?) 3. Vit chng trnh tnh gi tr biu thc: F(x) = (x2+e|x|+sin2(x))/ 5
x 2 +1

Chng II: cc cu trc iu khin 1. Vit chng trnh nhp vo mt s nguyn n. Kim tra xem n chn hay l. 2. Vit chng trnh gii v bin lun phng trnh bc nht theo hai h s a, b nhp t bn phm. 3. Vit chng trnh gii v bin lun phng trnh bc hai vi cc h s a, b, c nhp t bn phm. 4. Vit chng trnh gii v bin lun h phng trnh bc nht 2 n bng phng php nh thc? 5. Vit chng trnh nhp vo s tin phi tr ca khch hng. In ra s tin khuyn mi vi quy nh: nu s tin phi tr thuc [200.000, 300.000) th khuyn mi 20%. Nu s tin phi tr t 300.000 tr ln th khuyn mi 30%. Cn li th khng khuyn mi. 6. Vit chng trnh nhp vo im tng kt ca mt hc sinh v in ra xp loi cho hc sinh vi quy nh: - Xp loi gii nu tng im t 8.00 tr ln. - Xp loi kh nu tng im t 7.00 ti cn 8.00.
Ti liu ging dy- Lu hnh ni b Trang

9 0

cng chi tit thuat lap trinh

Ki

- Xp loi trung bnh nu tng im t 5.00 ti cn 7.00. - Cn li, xp loi yu. ------------------7. Vit chng trnh nhp vo mt thng ca mt nm bt k (dng lch), sau in ra s ngy c trong thng. ------------------8. Vit chng trnh tnh n!. Hy tm cc cch khc nhau gii quyt bi ton. 9. Nhp vo mt s nguyn n. Tnh tng cc s nguyn t trong on [n, 2n]. nh gi phc tp ca gii thut trong trng hp ti nht? 10. Vit chng trnh nhp vo mt s nguyn n, sau tnh gi tr biu thc: S=
1+ 1 1 1 + + ... + 2 3 n

11. Vit chng trnh nhp vo mt s nguyn n, sau tnh gi tr biu thc
1 1 1 1 nchn 1 + + 2 + 3 + ... + n nu 2 F= 2 2 2 n2 +1 nu nl

12. Vit chng trnh nhp vo mt s thc x v s nguyn n, sau tnh gi tr biu thc:
S= x+ x2 x3 xn + 2 + ... + n 1 3 3 3 0 nu nl nu nchn

13. Vit chng trnh nhp vo mt s nguyn n trong khong [10, 20] (nu s nhp vo khng thuc khong th yu cu nhp li ti khi tho mn). Sau tnh tng cc s lin tip t 1 ti n. 14. Vit chng trnh nhp vo mt s nguyn dng n, sau tnh tng cc gi tr chn, l thuc on [1, n].
Ti liu ging dy- Lu hnh ni b Trang

9 1

cng chi tit thuat lap trinh

Ki

15. Vit chng trnh nhp vo cc s nguyn dng n, m, sau in ra: - Tng cc s chn dng trong khong [- n, m]. - Tng cc s chn m trong khong [- n, m]. - Tng cc s l dng trong khong [- n, m]. - Tng cc s l m trong khong [- n, m]. Hy thc hin chng trnh bng hai cch v nh gi mi cch. 16. Vit chng trnh nhp vo mt s nguyn n, sau tnh tng cc s nguyn t thuc on [1..n]. Cho bit c bao nhiu s nguyn t thuc on . 17. Dng while (sau vit li, dng do/ while) vit chng trnh in ra s l lu tha 2 b nht ln hn 1000. 18. Cho dy s x[] = { 12.3, -45.4, 12, 15, 10.1, 12.5}. Vit chng trnh o ngc dy s trn. nh gi phc tp ca gii thut o ngc dy s bt k c n phn t trong trng hp ti nht? 19. Vit chng trnh tm s nguyn dng n nh nht tho mn: 1 + 2 + 3 + + n > 1000. 20. tnh cn bc hai ca mt s dng a, ta s dng cng thc lp sau: x(0) = a; x(n+1) = (x(n) * x(n) + a)/ (2* x(n)) vi n >=0. Qu trnh lp kt thc khi abs((x(n+1) x(n))/x(n)) < . v khi x(n+1) c xem l gi tr gn ng ca sqrt(a). Vit chng trnh tnh cn bc hai ca a vi chnh xc = 0.00001. 21. Lp trnh tnh sin(x) vi chnh xc = 0.00001 theo cng thc : sin(x) = x x3/3! + x5/ 5! + + (-1)nx(2n+1)/ (2n+1)!.
Ti liu ging dy- Lu hnh ni b Trang

9 2

cng chi tit thuat lap trinh

Ki

22.

Lp trnh tnh t hp chp m ca n theo cng thc: C(m, n) = (n(n-1)(n-m+1))/ m!. Chng III: k thut lp trnh n th

1. Vit hm kim tra xem mt s nguyn n c phi l s nguyn t khng. Sau , trong chng trnh chnh, nhp vo mt s nguyn n, kim tra tnh nguyn t ca s n v thng bo ra mn hnh? M rng bi ton bng cch s dng hm trn tnh tng cc s nguyn t trong on [1, n]? 2. Vit hm tnh n! sau , trong chng trnh chnh, nhp vo mt s nguyn n v tnh, in ra kt qu ca biu thc: S=
n!+ 1 ( n +1)!

3. Vit hm tnh gi tr biu thc F (trong bi s 10 chng II) vi i vo l n. Sau , trong chng trnh chnh, nhp vo hai s a, b, tnh v in ra mn hnh kt qu ca biu thc: S=
F ( a ) F (b) F ( a b)

4. Vit hm sp xp mt chui k t (t A->Z). Sau , trong chng trnh chnh, nhp vo mt xu k t bt k, in xu c sp ln mn hnh. 5. Vit chng trnh gii phng trnh trng phng : ax4 + bx2 + c = 0. 6. USCLN ca hai s a, b c nh ngha nh sau: USCLN(a, b) = a nu b = 0 = USCLN(b, a%b) nu b <> 0 Vit hm quy tm USCLN ca hai s nguyn a, b. Trong chng trnh chnh, nhp vo hai s nguyn a, b. Tm v in USCLN ca hai s ln mn hnh. 7. Vit hm tm kim quy trn mt dy s nguyn c sp. Ti liu ging dy- Lu hnh ni b 9 Trang 3

cng chi tit thuat lap trinh

Ki

8. Cc s Fibonacci F[i] c nh ngha quy nh sau: F[0] =1; F[1] =1; F[i] = F[i-1] + F[i-2] (vi i > 1); (VD: 1, 1, 2, 3, 5, 8, 13) Vit hm quy tm s Fibonacci th n trong dy. (Bi ton ny c th pht biu cch khc nh sau: c mt cp th con gm 1 th c v mt th ci. Th con bt u sau khi nui c hai thng. Mi ln ch c 1 cp (cng gm mt th c v mt th ci). Mi thng th mt ln. Hi sau 7 (hoc 8, hoc 9) thng ta c my i th gi nh trng hp l tng th khng b cht v i no cng ). 9. Vit hm quy tnh n!. 10. Vit hm quy tnh f(x, n) = xn. 11. Vit hm quy tnh gi tr ca biu thc: F(x, n) = 2xn/ n! 12. Vit hm quy tnh s ch s trong 1 s nguyn? (v d s 1423 c 4 ch s) 13. Vit hm quy tm s ln nht trong mt dy s n phn t? Chng IV: k thut lp trnh dng mng. 1. Vit chng trnh nhp vo mt mng n s nguyn, sp xp mng theo chiu tng dn, in kt qu ln mn hnh. 2. Vit chng trnh nhp vo mt mng n s nguyn, tnh tng cc phn t chn, cc phn t l, cc phn t chia ht cho 3 v in kt qu ra mn hnh. 3. Vit chng trnh nhp vo mt dy s thc, tm phn t ln nht (tng t, tm phn t nh nht) ca dy v in kt qu ra mn hnh. 4. Vit chng trnh nhp vo mt dy s nguyn. Tnh tng ca cc s nguyn t trong dy v in kt qu ra mn hnh.
Ti liu ging dy- Lu hnh ni b Trang

9 4

cng chi tit thuat lap trinh

Ki

5. Vit chng trnh nhp vo mt dy s nguyn v mt s nguyn c. m s ln xut hin v v tr xut hin ca c trong dy. In cc kt qu ra mn hnh. 6. Vit chng trnh nhp vo mt dy n s nguyn. Tnh trung bnh cng ca dy v in kt qu tnh c ra mn hnh. 7. Mt dy s a gi l c sp tng nu a[i] <= a[i+1] vi mi i; Dy gi l c sp gim nu a[i] >= a[i+1] vi mi i; Dy gi l c sp tng ngt nu a[i] < a[i+1] vi mi i; Dy gi l c sp gim ngt nu a[i] > a[i+1] vi mi i; Vit chng trnh nhp mt dy n s thc, kim tra xem dy c sp hay cha. Nu c sp th sp theo trt t no (tng, tng ngt, gim, gim ngt?). Nu cha th sp xp dy theo chiu tng dn. In cc kt qu ln mn hnh. 8. Cho hai vector x(x1, x2xn) v y(y1, y2yn). Vit chng trnh in ra Tch v hng ca hai vector trn. 9. Cho hai mng a v b c cc phn t u c sp tng. Lp chng trnh trn hai mng trn thu c mt mng th 3 cng sp theo th t tng (bng 2 cch). Hy a ra phng n ci tin 2 cch trn? 10. Cho mt mng a gm n phn t nguyn sao cho a[i] thuc [1, n] v khng c gi tr no xut hin qu 1 ln trong mng. Ch bng 1 vng lp (For(int i=0; i<n; i++) hy sp mng a theo chiu tng dn (hoc gim dn). C nhn xt g v bi tp ny? 11. Nhp mt xu k t vo bin S. Mt ng i trong xu l dy lin tip cc k t ging nhau trong S (khng phn bit ch hoa v ch thng), di ca ng i l s k t c trong ng i. Hy cho bit di ca ng i di nht trong S? 12. Cho mt biu thc gm ton cc du m/ ng ngoc ( v ). Mt biu thc c gi l hp l nu cc du m/ ng ngoc c t ph hp nh khi n t trong biu thc ton hc. V d biu thc: (( )( )) hoc ((( )))( ) l hp
Ti liu ging dy- Lu hnh ni b Trang

9 5

cng chi tit thuat lap trinh

Ki

l, biu thc )( )) hoc ((( )) l khng hp l. Hy cho bit biu thc va nhp c hp l khng? 13. Mt mng a gm n phn t nguyn c gi l hp l nu tt c cc phn t c ch s l u nguyn t. Hy kim tra tnh hp l ca mng a? 14. Nhp vo mt mng a ch gm cc phn t 0 hoc 1. Mt ng i trn a l mt dy lin tip cc phn t 1. di ca ng i l s phn t trn ng i . Hy cho bit: - Mng va nhp c bao nhiu ng i? - Mng va nhp c ng i di nht xut pht t v tr no? - di ca ng i di nht trong mng? - di trung bnh ca cc ng i trong mng? 12. Vit chng trnh nhp vo mt ma trn m x n s nguyn. Tm cc phn t ln nht v b nht trn cc dng (tng t cc ct) ca ma trn. (s dng for sau dng while, do/ while). 15. Vit chng trnh tm phn t m u tin trong ma trn (theo chiu t tri qua phi, t trn xung di). 16. Vit chng trnh nhp vo mt ma trn m x n s nguyn. Tm phn t ln nht (tng t tm phn t nh nht) ca ma trn va nhp. In kt qu ra mn hnh. 17. Vit chng trnh nhp vo hai ma trn A, B c n hng, m ct. Tnh ma trn C = A + B v in kt qu ra mn hnh. 18. Vit chng trnh nhp vo hai ma trn A, B, tnh v in ra mn hnh tch ca hai ma trn . 19. Vit chng trnh nhp vo mt ma trn A c n dng, m ct. In ra mn hnh ma trn chuyn v ca A. (A c gi l ma trn chuyn v ca A nu A[i, j] = A[j, i] vi mi i, j). 20. Ma trn A c gi l i xng qua ng cho chnh nu A[i, j] = A[j, i] vi mi i khc j. Vit chng trnh nhp vo mt ma trn A, kim tra xem A c i xng qua ng cho chnh khng. In kt lun ln mn hnh.
Ti liu ging dy- Lu hnh ni b Trang

9 6

cng chi tit thuat lap trinh

Ki

21. Mt ma trn s, vung a c gi l hp l nu tt c cc phn t nm trn ng cho chnh bng 1, tt c cc phn t nm pha trn ng chp chnh u dng, tt c cc phn t nm pha di ng cho chnh u m. Hy kim tra xem a c hp l khng? Chng V: K thut lp trnh dng con tr 1. Vit chng trnh nhp vo mt mng a gm n phn t nguyn. Sp xp mng theo chiu gim dn (lu s dng tn mng nh con tr v s dng con tr). 2. Hy dng mt vng for nhp vo mt ma trn vung cp n vi cc phn t thc v tm phn t Max ca ma trn ny. 3. Vit hm hon v hai bin thc a, b bng cch s dng con tr (i vo l hai con tr). Vit chng trnh chnh nhp hai s thc a, b. S dng hm trn i ch a v b. 4. Vit hm gii h phng trnh bc nht vi su i vo l a, b, c, d, e, f v 2 i ra l x v y. 5. Vit hm tnh gi tr a thc: f(x) = a0xn + + an-1x + an. vi i vo l bin nguyn n v mng thc a. 6. Vit hm cng hai ma trn vung a v b cp n (s dng con tr). 7. Vit hm tr v ng thi 3 gi tr l tng chn, tng l v tng cc s chia ht cho 3 c trong mng a gm n phn t nguyn. S dng hm trn trong chng trnh chnh. 8. Vit chng trnh tnh tch phn ca f(x) trn on [a, b] bng cng thc hnh thang. Theo , tch phn ca f(x) trn [a, b] bng: h * s. Trong : h l di khong phn hoch on [a, b] thnh n khong. s l tng tt c cc f(a+i*h) vi i t 1 ti n.
Ti liu ging dy- Lu hnh ni b Trang

9 7

cng chi tit thuat lap trinh

Ki

S dng hm trn tnh tch phn trong on [-1, 4] ca: f(x) = (ex-2sin(x2))/ (1+x4). (nghin cu cch a con tr vo gii quyt bi ton).

Ti liu ging dy- Lu hnh ni b Trang

9 8

cng chi tit thuat lap trinh Mt s cu hi v mng

Ki

1. Nhp vo mt mng a gm n phn t nguyn. In ra mn hnh phn t m u tin trong dy (tnh t tri qua phi) v v tr ca phn t m (nu c). Nu mng khng c phn t m no, hy tnh trung bnh cng cc phn t dng trong mng v in kt qu ra mn hnh. 2. Vit chng trnh nhp vo mt dy s nguyn. Tnh tng ca cc s nguyn t trong dy v in kt qu ra mn hnh. Nu mng khng c s nguyn t no, hy sp mng tng dn bng phng php ni bt. 3. Vit chng trnh nhp vo mt dy s nguyn v mt s nguyn c. m s ln xut hin v v tr xut hin ca c trong dy. In cc kt qu ra mn hnh. Nu c khng xut hin trong mng, hy chn c vo gia mng. 4. Nhp mt ma trn vung n x n phn t thc. Gi P[i] l trung bnh cng ca cc phn t trong dng th i ca ma trn v K l trung bnh cng ca tt c cc phn t trong ma trn. Hy tnh v in ra P[i] v K. 5. Nhp mt ma trn vung n x n phn t nguyn. Kim tra xem ma trn va nhp c i xng khng? nu i xng, hy in ra cc phn t trn ng cho chnh ca ma trn ra mn hnh ng thi tnh v in ra tng cc phn t nm pha trn ng cho chnh. 6. mng mng mng Nhp mt mng a gm n phn t nguyn, hy o ngc a v in mng o ngc ra mn hnh. Sp sp li a theo chiu tng dn v in ra phn t ln nht trong a.

7. Nhp mt mng a gm n phn t nguyn. hy sp xp mng a sao cho: cc phn t ln nht u mng, cc phn t b nht cui mng, cc phn t cn li sp tng dn. In mng sp ra mn hnh. 8. Nhp mt mng a gm n phn t nguyn. Mng a c gi l hp l nu tn ti 3 phn t lin tip u l cc phn t l. Hy kim tra xem a c hp l khng? nu khng hp l hy dn tt c cc phn t l ca a ln u mng. 9. Nhp mt mng a gm n phn t nguyn. Sp a theo chiu tng dn bng phng php chn. Xo mi phn t l trong mng a v in mng kt qu ln mn hnh.
Ti liu ging dy- Lu hnh ni b Trang

9 9

cng chi tit thuat lap trinh

Ki

10. Nhp mt mng a gm n phn t nguyn. Mng a c gi l hp l nu n cha ng 3 phn t dng v 3 phn t m. Hy cho bit a c hp l khng? nu a khng hp l hy sp a theo chiu tng dn bng phng php chn. 11. Nhp mt ma trn a gm n dng, m ct. Hy tnh tng cc phn t dng trn ma trn v in kt qu ra mn hnh. Hy tnh tng ca cc phn t xung quanh ma trn ng thi in ma trn va nhp ra mn hnh. 12. Nhp mt ma trn vung n x n phn t nguyn. Ma trn c gi l hp l nu tng cc phn t trn mi dng ca tt c cc dng u bng nhau. Hy kim tra xem ma trn va nhp c hp l khng? In mng va nhp ra mn hnh. 13. Nhp mt mng a gm n phn t nguyn. Hy tch cc phn t chn trong a ra mt mng b, tch cc phn t l trong a ra mt mng c. In c 3 mng ra mn hnh. 14. Nhp mt mng a gm n phn t nguyn. Hy sp xp mng a sao cho cc phn t ln nht v cui dy, cc phn t cn li c sp gim dn. In kt qu ra mn hnh. Cho bit mng va sp c bao nhiu phn t nh nht? 15. Nhp mt ma trn vung a gm n x n phn t nguyn. Ma trn c gi l hp l nu tt c cc dng ca n, mi dng ch cha ng 1 phn t m. Hy kim tra xem ma trn va nhp c hp l khng? in mng va nhp ra mn hnh.

Ti liu ging dy- Lu hnh ni b Trang

1 0 0

cng chi tit thuat lap trinh

Ki

Mc lc
Chng I. tng quan v C++...............................................................2 I. Quy trnh lm vic trong C++.............................................................2 I.1. Cc bc lp mt trng trnh bng C++...............................2 I.2. Cu trc mt chng trnh n gin trong C++.......................3 II. Bin, biu thc, cc lnh nhp xut....................................................5 II.1. Bin............................................................................................5 II.2. Biu thc....................................................................................5 II.3. Cc lnh nhp-xut....................................................................8 a. Cc lnh nhp xut trong IOStream.h....................................8 b. Cc lnh nhp xut trong Stdio.h..........................................10 c. Cc lnh nhp xut trong Conio.h..........................................11 Chng II. Cc cu trc iu khin trong C++.................................13 I. Cu trc r nhnh v cu trc chn.......................................................13 I.1. Cu trc r nhnh..........................................................................13 I.2. Cu trc chn...............................................................................16 II. Cu trc lp.........................................................................................18 II.1. Vng lp vi s ln lp xc nh...............................................18 II.2. Vng lp vi s ln lp khng xc nh....................................22 a. Lp kim tra iu kin trc: ...............................................22 b. Lp kim tra iu kin sau: ...............................................24 II.3. Cc v d minh ho s dng vng lp.........................................26 Chng III. K thut lp trnh n th...........................................28 I. n th v lp trnh n th...................................................28 I.1. Khi nim v phn loi n th.................................................28 I.2. nh ngha v s dng hm........................................................29 I.3. T chc cc hm..........................................................................32 I. 4. Phm vi hot ng ca bin........................................................36 II. K thut quy.............................................................................37 II.1. Khi nim v quy..................................................................37 II.2. Thit k hm quy.................................................................39 Ti liu ging dy- Lu hnh ni b Trang

1 0 1

cng chi tit Ki thuat lap trinh II.3. quy v cc dy truy hi...........................................................41 II.4. Mt s v d v quy.............................................................42 III. K thut truyn tham s...............................................................43 III.1. Khi nim v phn loi tham s.................................................43 III.2. Truyn tham s..........................................................................44 Chng IV. K thut lp trnh dng mng.........................................47 I. Mng mt chiu...........................................................................47 I.1. Khai nim v cch khai bo..........................................................47 I.2. Cc thao tc c bn trn mng mt chiu...................................48 I.3. Cc bi ton c bn......................................................................48 a. Bi ton sp xp mng........................................................48 b. Bi ton tm kim................................................................54 II. Mng hai chiu...........................................................................58 II.1. Cc thao tc c bn trn mng hai chiu....................................58 II.2. Cc bi ton c bn trn mng 2 chiu.......................................60 III. Xu k t mng cc k t.......................................................62 III.1. Mt s lu khi s dng xu k t..............................................62 III.2. Mt s bi ton c th trn xu..............................................65 Chng V. K thut lp trnh dng con tr........................................68 I. Tng quan v con tr...........................................................................68 I.1. Khi nim v cch khai bo..........................................................68 I.2. Mt s thao tc c bn trn con tr..............................................68 II. Con tr - mng v hm.......................................................................69 II.1. Con tr v mng..........................................................................69 II.2. Con tr v hm............................................................................70 III. Cp pht v gii phng b nh cho con tr..........................................73 III.1. Cp pht b nh ng cho con tr..............................................73 III.2. Cp pht li hoc gii phng b nh cho con tr........................75 Mt s Bi tp thc hnh....................................................................78

Ti liu ging dy- Lu hnh ni b Trang

1 0 2

You might also like