k28cntt.files.wordpress.com · ng6n ngip i$pjrjnhv6'i~-.e\ c++ -1/ ~ . _. .' (l~p t(inh...

48
Ng6n ngiP C++ -1 / . _. .' t(inh 1) /4 Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong - f)"i hoc Bach Khoa HN Tai lieu tham khao . o . Ngon ngO' trinh C++ va truc dO' li$u -PGS.TS Vi$t HlJ'ang. o Ky laP trinh C - GS. Ph;;lm Vail <1t - NXB Th6ng ke o The C Programming Language - Ritchie kernighan- Prentice Hall Software series. o Practical C Programming, 3rd Edition - Steve Oualline - O'Reilly o The C++ Programming Language Special 3rd Edition- Bjarne Stroustrup - C++ Creator -Addison · Wesley C++ by Dissection - Ira Pohl (University of Ca"fornia SantaCruz)- Addison Wesley. ChtPang 1 Cac kMi ni$m CO' ban l<1lp trinh 1.1 Phan tich bai toan o V&I cCrng" va m€lm trong tay r6i, ngu&i laP trinh lamg'? o Hoc mot ngon ngfr laP trinh. Van de din giai quyet dm dlJ'Q'c xemxet ky luang. Phan tlch bal toan 113 qua trinh d€l. N6 bao gam cac blJ'ac chinh nhlJ' sau: - Vim de Sal neu nguiJ'i glal quyet chua hleu van de thi tat nhien may tinh cOng khong thegla; qUYet t6t duO'c . CanpMi chQn dlJ'g.c..mOt phuqngan gial quyet va phat trien phuang an . Tlen trinh· glaican duacm6 ta dU'al dang tli'ng bU'6'c tifng bu&cmoL flol khi chung ta gol 18 "Thuilt glai" (Solution algorithm). . . Thuanoim dlJ'0'c1ap trinh va chlJ'cmg trinh dlJ'ac ch;;ly thli. Cu6i cOng thuilt toan dlJ'l;l'c kiem dinh. 1.2 Gial thuat va cac vim de lien quan Glal thuat la gn "Gial thuilt 121 mot danh sach cac chi dan mo ta mot cach chinh xac cac blJ'6'c cua mot qua trinh rna dam bao /8 qua trinh nay Sf! phai ket thuc sau mot-s6 buO'c nhat dinh vO'l cau tra 101 dung cho tifriglrlfaniFlqpClJthe cua mot van & can gial quyet". Mol thuM glai phai dam baD 4 1'l('H:tinh nhlJ' sail: .. " .. .... SlJ' chinh xac. -' Tinhhi$Uqua-DlJ'a ra cau tra liYi dung. Dam bao s'! k€>t thuc. Tong quat hoa. Vi du: Giai thuilt cho giai prllJ'ang trinh bac nh<it BlJ'&c 1: Xet a =0, neu dung tiep tl,lC bU'ac 2, neu sai liep tl,lC buO'c 5. o BuO'c 2: Xet b=O, neu dung liep tl,lC blJ'O'c 3, sal tiep tuc blJ'ac 4. Su&c 3: Hien ih! vo s6 nghi$m va ket thue BlJ'b'c 4: Hien thi vo nghi$m va ket thuc. o BlJ'&c 5: Hien th! nghi$m duy nh<it x=-b/a va ket lhuc. D 1.3 Qua trlnh thiet ke. 1.3.1 flac 103 chlJ'ang trinh. Xuat phat diem cho qua trlnh thiM ke bat ky rnqt chuang trlnh may tfnh n<30 cOng phai.co mot di;ic la phO hO'P ve dQng cua chlJ'ang lrinh d,! dinh th,!c hi$n. Thong thlJ'iJ'ng dac ta cua ChlFO'ng trinh bao g6m: Me ta chLrc nang cua chlJ'ang trinh. Cac yeu ctJu dtJu va dtJu ra. Cac bl$n phap llJ'u trO' dO' li$u. Cac thu tuc quan Iy tep. " M6 ta cac thuat toan xtY Iy dac bi$l duQ'c SLP dl,lng. Dinh d;;lng cua dllU ra. . ' 1

Upload: volien

Post on 04-May-2018

217 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~

Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong - f)"i hoc Bach Khoa HN Tai lieu tham khao . o . Ngon ngO' I~p trinh C++ va ~u truc dO' li$u -PGS.TS Nguy~n Vi$t HlJ'ang. o Ky thu~t laP trinh C - GS. Ph;;lm Vail <1t - NXB Th6ng ke o The C Programming Language - Ritchie kernighan- Prentice Hall Software series. o Practical C Programming, 3rd Edition - Steve Oualline - O'Reilly o The C++ Programming Language Special 3rd Edition- Bjarne Stroustrup - C++ Creator -Addison

· Wesley

• C++ by Dissection - Ira Pohl (University of Ca"fornia SantaCruz)- Addison Wesley. ChtPang 1 Cac kMi ni$m CO' ban v~ l<1lp trinh

1.1 Phan tich bai toan o V&I "ph~n cCrng" va ph~n m€lm trong tay r6i, ngu&i laP trinh c~n lamg'?

o Hoc mot ngon ngfr laP trinh. • Van de din giai quyet dm dlJ'Q'c xemxet ky luang.

• Phan tlch bal toan 113 qua trinh lamh9an.1~t~cJnU:c_cbLti~tdnJhietkhLgjaLquyeUTIotv~11d€l. N6 bao gam cac blJ'ac chinh nhlJ' sau: ­• Vim de ~n gi~iguYeJphai.dlJ'9'i' hi~!J.!J19!.<:::!"b.lhaQ§ilo. Sal neu nguiJ'i glal quyet chua hleu

van de thi tat nhien may tinh cOng khong thegla; qUYet t6t duO'c .

• CanpMi chQn dlJ'g.c..mOt phuqngan gial quyet va phat trien phuang an. • Tlen trinh·glaican duacm6ta dU'al dang tli'ng bU'6'c tifng bu&cmoL flol khi chung ta gol 18

"Thuilt glai" (Solution algorithm). . . • Thuanoim dlJ'0'c1ap trinh va chlJ'cmg trinh dlJ'ac ch;;ly thli. • Cu6i cOng thuilt toan dlJ'l;l'c kiem dinh.

1.2 Gial thuat va cac vim de lien quan • Glal thuat la gn

• "Gial thuilt 121 mot danh sach cac chi dan mo ta mot cach chinh xac cac blJ'6'c cua mot qua trinh rna dam bao /8 qua trinh nay Sf! phai ket thuc sau mot-s6 buO'c nhat dinh vO'l cau tra 101 dung cho tifriglrlfaniFlqpClJthe cua mot van & can gial quyet".

Mol thuM glai phai dam baD 4 1'l('H:tinh nhlJ' sail: .. " .. ....• • SlJ' chinh xac.-' --.-._~

• Tinhhi$Uqua-DlJ'a ra cau tra liYi dung. • Dam bao s'! k€>t thuc. • Tong quat hoa.

• Vi du: Giai thuilt cho giai prllJ'ang trinh bac nh<it a.x+b~O---• BlJ'&c 1: Xet a =0, neu dung tiep tl,lC bU'ac 2, neu sai liep tl,lC buO'c 5. o BuO'c 2: Xet b=O, neu dung liep tl,lC blJ'O'c 3, n~u sal tiep tuc blJ'ac 4. • Su&c 3: Hien ih! vo s6 nghi$m va ket thue • BlJ'b'c 4: Hien thi vo nghi$m va ket thuc. o BlJ'&c 5: Hien th! nghi$m duy nh<it x=-b/a va ket lhuc.

D 1.3 Qua trlnh thiet ke. • 1.3.1 flac 103 chlJ'ang trinh.

• Xuat phat diem cho qua trlnh thiM ke bat ky rnqt chuang trlnh may tfnh n<30 cOng d~u phai.co mot di;ic la phO hO'P ve ho~t dQng cua chlJ'ang lrinh d,! dinh th,!c hi$n.

• Thong thlJ'iJ'ng dac ta cua ChlFO'ng trinh bao g6m: • • Me ta chLrc nang cua chlJ'ang trinh. • Cac yeu ctJu dtJu v~o va dtJu ra. • Cac bl$n phap llJ'u trO' dO' li$u. • Cac thu tuc quan Iy tep. " • M6 ta cac thuat toan xtY Iy dac bi$l duQ'c SLP dl,lng. • Dinh d;;lng cua dllU ra. . '

1

Page 2: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

- -

'1,3 OU;:i u':n!: rhiet ke. • 1 2· :::: Ci)C. k.ieu (Fi:e types)

• 'f $p dnJca cac ban gh, rmit each lap di lap I,ll • Tuy theo w';c t6 ehu'e cac ban gni trong tep. ngucJ'l la ch!a tep til'inh 4 loal khae nhau.

• T$p no, tlep (Serial file) . .. . . ~

• Cae ban ghi duClC ghi n6i tiep nhau theo Irinn tv thai gtan {fa bim ghi vao. VI dl,J cac ban ghi ghi IGii cac phien glao dich.

• T¢p tu<1ln tl,l' (sequential file) • i'1 day cac ban ghi dl1Q'C s~p xep thea tr/nh tv cua m¢t ho~c nhi~u tru6'ng khoa. • T"p nay dlJ'Q'c t~o ra nh6' sAp xep cac t(!p nol tiap. VD: Danh sach sinh v;sn

thea so hi(!u sinh vil1n.

1.3 Qua trinh thiet ke. • 1.3.2 Cac kilJu t$p (File types)

• T$p tu~n tl,J' dlJ'Q'c chi ml,JC (Indexed sequential file) • Thay vi sfJp xep la; toan b¢ tap, ngLl'Ci'i ta tao ra cae lep chi muc va trong cae

t$p nay ehu'a cae tru'o'ng khoa da sap xep di kern VO'l dla chi cae ban ghl trol1g teP chinn.

• Tep truy c;[lp trl,l'c tiap (Direct Access file) . • 8e cO the truy caP nhanh. moi ban ghi se dll'Q'c ghi vao dia chi tao fa nh6 ap

dl,Jng moi eoni;'fhuc- dOl v6'llrlJ'cmg khOa- kh6ng can tep chi muc nhullg ton kh6ng gian lu'u trO'. .

1,3 OuiJ tri nh Ihiet ke • 1.3,3 B'ing quyet dinh (Decision 'fable)

• Sang quyet dinh? • Br;ng quyst olnh !3 mot bang chi ra cae hanh dong khac nhau du'o'c tht,!'c hi&n '-J' .1'

tnea cae :::~Lf :;t~r hQ'p kh~~c nhau Cl'Jel cae dieu ki~n,

1.3 Qua ttinh tniet ke. • 1,3,3 Bang ql,yet dlnh (DecIsion Tabie)

• \/: t1u Gi;3 SLY mot cu'a hang alen llJ' thl,l'C hi$n viec giam grB cho khac l1 ~";(l"f; -::LY3 V30 neu chi K,h~lCh quen tieu tfen $200 fJI;-:~rri gia 20%. rH~u kh6ng thl giam gl8 10'10_ Kil(1:i1 kh6ng qucn thi lieu t,en :;:200 giam git! 10% "ell ,hc'ng thi kh6ng giam gi8,

LU Kiem tra Hllet ,e (Design checking) • S,w khl thlet ke xong, chung ta pha; klem tra tinh dung ailn cua thiet ke C6 ral nhleu phu'ong pl;{lp

khac nhau de kiem tra thiet ke • 1 Dry-run,

• PhU'ong phap nay, ngU'oi klem Ira dfmg gitly bUt de tinh toan va ghi 191cae bu'O'c thU'c hien cua chu'ong trinh dlJ'a thea m6t s6 dfr lillu thv.

• 2, Walk through: • Day lil phu'O'ng philp rna nglJ'oi thiet ke m6 til thret kl! cua minh cho cac dong nghlep va ghi

nMn lai tiit ca cac d6ng gop ykien,

• Val PP nay, eho phep bOc 10 s&m cae van de, llrong lac cac tMnh vlen trong nh6m, dao tao Ian nhau, iil!n trinh on dinh, trnh nhat qUim trong thiet ke,

• Catalytic Checking, ',' . • Ngu6'i thiet ke m6 ta thi~ kl!, d6ng nghi$p JuOn hOi "T~i 5;tOr "Lam the nola?" va se tl,!' boe 10

ra di~m sai trong thiet ke,

• Independent Inspection • 8ay la phuong phap dung nhieu ngLYOi doc I~p kiem ira thiet ke dlf6'i SI,f chi di?o cOa mot

nglJ'&f cO kinh nghi$m

• .. _~ 3c5Ibietke_Jlil:om) dbi tL/'O'nq (O!:ljed-O..ented Design OOD)

Page 3: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

• 1. Xac dinh cac 10;;1i doi tlJ'qng (Cac lop - classes) xuat hii;m trong giai phap.

• 2 Xac djnh va ma ta cac bien the hi$n trong meli 10;;1i doi tlJ'qng.

• 3. Xac dinh cac hanh d(ing cua meli m(it 10;;1i doi tlJ'qng.

• 4. 80i vai meli hanh d(ing, mo ta chli'c nang cua no, cac tham so, cac di~u ki$n tiem quyet va cac h(iu dieu ki$n. •

• Vi dl,J: Gia SLP chung ta dn xay dl,l'ng mot CTrinh tinh diem trung blnh va lay ra diem trung binh cho cac sinh vien. Meli sinh vien trong lap dlJ'qc co cac thOng tin sau: ten SV, 3 diem thi, diem trung binh. • BlJ'ac 1: Xac dinh cac 10;;11 doi tlJ'qng, 6' day co 2 10;;1i doi tlJ'qng la Sinhvien va Lophoc. • BlJ'ac 2: Mc djnh cac bien the hi$n cua meli 10;;1i doi tlJ'qng:

• Sinhvien: TenSV, Diem1, Diem2, Diem3, DiemTB • Lophoc: TenLop,SoSV, DSSV

1.3.5 Thiet ke hlJ'ang doi tlJ'qng (Object-Oriented Design OOD) • BlJ'ac 2: Xac djnh cac bien the hi$n cua meli 10;;1i doi tlJ'qng:'

• Sinhvien: TenSV, Diem1, Diem2, Diem3, DiemTB • Lophoc: TenLop,SoSV, DSSV

• BlJ'ac 3: • Sinhvien:

• Constructor • Destructor • GetName: Tra l;;1i ten SV • SetName: 86i ten SV • GetData: Nh(ip so li$u SV tlr ban phim • CdmputeAverage: Tinh diem TB. • DisplayAverage: Hien thi diem TB.

• Lophoc: • Constructor • Destructor • ThemSV: Them m(it sinh vien vao lap h9C. • XoaSV: Xoa m(it SV kh6i lap h9C.

1.4 Lich Slf phat trlen cua ky thu(it laP trinh • L(ip trinh co cau truc - L(ip trinh thu tl,JC (structural-procedural) • Lap trinh hlJ'ang doi tlJ'qng 2 Ma hinhlJ' l(ip trinh Cac di;ic tinh cua ngon n9Q' l(ip trinh hU'ang doi tLl'qng

1. Data abstraction (Trlru tlJ'qng hoa dCr li$u)

2. Inheritance of properties (SI,J' ke thlra cac thu(ic tinh)

3. Dynamic binding of operations to objects (SI,J' rang bUoc cac thao tac val cac doi tlJ'qng) 8U'qc trinh bay chi tiet {y ph~n sau

1.5 ThLP nghi$m chU'O'ng trinh (testing) • Ch;;1y thCr 103 qua trlnh xac thl,J'c m(it chU'O'ng trlnh tuan theo dung nhCrng di;ic ta ma no dn thl,J'c hi$n. • Testing gam nhCrng bU'ac sau:

• Ch9n bo dCr lieu thLP pM hqp. • Xac dinh ket qua dau ra mong muon. • Ch;;1y chLJ'O'ng trinh • Phan tich ket qua dau ra cua chlJ'O'ng trinh.

• Cac phU'O'ng phap: • Unit testing: Thl,J'c hi$n {y mli'c module • Integration testing (test Iich hqp): dien ra {y mli'c cao hO'n

0

Page 4: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

• Bottom-up testing: Trong phU'O'ng phap nay thi cac module mLPC thap dU''lc tlch h'lP va ch" thCl' trU'6'c, nhU' vf!y ta din mot driver d~ thl,J'c hi~n .

• Top-down testing: Cac module mLPc cao dU'ac tlch haP va ch,;ly thCl' trU'6'c, luc d6 ta din cac dummy module (module gla) amLPc thap.

• System testing: 803m bao roiiflg toan bo chU'O'ng trinh ch<;ly dung. • Acceptance testing: Ki~m tra nghi~m thu lien quan nhieu den ngvai sCI' d\lng (ho coi h~ thong

nhU' hop den). 1.5 ThCl' nghiem chU'O'ng trinh (testing) • Test data (DO> li~u thCl')

• DO> li~u thCl' 103 thanh ph11n cot 16i nhoiim dam bao tinh hi~u qua cua v;~c ch<;ly thLP chU'O'ng trinh. N6 bao gbm 2 nhi~m V\J:

• Chon bo dO> lieu thLP dau vao • Xa~ djnh ket qua mong dai adau ra.

• Cac IO<;li dO> Ii~u thLP: • DO> li~u tl,J' t<;lo: TI,J' t<;lO theo cach thu cong hoi;ic dung bo ngau nhien • DO> li~u sLPa tli dO> li~u th~t

• DO> lieu song thl,J'c sU' (Live data). 1.6 Go roi chU'O'ng trinh (Debugging) • Go loi va ch<;ly thLP luon song hanh cung nhau, go loi 103 qua trinh phat hi~n ra nguon goc vi~c gay loi

.. trong ch<;ly thLP chU'O'ng trinh. • CacphU'O'ng -phapg-o loi--- ­

• Go loi rieng Ie: NgU'ai I~p trinh lam vi~c mot minh de tim ra loi. • Go loi theo nh6m: Mot nhom ngU'ai I~p trinh cung t~p trung trong ra soat ma nguon d~ tim ra

nguyen nhan gay loi. • Go loi tong hap: ChU'O'ng trinh glao cho nhieu ngU'ai, ket qua S8 dU'ac t~p haP 1<;Ii.

• Cac cong Cu go loi: " • In ma nguon • Dl,J'a vao di;ic ta chi tiet cua chU'O'ng trinh • DU'a vao flowchart • In ket qua dau ra. • 06 theo tling cau I~nh va xem gla trj cac bien • TI,J' dong chi ra manh moi va 10<;li loi.

1.7 Cac giai dO<;ln trang chu trinh song cua mot h~ thong • DI,J' dinh ban dau • Nghien CLPU linh kha thi • Phan lich yeu cau cua ngU'ai SLP dung • Phan tich h~ thong • 8i,ic ta h~ thong • Thiet ke h~ thong • PMt triem h~ thong • Ch<;ly thLP • Trien khai • Bao tri • Nh~n xet danh gia. 1.8 L~p trinh hU'ang doi tU9'ng (OOP) va C++ • Tinh triJ'u tU'ang (Abstraction)

Loc ra cac di,ic linh chinh trong khi 10<li be nho>ng cai khong can thiet • SI,J' d6ng g6i (Encapsulation)

an va bao v~ cac cac dCl' Ii$u quan tronglhOng qua mot giao di$n c6 dieu khien • Tfnh modun hoa (Modularity)· .

Chia dol tU'ang thanh cac modun nhe hO'n cho de hieu va de thao tac. • S\f phan cap (hierachy)­

Sap xep ton ti tr<fll tl,J' cho cac doi tuang dl,J'a tn§n moi quan h~ giCl'a chung

Page 5: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

1.8 L?p trlnh hU'Q'og dollU'Q'rr9iOOP1 va C++ • Data abstractii:lfl:- . c~--c-_

.. Cho ta mot dinh nghia vt, doi tU'Q'ng

• Vi dl,J: • NgU'a!buon xe oto nhin xe vai: Gia, thai han bao hanh, mau sac, ... • NgU'ai thQ' may thl nhln xe vai: Kich thU'ac loc dau,loai bugi, ...

1.8 L?p trinh hU'ang doi tU'Q'ng (OOP) va C++ ChU'O'ng 2 HU'ang dan cac bU'ac I?p trinh vai C++

2.1 Tao laP va thl,J'c hi$n mot chU'O'ng trinh C++ • Cac cong CI,J co thlJ SLP dl,Jng trong khoa hoc nay:

• Turbo C++ 3.0 tra IEm • Borland C++ 4.5 tra len • Microsoft Visual C++ 98 (*) Nem SlY dl,Jng Microsoft Visual C++ 98 VI n6 chaY tren moi trU'ang windows dli SlY dl,Jng cOng nhU'tinh nang trong sOan thao tot va lam cO' sa dlJ xay dl,J'ng cac (mg dl,Jng phLrc taP (nhU' I?p trinh mang, k~t noi CSDL, .. ). -Khi tao mot Project mai:

+Chon "Win32 console application" + Chon "new" -> C,,=-+ _sQl[rce file

- Chay chU'O'ng trlnh nhan ctrl+F5

Visual C++ IDE A First Program - Greeting.cpp Greeting Output • Area.cpp #include <iostream> using namespace std; int main() {

II Extract length and width cout « "Rectangle dimensions: "; float Length; float Width; Gin» Length» Width;

II Compute and insert the area

float Area = Length * Width;

cout « "Area = " « Area « " = Length" « Length « " * Width" « Width « endl;

return 0; } 10

_I_

Area.cpp Output ChU'O'ng 3

CO' sa I?p trinh vai ngon ngQ> C Giai thi$u vai net vt, ngon ngQ> laP trinh C • Vao dau nhQ>ng nam 1970 Dennis Ritchie tai ph6ng thi nghi$m Bell dii xay dl,J'ng ngon ngQ> I?p trinh

C khi cung Ken Thompson xay dl,J'ng h$ dit,u hanh Unix, khai dau C dU'Q'c dung tren UNIX.

• Ly do khi~n C tra nen ph6 bilJn la do: • C c6 1U'Q'ng tCP khoa it. • La ngon ngQ> nt,n cho h$ dit,u hanh (Unix)., • N6 dii dU'Q'c chuan hoa (ANSI C). • La ngon ngQ> manh va hi$u qua.

5

Page 6: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

• No 103 ca sa cho cac ng6n ngQ> c++ va Java 3.1 C~u truc cua chlfong trinh C

• Mot chlfang trinh C tieu bieu giim co cac phan sau: • Cac lenh ti~n XLY Iy (Preprocessor commands) • Cac dinh nghia ki~u (Type definition) • Cac nguyen mau h~m (Function prototype) • Cac bien (variables) • Cac ham • fl(ic biet chu y 103 phai co mot ham ten 103 mainO • Vi dl,J: #include <stdio.h:> void mainO {

printf("Chuong trinh dau tienln"); )

3.2 M6 ta ng6n ngQ> • 3.2.1 Dinh danh va tCY khoa (identifier & keyword)

--- • Cae ky tV' co ball dl1Qc sc,dl,JngtreAg chU'~-• Cac chQ> in thlfcyng (Lower case): abc ... z • Cac chQ> in hoa (Upper case) : ABC ... Z • Cac chQ> s6 (Digits) 0 1 2... 9 • Cac ky tl,J' khac: + • f ( ) { )"'[ 1 < > ' # $ % A - & I I; : , . f ?

• Cac tCY khoa auto do goto signed unsigned break double if sizeof void case else int static volatile char enum long struct while const extern register switch continue float return typedef default for short union

3.2.1 Djnh danh va tiY khoa (identifier & keyword) (cont) • Djnh danh -ten (identifier):

• fllf"'C t;;lo nen tiY chu6i cac chQ> cai, chQ> s6 va dflu 9;;lch dlfUi _ • Ten philn biet hoa thlfang • B~t dau bang mot chQ> cai ho(ic dau 9;;lch dlJ'ui _ • Ten phai duy nhat • Kh6ng dlf9'C SLY dVng tiY khoa • Do da'i ten phl,J thu9C h$ thong (cho phep den han 31 ky tl,l'). • Nguyen tac d;;it ten sao cho d€i hieu. • Vi dl,J: my-name, ""your_name, field01

•• Lai giai thich (Comment) • Trong C, lai giili thich nh~m lam sang sua han y nghia cua cac cau I$nh hay mot khoi I$nh

cua chlfong trinh.

• Lai giai thich dlf9'c b~ dau b~ng I" va ket thuc b;}ng 'f, vi dl,J: /* L$nh nhlf sau in ra man hinh dong chO' "Hello, world! " 'f printf( "Hello, world! In");

3.2.3 Cac kieu dQ> lieU • .. - - Cacfiktiai bao, viet bieu thiJ'c va phep gan. • Cac ky tl,J' va kieu char

I,.Ii

I I~ t

" i

! -..I

i:J ! ­

iI:

Ii Ii I"I

t

Page 7: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

-~---

• Kieu dCr lil\'!u int __ __

• Cac kieu nguyen short, long va unsigned

• Kieu d~u phay dong (float)

• Cach khai baa typedef va sizeof

• Cac ham toan hoc

3.2.3.1 Cach khai baa, viet bieu thlic va philp gan • Trallg ~, tat ca cac bien deu nen khai bao adau file, ham, ho;;ic khoi I~nh.

3.2.3.2 Xiiu ki tt! va kieu char • Kieu char chiem 01 byte trang bO nha may linh, do d6 chung llJ'u trCr dlJ'Q'c to; da 256 gia tfi phan bil\'!t. • Kieu char dlJ'Q'c dung de IlJ'U trCr cac chCr cai, cac chCr so, cac d~u cham ciiu cOng nhlJ'cac ki tt! d;;ic

bil\'!t. • Kieu hang ki tt! dlJ'Q'C d;;it trang d~u nhay dan', vi d~ nhlJ' 'A', '1','N', ... • Cac ki tt! dieu khien (bang ben). .

Nh(lp so lil\'!u kieu char va hien thi trem man hinh? • De nhiip so Iil\'!U kieu char, ta c6 the SlY d~ng cac ham trong thlJ' vien <conio.h>: • char getchO tra ve 1 ky tt! tli ban phim nhlJ'ng k6 hien thj tren man hinh. • char getcheO tra ve 1 ky tt! tli ban phim nhlJ'ng c6 hien thi tren man hinh. • De in 1 ky tt! tren man hinh, ta dung dinh d,mg %c, de in dlJ'ai d,mg hexa dung %x, de in dlJ'ai d,mg

so dung %d • Ngoal ra ta con co the SlY dl,mg ham putch(char) 3.2.3.2 Xiiu ki tt! va kieu char .. • Mot so vi d~: 3.2.3.3 Kieu nguyen (integer) • Kieu nguyen co the 103 2 bytes (short) ho;;ic 4 bytes (long) Nhiip so lil\'!u kieu nguyen va hien thi gia tri nguyen tren man hinh • De nh(lp gia tr! nguyen ta dung ham scanfO trong thlJ' vil\'!n <stdio.h> • cu phap:

scanf("Dinh d<Jng", &bien1, &bien2, ... );

• Neu muon nh(lp 56 lil\'!u vao tli 1 xiiu, ta SlY d~ng sscanf(Xau,"Djnh d,mg" , &bien1, &bien2, ... ) Vi du: char "'s="125"; int i; sscanf(s,"%d",&i); printf("i=%d In",i); /" KQ: i=125 "/

• Ngoai ra ta co the dung dinh d;;mg %nd vai n 103 56 vi tri can in ra tren man hinh, neu n Ian han do dai .• can in thi cac ky tt! trang 56 tt! d(ing dlJ'Q'c chen vao phia tmac.

3.2.3.4 Kieu d~u phay dong (floating point) [ Nh(lp 56 d~u phay dong va hien thi tren man hinh o • De nh(lp 56 d~u phay dong ta dung ham scanfO trong thlJ' vil\'!n <stdio.h>

• cll pMp: scanf("Dinh d<Jng", &bien1, &bien2, ... );

• Neu muon nh(lp 56 lieu VaG tli 1 xiiu, ta SlY d~ng sscanf(Xau, "Dinh d<Jng", &bien1, &bien2, ... ) Vi du: char "5="125.788"; double f; sscanf(s,"%f,&f); printf("f=%10.3fln",i); r KQ: f=125.788 "/

3.2.3.5 Cach khai bao typedef va ham sizeof()

7

Page 8: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

• Tv khoa "Iypedef' cho phep ngU'aj l<;ip Irinh khai bao mot cach r6 rang cho cac len mai, no lam chU'ang Irinh sang sua va de o<;Jc han

3.2.3.6 Cac ham toan hQc • Trong C, cac ham ham loan h<;Jc san co Irong IhU' vi$n "malh.h", chang h;:Jn nhU':

• double sqrt(double): ham kflai can • double pow(double,double): ham luy Ihva • double exp(double): Ham mO • double log(double): ham logaril •

Bai l<;ip • Cho ham s6: • Hay vi~1 1 f Irinh C nh<;ip VaG x, n (n nguyen) va tfnh f(x)? #include <stdio.h> #include <math.h> void mainO ( double tU,mau;

floal x; int n; printf("Nhap vaG x:"); scanf("%f' ,&x); printf("Nhap ¥ao 1h");-SCaAf("%d",&A};­lu=5*powl(x,7)*powl(x,5/n); mau=(6*powl(x,3)+powl(x,n)); printf("f(x)=% 10.1 Ofln",tu/mau);

) 3.2.4 Cac kieu hang " • Hang ky ti! (char) dU'9'c bieu dien Irong c!ip dau nhay dan ", vi dl,l: 'a','G', ... • Hang nguyen dU'9'c bieu dien gi6ng trong toan h<;Jc, vi dl,l 125, -56, 90 • Cac hang dau phay dong dU'qc bieu dien theo hal cach:

• Gi6ng toan h<;Jc thOng thU'ang: 12.56, 28.067 • Theo khoa h<;Jc: 12.34e+2

• Cac hang xau ky ti! dU'qc bieu dien trong c!ip dau nhay kep" ", khi hang qua dal de vi~t tren nhieu dong thi dung dau \ de n6i dong, vi du: • "Day la mot hang xau ky tu" • "Day la hang xau voi\ • 2 dong" I'

• De khai bao hang chUng ta sCI' dl,lng cu phap: I! :

• const Kieu Ten_Hang=Gia_Tri; I

• VD: const float Pf=3.14; I 3.3 Cac toan ICP I • Cac loan tCP toan h<;Jc nhU': r :::J

I• + phep cong ,

• - phep teU' !

• * phep nhiin • / phep chia • % phep lay phan d, vi dl,l 8 % 3 se cho ta 2.

•• Cac thaa tac thea bit • & phep va thea bit (AND), VD OxFF & OxF1 -> OxF1 • I Ha!ic thea bit (OR), VD OxOF I OxF1 -> OxFF • A Ha!ic la;:Ji M' (XOR), VD OxFF A OxF1 -> OxOE • Lay phan bu thea bit, VD -0 -> 1 • « Phep djch trai, VD Ox01 « 1 -> Ox02 • » Phep dich pMi, VD OxFF >,.2 ->O)(~F_

8

Page 9: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

3.3 Cac toan tLr • Gia trj logic la dung - true (1) ho~c sai - false (0) • Cac phep toan so sanh (c6 thil' tl,J' lJ'U tien th§p han cac phep toan s6 hoc) 3.3 Cac toan tLr • Cac toan tLr tang giam (increment and decrement operators)

• ChUng dlJ'Q'c SLr dl,mg de tang ho~c giam gia tri cua mot bien len ho~c xu6ng 1 dan vi. • Chung c6 the dlJ'Q'C SLr dl,mg dlJ'O'i d,mg postfix ho~c prefix.

• CU phap: • ten_bien++, ++ten_bien • ten bien-- --ten bien • Du& trlJ'O'~ hay ~au thi gia tri cua bien deu tang len 1 dan vi.

• Chung c6 mil'c d(l lJ'U lien cao trong m(it bieu thil'c. • SI,J' kMc nhau co ban trong postfix va prefix the hi$n qua vi dl,J sau

3.3 Cac toan tLr • Trong C, toan tLr gan dlJ'Q'C sll' dl,mg la "=" khac vO'i PASCAL la ":="

• Ten_bien=bieu_thuc; • Ten_bien=gia_tri; • Ngoai ra trong C c6n cho phep ta gan cLIng mot gia tri cho nhieu bien cLIng m(it luc

• Vi dl,l: • int a,b,c,d; a=b=c=d=100; • a=(b+2)+(c=3); /* tuong duong voi b=2; c=3; a=b+c; */

• Cac phlJ'ang phap gan kMc: • CU phap:

• Ten_bien Toan_tu= bieu_thuc; tlJ'ang dang vO'i • Ten_bien= Ten_bien Toan_tu Bieu_thuc; • += -- *= j;::, %= • »= «= &= A= 1=

• Vi dl,J: j +=3; 1* tuong duong j=j+3; */ • Bieu thil'c dieu ki$n (7):

• CU phap: s=ex1 7 gt1 :gt2; • Neu ex1 nhan gia tri dung (1- true) thl s nhan gt1 neu kh6ng s nhan gt2.

3.3 Cac toan tLr • Trong C d§u "," cOng dlJ'Q'c xem nhlJ' mot toan tll', toan tll' nay c6 trinh tl,J' lJ'U tiem thflp nhM

Vi dl,J int a,b=O,c; a=100,b=200;

• Trinh tl,J'lJ'U lien cua cac toantll'nhlJ' iau(fLi trenxuong, til'-trai quaphai)

3.3 Cac toan tLr • Chuyen dol kieu (type casting)

• Trong C, viec chuyen doi kieu kha Iinh hOi;lt. • CU phap cho chuyen doi kieu nhlJ'sau: D

• (type) (bieu_thuc); 3.4 Cac lenh dieu khien chlJ'ang trinh

• Lenh if ... else • L$nh switch ... case • Lenh while(dieu_kien) ... • Lenh do while(dieu_kien) • Lenh for . • Lenh break thoat mot vang l~p

• Lenh continue • L$nh goto 3.4.1 L$nh if

• CU phap: ,cr 9

Page 10: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

if ( expression) stmt1 ;

hoi;ic if ( expression) •

stmt1 ; else

stmt2; • Khi so cau I$nh tren moi nhimh re Ian han 1 thi di;it chung trong ci;ip dau {}

3.4.2 L$nh switch ... case • Cau I$nh switch sCI' dl,mg de ch9n m(jt hi vai nhanh re dl,J'a tren gia tr! m(jt bieu thli'c nao d6.

• CU phap: switch( expression) {

case constant-expr1: stmt; break;

case constant-expr2: stmt; break;

._- - -~-~~~---~~.~~~ --tdefault: I stmt

}. - . • Chu y: Neu khong co break se dan den cae cau I$nh con lai se bj anh hU'ong.

• Vi dl,J: ., switch( c ) {

case 'Y': printf( "Yes" ); break;

case 'N': printf( "No" ); break;

default: printf( "What?\a" );

}

Baiti;ip ._~~ , ..

• Viet 1 chU'ang trinh C, nhi;ip vao thang va nam va hien thj tren man hinh so ngay trong thang. 3.4.2 L$nh switch ... case • C6 the dung nhieu nhan case cho cung m(jt nhimh nhU': o

sWitch( c ) {

case 'Y': case Ii:

printf( ''Yes'' ); break;

case IN': case In': r 2 flK Cung dong */ printf( "No" ); break;

default: printf( "What?\a" );

}

10

Page 11: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

..... ~~

switch(month) { case 1:case 3: case 5: case 7:case 8:case 12:case 10:

printf("Thang 31 ngay!\n"); break;

case 4:case 6:case 9:case 11: printf(''Thang 30 ngay!\n"); break;

case 2: if ((year % 4) ==0)

printf("Thang 29 ngay!\n"); else

printf("Thang 28 ngay!\n"); break;

} 3.4.3 L$nh while ... • Cau I$nh while dlfQ'c sCI' dl,mg de laP I"i mot I$nh hOac kh6i I$nh khi bieu thlfC logic dung. • CU phap:

while ( expression) stmt;

• Vi du x = 1; while ( (x' 5) >= (x • x) ) {

printf( "%d %d %d\n","x, x'5, x'x ); x++;

} • Vai cau I$nh miy thi I$nh (kh6i !$nh) chi va chi dlfQ'c thl,fc hi$n khi expression la dung!

3.4.4 L$nh do ... while • Cau I$nh while dlfQ'c sCI' dung de lap I"i mot I$nh hOac kh6i I$nh khi bieu thlfC logic dung. • CU phap

do stmt;

while ( expression );

• Vidu: Ing = 0; do {

c = getchar(); Hlng;

} Dwhile ( c != 'In' );

printf( "line length %d", Ing ); 3.4.5 L$nh for (... ) • CU phap: for ( init-expr; cont-expr; loop-expr)

stmt; • Thl,fc hi$n:

• Tinh toan init_expr neu c6 • Tlnh toan cont-expr neu c6 • Neu cont"expr la true hOac be qua thi stmt d!J'Q'c thU'c hi$n It nh§t 1 I§n, r6i sau d6 loop-expr

se dlfQ'c thl,fc hi$n. • LaP I"i 2 blfac tn§n den khi cont-expr la false.

11

Page 12: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

3.4.6 L~nh break thoat mQt vong I~p

• Vai cac vong I~p for, while, do .. while thll~nh break thoat khoi vong I~p 6' muc thap nhat ma t<;li do I~nh break xuat hien!

• Vi dl,J: int c,max=1 0; printf( "Enter up to %d chars", max ); for ( i = 0; i < max; i++ ) {

c = getchar(); if ( c == EOF II c == '\n' ) {

break; ) putchar( 255 - c ); /* encrypt char */

) putchar( 'In' ); 3.4.7 L~nh goto chuyen dieu khien chU'ang trinh • L~nh goto dung de chuyen dieu khien cua chU'ang trinh tai mQt nhan (label) nao do. • CU phap: goto label; .--c-day label co cu phap: ---1-

,-­

• TenJabel: { KhoUenh_cua label; )

• N6i chung la nen h<;ln ctJe dung I~nh nay, vi no la I~nh chuyen dieu khien phi cau truc. #indude <stdio.h> #include <conio.h> void main() { int i,max=10,linelng; char c; printf( "Enter %d Iines...ln", max ); for ( i = 1; i <= max; i++ ) {

Iinelng = 0; while ( ( c = getchar() ) != 'In' ) {

if (c == EOF ) I, i{

goto SickOflt; i ) D ++Iinelng;

) printf( "Length of line %d is %dln",

i, linelng ); ) • SickOflt printf( "All done...ln" ); ) Sai t~p

• 1. Viet 1 chU'ang trinh C, nh~p vilO N 56 (N xac dinh b~ng cach nh(lp tli ban phim). • Tinh gia trj trung binh cua cac 56 dang?

• 2. Viet 1 chU'ang trinh nh~p vao 1 day cac kYO tl,l' va dU'a ra th6ng ke xem c6 baa nhieu chQ> cai, baa nhieu chQ> 56, baa nhieu kYO tl,l' d~c bi~t?

• 3. Cho: 42­12

Page 13: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

;/, / --- -----=­

ii - ­/' A(n)= 1+2 +:3*5+ a + an-2 +ar)-1 +_ao

• V&i aO =1, a1 =2. ---- ­va an = an-2 + an-1

• Viet 1 chU'O'ng trinh nh;W-ll8.un va hi~n thj day so tren man hinh? 3.5 Mang (array) • Mang 113 m(>t kieu cflu truc dO' liE\'!u dung lU'u trO' nhieu ph~n tll' dli' liE\'!u cung ki~u. • Khai bao giong nhU' bien thOng thU'cYng, tn) viE\'!c ta chi ra so chieu va so phan tll' mang • Cac ph~n tll' co th~ dU'9'c khai tGlO gia tri ban d~u, khi dU'9'c kh&i tGlO gi~ tn dau, chieu daU'u tien c6

th~ b6 qua va d~ chU'O'ng trinh dich tU' tinh. • M6i phan tCr mang dU'9'c truy c;flp thong qua ten mang va chi so phan hi (subscript). 3_5.1 Khai bao va khai tGlO mang • Cll phap: data_type array_name[so_phan_tu]; Vi d~:

in! a[1 0]; r Khai bao niang 10 so nguyen *j char mLname[35]; j' Khai m(>t xau 35 ky tU' 'j o Khi muon khai tGlO (initialize) cac phan tll' mang ta da cac gia tli khai tGlO vao dflu {gt1 ,gt2, ... ,gtN }

o V&i phan tli chU'a khai tGlO thi gia trj cua no bang 0. o Khi dU'9'c khai tGlo gia trj d~u, c6 the b6 tham 56 chieu (compiler 58 tU' dong tinh toan)

• Vi dl,J: char white5p[5] = {'In','\t',' ','\r','\f}; r Mang chiYa cac ky tU' trang 'j int prodcod/] = {16, 60,75,101, 17); r Mang chiYa cac ma san pham'j o Ta c6 th~ Sll' d~ng sizeofO d~ xac dinh so phan tll' mang:

int tb31J = {10, 20, 30, 40, 95); r khai tGlO mang"j #define TB3_CT ~sizeof(tb3)jsizeof(tb3[O]))

Trong do sizeof(tb3) cho ta so bytes ma mang cbi~!T1.cbo, sizeof(tb3[0J) cho ta kich thU'&c 1 phan tll' .

3.5.2 Truy c;flp cac phan tCr mango o Cac phan tll' mang dU'9'c truy c;flp dung cu phap:

ten_ma ng[chi_so_phan_tu]; o Chi 56 cOa phan tiY dllU'u tien 113 O. 3.5.3 Mang nhieu chieu • Mang nhieu chieu khai bao tU'O'ng tU' nh mang 1 chieu, chi c6 dieu ta them chieu bang cac ci;ip dau D. o f)~ truy c;flp ta dung cac chi 56 tU'O'ng iYng. o Vi d~:

. - ----LKbai bao.mangA hang, 3 c(>t */ int hah[4][3];

51! phan bo vj tri trong b(i nh& nh hlnh V8 ben. o f)~ duyE\'!t mang nhieu chieu dung vang li;ip long nhau. • f)~ kh6'i tGlo rnang nhieu chieu

int a[2)[3]={{1 ,2,3),{4,5,6}); ~ 3.6 Con tra (pointer) D o Trong chU'O'ng trinh, moi bien chiem m(>t so bytes nhflt dinh va 11,1 6' mot vj tri c~ th~ trong bO nha may

tinh. o Con tre thU'c chat 113 mot IOGli bien di;ic biet dU'9'c Sll' d~ng d~ lU'u dja' chi m¢t 0 nh& Cl) th~ nao d6

hoac lU'u dia chi cua m¢t bii!n khac. o Khai bao: •

Data_Type *pointer_var_name; hoi;ic Data_Type* pointer_var_name;

o f)~ khai tGlO gia trj cua con tr6, ta co th~ cho no tr6 vao m¢t dia chi nh& c~ the ho<;ic lay dia chi cua m¢t bien khac thong qua toan tli Ifly dla chi "&". '

• f)~ truy c;flp vao 0 nh& tGli dia chi rna con tre dang tre tai dung toan tll' tham chieu ngU'9'c ", vai cu phap: •

/13 13

Page 14: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

*Ten_contro = gia_tri; ho;;ic ten_bien=*Ten_contro;

• Vi d~:

int *int_ptr; /* Khai'bao con tro int OJ fioat *fioat_ptr; /* Con tro fioat *j

int a; char b; int *ip=&i; char *cp=&b; int i=3, j=5, *p=&i, *q=&j, or; doubie x; p==&i p==(&i) 1 "&p *(*&p) 3 r=&x r=(&x) illegal 7**p/*q+7 (((7*(*p)))j(*q)+7 11 *(r=&j)*=*p (*(r=(&j)))*=(*p) 15 3.6 Con tro (pointer) (ti<§p) • Ben qmh con tro xac dinh ki~u, ta con co th~ dung con tro kh6ng xac dinh ki~u (void *) d~ iLfU tru dia

chi cua bat ky 6 nha n<'lO. NhLmg lu y vai con tro nay khi truy c(ip 6 nha ma no tro tai can chuy~n doi ki~u-tLl'O'ng (mgt . --- _. .----.

• Ngoai ra ta con co th~ dung cac phep toan so hoc doi vai con tro. int *p1; char *p2; float *p3; ++p1; j* p1 tang h§n 4-4"bytes *j

++p2; r p2 tang len .1-1 byte *j

++p3; r p3 tang len 4-4 bytes *j

#include <stdio.h> void mainO (

short i=1 0, *p1 =&i; char c='A':p2=&c; float f=1 00.8:p3=&f; printf("p1=%p p2=%p p3=%p\n",p1 ,p2,p3); printf("++p1=%p ++p2=\ %p --p3=%p\n",++p1 ,++p2,--p3);

-r­} , 3.7 Moi lien he giua con tro va mang • Ban than ten mang 18 dia chi clla phan tll> dau lien trong mang • Vi d~: D int a[1 ODJ:p; Khi d6 ali] '(a+i) !

I1

3.8 cilu truc struct • £l~ khai bao cllu truc ta dung Cll phap:

I• struct struct_name ;I{ ;1

type1 field1; I type2 field2;

I} [bien co kieu struet name]: • £l~ truy c(ip d<§~eac th~ge tinh ella strucl ta Sll> d~ng toan tll> "."

--._----­

---= -._~--. __~_. ._=_'".=0£-, --,.•. ..==.

Page 15: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

• Ta co th€l kh6'i t<;lO giil tri cho mot biE§n struct gicm~d6ivai mang , ®1-eae1Ji,Hritrong c~p dau { } phiin cach gia tri bllng dilu "," .. - .'- ­

#include <stdio.h> struct emp {

int empno; char ename[35];

}; void mainO {

struct emp e1={100,"Nguyen X"}; printf("ENo;%d, Ename:\ %s\n",e1.empno,e1.ename);

} 3.9 Hqp Union • Vai cau truc struct, moi trU'ong L:hi~m mot vi tri nha khac nhau, d6i vai union chung chia sa cung mot

vung nha . • CU phap khai bao: • union union_name {

Type1 field1; Type2 field2;

}

• Define a variable to hold an in~ger or • a real number (but not both)

union value { long int i_value; r The real number ./ float f_value; r The floating-point number ./

} data; int i; r Random integer ./ float f; r Random floating-point number ./ void mainO {

data.Cvalue = 5.0; data.i_value = 3; r data.Cvalue overwritten ./

----i-- data..i-_value;t'.legal-*L-_ _ __ f = data.Cvalue; r not legal, will generate unexpected results */ data.Cvalue = 5.5; /. put something in Cvalue/c1obber i_value */ i = data.i_value; r not legal, will generate unexpected results */

} 3.10 li;lnh typedef[ • typedef cho phep ta dinh nghia mot ki~u dO' Iii;lu mal cho C.

• CU phap: typedef kieu_dang_co kieu_moi;

• Vi d~ mainO {

typedef int group[10]; r T<;Io ki~u mai "group"'/ group totals; r Dung ki~u mai cho bi~n totals ./ for (i = 0; i < 10; i++)

totals[i] = 0; 1,,.return (0); ,)

15

Page 16: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

3.11 ki§u enum • enum dlJ'9'e dung eho cae bit~!n ma se chi nh~n mot s6 gia tri nhat dinh, cae gia tr! dlJ'9'e lie!n h$ den

thong qua ten. 3.12 Bit Fields va mang cau true struct item {

unsigned int list: 1; /* true if item Is in the list */ unsigned int seen: 1; /* true if this item has been seen */ unsigned int number:14; /* Item number */

};

• Ta co th§ t<;lO m6t mang gam 10 philn ttY co ki§u la eau true item: struet item mang_et[10]; Trang C, vi$e ket h9'P cau true v&i con tra se eho phep ta t<;lO ra nhCmg cau true dCi' lieu rat m<;lnh trang I~p

tr]nhlJ': struet linkedJist {

int node_data; struet linkedJist * next;

}; 3.13 Ham (function) • Trang C, tat ca cae ehlJ'O'l1g trinh con deu dlJ'9'e eill la ham. • Co 2 10<;li ham: tra l<;Ii gia tr! va khong tra l<;Ii gia tr! (void). • £)§ khai bao 1 ham trang C, dung eu phap sau: Kieu_Tra_lai ten_ham(tham_so) {

/* Neu tra Jai gia tli co t1~m return (giatli); */ } Vi du: int eong_so(int a,int b) {

return(a+b); }

• Trong C, cae tham s6 khi truyen VaG ham thlJ'ang la qua gia trj sao ehep, do v~y eho du trong ham co lam thay doi gia tr! eLla no thi khi ket thue ham, gia tr! eLla no van khong thay doi.

• Trong tmang h9'P mu6n thay doi gia tr! eLla tham s6 khi thoat khai ham, ta phai khai bao tham s6 goi qua tham ehieu dia chi (&) ho~e dung con tra!

3.13 Ham (function) • Gia stY trong vi du sau, ta mu6n tang gia tr! thams6t11Cr nhat len 1, tham s6 2 len 2 dan V! khi ket j

! . thue ham thi ham eong_so_1 se eho ta dieu mong muon.

Truy~n tham so mang • £)e truy~n tham s6 co kieu mang, ta dung eu phap D • Kieu_Tra_Ve Ten_Ham(Kieu_PT_Mang aD ,... )

• Vi du: /* Ham sap ~ep 1 mang nguyen a gam N philn tiJ> */ void SX_NoiBot(int aD, int N) {

int i,i,tmp; for(i=0;i<N-1 ;i++)

forU=0;i<N-i-1 ;j++) if(am>aO+1])

{ tmp=aDl;am=aO+1];aO+1]=tmp;} } void mainO { int a[1 0]={9,2,7,4,3,6, 1,12,8,5}, i;

SX_NoiBot(a,10);

~------- ----. ---~~~. ~... __._­ .._..._~-

·.~1.67

I

Page 17: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

return(3.14·bk·bk);

typedef double ('fptr)(float);

void mainO {

fptr x=dien_tich_hinh_tron; printf("%f\n",x(2));

) o Trang C, ham con co the colinh de quy (recursive): Mot ham co the c6 lai 99i d{;m chinh n6. o Vi du: Tinh giai thll'a cua mot 55 N #include <stdio.h> #include <math.h> long giaUhua(int N) {

return(N<=1? 1:N • giaUhua(N-1 )); ) void mainO {

printf("4!=%dln", giaUhua(4)); ) 3.13 Ham (function)-Cac tham so cho ham main() • C cung c:!lp cho ta mot cach de truyen tham 55 cho chU'O'ng trlnh khi ta ch<lY chU'O'ng trinh thong qua

cac tham so cua ham main() • cu phap nhU' sau: main( int argc, char 'argvD ) Trong d6:

"argc" 103 56 tham 55 "argvD" 103 mang chua gia tr! cac tham 55.

NhU'ng argv[O] 103 ten cua chU'O'ng trinh, nhU' v~y gia tri tham 55 bat dau tll' argv[1].

• Vi du: #include <stdio.h> main( int argc, char 'argvD ) { if( argc == 2 )

printf("The argumentsupplied is %sln.... argv[1]); else if( argc > 2 )

printf("Too many arguments supplied.In"); else

printf("One argument expected.ln"); )

3.13 Ham (function)- G9i cac chU'O'ng trinh ngoai . • Ta co the thl,J'C hien cac lenh cua he dieu hanh thong qua lai 99i he thong • De thl,J'C hien, ta dung thU' vien ham <process.h> voi lenh nhU':

D

11' 17

Page 18: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

system("OS command");

• Vi dl,l: #include <process.h> main() /* SYS:C */ {

char *command = "dir"; system( "cis" ); system( command );

}

3.14 Vao/ra vai C • Trong C, stdio.h la thlf vi('m ham cho vao ra. Trong d6 ta SLY dl,lng m¢t s6 ham thong dl,lng nhlf:

• printf("format",args) de ket xu§t dO' li(iu. • scanf("format",args) de nh$p s6 li(iu tlf ban phfm. • Ngoai ra, ta co the dung ham gets(char *s) de nh$p m¢t xi'lu ky tl,l' tlf ban phim. • Chu y: Vao ra vai C, dm lu y den b¢ d(im ban phfm. Khi din xoa b¢ d(im ta dung ham:

• ff1ush(stdin); 3.14 Vao/ra vai C • de nh$p m¢t ky tl,l' tlf ban phim, co the dung:

• int getch() -> nh$n KT khong phan h6i man hlnh. • ---intgetche()'> nh$n KT co phan h6i man hirrtr.-- ­

#include <stdio.h> void main() {

char name[35]; .. . int a;

float f; ff1ush(stdin); printf("name="); gets(name); ff1ush(stdin); printf("a=");scanf("%d",&a); printf("f=");scanf("%f', &1); printf("name=%s, a=%d,f=%3.2f\n",name,a,l);

} 3.14 XLY Iy t(ip (file) vai C • Trong C, de lam vi(ic vai file, ta SLY dl,lng thlf vi(in <stdio.h>. • De khai bao m¢t bien la con tra file, dung cu phap:

• FILE *my-file; • Trlfac khi lam vi(ic vai file, ta can ma chung:

• my-file=fopen("my-file.txt","r"); • Co m§y che d¢ ma file: "r" chi d9C,"W" chi ghi, "w+" ca d9C va ghi, "b" rna che d¢ binary. • Neu my-file==NULL thl co nghia thao tac vai FILE khong thanh cong!

• De vao ra vai file, dung cac ham: • In ra file: int fprintf(FILE *,const char *.....) • d9C vao tlf file: fscanf(FILE *,const char *, ....) • • Ghi m¢t ky tl,l' ra file: putc(irit,FILE *) • D9C mot kY tl,l'tlf file: int getc(FILE 0)

3.14 XLY Iy t(ip (file) vai C • Khi vao ra ache d¢ nhj phan (bfnaryi, dung cac ham sau:

• fwrite(vofd*,KT_PT,So_PT,FILEO); • fread(void*,KT_PT, So_PT ,FILE*); Vi dl,l:

f~ ---,-~-~--------'---==.._-=.=-= 18- -'

.4

Page 19: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

structSV ~ :~-=~_~.

{ int ma_sv; char ten-!3.vQ.Q];

}

struct SV s; FILE of;

fwrite(&s,sizeof(SV),1,f); /' Ghi mot ban ghi SV trong s '/ fread(&s,1,sizeof(SV),f); I' £lQC mot ban ghi vilo s '/

3.14 Xli Iy t~p (file) vai C • £l~ xilc djnh vi tri hi~n thai cua con tre dung ham:

• long fte/l( FILE 'stream ); • . £l~ chuy~n con tre FILE o~n mot vi tri xac ojnh, dung ham;

• int fseek( FILE 'stream, long offset, int origin ); • origin:

SEEK_CUR TCP vi trl hi~n t<;li

SEEK END .~----

- TCP cuoi file. SEEK_SET

TCP o§u file. Vidl,l: Xac dinh kich thlJ'oC 1 File: fseek(f,OL,SEE~END); printf("KT File=%L\n",fte/l(f);

3.14 Xli Iy t~p (file) voi C - Vi dl,l I' ChlJ'O'ng trinh Xli Iy in ra/£lQc vao tCP mot file trang C '/ #include <std/o.h> void in_file(char 'fn) {

FILE of; I' Khai bao bien con tro file '/ int i,j; f=fopen(fn,"w"); I' Mo file & che dO ghi '/ if (f==NULL) I' M& khong thanh cong '/

printf("Khong the mo file!\n"); else r MO'~himh cong '/ {

for(/=0;1<1 O;i++) {

forO=0;j<5;j++ ) fprintf(f,"%10d",j'i+i); r in so j'i +1 ra file '/

fprintf(f,"\n"); I' Xuong dong '/ } fclose(f); r D6ng file '/ printf("Da in xong so Jieu\n");

} }

void doc_fiIe(char 'fn,int a[10][5]) I' Ham dOC file van ban da ghi ra & phtJn tren '/ {

FILE of; int i; char s[1 00]; f=fopen(fn, "r"); I' M& file & che do doc '/

19

Page 20: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

if (f==NULL) printf("Khong the mo file!\n");�

else� (�

for{i=0;i<1 O;i++) (

fgets(s,100,f); sscanf(s, "%1Od%1Od%1Od%1Od%1 Od",a[ij,a[ij+1 ,a[ij+2,a[i]+3,a[ij+4);

} fclose(f}; r B6ng file of� printf("Da doc xong so Iieu\n");�

}� }

void mainO� r ChlJ'O'ng trinh chinh of (�

int a[1 OJ[5j,i,j;� char fn[20]="outpul.txt";�

___in_file(fn); r In so lieu ra file 'f� doc_file(fn,a)-;- ---- . rBQcso·li~u-vab m-an-g-a-"t�

r In mang ra man hinh of� for(i=O;i<1 O;i++)� (�

forO=0;j<5;j++)� printf("% 1Od",a[i]U]);�. .

printf("\n");� }�

} 3.15 Quan Iy b(i nhO'� 3 lo;;!i khong gian nhO'� Ban do b(i nhO' trong 1 chlJ'O'ng trlnh CfC++� Stack dU'Q'c dung de lU'u cac bien cuc b¢� Stack va stack frame� Stack va d~ quy� 3.15 Quan Iy b(i nhO' - C~p phat b(i nhO' d(ing •� Trong C, b¢ nhO' d(ing c6 the dU'Q'C sCi dung mot cach Iinh ho;;!t va hi~U qua thong qua cac ham cap

phat va giai ph6ng b9 nhO' dong nhU' callocO, sizeofO va freeO •� Be dung caliocO dung cu phap:� (void') calloc(unsigned int SoPT,unsigned int KTPT)�

Vi du: ::J� struct date 'date---.pointer;� date_pointer = (struct date ') calloc( 10,sizeof(struct date));� • Be SlY dung freeO, dung cll phap:� free(pointer_var); .� Va dU'O'i day 103 m9t vi du hoan thi~n VB m(it chlJ'O'ng trinh thl,l'C hi~n cac< thao tac vO'i m(it danh sach li€m kel.�

void readline( char buff[] ) (

-~- - int ch, loop = 0;

ch = getcheO; while( ch != '\r' ) { 20

20

Page 21: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

W_=-~f!,'EiJiil;. ~ _~-_'-',_._. /--= '_~~ ';;r#V~- ell; -::=----:n~_ , loop++;'

ch = getche(); ------ }. ,--'

buff{loop)= 0;� }�

struct.node • initialise( void ) • "." { ,

retum( (struet node *) calloe{1, sizeof( struet node .} »; },'" ,

:t"

r free memory allocated for node *' " ,

, 'tOid freenodes( struet node ·headptr ) {

stnict node ·temp;� while( headptr ) {�

temp" headptr->next;� , free( headptr );� headptr = l",e""rn...p4-"__~_ - ;'�

}� ,,<~'~;;'

) .. "'." ':~."

/* chen 1 nut sau nodeplr, retum) =., cling ., .!\t .�tt insert( struct node ·nodeptr ~, •. ::~.

char bufferf20);� struct node ·newptr;�

newptr = initillliseO; r Cap phlM bO nha cho nut mai .,� if( newptr == NULL) {�

--'.,'-- .return 0;'" '.' } else { r £litn drt li$u va them vao DSlHII ·J.-,itJi!

"

newptr->next = nodeptr->next; ,. ,',� nodeptr->next = newptr;� >, '\ ".:'nodeptr ~wptr; ''- .__. ,_,,~

prtntf(inEnter data _>N); .:,.' ~~.- '~~.. ! ~ ':!.' .~.::: 1i'~:-:;" :~'inaq

readHne( buffer ); ("<";;;.<) ," 1··-'.d~~~

strcpy( nodeptr->data, buffer ); , _ r" l::-,r'l

} r".' !t'!'Ji.'

return 1; } ".~ r ~ mOt nut khoi danh Hch -.,�

, vdl'd deI( slruet node ·headPtr. slNcl'noc!e ·nbdeptr )� {�

•I struct node ·delelepointer, ~~ointer; 19$10,. -q';Y:;:l() iill"",' ,,' iI char buffer{20); •

delelepolnler =headptr->i1eXt;� previouspointer =headptr;� r Tim nut cAn xoa .,� pnntf("\nEnter name to be deleted ->");�

21�

Page 22: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

readline( buffer );� while( deletepointer )�

{ if( strcmp( buffer, deletepointer->data ) == 0 ) {

I' Xoa nut do deletepointer tro'l previouspointer->next = deletepointer->next; break;

}

I' In Danh sach 'I� void list( struct node 'headptr }� {

struct node 'Iistpointer;

listpointer =headptr->next;� if( listpointer == NULL)�

printf("lnDanh sach reng.ln");� else {�

while( listpointer ) { printf("Nam~_: %29sln", Iistpointer->dat<:l--1 listpointer = listpointer->next;

}� }�

}�

I' Menu chinh 'I� void menu( struct node 'headp, struct node 'nodep )� {

int menuchoice = 1;� char buffer[20];�

while( menuchoice != 4 ) {� printf("1 insert a nodeln");� printf("2 delete a nodeln");� printf("3 list nodesln");� printf("4 quitln");� printf("Enter choice -->");� readline( buffer );� menuchoice = atoi( buffer );� switch( menuchoice ) {�

case 1 : if( insert( nodep ) == 0 ) printf("\l)I007Insert failed.ln");

break; case 2 : del( headp, nodep); break; case 3 : list( headp); break; case 4 : break; default: printf("lnI007Invalid op!ionln"); break;

} }

} Va cu6i cung la ham main() void main()

L­struct node 'headptr, 'nodeptr;

_

22

Page 23: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

iZ;~/:~--- ==~~;=

;/_-._ ',.,'C headptr = initialise(); =:::::..~~ --=-----=.c� nodeptr ='headptr;-­

headptr->next = NULL; menu( headptr, nodeptr ); freenodes( headptr );

}� Ngon ngCr l(lp trinh va dJu truc dCr li~u v6'i C/C++� Chlfang 3' Cai d;'it ni(it so cau truc dCr Ii~u v6'i C�

Cac n(ii dung chinh • •� 3'.1 Danh sach lien k€!t (Linked list) •� 3'.2 Ngan x€!p (Stack) •� 3'.3 Hang dOOI (Queue) •� 3'.4 Cay (Tree)

3'.1 Danh sach lien k€!t •� DS lien kE!!t la t(lP hoop cac phan tCY d(fli~u kh6ngnen tl,u:: dU'Q',£ k€!!..noi v6'i nhau thong qua 1 lien k€!t

(thong thlfang la con tra). - - ~ - - "' __ •� Cho phep ta quan Iy b(i nha Iinh d(ing. •� Cac phan tCY dlfOOc cheln vao danh sach va xoa khai danh sach m(it cach de dang. •� T<ll moi nut co 2 thanh phan:

•� DCr lieu trong nut • Con tra dE!!n phan tCY k€! ti€!p�

3',1 Danh sach lien k,§t� •� £)e khai bao m(it DS lien k€!t trong C, dung cu phap sau:�

typedef int Kieu_PT; "� struct Node� {�

Kieu_PT data;� struct Node 'next;�

}�

•� £)e them m(it ph':m tCY: •� Cap phat nh6' cho node •� £)a so Ii~u vao node mal •� Cho node lien ket v6'1 danh sach:

•� Them vao dau •� Them vao cuoi •� Chen vao giCra DS.

-� 3':1 Danh sach lien ket� 3'.1 Danh sach lien k€!t doi (Doubly Linked List)� •� Bang cach them vao moi node cua danh sach dan 1 con tra "prev', ta se co danh sach lien k€!t doL •� Vai DS lien k€!t doi, ta co the duYet DS theo 2 chieu khac nhau. •� Thu(lt toan de duYet m(it DS lien k€!t:

•� Gia thiet DS la con tra tai Phan tCY dalfu tien trong DS, thi: Dwhile(DS !=NULL) {�

... Cac thao tac tren Node� DS=DS->next; /* Chuyen qua node ti€!p theo */�

Vi du: Quan Iy Sinh vien /* Chuong Trinh Quan Iy Sinh Vien�

Su dung Sanh sach lien ket� Va co xu Iy FILE�

23

Page 24: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

*1� #include <stdio.h> 1* 1/0 chuan *1� #include <malloc.h> 1* Dung cho malloc() *1� #include <ctype.h> I; Su dung cho toupper() *1� #include <conio.h> 1* Dung cho getche() *1� #include <stdlib.h> /* Dung cho atoiO '1� #include <string.h> /* Dung cho strcmp() *1� typedef struct Sinh_Vien /* Cac ban ghi Sinh vien *1� {

int Ma_SV;� char Ten_SV[35];� char Lop[20];� Sinh_Vien *next;�

};� typedef Sinh_Vien*SV N.0J.e:--­

-._-_.~

void Them_SV(SV_Node &OS,Sinh_Vien SV) ( /* Them SV vao cuoi DS *1�

SV_Node tmp,newSV=(Sinh_Vien*)malloc(sizeof(Sinh_Vien));� *newSV=SV;� newSV->next =NULL; ._----------_._--------- --­if (OS==NULL)

OS=newSV;i*.Phan tu dau tien cua OS *1 else { /* Them vao cuoi danh sach *1

tmp=OS; . while(tmp->next r=NULL) 1* Oung lai 0 nut cuoi cung *1

tmp=tmp->next ;� 1* Ket thuc while, tmp 0 PT cuoi *1� tmp->next =newSV;�

}

Sinh_Vien sv;� char s[1 00];� printf("Nhap rna SV:"); gets(s);sv.Ma_SV =atoi(s);� printf("Nhap ten SV:"); gets(sv.Ten_SV);� printf("Nhap Lop:"); gets(sv.Lop);� return sv;�

}[ void Oisplay_SV(Sinh_Vien const *OS) {�

printf("Oanh sach sinh vien!ln");� while(OS !=NULL)� ( .

printf("%5d%40so/a20sln",DS->Ma_SV,DS->Ten_SV,OS->Lop); DS=DS->next ;

}

SV_Node Tim_SV(Sinh_Vien canst *DS,char "ten)� {�

Sinh_Vien *kq=NULL;�

24

Page 25: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

/�

/ /�

. ..~ ­

while(DS !=NULL) if(stremp(DS->Ten:::SV,ten) 0) {

kq=DS; break;

} else

DS=DS->next ; if(kq!=NULL)

printf("Tim thay!\a\n"); else

printf("Khong Tim thay!!!\a\n"); return kq;

}

booI Xoa...:SV(SV_Node &DS,ehar -ten) {� bool kq =false;�

SV_Node tmp=DS,deINode;� if(DS!=NULL)� {� if(stremp(tmp->Ten_SV,ten)==O) /* Kiel,.Ur~n()de dau tien */

{� deINode=DS; DS=DS->next; free(deINode); kq=true; }

else� /- Duyet cae Node con !ai */ while(tmp->next !=NULL)

if (stremp(tmp->next ->Ten_SV,ten)==O~ _ { deINode=tmp->next ;

tmp->next =tmp->next->next;� free(deINode);� kq=true;� break; }�

else tmp=tmp->next; }

return(kq); }

void GhiJi1e((;haL*fo~SV_t'JodeJ)S)

{� FILE *f=fopen(fn,"w+b");� Sinh_Vien sv;� if (f==NULL)�

printf("Khong mo duoe File!\n"); [ else

{ while(DS!=NULL) {

fwrite(DS,sizeof(Sinh_Vien),1,f); DS=DS->next;

} fclose(f);

}� }�

void DoeJile(ehar *fn,SV_Node &DS) nL--- ,S­{

25

Page 26: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

FILE *f=fopen(fn,"rb");� Sinh_Vien sv;� if (f==NULL)�

printf("Khong mo duoc Fiie1ln");� else� (�

while(fread(&sv,sizeof(Sinh_Vien), 1,1)==1)� Them_SV(DS,sv);�

!close(l);�

}

void main() { ­

struct Sinh_Vien *L1ST=NULL;� char yesno='n',ten[100];� do� {

printf("1. Them Sinh Vienln");� printf("2. Xoa Sinh Vienln");� printf("3. Tim Sinh Vienln"i;� printf("4. In Danh Sach Sinh Vienln");� printf("5. Ghi Danh Sach ra Fileln");� printf("6. Doc Danh Sach tu Fileln"};� printf("7. Thoat chuong trinhln");� printf("Hay chon (1 ,2,3,4,5,6,7}:");yesno=toupper(getche(}};�

sWitch(yesno)� (� case '1': Them_SV(L1ST,Nhap_SV()); break;� case '2': printf("Go ten SV can xoa:");gets(ten);� if(Xoa_SV(L1ST,ten)} - --­

printf("Da xoa!ln");� else�

printf("Khong thay/ln");� break;�

case '3': printf("Go ten SV can tim:");gets(ten);� Tim_SV(L1ST,ten);� break;�

case '4': DisplaLSV(L1ST); break;� case '5': Ghi_File("danhsach.dat",L1ST); break;� case '6': Doc_File("danhsach.dat",L1ST); break;� default:�

printf("Hay chon lailln");� } /* End of switch() *1�

} while(yesno !='7'); ) /* End of main() "I 3'.2 Ngan x.§p (Stack) •� Ngan x~p la mot t~p hgp cac ph~n til c6 trinh tl,l', cilc ph~n tll' ra/vao stack t<li m('>t di~m 99i la "Dinh

ngan x~p" (stack-top). ~ . •� Cac phtm tu vao/ra thea nguyen t~c LIFO - Vao sau ra trvac (Last-In-First-Out). •� Stack c6 cac thai> tac cO' bfm la push,pop va con tra "toP'. •� Ngoai ra c6 th~ c6 cac ham khac nhLP:

•� initialize() khai t<lo stack •� isEmplyO

-,-----­--­26

-----.-. ---. ---=,_u -­0.-.•. _

..--­ --~--_.

Page 27: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

, /

Ngan xep co rang kh6ng?

•� £)e xay dl,mg m(it ngan xep co the dung: • Mang ket hQ'p vO'i m(it bien nguyen� "top" lu vi tri tren cung cila ngan xep.� •� Danh sikh lien ket vO'i thu(it toan: chen vao dflul xoa kh6i dflu danh sach�

3'.2 Ngan xep (Stack) - Cac Crng dl,mg cila Stack� •� Stack co rat nhieu Crng dl,mg trong thl,J'c te va II' thuyet va d~c biet 103 \rong khoa hQc may tinh. •� M(it trong nhO'ng (mg dl,mg cila stack ta co the ke den 103 chuyen doi va tinh toan gia tri cho m(it bieu

thCrc. Trong toan hQc ta co the bieu dien m(it bieu thCrc dlfO'i d<;lng •� Trung to (infix):�

Toan_Hi;m9 Toan_TCY Toan_Hi;m9�

•� H('lu to (postfix):� Toan_H<;lng Toan_H<;lng Toan_TCY�

3'.2 Ngan xep (Stack) - Cac (mg dl,mg cila Stack •� Trong cach bieu dien Postfix, ta khong thay xuat hien cac dau ngo~c ( ).

•� Cac toan tCY:� • + c(ing - Trv * Nhan 1Chia dlfQ'C ket hQ'p tv trai sang� •� Toan tCY ham mO $ thi dlfQ'C ket hQ'p tv phai sang.

•� Cach tinh bieu thvc postfix: •� Neu dQc dlfQ'C toan h<;lng, day no len stack •� Khi g~p toan tCY, dQc ra 2 toan h<;lng tren cung cila stack va thl,J'C hien tinh toan vO'i toan tCY. •� £)ay ket qua tren len stack va tiep tl,JC thl,J'c hien den khi dQC het bieu thCrc.

•� Ngoai ra stack con co kha nhieu Crng dl,Jng khac nO'a. Vi dl,J dlfO'i day Crng dl,Jng stack trong vi$c chuyen doi CO' so:�

Vi dl,J: £)oi CO' so dung Stack� #include <stdio.h>� #include <malloc.h>� typedef struct Node� {�

int data; Node *next;�

};� typedef struct Stack� {�

Node *top;� };� vold Khoi_Tao(Stack &s)� {�

s.top =NULL; }

D void Push(Stack &s,int pt) {�

Node *tmp=(Node*)malloc(sizeof(Node));� tmp->data =pt;� if(s.top ==NULL) /* Phan tu dau tien *1� {�

s.top =tmp;� s.top->next =NULL;�

} eise /* Phan tu tiep theo *1� {�

,� 27

Page 28: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

- ---------

tmp->next =s.top; s.top =tmp;

}

}

boo! isEmpty(Stack s) {

return (s.top==NULL); } void Pop(Stack &s,int &pt) {

if (lisEmpty(s)) {

pt=s.top->data ; s.top=s.top->next;

} }

void mainO /* Quy dol co so 10 ra nhi phan oJ {

StacK S; Khoi_Tao(S); int a,pt,du; printf("Nhap vao so he 1O:");scanf("%d",&a); while((aJ2»0) {

Push(S,a%2); a=aJ2;

}� Push(S,a);� printf("Bieu dien duoi dang nhi phan:\n");� while(!isEmpty(S))� {�

Pop(S,pt); printf("%1d",pt);

} printfnn");

} 3'.3 HangC<Tr(Queue) • Hang dqi la mQt taP hqp dQng gam cac ph~n tCr vaoJra mQt cach co trat tl,!'. Thong thlfang vi$c vaolra

tw'in theo nguyen tac FIFO (First-In-First-Out Vao trlfac ra trlfac).

• Trang hang dqi co 2 diem la "front" - d~u hang dqi va "rear" - cuoi hang dQ'i.

• Khi 1 ph~n tCr mai ra nhaP hang dqi ~i "rear" ta gol fa "enqueue" va 1 ph~n tCr rai hang dqiti;li "front" ta goi 103 "dequeue". '

• Khi cai dat hang dqi co the sCr dung: • Mang k~t hqp vai 2 bil~n nguyen "frant" va "rear" de di~u khien vi tri d~u va cuoi danh sach. • Danh sikh Iiem ket vai thuat toan them vao cuoi, xoa tiili d~u danh sach se cho ta hang dqi

nhlf mong muon. •

• Ngoai hang dqi thong thlfang FIFO, thl,!'c t~ con co hang dQ'i co tfnh dem mLrC d¢ lfU lien clla cac ph~n tCr Iuc do ta co "priority queue".

3'.4 Cay (tree) •� Cay la m¢t truc dCP lieU dac bi$t bao gam 1 hOac nhi~u ph~n tCr dCP li$u lien k~t vai nhau thong qua

con tro. Cac ph~n tCr dCP lieu nay goi 103 cac nut (Node) clla cay.

•� MQt nut dO'n-1e-ia m¢t cay!

•� Cay tong quat bao gam:

~=

---- ~ ­

•�

28

Page 29: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

•� Mot nut g6c r va.__ _ _ •� Khong tbn t~i ho(jc tbn t~i nhi~u cay con (sub-tree) T1,T2, ..Tk. Tron-g-cf6 gOG clla nhCl'ng cay

con nay dU'Q'c n6i vai g6c r. •� G6c clla cac cay T1,T2, .. ,Tk dU'Q'c goi la cac con (children) clla r . •� r dU'Q'c goi la cha (parent) clla cac g6c nay. •� Cac nut dU'Q'c sinh ra til 1 cha 99i la anh em (siblings).

3' .4 Cay (tree) •� Nut 103 (leaf): La nut ma t~i do khong tbn t~i cac cay con. •� Dang dan (Path): Dang giCl'a 2 nut 1 va k la th(P tv n1,n2,... ,nk sao cho ni la cha clla ni+1 v6'i i=1-k. •� Duy$t cay (Tree-Traveral):�

C6 3 phU'O'ng phap duy~t cay CO' bim� •� PreOrder:

•� Vieng th'am nut goc r •� Vieng tham 6$ quy cling thuat toan PreOrder cac cay can T1,T2, ... ,Tk.

•� PostOrder: o� Vieng tham d$ quy cac nhanh T1,T2, ... ,Tk theo thuat toan PostOrder. •� Vii!!ng tham nut g6c r.

•� InOrder: o� Vii!!ng tham d$ quy nhanh trai clla ria T1 theo thuat toan InOrder •� Vii!!ng tham nut g6c r. •� Vieng tham d$ quy cac nhanh con I~i theo thuat toan InOrder.

3'.5 Cay nhj phan (binary tree) ~

o D~ng dO'n gian nhat clla cay la cay nhj phan. o fJinh nghia� Cay nhj phan gam co:�

•� 1 nut (goi la goc - root) va •� Cac cay con trai (left) va cay con phai (right), ban than cac cay con nay cung 1a cay nhi phan.

o� ca.y nhi phan co trat tv: •� Gia tr; khoa clla tat ca cac nut 6' nhanh trai nho hO'n gia trj khoa clla nut goc. •� Gia trj khoa clla tat ca cac nut & nhanh phai Ian hO'n gia tr! khoa clla nut goc. o� Ban than cac ciiy con trai va phai cOng la nhCl'ng cay nh; phan CO trat tU'.

-3~5Cay nhi phan (binary tree) struct TreeNode; typedef struct TreeNode* PtrToNode; typedef struct TreeNode *Position; typedef struct TreeNode *SearchTree; typedef PtrToNode Tree: o struct TreeNode {

ElementType Element;� Tree Left;� Tree Right;�

}:

PreOrder void pretrav(PtrToNode tree) {

if (tree != NULL) {� printf("%dln', tree->Element); 1* Tham root */�

L1 29�

Page 30: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

pretrav(tree->Left); /* Tham nhanh trai */� pretrav(tree->Right); /* Tham nhanh phai*/�

} /* end if */� } /* end pretrav */�

InOrder� void intrav(PtrToNode tree}� {

if (tree != NULL) {� intrav(tree->Ieft); r Tham nhanh trai */� printf("%dln", tree->info); r Tham goc */� intrav(tree->right); /* Tham nhanh phai */�

}r end if */� } rend intrav */�

PostOrder� void postlrav(PtrToNode tree)� {

if (tree != NULL) { ---iWstlfavftFee >Ieft); /* Thamnhanh trai */ __ u

posttrav(tree->right); r Tham nhanh phai*/ printf("%dln", tree->info); r Tham goc */

}r end if */� } rend postlrav */�

N$lon ngCY l(ip trinh va cau truc dCY li$u vai C/C++� ChLYO'ng 4.Ngon ngCY C++�

Cac n(ii dung chinh� •� 4.1 Lap va d6i tLYqng (Classes & Objects) •� 4.2 SI,J' ke thiJ'a (inheritance) •� 4.3 Ham aD va ham b"n (virtual & friend functions) •� 4.4 Tinh da hlnh (polymorphism) •� 4.5 Stream va File •� 4.6 San mau (Template) •� 4.7 ThLY vi$n mau chuan (Standard Template Library - STL) •� 4.8 Cac giai thu(it (Algorithms) •� 4.9 Cac cau truc li;ip (Iterator) •� 4.10 Cong-te-nO' (container) •� 4.11 £l6i tLYqng ham (Object Function) 4.1 £l6i tLYqng va lap ( Objects and classes)

,•� 4.1.1 Giai thi$u khai quat ve C++ :.----­•� 4.1.2 Khai baD lap. " •� 4.1.3 T"o d6i tLYqng tiJ' lap 'i D

•� 4.1.4 Con tra den d6i tLYi;Yng clla lap. •� 4.1.4 £lieu khilln truy ci;ip cac thanh vien clla lap. •� 4.1.5 Lap long nhau. 4.1.1 Gi6'i thi$u khai quat ve C++� • •� Vao/Ra ban phim va man hinhLY: Trong C++, thl,J'c hi$n cac vao/ra chuan, ta dung cac ham clla d6i�

tLYqng "cout" va "cin" trong thLY vi$n vao ra chuan <iostream.h> hoi;ic dung template chuan� <iostream>:� #include <iostream.h>�

hoi;ic� #include <iostream>�

using namespace std;� •� Xuat s6li$u ra man hinhLY: )0

30�

Page 31: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

i

/� cout « Bien_hoac_hang_chua_soJieu « endl;� Toan tiY "«" la tdan tiY "£lily ra" .�

•� Nhiip so li~u tli' ban phim:� cin »Bien_Can_nhap_so_lieu1 » Bien_Can_nhap_so_lieu2;� Toan tiY "»" la toan tCP "Lay VaG tli'''�

Khai bao h~ng va bien: Vi~c quy dinh ve ten cOng giong nhlJ' C, nhlJ'ng C++ cho phep khai bao h~ng va bien� t<li bat ky diem nao trang chlJ'ang trinh.�

4.1.1 Giai thieu khai quat ve C++ 4.1.1 Giai thi~u khai quat ve C++ •� Vai xau ky tl,J', khi nhap nen dung ham cin.getline(Bienyau,Do_Dai); •� Ngoai ra, de ket xuM l<"ii ta dung cerr vai cac toan tiY « giong nhlJ' cout. •� De dinh d<lng cho so Ii~u dau ra, ta dung mot so ham sau: •� (N~m trang <iomanip> )

•� cout« setw(So_VUri)« So_Lieu_Can_ln; •� cout« setprecision(So_Chu_So)« ,So_lieu; •� count « oct « so_lieu; •� count « dec « so_lieu; •� count « hex «so lieu'

•� Trong C++, ngoai cach du;;-g 16'1 giiii thich nhieu dong giong C, ta con co the dung l6'i giiii thich tren� mot dong dung cu phap: _� •� Lenh; II L6'i giiii thich •� VI dI,J:

•� cout « "Ten ban:" ; cin »ten; II Nhap ten sinh vien

4.1.1 Giai thi~u khai quat ve Ct+' •� Trong C++, ngoai cach ep kieu cua C, ta c6 the dung cach chuyen db! kieu linh d<lng :

•� static_cast<Kieu_£llch>(Kieu_Nguon)

• Vi dI,J:� static_cast<char>('A' + 1.0) II char -> 'B'� •� Trong ANSI C++, ta gaP mot khai ni~m mai la "namespace" - Ten vung. namespace dung de nh6m�

cac ham va cau truc phiin anh ve cung 1 chu de VaG cung mot vung lam vi~c. (Trong Java co khai� ni~m tlJ'ang tl,J' la Package). .� mylib.h�

namespace NS1 {�

int Ten;� vOid Nna>npttO~; -­

}

namespace NS2 {

Dint Ten;� void Nhap();�

} mylib.cpp

#include "mylib.h" •#include <iostream>�

using namespace std;� void NS1::Nhap()� {�

cout « "Go ten 1:" ; Gin » Ten; } void NS2::Nhap()

31

Page 32: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

{� cout « "Go ten 2:" ; cin » Ten;�

}�

Vi dl! d€lm 56 tll' xuat hi!in trang 1 xau� #include <iostream>� #include <iomanip>� using namespace std;� int dem_tu(char *5)� {�

int wc=O; 1156 tCP· Word count� int cw=O; II £lang d€lm 1 to' • counting word� while(*s!=O} II Duyet toan bo xau vi 1 xau k€lt thuc vai ky tl,!' 0� {�

if(!(*s>='O' && *5 <='z')) II G<'iP ky tl,!' d<'ic bi!it� { if (cw==1) II K€lt thuc d€lm 1 to'�

{� wc++;

cw=O;� }�

Vi dl! d€lm 56 tll' xuat hi!in trang 1 xau ky tl,!'� else�

cw=1; II £lang d€lm 1 to'� s++" II Chuy.§n sang ky tl,!' ti€lp thea�

•}� 'if (cw==1) II T0' cu6i cung�

wc++; return(wc);

} II K€lt thuc ham d~m to' void main() {

char st[1 00];� cout« "Hay nhap xau ky tu:" ;� cin.getline(st,100);� cout« "So tu ia:" «setw(10)« dem_tu(st)« endl;�

}

4.1.2 Khai baa lap •� Lap ia g1? •� Khai baa lap trang C++ •� Cac 109i ham thanh viem trang lap

Khili ni!im v~ lap •� Ta co th~ xem lap 103 khuon mau cho cac d6i tLJ'qng sinh ra tCP lap. •� Trang moi mot lap co 2 thilnh phtm chfnh 103:

•� DO' li!iu (Data) - Cac bi~n - ~ac thuoc tinh clla lap. • Thong thLJ'ang day la cac bien phan anh tri;lng thai cOng nhU'thu9c tinh clla lap.

•� Cac ham thanh vien - Hanh dOng -PhLJ'O'ng thvc clla lap. Cac ham thanh vien th.§ hi(m cac hanh dong noi ti;li clla lap cOng nhLJ'cac giao ti€lp cho phep

lap giao ti~p vai ben ngoai va cac lap. khac. Khai baa lap trong C++ class Ten_Lap { 32

private:

Page 33: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

/ Cac_Bien_Rieng;� Cac_Ham_Rieng;�

protected:� Cac_Bien..Jlrotected;� Cac_Ham_protected:�

public;� Cac_Bien_Public:� Cac_Ham_Public;�

}; Vi dl,J khai bao lap� class SinhVien� {

private:� int Ma:� char Ten[35]:�

pUblic;� SinhVien(} { }� -SinhVien(}{}� void Nhap(}� {

cout « "Nhap ma:"; cin » Ma:� cout « " Nhap ten:" ; cin.getline(Ten,35);� }� void HienThi(}� { cout« "Ma;" «./vIa« endl «"Ten:"« Ten; }�

}� Khai bao n(ii dung cac ham thanh vien ben ngoai lap •� f)e khai bao cac ham thanh vien ben ngoai khai bao lap ta dung cu phap: •� Kieu_Tra_L<;Ii Ten_Lap::Ten_Ham(Khai_Bao_Tham_S6) •� Vi du:

Ham thanh vien h~ng •� Trong khai bao lap, C++ cho phep khai bao cac ham thanh vien la ham h~ng. Ham h~ng co o~c Oiem

khong OlfQ'C phep lam thay obi cac bien thanh vien cua lop. Tuy nhien trong nhCfng trlfCrng hQ'p oac biet van co the thay obi neu lien he gian tiep thong qua con tra oen obi tlfQ'ng lop.

•� f)ekhai bj!lo m9J hElm thanh vien la Mm h~ogJaJhemJ0'klloa-.kODSLvao sau khai baa ham thOng thlfCrng:

4.1.3 T<;Io o6i tlfQ'ng tCf lap. •� De ti;IO o6i tlfQ'ng tCf lap, ta col lop nh cac kieu dCf lieu oii biel:

•� Ten_Lop Danh_Sach_Bien. o•� Vi dl,J: •� SinhVien sv1,sv2: •� sv1.Nhap(}: •� sv1.HienThi(}: •� sv2=sv1; •� sv2.Nhap(}:

4.1.4 Ham t<;lo (constructor) va Ham huy (destructor) •� Ham t<;lO •� Ham t<;lO la 1 ham thanh vien cua lop ma no se OlfQ'C tl,J' o(ing gQi oen khi 1 o6i tlfQ'ng mai OlfQ'C sinh

ra tCf lop. •

33

Page 34: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

•� Ham ti;lo trung ten vai ten lap va khong co gia trj tra ve tv ham, nhU'ng no co th§ nh<:in tham so.� Thong thU'ang ta dung ham ti;lO de chen vao nhCrng doan ma nti~m khai ti;lo cac gia trj cho doi tU'O'~, mai sinh ra. '�

•� Ham t,lO buoc pMi la ham public! •� Vi dl,J:�

class Stack� {�

private:� int data[100];� int top;�

public:� StackO { top=-1;} II Khai ti;lo stack reng�

} 4.1.4 Ham ti;lo (constructor) va Ham huy (destructor) •� Truy€m tham s6 va kh&i ti;lo gia tr! cho cac bien thanh vien cua Jap. • Trang C++, co mot cach de kh&i t?lO gia trj cho cac bien thanh vien cua lap nhU' sau:� class SinhVien� {� private:�

.-----tffi-Ma;--.-..- ---- .--. --- --- --­float DiemTB;

public: SinhVienO{} II Ham t?lo m(ic djnh kh6ng nh<:in tham so SinhVien(int mMa):Ma(mMa){} 1/ Ma nh(in gia trj mMa kh&i t?lO SinhVien(float mDiemTE;I):DiemTB(mDiemTB) {} SinhVien(int mMa,float mDiemTB): Ma(mMa),DiemTB(mDiemTB) {}

};

void mainO� {�

SinhVien svO, sv1 (100), sv2(9.5),sv3(200,8.5);�

} Trang vi d~ tren ta da khai bao 4 phien ban khilc nhau cua ham t?lo, khai nhU' v<:iy cho ta cac phien ban khac

nhau cua ham chOng (Thu<:it ngO' cua ky thu<:it nay 103 Function Overloading - Ch6ng ham) 4.1.4 Ham t<;lO (constructor) va Ham huy (destructor) •� Ham t?lO sao chep (copy constructor) •� Ham t<;lO sao chep cho phep ta sau khi t?lO doi tU'O'ng mai, S8 sao chep toan be> n¢i dung cua doi

tU'O'ng tham s6 vao d6i tU'O'ng mai nay: oclass Stack { private:

int data[100]; int top;

•public: StackO{top= -1;} Stack(const Stack &) 0 II flay cOng 103 ham t?lo sao chep m(ic I1jnh void Push(int x)

{ if (top<99)� datal++top]=x;�

} - int PopO� {if(top>=O) return(data[top--]);}�

34�

Page 35: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

• • •

~~... fL·f:-... - • Ham nay sao ch~p nQi dung clla "nguon" vao "dich" va tra v~ "dich"· KichthlJ'CYC clla nguon <= -~ - Kich thlJ'CYC dich~K

Vi d~:

char city[10]="Hanoi";� char st[1 0]; strcpy(st,city);�

4.1.7 Kieu dO' Ii$u string •� Ham linh dQ dai xau: •� int strlen(char' s) •� Tra v€: dQ dai xau •� Vi d~:

•� char 's="Hello" ; •� cout «strlen(s); II? 5

•� Ham so simh xau: •� int strcmp(char' sl, char' s2) •� tra v~ gia tri:

•� ==0 neu sl biing s2 t~i tCPng vi tri ky tl! •� <0 neu s1 nhci han s2 •� > 0 neu sl Ian han s2 •� Vi dl): char* s1="hanoi",*s2="Hanoi" , ·s3="Hanoi1"; cout« strcmp(s1 ,s2) ; II?� cout « strcmp(s2,s3); I/?�

• Ba; taP: Viet I~i cac Mm CO' ban cho xli Iy xau?� Lap string chu1m trong C++ .� •� C++ dinh nghia slln lap"xau chu1m niim trang <string> template:�

#include <string>� using namespace std;�

•� Lap string chU<3n dlJ'9'c dinh nghia vai day du cac ham t~o, ham huy va rM nhi~u ham khac cho phep� xli Iy xau mQt cach thuan ti$n:� •� ham lengthO tra ve dQ dai xau. • Ham replace(ViTri_dau,So_KyTu,Xau_ThayThe).� Thay the mQt s6 KTI! trong xau.� •� Ham substr(ViTri_Dau,So_KyTu) tra v~ mQt xau con •� Ham swap(string s2) ham nay hoan d6i noi dung cua xau va xau s2. •� Ham find("Xau con",Vi_Tri_BaU)au) tra v€: vi tri tim thay clla Xau con trang xau hi(in t~i (Vi tri

linh tCP 0).

Lap string chuan trong C++ •� Ham at( Vi_Tri) tra v~ ky tl,l' t~i Vi_Tri. •� Ngaai ra, trong lap string con djnh nghia san cac toan tli cha phep ta thaa tac tren xau nhlJ':

•� Gan xau: string sl,s2; sl=52; •� CQng xau: s3=sl+s2;

I•� So sanh xau: 51==s2, 51< 52 s1> s2, 51 != 52, ,..

Vi d~: string_class.cpp� #include <iostream>� #include <string>� using namespace std;� void mainO� {�

string 51 ("Hella"),s2;� cout « "00 dai sl =" « 51.lengthO « endl;� s1.replace(1 ,4,"ELLO");� cout « "Xau s1:" « s1 « end';�

3c

0

Page 36: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

---- ----------

} 4.1.5 Cac lap long nhau (Nested class) •� C++ cho phep ta khai bao cac lap long nhau, ta dung lap long nhau khi cac thanh vien clla mot lap 103

cac cioi tU'Q'ng nhU'ng chi xuat hi$n trong pham vi cua lap ma ta ciang xay dl,J'ng. . • Vi du:� class Lophoc� {

public:� class Sinhvien� {

private:� int Ma; char Ten[20];�

public:� void Nhap(};� void HieQthi():�

}; void ThemSV();� void InDSSV();� private: int Slso; Sinhvien DSLop[100];�

}; -----� --'---- - -- ---. ---­

4.1.6 Cac thanh vien tinh (static member) •� Trang C++. khi mQt thanh viem clla lap dU'<;1c khai la static thi n6 se dU'Q'c truy caP d~m boi t~t ca cac

dol tU'Q'ng cling sinh ra -t8d¢p d6, hay thanh vien ci6 dU'Q'c chia se cho t<!lt ca cac doi tU'Q'ng sinh ra tlr lap .

•� Khi m6t thanh vien dO' li$u 103 static-,n6 phai dU'Q'c khai ben ngoai lop nh bi~m thong thU'ang trU'oc khi sCr dung.�

class Web� {

private:� static int count;�

public:� Web(}{count=O;}� void Visit() .� {

cout « "Visitor No:" « ++count; }

}

int Web::count; II Kh&i t.,o trU'oc khi dung void mainO {

Web w1,w2,w3;� w1.VisitO; II Visitor No:1� wZ,Visit(}; II Visitor No:2� w3. VisitO; II Visitor No:3�

} 4.1.7 Ki~u dO' Ii$u string •� Trang C, ta dung <string.h> hOac •� <cstring> •� using namespace std; •� Trong C++, ta dung:

•� <string> •� using namespace std;

•� Cae ham cO' ban eua <string.h> •� char' strepy(char* dich, char' nguon)

35

Page 37: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

-=::0----­--// -----_.

-,,-C",,--,--=='­

/� ~

s2=s 1.s ubstr(~fL~2;;);,:;' ;:;=;;;=;:;=;couP:.:' "Xau s2: ' « 57« endl; . - -----­

.� s2.swap(s1);� cout « s2.find("LO") « endl;� cout « s2.at(0) « endl;� s1="Ha noi";� s2="mua thu";� string s3=s1 + " " + 52, s4="Ha no;"; •� cout « "Xau s3:" « s3 « endl;� cout« "KO so sanh s1 va s4="« (s1==s4)« endl;� cout« "KO so sanh s1 va s2="« (s1<s2)« endl;�

}

Con tre to'i d6i tU'9'ng va quan Iy b6 nhO' vO'i C++ •� ta c6 the d!nh nghia con tre to'i d6i tU'9'ng nhU' cac con tre thOng thU'O'ng, nhU'ng trU'O'c khi dung phai�

khai t<;lO cho con tre mot cach h9'P IY.� •� Trang C++, cac con tre c6 the dU'9'C cap phat bO nhO' dong biing cach dung cac toan tll' "new" :

•� new Kieu; •� new Kleu(Gia_tri_KhoUao); •� new Kieu[So_Phar:8Ul;--._­•� Vi dt,J:

•� int .p,""q; •� p=new int(5); II Con tra integer khai t<;lO gia tr! 5 •� q=new int[10]; II Mang integer 10 phiin tll'.

•� De giai ph6ng cac vung nhO', dung toan tll' "delete" : •� delete Con_Tro; il Xoa con tre to'J.1 pt1.~n tli' •� delete 0 Con_Tro; II Xoa mang

•� Vi dt,J: delete p; delete[] q;

Vi dt,J: Lap khoang cach Distance

4.2 SI!' k~ thiJoa (inheritance) •� SI!' k~ thiJoa la ky thu;;it cho pMp t<;lO ra lap mO'i (LO'P dan xuat - derived class) tiJo nhCl'ng lap da co�

s1\n (lO'p co 50- base class).� •� St,J' ke thiJoa la ky thu;;it cho phep SLr dt,Jng l<;Ii ma chU'ong trinh (code reuse) mot cach hi$u qua!

.'

•� Lap dan xuat co the dU'9'c sLra doi biing cach them cac thanh vien mO'i, sLra dbi thanh vien hi$n co� (thong qua Mm ao - virtual function) va sll'a doi truy c;;ip.�

•� .- Debieu dien moi quan h~ giCl'acac lap co so va lap dan xual, la'dung so db phan cap dU'9'C djnh-'­nghia bai UML (Unified Modeling Language), ad6 dO'ng quan h$ co chieu mOi ten di tiJo 1O'p dan xuat (1O'p dU'oc chi ti~t hoa) den 1O'p co so (lap tong quat hoa).

4.2 SI!' ke thiJoa (inheritance) 4.2 SU' k~ thiJoa (inheritance) 4.2.1 Khai bao 1O'p dan xuat 4.2.1 Khai bao 1O'p dan xuat •� y nghia cua k~ thiJoa public, private, protected: 4.2.1 Khai bao 1O'p dan xuat� 4.2.2 Vi dt,Jlap Nguoi va cac dan xuat� #include <iostream>� #include <string>� #include <iomanip>� using namespace std;� II Lop co so Nguoi� class Nguoi�

37

Page 38: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

{ private:�

string Ten; II Ten ngu6'i� string Nghe; II NghE'! nghi<;'!p� booI Gioi_Tinh; II Gi6'i tinh true:nam, false: nCr�

public:� string Nghe_Gia_Truyen; II NghE'! gia truye!n neu co� void Nhap(string t,string ng, bool gt,string ng_gt)� II Ham nh$p so Ii<;'!u� {Ten=t;Nghe=ng;Gioi_Tinh=gt; Nghe_Gia_Truyen=ng_gt;}� void HienThi(} II Hien thi thong tin 'IE'! ngU'6'i� {cout « "Ten toi la:" « Ten « endl;� cout«" Toi lam nghe"« Nghe« ", toi la"« (Gioi_Tinh?"Nam":"Nu")« endl;� cout«" Nghe Gia truyen:"« Nghe_Gia_Truyen« endl;� }�

};�

class CanBo:public Nguoi II Lap can b¢ danh cho ngU'6'i di lam co lU'ong {

-private: fioat Muc_Luong; II MCrc lU'ong

pUblic: void Nhap(string t,string ng,boo! gt,string ng-'lt,f1oat ml} II Ham nh$p {Nguoi::Nhap(t,ng,gt,ng_gt); Muc_Luong=ml;} • void HienThi(} II Hien thi thong tin can b¢ {

Nguoi::HienThi (); II Goi den ham dU'Q'c thCPa ke cout «" Muc luong cua toi la:" « setprecision(1 O} « Muc_Luong «endl; II Hien thi mLPc

1U'D'ng }�

};�

class SinhVien:private Nguoi II Lap sinh 'lien { private:

int MaSV; II Ma sinh vie!n ------" string Truong; 1/ TrU'ang dang hQc

public: void Nhap(string t,string ng,bool gt,string ng-'lt,int ma,string tr) 1-­{Nguoi::Nhap(t,ng,gt,ng-»t);[ MaSV=ma; Truong=tr;} void HienThi(} {

Nguoi::HienThi (); cout «" Ma SV:" « MaSV« endl«

"Toi hoc truong:" « Truong « endl; }

};

class Nguoi_Lang_Nghe:protected Nguoi II NgU'cYi lam nghtl truyen thong { public:�

--void Nhap(string t,string ng,bool gt,string ng-9tr�

38

Page 39: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

(Nguoi::Nhap(t,ng,gt,nlLgt );} /~ void HienThi() {

Nguoi::HienThi 0;� cout«" Nghe:"« Nghe_Gia_Truyen« " la cua rieng toi ! "« endl;�

}� };�

void main() II ChLfang trinh chinh {

Nguoi ng; II ng la ngLfai binh thLfang� CanSD cb; II cb la can b¢� SinhVien sv; II sv la sinh vien� Nguoi_Lang_Nghe ngJn; II ngJn la ngLfai lam nghe truyen thong� ng.Nhap("Ng V A"," ban bao " ,true,""); ng.HienThiO:� cb.Nhap("Ph T B"," dia chinh ", false,'''',1500000};cb.HienThi();� sV.Nhap("Le H C","sinh vien",true,"", 100,"DHSK HN");sv.HienThi();� ng_ln.Nhap("DaD Th X"," duc dong ",false," duc dong"); ng_ln.HienThiO;�

} 4.2.3 SI,f ktJ thCfa va ham t;;lO •� Khi m¢t dol tLfang mal dLfgC sinh ra, ham t~o dLfgc thl,fc hi$n theo trinh tl,f:

• Thl,fc hii'm ham t<;lO lap co sa ThLfC hi$n ham t<;lO lap dan xuat •� Cac ham tao khOng tham so trong lap co sa se dlfQ'C tl,f d¢ng goi dtJn khi mot dOl tlfgng mai cua lap

dan xuoflt dlJ'Q'c sinh ra. •� Nhlfng vai cacham t<;lo co tham so thi khOng dlfac tLf dong ktJ thCfa trang lap dan xuM ma b<;ln phal

go; ch<;ly trDng ham t<;lO d'LfgC djnh nghia trong lap dan xuM •� fJ~c bi$t khi ton t<;li cac ham t<;lD chong nhau, thi trang lap dan xuilt bu¢c phili khai bao va khai tao

goi ch<;ly l<;Ii cac ham t<;lO lap cO'sa!� Vi du: Ham t<;lO va Sl,f ke thCfa� #include <iostream>� #include <string>� using namespace std;� class P� { private:�

string s;� public:�

P(){s="Noi dung_P";}� P(string x){s=x;}� void Hien(){cout « s « endl; }�

);� Vi du: Ham t<;lO va Sl,f ke thCfa� class C:public P� { /I pUblic:�

C():POO� C(string x):P{x){l/s=x;l/??? sai vi s la private cua P}�

};� void main()� {�

P p1;� P p2("Noi dung P2");� C c1;�

. C c2("Noi dung C2"); II error� p1.Hien();�

39

Page 40: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

· p2.Hien();� c1.HienO;� c2.Hien();�

}� 4.2.3 SI,J' ke th0'a va SI,J' hqp thanh • SI,J' hqp thanh 103 vi$c khai bao mQt lap ma thanh vien cua no lai 103 mot doi tU'qng cua lap da co.� class A� {�

private:� int data;�

public:� A(int m):data(m){}� void Disp(){cout« data; }� int getDataO{return data;}�

}; class B� {�

private:� A a;�

public:� B(int x):a(x){} ..... _ _ _� void Display(){cout « "B:" « a.getData(); }�

}; .� 4.2.3 SI,J' ke th0'a va SI,J' hqp thanh •� Ke th0'a va hqp thanh deu d?t d6i tU'qng da co vao trong long d6i tU'qng maL •� Ta dung ke th0'a khi mu\?n SLY dl,mg lai ca nhO'ng ham glao tiep cua lap da co. •� Ta dung hap thanh trong trU'Crng hqp mu6n dung lap da co 103 thanh vien private va tl,J' ta dinh nghia�

cac giao di$n cho lap maL� 4.3 Ham 130 va ham ban •� 4.3.1 Ham 130. •� Ham 130 103 cac ham dil hinh thili va co the dU'qc xac djnh Iuc chaY chU'ang trinh. Tinh da hlnh nay�

991 103 da hinh thuan khi8t.� •� T0' khoa "virtual" d?t trU'ac cac ham am chi ham nay 103 ham 130 . •� Vi$c xac djnh ham nao S8 dU'qc thl,J'c hi$n cho mot ham 130 hoan toan dong. Dang dan gian nho!lt 103�

lap co So' co 1 ham 130, lap diln xuo!lt cOng co mot ham vai ten wang tl,J'.� •� Con tra co kieu 103 lap co So' hoan toan co the tra vao doi tU'qng lap dan xuo!lt Khi hai lap co cung mot�

ten ham thanh vien nhU'ng vai n(ii dung khac nhau, ta mu6n khi tra sang doi tU'qng lap dan xuo!lt, ham� tU'ang (mg cua lap dan xuM phai dU'qc thl,J'C hi$n. £lieu nay chi xay ra khi ham thanh vlen do trong�

. iap-ro So' dU'qc khai bao 103 'virtual'! •� Chung ta hay xet 2 vi dl,l sau: 4.3.1 Ham 130.

o •� Khi cO virtual trU'ac say() thi: .

•� From Base:Hello •� From Derive:World • From Derive:Surprise! • .. Khi khong co virtual tmac say() thi: •� From Base:Hello •� From Derive:World •� From Base:Surprise!

•� Thong thU'ang ham ao hay SLY dl,lng d6i vai cac lap truu tU'qng (abstract classes).

#include <string> 40 --_.-._-=~----=-:----

40�

Page 41: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

._~

.. & ­

~~--- ~~~~~:~;:~i6tm;~ ,� class Nguoi II Lap trliu tU'9'ng

{ public:

virtual void ChaohoiO=O;� II Ham 030 thu~n khiet� };

class BacSy:public Nguoi� (� private:�

string Ten; public:�

BacSyOn� BacSy(string mTen)� {Ten=mTen;}� void ChaohoiO� {cout « "Toi la bac sy, ten toi la:" « Ten « endl; }�

};

void mainO (�

Nguoi *ng;� SinhVien *s=new SinhVien("Nguyen Hoang Thang");� BacSy *b=new BacSy("Ion That Tung"); ,� ng=s; II ng trallao SinhVien� ng->ChaohoiO;� ng=b; II ng tra vao BacSy� ng->Chaohoi 0;�

)� Ham huy 030 (virtual destructor) va ke thlia 130 (virtual inheritance)� •� Ham huy lap cO' sa c6 the dU'9'C khai 113 virtual, khi d6 c6 the dung con tra lap cO' sa de hu~ doi tU'9'n,

iap dan xuatl •� Khi kh6ng muon sao chep doi tU'9'ng lap CO' sa vao doi tU'9'ng lap dan xuat, ta dung ke thlfa 030 vai�

cu philp:� •� class DanXuat: virtual public CoSo�

{�

} #include <iostream>� using namespace std;� class Base� {�

public: virtual -BaseO

Ilvirtual destructor { GOut « "Huy Baseln"; }

}; class Derv : public Base {

public: -DervO

{ cout « "Huy DervIn"; } };

int mainO {

41

Page 42: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

Base> pBase = new Derv;� delete pBase;� return 0;� }

4.3.2 Ham b;;ln.� • •� Ham ban cho philp m¢t ham kh6ng phai la thanh vien lap co the truy caP cac thanh vien dU'Q'c bao�

vi? cua m¢t lap.� •� Mot ham Iii ham ban clla clla mot ham thanh vi€ln lap, thi ham thanh vien clla lap pha, dU'Q'c khai�

bao ia friend�

•� Ham thanh vien clla m¢t lap co the la ham b;;ln clla ham thanh vien clla hlP khac. •� Khi tat ca cac ham thanh vien clla c1 la ban clla cac ham thanh vien lap c2 thi ta khai bao c1 la ban�

clla c2 nhU' sau: .� •� class c1 { ... }; • class c2 { friend class c1; .... }�

Vi dl,J ham ban� #include <iostream>� using namespace std;� class A� { private: int data;�

public:� friend void myFriend(A x);� void Display(){cout « "Data=" « data «endl;} };�

void myFriend(A x)� { x.data=100; x.Display();}� void main{)� {

A a;� myFriend(a);�

}

4.4 Dinh nghTa toan tiJ> cho xiJ> Iy lap •� Trang CH, ta co the djnh nghTa cac toan tiJ> toan hoc cho xiJ> Iy lap nh + - >I va cac toan tiJ> so sanh�

nh><== ...� •� Gia_Tri_Tra_L;;Ji operator Toan_TiJ>(Tham_So)

#include <iostream>� #include <iomanip> ,�using namespace std; ,.�

class Complex� { oprivate:

float r,i; II Phlln thl,J'C va phlJn ao public:

Complex()O Complex(f1oat mr,f1oat mi):r(mr),i(mi)O Complex operator +(Complex c) II Toan tiJ> cong hai s6 phti'c {

Complex tmp(r+c.r,i+c.i);� return (tmp);�

} void DisplayO { GOut« r« «i<0)7'-':'+' ) « ((i<O)7-i:i )« 'j' « endl;}

}; I - ~

void main{)

_....=.42­42�

Page 43: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

- ----

~---~------ --- ---"

------- ._--­

------==­{ Complex c1 (5.5.-2.5),c2(4,-2),c3;� c3=c1+c2;� c1.Display();� c2.Display();� c3.Display();�

} 4.5 Cac ban mau (template) va l('lp trinh t6ng quat� • o� C++ sli' dl,mg tli khoa template cung cap cho ta tinh oa hinh thOng qua tham s6: Cung 1 oO;;1n ma co

th~ OIJ'(J'c sli' dl,mg vO'i nhi~u ki~u dCi li$u khac nhau thong qua tham s6 la ki~u din xli' IY. o� C++ cung dp cho ta 2 d;;1ng template la ham va lop. ChlJ'o'ng trinh dich se lam nhi$m VI,J CI,J th~ hoa

oi~u trliu tlJ'(J'ng trong khai bao template. Ki~u tham s6 se OIJ'(J'c thay th~ b§ng ki~u thl,J'c SI,J' khi ch;;1y chlJ'ong tri nh.

4.5.1 Ban mau ham (function template)

4.5.2 Ban mau 1O'p (class template) o� Khi m(it 1O'p ma cac thanh vien dCi li$u co ki~u thay 06i, thay vi khai bao nhi~u phien ban cua 1O'p, ta

dung ban mau 1O'p (class template). o Cach dung:� template <class Type>� class Ten_Lop�

. { private: Type x; };

Vi dl,J: Thu('lt toan sap xep nhanh "quicksort" o� Ta xet 2 vi dl,J cho thu('lt toan quicksort sau:

o� Vi du 1 khOng dung template (chi sap xep mang nguyen) o� Vi du 2 dung template va co th~ sap xep hau het mang cac 10;;1i dCi Ii$u khac nhau

Vi dl,J 1:� /* ChlJ'ong trinh thl,J'c hi$n thu('lt toan QuickSort�

tren mang nguyen ./� #include <iostream>� #iRClude-<iGmanip>� using namespace std;� int Partition(int AD,int 10,int hi); // Khai bao lieu o~ ham� // Thl,J'c hi$n ho<in 06i 2 s6 nguyen� void swap(int &x,int &y)� {

int tmp=x;� x=y;� y=tmp;�

}

/* Ham sap xep 1 mang nguyen 10: chi s6 oau cua mang hi: chi s6 cu6i cua mang ./

void QSort(int AD,int 10,int hi) {

if(lo>=hi) // Mang 1 phan tli' hOac 0 phan tli' return;

int mid=Partition(A,lo,hi); // Tim vi tri chia mang

43 43

Page 44: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

___� #lDclude <string>� using namespace std;� template<c1ass T>� void swap(T ' i, T 'j)� {

T temp = 'I; *j = *j;� 'j = temp;�

}

template<c1ass T>� void qUicksort(T' from, T' to}� {

T'mid;

if (from < to - 1) { mid = partition(from, to}; qUicksort(from, mid); quicksort(mid + 1, to);

}� }�

template<c1ass T>� T' partition(T' from, T' to)� {

T' front = from; T' back = to .. 1;� T compare;� compare = 'front; II Gia tri cua mid� ++front; II Oich front sang phai 1 ph<3n tlJ'� while (front < back)� { Ildjch phai front cho cac vj tr! dung�

while ((front < back) &&(compare > 'front)) ++front;� IlDjch trai back cho cac vi trl dung� while ((front < back) &&(compare <= 'back)) --back;�

II Hoan doi 2 vi tri kh6ng dung vi tr! swap('front, 'back);

}

liChen gla tr! compare-va0 vitnpnu hQ'p if (compare >= 'front) {

swap('from, 'front);� return (front);�

[ } else {

swap('from, '(front - 1)); return (front - 1);

} } II Ket thuc ham partition� void malnO� {� int A[5]={5,4,8, 12,3}; II Mang nguyen 5 ph<3n tlJ'

II Mang xau 6 ph<3n tlJ' string B[6]={"JG" "OF" "FG" "AB" "CD" "AA"}'• I • • , ,

quicksort(&A[0],&A[5]); quicksort(&B[O],&B[6]);

45

Page 45: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

II lhanh 2 ph<'m� QSort(A,lo,mid-1 ); II Quicksort nu-a trai� QSort(A,mid+1,hi); /I Quicksort mi'a phili�

} ,

II Ham lim vj tri mid chia mang Ihanh 2 philn� II Sao cho cac philn Ill' ben Irai < A[mid]� II cac philn Ill' ben phai > A[mid]� inl Partilion(inl AD,int lo,inl hi)� { II Chon gia Iri A[lo] (val) lam gia Iri�

II cho philn Ill' chia (mid)� II Sau do lim ra vi Ir! aung cho philn Ill' nay� II f: chi s6 cho cac philn Ill' ben Irai mid� II I: chi s6 cho cac philn Ill' ben phai mid� inl val=A[lo],f=lo+1 ,I=hi;� while(f</) II f va I chlfa Irung nhau� { while((f<l) && (val >A[f])) f++; II dich phai dan f�

while((f<l) && (val <A[I])) 1--; II dich Irai dan I� swap(A[f],A[I]); 112 vi Iri ciln do' cho�

II vi val<=A[f] va va[>=A[I]�

If(val >=A[f]) II Vi Iri dung cho mid la f {

swap(A[lo],A[f]);� relum(f);�

} " else II Vi Iri dung cho mid la (f­

1)� {�

swap(A[lo],A[f-1]);� relurn(f-1 );�

}

} II k,§t1huc partilion

II In ra mang nguyen� void prinl(inl AD,inl lo,inl hi)� {

for(inl i=lo;i<=hi;i++)� coul «setw(5) « An];�

} DII Chlfong Irinh chinh

vojd mainO { inl X[7]={5,3,2,9, 1,4,4); II Mang 7 phan Ill'

prinl(X,O,6);� coul « endl;� QSort(X,O,6);� prinl(X,O,6);� coul « endl;�

}

Vi d\l 2� IIQUICKSORT sll'd\lng lemplate� #include <ioslream>� #include <iomanip>�

44

Page 46: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

• for(int 1=0;1<5;i++)

cout « setw(5) « A[I] ;� cout« endl;,� for(i=0;1<6;1++)�

cout « setw(5) « Sri] ;' cout « endl;�

} II K€>t thuc ham main()� Cac toan tCY chong» va «� •� Ta co th€l khai bao chong cac toan tCY »va « voi ml!C dich viJO/ra voi cac du truc dCi' Ii$u do ngLJ'ol

dung dinh nghia. •� Khi khai bao ch6ng cac toan tlY » va « can lu ynhCi'ng diem sau;

•� Toan tiY « nhan 2 tham s6; ·1 ostream& va m¢t c~u truc ADT va tra ve ostream&. •� Toan tLi » nhan 2 tham 56: 1 istream& va m(it du truc ADT va tra ve istream&.

•� Ta xet vi dl,l sau:

#include <iostream.h>� class Emp� { private:�

int ma;� float luong;�

public:� Emp(){ma=O;luong=O;}� friend istream& operator »(istream &in,Emp &x);� friend ostream& operatqr «(ostream &out,Emp xl;�

};

istream& operator »(istream &in,Emp &x) {

cout « "Ma:" ; in » x.ma;� cout « "Luong:"; in » x.luong;� return in;�

} ostream& operator «(ostream &out,Emp x) {

return(out « "Ma:" « x.ma « endl« "Luong:" « x.luong « endl); } void main() {� ,-

Emp e; cin»� e; cout« e;

} 4.6 ThlJ' vi$n mau chuan(Standard Template Library-STL) •� Cac thlJ' vi$n mau chuan STL cung cap kha nang laP trinh tong quat cho rat nhieu cau truc dO' li$u va

cac thuat toan co ban. •� STL cu~g cap cho chung ta 3 thanh phfm co ban:

•� container: nh stack, list, deque, vector, ... •� iterator: SI,f khai quat hoa khai ni$m ve con tro, chung tra I1tm cac d6i tU'9'Jlg n<3m trong 1

container. • algonthm: Cac thuat toan co b~1n de xCY 1'1 cac cllu truc dii' Ii$u niim trong container.

Container •� container bao gam 2 IOi;li:

•� container tuan tl,f (sequence container): vector, list, deques. •� container lien k€>t (associative container}: sets,-'TlI,Jltisets, maps, multim~s,.=_

46�

Page 47: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

I

"' • - Ch(tD-9 ta duy$t container dung iterator. ... _. __C~~;Tt!hanh Viell w ban ChD tat ca cac 10<;li container:

a intsizeO: tra ve s6 phiin tG nam trong1 container. -~- 0­ gOOl elllptyO. kiem tra xem 1 container ronghay kh6ng. .~---

L­amax_sizeO: s6 phan tiY wc'oai 1 container chli'a oU'Q'c a-·- beginO: tra VB 1 iterator oen phan tiY oau trong container.

o end(): tra VB 1 iterator oen phan tiY cU6i trang container.� a rbegin(): tra VB 1 iterator oen phan tiY cu6i tl ong container.� • rendO: tra V€ 1 iterator oEm phan tiY oau trong container.� a lind(): Tra VB phan tG, oau'u tien trang container bang gia tr! tim kiem� •� searchO: tim klem cac phan tiY tU'O'ng Cmg bang vO'l cac phan tiY trong 1 container khiic. •� copYO: Sao chep n6i dung 1 container sang 1 container khac.

•� swap(): hoan oo;.gia trj 2 phan tiY trang 1 container. •� merge(): Tr6n 2 container oa sap xep oe t<;lO ra 1 container mO'; cOng oU'Q'C sap xep. •� accumulate(): Tra VB tong cac phan tG' trong 1 container (y 1 dai nao 06. •� push_backO: them 1 phan lU' vao cuo; container. • push_lront(): them 1 phan tiY VaG oau container.� ~ __.insertO: chen 1 phan tG' VaG 1 container.� a reverse(): Dao ngu'CYc trinh til cac phan tiY trong 1 container.� M6t s6 vi du ve STL�

4.7� \:210 ra Fi,re vO'i C++� C++ cu~g cap eho t2 nl-,O'n9 lo'p dac biet giup eho vleG quan Iyfile (ghi ra file, doc vao tiY Iile).�

e-� esc lo'p v30/ra nhLl':� ostream: Ghi dO' lieu ra man hinh.� ofstream: Ghi dO' lieu ra file.� istream Doc dO' lieu vao tli' ban ph im�

•� Ifstream Doc dO' lieu VaG tu' file. • Cac lo'p tren au'o'c sU' dung vo'i cac toan tu' chong» va «.� • - Cac lo'pvao/ra nam trong <iostream> va <fstream>� a _. M61 quan he glO'a cac lo'p vao/ra khii phu'c tap. Ta co the hinh dung-thong '<U3"SO' 00 sau:� 11'16 hinh phan cap cac I6'p vao/ra� Cac file vao/ra chuan� Cac che 06 m& file� Cac ham thao tac vO'i file tren C++� o� f'Jlo' file:[� DDe mo' file dung ham thanh vien open cua lo'p iostream:

• M& file & che o¢ ooc: void open(const char', int = ios::in, Int prot = filebuf::openprot);

•� M& file A· che d6 ghi: void open(const char', int = los::out, int prot= filebuf::openprot);

Sau khi thao tac xong vo'i file, oong fife bang ham: void c1oseO: • De >:ik dinh 1 file eo m& thanh c6ng hay kh6ng ta dung ham booI is_openO. Cac ham thao tac vo'i file tren C++

47

Page 48: k28cntt.files.wordpress.com · Ng6n ngiP I$PJrjnhV6'i~-.e\ C++ -1/ ~ . _. .' (L~p t(inh 1) /4 ~ .~ Giang'vien: Ph;;lm Doan TInh . bo mon di$n tli.tin hoc - Khoa di$n tCr vien thong

'.'

•� De vao/ra vc)'i file tren C++, dung csc toan tiJ chong «va» nh vaoha v6'i ban philT, va man hint,' ,� vO'i cac file ma 0' che cia van ban.�

•� Trong che 6<? nhi ph"m (binary) ta:dung cac hamreadO va writeO: •� read(ehar 'buf, int Nbytes); •� write(ehar 'buf,int NbytesJ;

Vi du l' Vao ra vai file text #include <iostream> #include <fstream> using namespace std;

void mainO (

ofstream f; II f dung eho ghi file� char 's=new char[1 00];� f. open("data.txt", ios: :out);

if(f.is_open()) II M& thanh cong� {�

GelJl <<"Govan ban ket thlle bang dong trang:" « endl� do� (�

cin.getline(s,100); f « s « endl;�

}while ("s==O);� f.closeO;�

}

Ifstrearn 11: II f1 dung cho doc file f1.open("data.txt",ios::in); If(f1is_open()) II Mo' thanh cong (

while(lf1.eof())� • (

f1getiine( s,1 00);� i cout «� s «

} f1.eloseO;

} } II KetthucmainO

'.,endl;

i;

I • !,1­'t::!I­

I

48.. - /)

*~