SlideShare une entreprise Scribd logo
1  sur  105
Télécharger pour lire hors ligne
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 1
Chương 1. NHẬP MÔN VỀ MÁY TÍNH VÀ LẬP TRÌNH
1.1 Phần cứng và phần mềm
1.1.1. Phần cứng (hardware)
Phần cứng,ăcònăg iălàăcương liệu (hardware),ălàăcácăăthànhăph nă(v tălỦ)ăc ăth ăc aămáyătínhă
hayăh ăthốngămáyătínhănh ălàămàn hình, chu t, bàn phím, máy in, máy quét, v ămáyătính, b ă
nguồn,ăb ăviăx ălỦăCPU, boăm chăch ,ăcácălo iădâyănối,ăloa, ổăđĩaăm m, ổăđĩaăcứng,ăổăCDROM,
ổăDVD, ...
D aătrênăchứcănĕngăvàăcáchăthứcăho tăđ ngăng iătaăcònăphânăbi tăph năcứngăraăthành:
- Nh p hay đầu vào (Input):ăCácăb ăph năthuănh păd ăli uăhayăm nhăl nhănh ălàăbànăphím,ă
chu t...
- Xuất hay đầu ra (Output):ăCácăb ăph nătr ăl i,ăphátătínăhi u,ăhayăth căthiăl nhăraăbênăngoàiă
nh ălàămànăhình,ămáyăin,ăloa,ă...
Ngoàiăcácăb ăph nănêuătrênăliênăquanăt iăph năcứngăc aămáyătínhăcònăcóăcácăkháiăni măquană
tr ngăsauăđây:
- Bus: chuy năd ăli uăgi aăcácăthi tăbịăph năcứng.
- BIOS (BasicăInputăOutputăSystem):ăcònăg iălàăh ăthốngăxu tănh păcơăb n nhằmăkh iăđ ng,ă
ki mătra,ăvàăcàiăđ tăcácăm nhăl nhăcơăb n choăph năcứngăvàăgiaoăquy năđi uăkhi năchoăh ăđi uă
hành
- CPU: b ăphânăviăx ălỦăđi uăkhi nătoàn b ămáyătính
- Kho lưu trữ dữ liệu: l uăgi ,ăcungăc p,ăthuănh năd ăli u
- Các loại chíp hỗ trợ: nằmăbênătrongăboăm chăch hayănằmătrongăcácăthi tăbịăngo iăvi c aă
máyătínhăcácăconăchipăquanătr ngăs ăgi ăvaiătròăđi uăkhi năthi tăbịăvàăliênăl căv iăh ăđi uăhành
qua b ăđi uăv n hay qua ph năs n
- Bộ nhớ: làăthi tăbịăbênătrongăboăm chăch ăgi ănhi măv ătrungăgianăcungăc păcácăm nhăl nh
cho CPU vàăcácăd ăli uăt ăcácăb ăph nănh ălàăBIOS,ăph năm m, khoăl uătr , chu t đồngăth iă
t iăv ăchoăcácăb ăph năv aăk ăk tăqu ăcácătínhătoán,ăcácăphép toán hayăcácăd ăli uăđư/đangă
đ ợcăx ălỦ.
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 2
- Các cổng vào/ra: USB (Universal Serial Bus), Máyăin,ămànăhình,ăchu tăphímă,ăầ
1.1.2. Phần mềm (Sotfware)
Phần mềm hayănhuăli uă(software)ălàăm tăt păhợpănh ngăcâuăl nh đ ợcăvi tăbằngăm tăho că
nhi uăngônăng ăl pătrình theoăm tătr tăt ăxácăđịnhănhằmăt ăđ ngăth căhi năm tăsốăchứcănĕngă
ho căgi iăquy tăm tăbàiătoánănàoăđó.
- Đặc điểm
Tr căđây,ăđ ăt oăraăch ơngătrìnhămáyătínhăng iătaăph iălàmăvi cătr căti păv iăcácăconăsốă0ă
ho că1,ăhayăcònăg iălàăngônăng ămáy.ăCôngăvi cănàyăvôăcùngăkhóăkhĕn,ăchi mănhi uăth iăgian,ă
côngăsứcăvàăđ căbi tăd ăgâyăraălỗi.ăĐ ăkhắcăph cănh ợcăđi mănày,ăng iătaăđ ăxu tăraăhợpăng ,ă
m tăngôn ng ăchoăphépăthayăth ădưyă0ăho că1ănàyăb iăcácăt ăgợiănh ăti ngăAnh.ăTuyănhiên,ăc iă
ti nănàyăv năcònăch aăth tăthíchăhợpăv iăđaăsốăng iădùngămáyătính,ănh ngăng iăluônămongă
muốnăcácăl nhăchínhălàăỦănghĩaăc aăcácăthaoătácămàănóămôăt .ăVìăv y,ăngayăt ănh ngănĕmă1950,ă
ng iătaăđưăxâyăd ngănh ngăngônăng ăl pătrìnhămàăcâuăl nhăc aănóăg năv iăngônăng ăt ănhiên.ă
Cácăngônăng ănàyăđ ợcăg iălàăngônăng ăl pătrìnhăb căcao.
Ch ơngătrìnhămáyătínhăth ngăđ ợcăt oăraăb iăconăng i,ănh ngăng iănàyăđ ợcăg iălàăl pă
trình viên,ătuyănhiênăcũngătồnăt iănh ngăch ơngătrìnhăđ ợcăsinhăraăb iăcácăch ơngătrìnhăkhác.
- Phân loại
+ Theo phương thức hoạt động
Phần mềm hệ thống: dùngăđ ăv năhànhămáyătínhăvàăcácăph năcứngămáyătính,ăvíăd ănh ăcácăh ă
đi uăhành máy tính Windows XP, Linux, Unix,ăcácăth ăvi năđ ngă(cònăg iălàăth ăvi năliênăk tă
đ ng:ădynamic linked library - DLL)ăc aăh ăđi uăhành,ăcácătrìnhăđi uăkhi n (driver), ph năs n
(firmware) và BIOS.ăĐâyălàăcácălo iăph năm mămàăh ăđi uăhànhăliênăl căv iăchúngăđ ăđi uă
khi năvàăqu nălỦăcácăthi tăbịăph năcứng.
Phần mềm ứng dụng: đ ăng iăs ăd ngăcóăth ăhoànăthànhăm tăhayănhi uăcôngăvi cănàoăđó,ăvíă
d ă nh ă cácă ph nă m mă vĕnă phòng (Microsoft Office, Lotus 1-2-3, FoxPro,ă ầ), ph nă m mă
doanhănghi p, ph năm măqu nălỦănguồnănhânăl căXETA, ph năm măgiáoăd c, cơăs ăd ăli u,
ph năm mătròăchơi, ch ơngătrìnhăti n ích,ăhayăcácălo iăph năm măácătính.
Các phần mềm dịch mã: baoăgồmătrìnhăbiênădịch và trìnhăthôngădịch:ăcácălo iăch ơngătrìnhă
nàyăs ăđ căcácăcâuăl nh t ămưănguồn đ ợcăvi tăb iăcácăl pătrìnhăviên theoăm tăngônăng ăl pă
trình và dịch nóăsangăd ngăngônăng ămáy màămáyătínhăcóăth ăhi uăđ c,ăhayădịchănóăsangăm tă
d ngăkhácănh ălàăt pătinăđốiăt ợng (object file)ăvàăcácăt pătinăth ăvi n (library file)ămàăcácăph nă
m măkhácă(nh ăh ăđi uăhànhăchẳngăh n)ăcóăth ăhi uăđ ăv năhànhămáyătínhăth căthiăcácăl nh.
Theo khả năng ứng dụng: Nh ngăph năm măkhôngăph ăthu c,ănóăcóăth ăđ ợcăbánăchoăb tăkỳă
kháchăhàngănàoătrênăthịătr ngăt ădo.ăVíăd :ăph năm măv ăcơăs ăd ăli u nh ăOracle,ăđồăh aă
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 3
nh ăPhotoshop, Corel Draw,ăso năth oăvàăx ălỦăvĕnăb n,ăb ngătính...ă uăđi m:ăThôngăth ngă
đâyă làă nh ngă ph nă m mă cóă kh ă nĕngă ứngă d ngă r ngă rưiă choă nhi uă nhómă ng iă s ă d ng.ă
Khuy tăđi m:ăThi uătínhăuy năchuy n,ătùyăbi n.
Nh ngăph năm măđ ợcăvi tătheoăđơnăđ tăhàngăhayăhợpăđồngăc aăm tăkháchăhàngăc ăth ă
nàoăđóă(m tăcôngăty,ăb nhăvi n,ătr ngăh c...).ăVíăd :ăph năm măđi uăkhi n,ăph năm măhỗătrợă
bán hàng...
uăđi m:ăCóătínhăuy năchuy n,ătùyăbi năcaoăđ ăđápăứngăđ ợcănhuăc uăc aăm tănhómăng iă
s ăd ngănàoăđó.ăKhuy tăđi m:ăThôngăth ngăđâyălàănh ngăph năm măứngăd ngăchuyênăngànhă
hẹp.
+ Các loại khác: Cũngădoăconăng iăvi tănênăđ ăph căv ăm căđíchănàoăđó,ănh ngăVirus (máy
tính) làăvirus,ătrojan....ăđ ợcăvi tăđ ăch yăv iănh ngăm căđíchăriêngăc aăm tăm tănhómăng iă
nhằnăl aăđ o,ăqu ngăcáo,ăĕnăcắp,ăpháăho iăthôngătin,ăpháăho iăph năcứngăho căchỉălàăđ ătrêuă
ch căng iădùngăviătính.
- Quá trình tạo phần mềm
Về mặt thiết kế
Tùyătheoămứcăđ ăphứcăt păc aăph năm mălàmăra,ăng iăthi tăk ăph năm m s ăítănhi uădùngă
đ năcácăph ơngăti năđ ăt oăraăm uăthi tăk ătheoăỦămuốnă(chẳngăh nănh ălàăcácăsơăđồăkhối, các
l uăđồ, các thu tătoán và các mưăgi ),ăsauăđóăm uănàyăđ ợcămưăhoáăbằngăcácăngônăng ăl pătrình
vàăđ ợc các trìnhădịch chuy năthànhăcácăkhốiăl nh (module) hay/và các t păkh ăthi.ăT păhợp
cácăt păkh ăthiăvàăcácăkhốiăl nhăđóălàmăthànhăm tăph năm m.ăTh ngăkhiăm tăph năm măđ ợcă
t oăthành,ăđ ăchoăhoànăh oăthìăph năm măđóăph iăđ căđi uăchỉnhăhayăs aăch aăt ăkhâuăthi tă
k ăchoăđ năkhâuăt oăthànhăphiênăb n ph năm măm tăsốăl n.ăM tăph năm măthôngăth ngăs ă
t ơngăthích v iăm tăhayăvàiăh ăđi uăhành, tùy theoăcáchăthi tăk ,ăcáchăvi tămưănguồn và ngôn
ng ăl pătrình đ ợc dùng.
Sản xuất và phát triển
Vi căphátătri năvàăđ aăraăthịătr ngăc aăm tăph năm mălàăđốiăt ợngănghiênăcứuăc aăb ămônă
kỹăngh ăph năm m hayăcònăg iălàăcôngăngh ăph năm m (software engineering).ăB ămônănàyă
nghiênăcứuăcácăph ơngăphápătổăchức,ăcáchăthứcăs ăd ngănguồnătàiănguyên,ăvòngăquyătrìnhăs nă
xu t,ăcùngăv iăcácămốiăliênăh ăv iăthịătr ng,ăcũngănh ăliênăh ăgi aăcácăy uătốănàyăv iănhau.ă
Tốiă uăhoáăquiătrìnhăs năxu tăph năm măcũngălàăđốiăt ợngăđ căcứuăxétăc aăb ămôn.
1.2 Các ngôn ngữ l p trình
1.2.1. Khái niệm ngôn ngữ l p trình
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 4
Ngôn ngữ l p trình (programming language)ălàăm tăt păconăc aăngônăng ămáyătính.ăĐây là
m tăd ngăngônăng đ ợcăchu năhóa.ăNóăđ ợcădùngăđ ămiêuăt ănh ngăquáătrình,ănh ngăng ă
c nhăm tăcáchăr tăchiăti t.
Định nghĩa (theo [Loud 94], T.3): Ngônăng ăl pătrìnhălàăm tăh ăthốngăđ ợcăkỦăhi uăhóaăđ ămiêuăt ă
nh ngătínhătoánă(quaămáyătính)ătrongăm tăd ng màăc ăconăng iăvàămáyăđ uăcóăth ăđ căvàăhi u đ ợc.
Theoăđịnhănghĩaă ătrênăthìăm tăngônăng ăl pătrìnhăph iăth aămưnăđ ợcăhaiăđi uăki năcơăb nălà:
Nóăph iăd ăhi uăvàăd ăs ăd ngăđốiăv iăng iăl pătrình, đ ăconăng iăcóăth ădùngănóăgi iăquy tăcácă
bài toán khác.
Nóăph iămiêuăt ăm tăcáchăđ yăđ ăvàărõăràngăcácăti nătrìnhă(process),ăđ ăcóăth ăch yăđ ợcă
trên các máy tính khác.
M tăt păhợpăcácăchỉăthịăđ ợcăbi uăthịănh ăngônăng ăl pătrìnhăđ ăth căhi năcácăthaoătácămáyă
tínhănàoăđóăthôngăquaăm tăch ơngătrình.ăCácătênăkhácăc aăkháiăni mănàyăn uăkhôngăbịăl măl nă
là ch ơngătrìnhămáyătính hay ch ơngătrìnhăđi nătoán.
Lưu ý: Kháiăni măchương trình (program)ăvi tăchoămáyăviătínhănhằmăgi iăquy tăm tăv năđ ă
nàoăđóăth ngăđ ợcăg iălàăphần mềm máy tính.ă(Thíăd ăchương trình MS Word làăm tăcáchăg iă
chungăchung,ăchínhăxácăhơnălàăphần mềm MS Word thìărõăhơnăđóălàăm tăch ơngătrìnhăứngă
d ng.)
Ch ăl p trình dùngăđ ăchỉăthaoătácăc aăconăng iănhằmăki năt oănênăcácăch ơngătrìnhămáyă
tínhăthôngăquaăcácăngônăng ăl pătrình.ăNg iătaăcònăg iăquáătrìnhăl pătrìnhăđóălàăquá trình mã
hoá thôngătinăt ănhiênăthànhăngônăng ămáy.ăTrongăcácătr ngăhợpăxácăđịnhăthìăch ăl p trình
cònăđ ợcăvi tălàă"vi tămư"ă(choăch ơngătrìnhămáyătính).
Nh ăv y,ătheoăđịnhănghĩa,ămỗiăngônăng ăl pătrìnhăcũngăchínhălàăm tăch ơngătrình,ănh ngă
cóăth ăđ ợcădùngăđ ăt oănênăcácăch ơngătrìnhăkhác.ăM tăch ơngătrìnhămáyătínhăđ ợcăvi tăbằngă
m tăngônăng l pătrìnhăthìănh ngăchỉăthịă(c aăriêngăngônăng ă y)ăgópăph năt oănênăch ơngă
trìnhăđ ợcăg iălàămã nguồn c aăch ơngătrìnhă y.
Thaoătácăchuy năd ngăt ămưănguồnăsangăthànhăchuỗiăcácăchỉăthịămáyătínhăđ ợcăth căhi nă
hoànătoànăt ơngăt ănh ălàăvi căchuy nădịchăgi aăcácăngônăng t ănhiênăc aăconăng i.ăCácă
thaoătácănàyăg iălàăbiên dịch (hayăngắnăg năhơnălàădịch).ăNg iătaăcònăphânăvi căbiênădịchălàmă
haiălo iătùyătheoăquáătrìnhădịchăx yăraătr căquáătrìnhăth căthiăcácătínhătoánăhayănóăx yăraăcùngă
lúcăv iăquáătrìnhătínhătoán:
M tăphần mềm thông dịch làăm tăph năm m cóăkh ănĕngăđ c,ăchuy nădịchămưănguồnăc aă
m tăngônăng ăvàăraăl nhăchoămáyătínhăti năhànhăcácătínhătoánăd aătheoăcú pháp c aăngônăng .
M tăphần mềm biên dịch hayăngắnăg năhơnătrình dịch làăph năm măcóăkh ănĕngăchuy nă
dịchămưănguồnăc aăm tăngônăng ăbanăđ uăsangăd ngămưăm iăthu căv ăngônăng ăc păth păhơn.
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 5
Ngônăng ăc păth pănh tălàăm tăchuỗiăcácăchỉăthịămáyătính màăcóăth ăđ ợcăth căhi nătr că
ti păb iăchính máy tính (thông qua các thao tác trên vùngănh ).ăTr căđây,ăh uăh tăcácătrìnhă
dịchăcũăth ngăph iăthôngădịchăt ămưănguồnăsangăb ămưăph ă(cácăt păcóădangă*.obj),ărồiăsauă
đó,ăm iăbiênădịchăti păsangăcácăt pătinăthiăhành.ăNgàyănay,ăh uăh tăcácătrìnhădịchăđ uăcóăkh ă
nĕngăbiênădịchămưănguồnătr căti păsangăthànhăcácăt pătinăthiăhànhăhayăbiênădịchăsangăcácăd ngă
mưăkhácăth păhơnătuỳătheoăyêuăc uăc aăng iăl pătrình.
Đi măkhácănhauăgi aăthông dịch và biên dịch là: Trìnhăthôngădịch s ădịchăt ngăcâuăl nhăm tă
vàăch ơngătrìnhăđíchăs ăkhôngăđ ợcăl uăl i.ăCònătrìnhăbiênădịch s ădịchătoànăb ăch ơngătrình,ă
choăraăch ơngătrìnhăđíchăđ ợcăl uăl iătrongămáyătínhărồiăm iăth căhi năch ơngătrình.
M tăch ơngătrìnhămáyătínhăcóăth ăđ ợcăth căthiăbằngăcáchătổăhợpăc aăvi căbiênădịchăvàă
thôngădịch.
Vì yêu c uăđòiăh iăđ ăchínhăxácăchiăti tăcaoănênăvi căvi tămưăth ngăgâyăkhóăkhĕnăchoă
ng iăđ căđ ătheoădõiăvàăđôiăkhiăgâyăkhóăchoăchínhăl pătrìnhăviên đưăt oăraămư nguồnăđó.ăDoăđó,ă
m tăl iăkhuyênălàănênădùngăthêmănhi uăchúăgi iătrongălúcăl pătrình.ăCácăchúăgi iănàyăth ngăr tă
quanătr ngăchoăng iăkhácăđ căvàăhi uăcácămưănguồn
1.2.2. Phân loại ngôn ngữ l p trình
Sauăđâyălàăm tătrongănh ngăcáchăphânălo iăphổăbi n:
Logic Programming (L pătrìnhălogic - LTL): M tăph ơngăphápăti păc năvi căbi uădi nătriăthứcă
vàăgi iăcácăbàiătoánălôgicăt ăm tăcơăs ătriăthứcăchoătr cătrênămáyătính.ăM tăcơăs ătriăthứcălàă
m tăt păcácăs ăki năvàăcácălu tăbi uădi năquanăh ălôgicăgi aăcácăs ăki năđó.ăLTLăxu tăphátăt ă
m tăcơăs ătriăthứcăvàăm tăcâuăh i,ăti năhànhăcácăl pălu nălôgicăđ tìmăraăl iăgi iăchoăcâuăh iăđó.ă
(VD: prolog,ầ).
Functional Programming (l pătrình hàm): s ăd ngăcácăhàmăhi uătheoănghĩaătoánăh călàmăc uă
trúcăđi uăkhi năc aăch ơngătrình. (VD: Lisp,ầ)
Structural Programming (L pătrìnhăcóăc uătrúc):ăKĩăthu tăl pătrìnhăd aătrênăquanăni măphână
tíchăm tăchứcănĕngăx ălíăthôngătinăthànhăcácăchứcănĕngănh ăhơn,ălàmămịnăd năquáătrìnhănàyăchoă
t iăkhiăxâyăd ngăđ ợcăcácăđơnăth .ăCh ơngătrìnhăchỉădùngăcácăc uătrúcăđi uăkhi năcơăb n:ătu nă
t ,ăr ănhánh,ăl păvàăraăkh iăl p.ăL pătrìnhăcóăc uătrúc s ăd ngăcáchăti păc năt ătrênăxuống,ătứcă
làăphânătáchăt ătoànăth ăđ năb ăph n,ărồiăl iăt ăb ăph năđ năb ăph nănh ăhơn.ăCácăđơnăth ătrongă
m tăch ơngătrìnhăcóăc uătrúcăcóătínhăđ căl păt ơngăđốiăcao,ăchỉăgiaoăti păv iănhauăthôngăquaă
giaoădi năđưăxácăl pătr c,ădoăđóăL pătrìnhăcóăc uătrúc cóăm tăsốă uăđi m:ăd ăphânăcôngănhi uă
ng iăcùngăl păm tăch ơngătrình,ăd ăth ăvàăhi uăchỉnhăch ơngătrình.ă(VD:ăC,ăPascal,ầ)
Concurrent Programming (L pătrìnhăsongăsong): Chiaăm tăv năđ ălàmă2ăph năvàăgi iăquy tă
songăsongăv iănhauă(VD:ăAda,ăErlang,ăJavaă.v.v.)
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 6
Object-Oriented Programming - OOP (L pă trìnhă h ngă đốiă t ợng):ă đ ợcă phátă minhă nĕmă
1965 b iăOle-Johan Dahl và Kristen Nygaard trongăngônăng ăSimula.ăSoăv iăph ơngăphápăl pă
trình cổăđi n,ăthìătri tălỦăchínhăbênătrongălo iăngônăng ălo iănàyălàăđ ătáiăd ngăcácăkhốiămưă
nguồnăvàăcungăứngăchoăcácăkhốiănàyăm tăkh ănĕngăm i:ăchúngăcóăth ăcóăcácăhàmă(g iălàăcácă
ph ơngăthức)ăvàăcácăd ăli uă(g iălàăthu cătính)ăn iăt i.ăKhốiămưănh ăv yăđ ợcăg iălàăđốiăt ợng.ă
Cácăđốiăt ợngăthìăđ căl păv iămôiătr ngăvàăcóăkh ănĕngătr ăl iăv iăyêuăc uăbênăngoàiătùyătheoă
thi tăk ăc aăng iăl pătrình.ăV iăcáchăxâyăd ngănày,ămỗiăđốiăt ợngăs ăt ơngăđ ơngăv iăm tă
ch ơngătrìnhăriêngăcóănhi uăđ cătínhăm iămàăquanătr ng nh tălàătínhăđaăhình,ătínhăđóng,ătínhă
tr uăt ợngăvàătínhăth aăk . (VD: Java, Ruby, C++ , C#, .v.v.)
Concurrency oriented programs (L pătrìnhăh ngăthànhăph n):ăụăt ngăxâyăd ngăcácăph nă
m mă bằngă cácă k tă hợpă cácă modulă l iă v iă nhau,ă giốngă nh ă m tă nhàă máyă lắpă rápă oto.ă (VD:ă
Java,..)
Agent oriented programs (L pătrìnhăh ngăAgent):ăMỗiăch ơngătrìnhăkhiăt oăraăcóăkh ănĕngă
t ăch ,ăt ăth căthiătùyăthu căvàoămôiătr ngămàănóătồnăt iă(VD:ăJava,ăC#,ầ)
M tăngônăng ăkhôngănh tăthi tălàăchỉăđ ợcăphépăthu că1ătrongăcác lo iătrên,ămàăcóăth ăhỗă
trợănhi uăki uăt ăduyăkhácănhau.
1.3 Giải quyết vấn đề và phát triển phần mềm
- Các mô hình phát triển sản phẩm phần mềm
Quáătrìnhăphátătri năph năm mălàăt păhợpăcácăthaoătácăvàăcácăk tăqu ăt ơngăquanăđ ăs nă
xu tăraăm tăs năph m ph năm m.ăH uăh tăcácăthaoătácănàyăđ ợcăti năhànhăb iăcácăkỹăs ăph nă
m m.ăCácăcôngăc ăhỗătrợămáyătínhăv ăkỹăthu tăph năm m cóăth ăđ ợcădùngăđ ăgiúpătrongăm tă
sốăthaoătác.
Cóă4ăthaoătácălàăn năt ngăc aăh uăh tăcácăquáătrìnhăph năm mălà:
+ Đ căt ăph năm m:ăCácăchứcănĕngăc aăph năm măvàăđi uăki năđ ănóăho tăđ ngăph iăđ ợcă
địnhănghĩa.
+ S ăphátătri năph năm m:ăĐ ăph năm măđ tăđ ợcăđ căt ăthìăph iăcóăquáătrìnhăphátătri nă
này.
+ Đánhăgiáăph năm m:ăPh năm măph iăđ ợcăđánhăgiáăđ ăchắcăchắnărằngănóălàmănh ngăgìă
màăkháchăhàngămuốn.
+ S ăti năhóaăc aăph năm m:ăPh năm măph iăti năhóaăđ ăth aămưnăs ăthayăđổiăcácăyêuăc uă
c aăkháchăhàng.
- Mô hình thác nước
MôăhìnhănàyălàmăchoăỦănghĩaăvi căs năxu tăph năđ ợcăth yărõăhơn.ă
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 7
+ Phânătíchăcácăyêuăc uăvàăđịnhănghĩa:ăh ăthốngădịchăv ,ăkhóăkhĕnăvàăm cătiêuăđ ợcăhìnhăthànhăb iă
s ătrợăỦăc aăh ăthốngăng iătiêuădùng.ăSauăđóăcácăy uătốănàyăđ ợcăđịnhănghĩaăsaoăchoăcóăth ăhi uăđ ợcă
b iăc ăng iăphátătri năvàăng iătiêuădùng.
+ Thi tăk ăph năm măvàăh ăthống:ăThi tăk ăh ăthốngăcácăquáătrình,ăcácăb ăph năvàăcácăyêuăc uăv ă
c ăph năm măl năph năcứng.ăHoànăt tăh uănh ăt tăc ăki nătrúcăc aăcácăh ăthốngănày.ăThi tăk ăph nă
m măthamăgiaăvàoăvi căbi uăthịăcácăchứcănĕngăh ăthốngăph năm mămàăcóăth ăđ ợcăchuy năd ngăthànhă
m tăhayănhi uăch ơngătrìnhăkh ăthi.
+ Th căhi năvàăth ănghi măcácăđơnăvị:ăTrongăgiaiăđo nănày,ăthi tăk ăph năm măph iăđ ợcăchứngă
th cănh ălàăm tăt păh pănhi uăch ơngătrìnhăhayănhi uăđơnăvịănh .ăTh ănghi măcácăđơnăvịăbaoăgồmăxácă
minhărằngămỗiăđơnăvịăth aămưnăđ căt ăc aănó.
+ Tổngăhợpăvàăth ănghi mătoànăb :ăCácăđơnăvịăch ơngătrìnhăriêngăl ăhayăcácăch ơngătrìnhăđ ợcă
tíchăhợpăl iăvàăth ănghi mănh ălàăm tăh ăthốngăhoànăt tăvàăchứngăt ăđ ợcăcácăyêuăc uăc aăph năm mă
đ ợcăth aămưn.ăSauăkhiăth ănghi măph năm măđ ợcăcungăứngăchoăng iătiêuădùng.
+ S năxu tăvàăb oătrì:ăThôngăth ngă(nh ngăkhôngăbắtăbu c)ăđâyălàăphaălâuănh tăc aăchuăkỳăsốngă
(c aăs năph m).ăPh năm măđ ợcăcàiăđ tăvàăđ ợcădùngătrongăth căt .ăB oătrìăbaoăgồmăđi uăchỉnhăcácălỗiă
màăch aăđ ợcăphátăhi nătrongăcácăgiaiăđ anătr căc aăchuăkìăsống;ănângăc păs ăth căhi năc aăh ăthốngă
cácăđơnăvịăvàănângăcaoăh ăthốngădịchăv ăchoălàăcácăphátăhi năvêăyêuăc uăm i.
Đi măh năch c aămôăhìnhănàyălàănóăkhôngălinhăho t.ăCácăb ăph năc aăđ ăánăchiaăraăthànhănh ngă
ph năriêngăc aăcácăgiaiăđo n.ăH ăthốngăphânăphốiăđôiăkhiăkhôngădùngăđ ợcăvìăkhôngăth aămưnăđ ợcă
yêuăc uăc aăkháchăhàng.ăM cădùăv yămôăhìnhănàyăph nă nhăth căt ăcôngăngh .ăNh ălàăm tăh ăqu ăđâyă
v nălàămôăhìnhăcơăs ăchoăđaăsốăcácăh ăthốngăphátătri năph năm mă- ph năcứng.
- Mô hình phát triển tiến hoá của phần mềm
Phân loại sự phát triển tiến hóa
+ L pătrìnhăthĕmădò:ăđốiăt ợngăc aăquáătrìnhăbằngăcáchălàmăvi căv iăkháchăhàngăđ ăthĕmădòăcácă
yêuăc uăvàăphânăphốiăph năm mădứtădi m.ăS ăphátătri nănênăbắtăđ uăv iănh ngăph nănàoăđưăđ ợcăhi uă
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 8
rõ.ăPh năm măs ăđ ợcăthêmăvàoăcácăchứcănĕngăm iăkhiămàănóăđ ợcăđ ănghịăchoăkháchăhàngă(vàănh nă
v ăcácăthôngătin).
+ M uăthĕmădò:ăđốiăt ợngăc aăphátătri năti năhoáănàyălàănhằmăhi uăcácăyêuăc uăc aăkháchăhàng và
doăđóăphátătri năcácăđịnhănghĩaăyêuăc uătốtăhơnăchoăph năm m.ăCácăm uăt pătrungătrênăcácăthíănghi mă
v iănh ngăph năđòiăh iănàoăc aăkháchăhàngămàăcóăth ăgâyăs ăkhóăhi uăhayăng ănh n.
Phátătri năph năm mătheoămôăhìnhăti năhoá
Phân tích mô hình: Môăhìnhăphátătri năti năhóaănàyăhi uăqu ăhơnămôăhìnhăthácăn c.ăTuyănhiên,ă
nóăv năcònăcácăkhuy tăđi m:ă
+ Quáătrìnhăthìăkhôngănhìnăth yărõăđ ợc:ăCácănhàăqu nălỦăc năphânăphốiăth ngăxuyênăđ ăđoăl ngă
s ăti năb .ăNóăkhôngăkinhăt ătrongăvi călàmăraăcácăhồăsơăchoăph năm m.
+ Ph năm măth ngăd ợcăc uătrúc nghèoănàn:ăS ăthayăđổiăliênăt căd ălàmăđổăvỡăc uătrúcăc aăph nă
m m,ăt oăraăs ăkhóăkhĕnăvàătốnăphí.
+ Th ngăđòiăh iănh ngăkỹănĕngăđ căbi t:ăH uăh tăcácăh ăthốngăkh ădĩătheoăcáchănàyăđ ợcăti nă
hànhăb iăcácănhómănh ăcóăkỹănĕngăcaoăcũngănh ăcácăcáănhânăph i nĕngăđ ng.
Môăhìnhănàyăthíchăhợpăv i:ă
+ Phátătri năcácălo iăph năm măt ơngăđốiănh
+ Phátătri năcácălo iăph năm măcóăđ iăsốngăt ơngăđốiăngắn
+ Ti năhànhătrongăcácăh ăthốngăl năhơnă ănh ngăchỗămàăkhôngăth ăbi uăthịăđ ợcăcácăđ căt ăchiăti tă
trong lúc ti năhành.ăThíăd ăc aătr ngăhợpănàyălàăcácăh ăthốngăthôngăminhănhânăt oă(AI) và các giao
di năchoăng iădùng.
- Mô hình xoắn ốc Boehm
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 9
Phátătri năph năm mătheoăki uăBoehm
Đâyălàămôăhìnhăphátătri n t ămôăhìnhăthácăn căchoăth yămứcăđ ătổngăquátăhơnăc aăcácăphaăs nă
xu tăc aăm tăs năph m.ăMôăhìnhăđ ợcăđ ănghịăb iăBoehm vàoănĕmă1988.ăMôăhìnhănàyăcóăth ăchỉăraă
cácăr iăroăcóăth ăhìnhăthànhătrênăcĕnăb năc aămôăhìnhăquáătrìnhă(s năxu t)ătổngăquát.
MôăhìnhăBoehmăcóăd ngăxoắnăốc.ăMỗiăvòngăl păđ iădi năchoăm tăphaăc aăquáătrìnhăph năm m.ăVòngă
trongăcùngăt pătrungăv ătínhăkh ăthi,ăvòngăk ăloăv ăđịnhănghĩaăcácăyêuăc u,ăk ăđ nălàăthi tăk ,ă...
Khôngăcóăm tăphaănàoăđ ợcăxemălàăcốăđịnhătrongăvòngăxoắn.ăMỗiăvòngăcóă4ăph năt ơngăứngăv iăm tă
pha.
+ Càiăđ tăđốiăt ợng:ăChỉăraăcácăđốiăt ợngăc a phaătrongăđ ăán.ăNh ngăkhóăkhĕnăhayăc ỡngăbứcăc aă
quáătrìnhăvàăc aăs năph măđ ợcăxácăđịnhăvàăđ ợcălênăk ăho chăchiăti t.ăXácăđịnhăcácăy uătốăr iăroăc aă
đ ăán.ăCácăph ơngăánăthayăth ătùyătheoăcácăr iăroănàyăcóăth ăđ ợcăd ătrù.
+ L ợngăđịnhăvàăgi măthi uăr iăro.ăTi năhànhăphânătíchămỗiăy uătốăr iăroăđưăxácăđịnh.ăCácăb căđ tă
raăđ ăgi măthi uăr iăro.
+ Phátătri năvàăđánhăgiá:ăSauăkhiăđánhăgiáăcácăy uătốăr iăro,ăm tămôăhìnhăphátătri năchoăh ăthốngă
đ ợcăch n.
+ Lênăk ăho ch:ăĐ ăánăđ ợcăxemăxétăvàăquy tăđịnhăcóănênăhayăkhôngăti păt căphaăm iătrongăvòngă
l p.
Các quá trình linh hoạt
Làăquáătrìnhămàătrongăđóăc uătrúcăkh iăđ ngăs ănh ănh ngălinhăđ ngăvàăl năd năc aăcácăđ ăánăph nă
m mănhằmătìmăraăcácăkhóăkhĕnătr căkhiănóătr ăthànhăv năđ ăcóăth ăd năt iănh ngăh y ho i.ăQuáătrìnhă
nàyănh năm nhăs ăg nănhẹăvàăt pătrungăhơnălàăcácăph ơngăphápătruy năthống.ăCácăquáătrìnhălinhăho tă
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 10
dùngăcácăthôngătinăph năhồiăthayăvìădùngăcácăk ăho ch,ănh ălàăm tăcơăch ădi uăkhi năchính.ăCácăthôngă
tinăph năhồiăcóăđ ợcăt ăcácăth ănghi măvàăcácăphiênăb năphátăhànhăc aăph năm măthamăgia.
Cácăquáătrìnhălinhăho tăth òngăcóăhi uăqu ăhơnăcácăph ơngăphápăcũ,ănóădùngăítăth iăgianăl pătrìnhă
đ ăs năxu tăraănhi uăchứcănĕngăhơn,ăch tăl ợngăcaoăhơn,ănh ngănóăkhôngăcungăc păm tăkh ănĕngăk ă
ho chălâuădài.
M tăcáchăngắnăg năcácăphuơngăphápănàyăcungăứngăhi uăqu ăcaoănh tăchoăvốnăđ uăt ,ănh ngăl iă
khôngăđịnhărõăhi uăqu ăgì.
L pătrìnhăc căh n,ăg iătắtălàăXP,ălàălo iăquáătrìnhălinhăho tăđ ợcăbi tăđ nănhi uănh t.ăTrongăXP,ăcácă
phaăđ ợcăxúcăti nătrongăcácăb căc cănh ă(hayăliênăt c)ăn uăsoăv iăcácăquáătrìnhăki uăcũ,ăg iălàăcácă
"toán"ăx ălỦ.ăB căđ uătiênă(v iăch ăđịnhălàăkhôngăhoànăt t)ăchoăđ năcácăb căcóăth ăchỉătốnăm tăngàyă
hayăm tătu n,ăthayăvìăph iătốnănhi uăthángănh ătrongăph ơngăphápăthácăn c.ăĐ uătiên,ăm tăng iăvi tă
cácăth ănghi măt ăđ ngăđ ăcungăc păcácăm cătiêuăc ăth ăchoăs ăphátătri n.ăK ăđ nălàăgiaiăđo năvi tămưă
(b iăm tăc păl pătrìnhăviên);ăgiaiăđo nănàyăhoànăt tăkhiămàăcácămưăvi tăquaăđ ợcăt tăc ăcácăth ănghi mă
và nh ngăng iăl pătrìnhăkhôngătìmăraăthêmăđ ợcăth ănghi măc năthi tănàoăn a.ăThi tăk ăvàăki nătrúcă
đ ợcăđi uăchỉnhăvàănângăcaoăngayăsauăgiaiăđo năvi tămưănàyăb iăng iăđưăvi tămưătrongăgiaiăđo nă
tr c.ăH ăthốngăch aăhoànăt tănh ngăho tăđ ngăđ ợcănàyăđ ợcăkhaiăthácăhayăđ ợcăđemăraăminhăh aă
choă(m tăph n)ăng iătiêuădùngămàătrongăsốăđóăcóăng iătrongăđ iăphátătri năph năm m.ăTh iăđi mănàyă
nh ngăng iăth cănghi măl iăbắtăđ uăvi tăcácăth ănghi măchoănh ngăph năquanătr ngăk ăti păc aăh ă
thống.
1.4. Giải thu t
Thu t toán,ăcònăg iălàăgiải thu t,ălàăm tăt păhợpăh uăh n c aăcácăchỉăthịăhayăph ơngăcáchăđ ợcă
địnhănghĩaărõăràngăchoăvi căhoànăt tăm tăsốăs ăvi căt ăm tătr ngătháiăbanăđ uăchoătr c;ăkhiăcácăchỉăthịă
nàyăđ ợcăápăd ngătri tăđ ăthìăs ăd năđ năk tăqu ăsauăcùngănh ăđưăd ăđoán.
Nóiăcáchăkhác,ăthu tătoánălàăm tăb ăcácăquiătắcăhayăquiătrìnhăc ăth ănhằmăgi iăquy tăm tăv năđ ă
trongăm tăsốăb căh uăh n,ăho cănhằmăcungăc păm tăk tăqu ăt ăm tăt păhợpăc aăcácăd ăki năđ aăvào.
Ví dụ: thu tătoánăđ ăgi iăph ơngătrìnhăb cănh tăP(x):ăax + b = c, (a, b, c là các sốăth c),ătrongăt pă
hợpăcácăsốăth căcóăth ălàăm tăb ăcácăb căsauăđây:
1. N uăa = 0
o b = c thìăP(x)ăcóănghi măb tăkì
o b ≠ăc thì P(c)ăvôănghi m
2. N uăa ≠ă0ă
o P(x)ăcóăduyănh tăm tănghi măxă=ă(c - b)/a
Lưu ý
Khiăm tăthu tătoánăđưăhìnhăthànhăthìătaăkhôngăxétăđ năvi căchứngăminhăthu tătoánăđóămàăchỉăchúă
tr ngăđ năvi căápăd ngăcácăb cătheoăs ăh ngăd năs ăcóăk tăqu ăđúng.ăVi căchứngăminhătínhăđ yăđ ă
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 11
vàătínhăđúngăc aăcácăthu tătoánăph iăđ ợcăti năhànhăxongătr căkhiăcóăthu tătoán.ăNóiărõăhơn,ăthu tă
toánăcóăth ăchỉălàăvi căápăd ngăcácăcôngăthứcăhayăquiătắc,ăquiătrìnhăđưăđ ợcăcôngănh nălàăđúngăhayăđưă
đ ợcăchứngăminhăv ăm tătoánăh c.
"Thuật toán" hi nănayăth ngăđ ợcădùngăđ ăchỉăthu tătoánăgi iăquy tăcácăv năđ ătinăh c.ăH uăh tă
cácăthu tătoánătinăh căđ uăcóăth ăvi tăthànhăcácăch ơngătrìnhămáyătính m cădùăchúngăth ngăcóăm tăvàiă
h năch ă(vìăkh ănĕngăc aămáyătínhăvàăkh ănĕngăc aăng iăl pătrình).ăTrongănhi uătr ngăhợp,ăm tă
ch ơngătrình khiăthi tăk ăbịăth tăb iălàădoălỗiă ăcácăthu tătoánămàăng iăl pătrìnhăđ aăvàoălàăkhôngă
chínhăxác,ăkhôngăđ yăđ ,ăhayăkhôngă căđịnhăđ ợcătr năvẹnăl iăgi iăc aăv năđ .ăTuyănhiênăcũngăcóăm tă
sốăbàiătoánămàăhi nănayăng iătaăch aătìmăđ ợcăl iăgi iătri tăđ ,ănh ngăbàiătoánă yăg iălàănh ngăbàiă
toán NP - khôngăđ yăđ .
Tính chất của thu t toán
M tăthu tătoánăcóăcácătínhăch tăsau:
o Tínhăchínhăxác:ăđ ăđ măb oăk tăqu ătínhătoánăhayăcácăthaoătácămàămáyătínhăth căhi năđ ợcălàă
chính xác.
o Tínhărõăràng:ăThu tătoánăph iăđ ợcăth ăhi năbằngăcácăcâuăl nhăminhăb ch;ăcácăcâuăl nhăđ ợcă
sắpăx pătheoăthứăt ănh tăđịnh.
o Tínhăkháchăquan:ăM tăthu tătoánădùăđ ợcăvi tăb iănhi u ng iătrênănhi uămáyătínhăv năph iă
choăk tăqu ănh ănhau.
o Tínhăphổăd ng:ăThu tătoánăkhôngăchỉăápăd ngăchoăm tăbàiătoánănh tăđịnhămàăcóăth ăápăd ngă
choăm tăl păcácăbàiătoánăcóăđ uăvàoăt ơngăt ănhau.
o Tínhăk tăthúc:ăThu tătoánăph iăgồmăm tăsốăh uăh năcácăb c tính toá
Độ phức tạp thu t toán
Đặt vấn đề
Th iăgianămàămáy tính khiăth căhi năm tăthu tătoán khôngăchỉăph ăthu căvàoăb năthânăthu tătoánă
đó,ăngoàiăraăcònătùyăthu căt ngămáyătính.ăĐ ăđánhăgiáăhi uăqu ăc aăm tăthu tătoán,ăcóăth ăxétăsốăcácă
phépătínhăph iăth căhi năkhiăth căhi năthu tătoánănày.ăThôngăth ngăsốăcácăphépătínhăđ ợcăth căhi nă
ph ăthu căvàoăcỡăc aăbàiătoán,ătứcălàăđ ăl năc aăđ uăvào.ăVìăth ăđộ phức tạp thu t toán làăm tăhàmă
ph ăthu căđ uăvào.ăTuyănhiênătrongănh ngăứngăd ngăth căti n,ăchúngătaăkhôngăc năbi tăchínhăxácăhàmă
nàyămàăchỉăc năbi tăm tă căl ợngăđ ătốtăc aăchúng.
Đ ă căl ợng đ ăphứcăt păc aăm tăthu tătoánătaăth ngădùngăkháiăni măb căO-l năvàăb căΘă(b că
Theta).
B c O-lớn
G iăn làăđ ăl năđ uăvào.ăTùyăthu căt ngăbàiătoánămàăn cóăth ănh nănh ngăgiáătrịăkhácănhau.ăChẳngă
h n,ăbàiătoánătínhăgiaiăth a thì n chínhălàăsốăc nătínhăgiaiăth a.ăNhi uăbàiătoánăsốătrị,ăchẳngăh nătínhăsai
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 12
phân thì n làăsốăch ăsốăcóănghĩa c năđ tăđ ợc.ăTrongăcácăphép tínhăđốiăv iămaătr n thì n làăsốăhàngăho că
c tăc aămaătr n.
Đ ăphứcăt păc aăbàiătoánăph ăthu căvàoăn.ă ăđâyătaăkhôngăchỉăđ cătr ngăđ ăphứcăt păb iăsốăl ợngă
phépătính,ămàădùngăm tăđ iăl ợngătổngăquátălàătài nguyên cần dùng R(n).ăĐóăcóăth ălàăsốăl ợngăphépă
tínhă(cóăth ătínhăc ăsốăl nătruyănh păb ănh ,ăho căghiăvàoăb ănh );ănh ngăcũngăcóăth ălàăth iăgianăth că
hi năch ơngătrìnhă(độ phức tạp về thời gian)ăho cădungăl ợngăb ănh c năph iăc păđ ăch yăch ơngă
trình (độ phức tạp về không gian).
Xétăquanăh ăgi aătàiănguyênăvàăđ ăl năđ uăvào,ăn uănh ătìmăđ ợcăhằngăsố C > 0, C khôngăph ăthu că
vào n,ăsaoăchoăv iăn đ ăl n,ăcácăhàmăR(n),g(n) đ uăd ơngăvà
thìătaănóiăthu tătoánăcóăđ ăphứcăt păcỡăO(g(n)).
Đ ăphứcăt păkhôngăph iălàăđ ăđoăchínhăxácăl ợngătàiănguyênămáyăc nădùng,ămàăđ cătr ngăchoăđ ngă
tháiăc aăh ăthốngăkhiăkíchăth căđ uăvàoătĕngălên.ăChẳngăh năv iăthu tătoánăcóăđ ăphứcăt pătuy nătínhă
O(n) (xemăph năd i),ăn uăkíchăth căđ uăvàoătĕngăg păđôiăthìăcóăth ă cătínhărằngătàiănguyênăc nă
dùngăcũngătĕngăkho ngăg păđôi.ăNh ngăv iăthu tătoánăcóăđ ăphứcăt păbìnhăph ơngăO(n2
) thì tài nguyên
s ătĕngăg păbốn.ăM tăkhác,ăv iăthu tătoánăcóăđ ăphứcăt păhàmămũăO(2n
) thìăchỉăc năcôngăthêmă2ăđơnăvịă
vàoăđ ăl năđ uăvàoăcũngăđưălàmătàiănguyênătĕngăg pă4ăl nă(tứcălàătheoăc păsốănhân)ărồi.
Cácăđ ăphứcăt păth ngăg păđốiăv iăcácăthu tătoánăthôngăth ngăgồmăcó:
o Đ ăphứcăt păhằngăsố,ăO(1).ăSốăphépătính/th iăgianăch y/dungăl ợngăb ănh ăkhôngăph ăthu că
vàoăđ ăl năđ uăvào.ăChẳngăh nănh ăcácăthaoătácăh ăthống:ăđóng,ăm ăfile.
o Đ ăphứcăt pătuy nătính, O(n).ăSốăphépătính/th iăgianăch y/dungăl ợngăb ănh ăcóăxuăh ngătỉăl ă
thu năv iăđ ăl năđ uăvào.ăChẳngăh nănh ătínhătổngăcácăph năt ăc aăm tăm ngăm tăchi u.
o Đ ăphứcăt păđaăthức, O(P(n)),ăv iăP làăđaăthứcăb căcaoă(t ă2ătr ălên).ăChẳngăh nănh ăcácăthaoă
tácătínhătoánăv iăm ngănhi uăchi uă(tínhăđịnhăthức maătr n).
o Đ ăphứcăt pălogarit, O(logn) (chúăỦ:ăb căc aănóăth păhơnăsoăv iăO(n))ă.ăChẳngăh năthu tătoánă
Euclid đ ătìmă căsốăchungăl nănh t.
o Đ ăphứcăt păhàmămũ, O(2n
).ăTr ngăhợpănàyăb tălợiănh tăvàăs ăr tăphiăth căt ăn uăth căhi nă
thu tătoánăv iăđ ăphứcăt pănày.
Lưu ý: Địnhănghĩaătrênămangătínhă"anătoàn"ătheoănghĩaănóăchỉăxétăs ătiêuătốnătàiănguyênă
khôngăv ợtăquáăm tăng ỡngăg(n) nàoăđó,ăchứăkhôngănh tăthi tăđúngăbằngăg(n) (chúăỦăd uă
b tăđẳngăthức). Theoăđó,ăm tăthu tătoánăcóăđ ăphứcăt păcỡăn thìăđồngăth iăs ăcóăđ ăphứcăt pă
cỡăn2
;ăv iăhàmăỦărằngăthu tătoánănàyăkhôngăbaoăgi ăcóăđ ngătháiăphứcăt păhóaăv ợtăquaă
ng ỡngăđaăthứcăb căhai.
B c Ω và Θ
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 13
T ơngăt ănh ăv iăb căO-l n, n uănh ătìmăđ ợcăcácăhằngăsốăC,k1,k2 đ uăd ơngăvàăkhôngăph ăthu căvàoă
n,ăsaoăchoăv iăn đ ăl n,ăcácăhàmăR(n),f(n) và h(n) đ uăd ơngăvà
thìătaănóiăthu tătoánăcóăđ ăphứcăt păcỡăl năhơnăΩ(n),ăvàăđúngăbằngăcỡăΘ(h(n)).
Nh ăv yăn uăxétăm tăcáchăch tăch ,ăkíăhi uăΘăm iăbi uăthịăđ ăphứcăt păc aăthu tătoánăm tăcáchăch tă
ch .ăTuyănhiênăquaăm tăth iăgianădàiăkíăhi uăO(n) cũngăđưăđ ợcădùngăphổăbi n.
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 14
Chương 2. KIỂU DỮ LIỆU, TOÁN TỬ VÀ PHÁT BIỂU
2.1 Giới thiệu về ngôn ngữ C++
C++ (C-plus-plus)ălàăm tălo iăngônăng ăl pătrình.ăĐâyălàăm tăd ngăngônăng ăđaăm uăhình t ădoăcóă
ki uătĩnh vàăhỗătrợăl pătrìnhăth ăt c, d ăli uătr uătr ợng, l pătrìnhăh ngăđốiăt ợng, và l pătrìnhăđaăhình.
T ăth păniênă1990,ăC++ăđưătr ăthànhăm tătrongănh ngăngônăng ăth ơngăm iăphổăbi nănh t.
Bjarne Stroustrup c aăBell Labs đưăphátătri năC++ă(màătênănguyênăth yălàă"C with class"ătrongăsuốtă
th păniênă1980 nh ălàăm tăb nănângăcaoăc aăngônăng ăC.ăNh ngăbổăsungănângăcaoăbắtăđ uăv iăs ăthêmă
vàoăc aăkháiăni măl p,ăti pătheoăđóălàăcácăkháiăni măhàmă o, toánăt ăquáăt i, đaăk ăth a, tiêuăb n, và x ă
lỦă ngo iă l .ă Tiêuă chu nă c aă ngônă ng ă C++ă đưă đ ợcă thôngă quaă trongă nĕmă 1998 nh ă làă ISO/IEC
14882:1998.ăPhiênăb năhi năđangăl uăhànhălàăphiênăb nă2003, ISO/IEC 14882:2003.ăPhiênăb nătiêuă
chu năm iăhơnăn aă(đ ợcăbi tăd iătênăg iăkhôngăchínhăthứcălàăC++0x)ăđangăđ ợcăxâyăd ng.
Tổng quan về kĩ thu t
Trong tiêuăchu n 1998 c aăC++ăcóăhaiăph năchính:ăph n ngônăng ăcốtălõi vàăph năTh ăvi năchu nă
C++(STL - StandardăTemplateăLibrary)ă.ăPh năth ăvi nănàyăl iăbaoăgồmăh uăh tă th ăvi nătiêuăb nă
chu n vàăphiênăb năcóăđi uăchỉnhăchútăítăc aăth ăvi năchu năC.ăNhi uăth ăvi năC++ăhi năh uăkhôngă
thu căv ătiêuăchu nănh ălàăth ăvi năBoost.ăThêmăvàoăđó,ănhi uăth ăvi năkhôngătheoătiêuăchu năđ ợcă
vi tătrongăC m tăcáchătổngăquátăđ uăcóăth ăs ăd ngătrongăcácăch ơngătrìnhăC++.
Chức năng d n nh p trong C++
Soăv iăC,ăC++ătĕngăc ngăthêmănhi uătínhănĕng,ăbaoăgồm:ăkhai báo nh ăm nhăđ ,ăchuy năki uă
giốngănh ăhàm,ănew/delete, bool,ăcácăki uăthamăchi u,ăconst, các hàm trong dòng (inline),
cácăđốiăsốăm căđịnh,ăquáăt iăhàm,ăvùng tên (namespace),ăcácăl pă(baoăgồmăt tăc ăcácăchứcănĕngăliênă
quanăt iăl pănh ăk ăth a,ăhàmăthànhăviênă(ph ơngăpháp),ăhàmă o,ăl pătr uăt ợng,ăvàăc uăt ),ăs ăquáăt iă
toánăt ,ătiêuăb n,ătoánăt ă::,ăx ălíăngo iăl ,ăvàăs ănh năd ngăki uătrongăth iăgianăthiăhành.
C++ăcònăti năhànhănhi uăphépăki mătraăki uăhơnăCătrongănhi uătr ngăhợp.
Câuă l nhă chúă gi i bắtă đ uă v iă // nguyênă làă m tă ph nă c aă BCPL(Basic Combined Programming
Language) đ ợcătáiăs ăd ngătrongăC++.
M tăsốăthànhăph năc aăC++ăsauănàyăđưăđ ợcăthêmăvàoăC,ăbaoăgồmăconst, inline,ăkhaiăbáoăbi nă
trongăvòngăl păfor vàăchúăgi iăki uăC++ă(s ăd ngăkỦăhi uă//). Tuy nhiên, C99 cũngăbổăsungăthêmă
m tăsốătínhănĕngăkhôngăcóătrongăC++,ăvíăd ănh ămacro v iăsốăđốiăsố đ ng.
Vìăđ ợcăphátătri năt ăC,ătrongăC++,ăthu tăng ăđốiăt ợng cóănghĩaălàăvùng nhớ nh ăđ ợcădùngătrongă
C,ăchứăkhôngăph iălàăm tăphiênăb năc aăl pănh ăđ ợcăhi uătrongăph năl năngônăng ăl pătrìnhăh ngă
đốiăt ợngăkhác.ăVíăd ănh : int i;
Dòngătrênăs ăđịnhănghĩaăm tăđốiăt ợngăki uăint (sốănguyên),ătứcălàăm tăvùngănh ăs ăđ ợcăs ăd ngă
đ ăl uăgi ăbi năi.
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 15
Thư viện C++
Th ăvi năchu năC++ dùngăl iăth ăvi năchu năCăv iăm tăsốăđi uăchỉnhănh ăđ ăgiúpănóăho tăđ ngătốtă
hơnăv iăngônăng ăC++.ăM tăb ăph năl năkhácăc aăth ăvi năC++ăd aătrênăTh ăvi nătiêuăb năchu n (hay
cònăg iălàăSTLă- vi tătắtăt ăch ăStandard Template Library).ăTh ăvi nănàyăcóănhi uăcôngăc ăh uăd ngă
nh ălàăcácăthùngăchứa (thíăd ănh ăvector, danh sách liênăk t và bi năl p (tổngăquátăhóaăt ăkháiăni mă
conătr )ăđ ăcungăc pănh ngăthùngăchứaănàyăs ătruyăc păgiốngănh ălàătruyăc păm ng.ăXaăhơnăn a,ăb ngă
(đa)ăánhăx ă(m ngăk tăhợp)ăvàă(đa)ăt p,ăt tăc ăđ ợcăcungăc păđ ăcóăth ăxu tăraăcácăgiaoădi n t ơngă
thích.ăDoăđó,ăcóăth ădùngătiêuăb năđ ăvi tăcácăthu tătoánătổngăquátămàăchúngălàmăvi căđ ợcăv iăb tăkìă
thùngăchứaănàoăhayăv iăb tăkìădưyănàoăđ ợcăđịnhănghĩaăb iăbi năl p.ăGiốngănh ăC,ăcácătínhănĕngăc aă
th ăvi nănàyăthìăđ ợcătruyăc păb iăvi căs ăd ngăl nhăd năh ng #include đ ăbaoăgồmăm tăt pătinătiêu
đ ăchu n.ăC++ăcungăứngă69ătiêuăđ ăchu n,ătrongăđóăcóă19ătiêuăđ ăkhôngăcònăhi uăl căn a.
Vì th ăvi năchu năđ ợcăthi tăk ăb iănh ngăchuy năgiaăhàngăđ uăvàăđưăđ ợcăchứngăminhătrongătoànă
b ălịchăs ăkĩăngh ,ăcácăthànhăph năc aăth ăvi nănàyăđ ợcăkhuy năcáoăs ăd ngăthayăvìădùngănh ngăph nă
vi tătayăbênăngoàiăhayănh ngăph ơngăti năc păth păkhác.ăThíăd ,ădùng std:vector hay std::string
thayăvìădùngăki uăm ngăđơnăthu năs ăkhôngănh ngălàăchoă"đ iăsốngăd ăth ăhơn",ămàăcònălàăm tăcáchă
h uăhi uăđ ăvi tăph năm măđ ợcăanătoànăvàălinhăho tăhơn.
STLănguyênălàăm tăth ăvi năc aăhưngăHP vàăsauăđóălàăc aăSGI,ătr căkhiănóăđ ợcănh năvàoăthànhă
chu năC++.ăTiêuăchu năthìăkhôngăthamăchi uănóăbằngăcáiătênă"STL",ăkhiăđaăph nănóăchỉălàăb ăph nătiêuă
chu n.ăTuyăv y,ănhi uăng iăv nădùngăkháiăni mă"STL"ănàyăđ ăphânăbi tănóăv iăph năcònăl iăc aăth ă
vi năC++ănh ălàăIOstream,ăquốcăt ăhóaă(kíăt ăvàăngônăng ătrìnhăbày),ăch năđoán,ăth ăvi năC, v.v..
M tă đ ă ánă mangă tênă STLPort,ă d aă cơă s ă trênă SGI STL,ă b oă trìă cácă thi tă l pă m iă c aă STL,
IOStream và string.ăCácăđ ăánăkhácăcũngăcóănh ngăxâyăd ngăđ căthùăriêngăc aăth ăvi năchu năv iă
cácăm cătiêuăthi tăk ăkhácănhau.ăMỗiănơiăs năxu tăhayăphổăbi nănhàătrìnhădịchăC++ăđ uăbaoăgồmăm tă
s ăthi tăl păc aăth ăvi n,ăvìăđâyălàăph năquanătr ngăc aătiêuăchu năvàăl iălàăkỳăv ngăc aăng iăl pătrình
2.2 Câu chú thích
Cácăchúăthíchăđ ợcăcácăl pătrìnhăviênăs ăd ngăđ ăghiăchúăhayămôăt ătrongăcácăph năc aăch ơngă
trình.ăTrongăC++ăcóăhaiăcáchăđ ăchúăthích
// Chú thích theo dòng
/* Chú thích theo khối */
Chúăthíchătheoădòngăbắtăđ uăt ăc păd uăxổă(//)ăcho đ năcuốiădòng.ăChúăthíchătheoăkhối bắtăđ uăbằngă
/* vàăk tăthúcăbằngă*/ vàăcóăth ăbaoăgồmănhi uădòng.ăChúngătaăs ăthêmăcácăchúăthíchăchoăch ơngă
trình :
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 16
/* my second program in C++
with more comments */
#include <iostream.h>
int main ()
{
cout << "Hello World! ";//says Hello World!
cout << "I'm a C++ program";
// says I'm a C++ program
return 0;
}
Hello World! I'm a C++ program
N uăb năvi tăcácăchúăthíchătrongăch ơngătrìnhămàăkhôngăs ăd ngăcácăd uă//,ă/*ăhayă*/,ătrìnhădịchăs ăcoiă
chúngănh ălàăcácăl nhăC++ăvàăs ăhi năthịăcácălỗi.
2.3 Kiểu dữ liệu, toán tử và các phát biểu khai báo
2.3.1. Kiểu dữ liệu
M tăh ăthốngăđ căthù,ămàătheoăđóăcácăd ăli uăđ ợcătổăchứcăsắpăx pătrongăm tăch ơngătrìnhăg iălàă
h ăthốngăki uăc aăngônăng ăl p trình.ăVi căthi tăk ăvàănghiênăcứuăcácăh ăthốngăki uăđ ợcăbi tănh ălàălý
thuy tăki u (ki uăd ăli u).
Chứcănĕngăc aămáyăđi nătoánălàăx ălỦăcácăthôngătin.ăCácăthôngătinăđ ợcănh păvàăl uătr ătrongăb ă
nh ăc aămáyăd iăcácăd ngăkhácănhau:ăcóăth ălàăsố,ălàăch ,ăcóăth ălàăhìnhă nh,ăâmăthanh,.v.v.ămàăthu tă
ng ătinăh căg iăchungălàăd ăli u.ăTínhăđaăd ngăc aăd ăli uăđòiăh iăph iătổăchứcăvàăphânăphốiăb ănh ă
thíchăhợpăđ ăl uătr ăvàăx ălỦătốtăcácăd ăli u.ăNgônăng ăl pătrìnhăchiaăcácăd ăli uăthànhăt ngănhómăriêngă
trên đóăxâyăd ngăm tăsốăphépătoánăt oănênăcácăki uăd ăli uăkhácănhau,ămỗiăki uăd ăli uălàăm tăt păhợpă
cácăgíaătrịămàăm tăbi năthu căki uăđóăcóăth ănh n.ăKhiăm tăbi năđ ợcăkhaiăbáoăthu căki uăd ăli uănàoă
thìămáyăs ădànhăchoăbi năđóăm tădungăl ợngăthíchăhợpătrong b ănh ăđ ăcóăth ăl uătr ăcácăgíaătrịăthu că
ki uăd ăli uăđó
2.3.2. Toán tử
1) Cácătoánăt ăsốăh c
Toán tử Ý nghĩa
+ C ng
- Tr
* Nhân
/ Chia
% Chiaăl yăph năd
-- Gi mă1ăđơnăvị
++ Tĕngă1ăđơnăvị
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 17
Tăng và giảm (++ và --)
Toánăt ă++ăthêmă1ăvàoătoánăh ngăc aănóăvàăậ ậ tr ăb tă1.ăNóiăcáchăkhác:
Ví dụ:
xă=ăxă+ă1ăgiốngănh ă++x hay x++
x = x -1ăgiốngănh ăxă- - hay x - -
C ă2ătoánăt ătĕngăvàăgi măđ uăcóăth ăti nătốă(đ tătr c)ăhayăh uătốă(đ tăsau)ătoánăh ng.
Tuyănhiênăgi aăti nătốăvàăh uătốăcóăs ăkhácăbi tăkhiăs ăd ngătrongă1ăbi uăthức.ăKhiă1ătoánăt ătĕngă
hayăgi măđứngătr cătoánăh ngăc aănó,ăC++ăth căhi năvi cătĕngăhayăgi mătr căkhiăl yăgiáătrịădùngă
trongăbi uăthức.ăN uătoánăt ăđiăsauătoánăh ng,ăC++ăl yăgiáătrịătoánăh ngătr căkhiătĕngăhayăgi mănó.ă
Ví dụ:
x = 10;
y = ++x ; //y = 11, x=11
Tuy nhiên:
x = 10;
y = x++; //y = 10, x=11
Thứăt ă uătiênăc aăcácătoánăt ăsốăh c:ă++, -- sauăđóălàă*, /, %ărồiăm iăđ nă+, -
2) Cácătoánăt ăquanăh ăvàăcácătoánăt ăLogic
ụăt ngăchínhăc aătoánăt ăquanăh ăvàătoánăt ăLogicălàăđúngăho căsai.ăTrongăC++ăm iăgiáătrịăkhácă0ă
đ ợcăg iălàăđúng,ăcònăsaiălàă0.ăCácăbi uăthứcăs ăd ngăcácătoánăt ăquanăh ăvàăLogicătr ăv ă0ăn uăsaiăvàă
tr ăv ă1ăn uăđúng.
Toán tử ý nghĩa
Các toán tử quan hệ
> L năhơn
>= L năhơnăho căbằng
< Nh ăhơn
<= Nh ăhơnăho căbằng
== Bằng
!= Khác
Các toán tử Logic
&& AND
|| OR
! NOT
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 18
B ngăchânătrịăchoăcácătoánăt ăLogic:
P q p&&q p||q !p
0 0 0 0 1
0 1 0 1 1
1 0 0 1 0
1 1 1 1 0
Cácătoánăt ăquanăh ăvàăLogicăđ uăcóăđ ă uătiênăth păhơnăcácătoánăt ăsốăh c. Do đóăm tăbi uăthứcănh :ă
10ă>ă1+ă12ăs ăđ ợcăxemălàă10ă>ă(1ă+ă12)ăvàăk tăqu ălàăsai (0).
Taăcóăth ăk tăhợpăvàiătoánăt ăl iăv iănhauăthànhăbi uăthứcănh ăsau:
Ví dụ: (10>5)&&!(10<9)||3<=4 K tăqu ălàăđúng
Thứăt ă uătiênăc aăcácătoánăt ăquanăh ălàăLogic : ! ; > ; >= ; < ; <= ; = = ;!= ; && ; ||
3) Cácătoánăt ăBitwise:
Cácătoánăt ăBitwiseăỦănóiăđ năki mătra,ăgánăhayăs ăthayăđổiăcácăBităth tăs ătrong 1ăByteăc aăWord,ă
màătrongăC++ăchu nălàăcácăki uăd ăli uăvàăbi năchar,ăint.ăTaăkhôngăth s ăd ngăcácătoánăt ăBitwiseăv iă
d ăli uăthu căcácăki uăfloat,ădouble,ălongădouble,ăvoidăhayăcácăki uăphứcăt păkhác.
Toán tử ý nghĩa
& AND
| OR
^ XOR
~ NOT
>> Dịchăph i
<< Dịchătrái
B ngăchânătrịăc aătoánăt ă^ă(XOR)
p q p^q
0 0 0
0 1 1
1 0 1
1 1 0
5) Toánăt ăconătr ă& và *
M tăconătr ălàăđịaăchỉătrongăb ănh ăc aăm tăbi n.ăM tăbi năconătr ăălàăm tăbi n đ ợcăkhaiăbáoăriêngă
đ ăchứaăm tăconătr ăđ năm tăđốiăt ợngăc aăki uăđưăchỉăraănó.
Taăs ătìmăhi uăkỹăhơnăv ăconătr ătrongăch ơngăv ăconătr .ă ăđây,ăchúngătaăs ăđ c păngắn g năđ năhaiă
toánăt ăđ ợcăs ăd ngăđ ăthaoătácăv iăcácăconătr .
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 19
Toánăt ăthứănh tălàă&,ălàăm tătoánăt ăquyă cătr ăv ăđịaăchỉăb ănh ăc aăh ăsố c aănó.
Ví dụ: m = &count;
Đ tăvàoăbi nămăđịaăchỉăb ănh ăc aăbi năcount.
Chẳngăh n,ăăbi năăcountă ăăvịătríăb ănh ăă2000,ăgi ăs ăăcountăcóăgiáătrịălà
100.ăSauăcâuăl nhătrênămăs ănh năgiáătrịă2000.
Toánăt ăthứăhaiălàă*,ălàăm tăbổăsungăchoă&;ăđâyălàăm tătoánăt ăquyă cătr ăv
giáătrịăc aăbi năđ ợcăc păphátăt iăđịaăchỉătheoăsauăđó.
Ví dụ: q = *m;
S ăđ tăgiáătrịăc aăcountăvàoăq.ăBâyăgi ăqăs ăcóăgiáătrịălàă100ăvìă100ăđ ợcăl uătr ăt iăđịaăchỉă2000.
6)ăToánăt ăd uă“,” .
Toánăt ăd uă,ăđ ợcăs ăd ngăđ ăk tăhợpăcácăbi uăthứcăl iăv iănhau.ăBênătráiăc aătoánăt ăd uă,ăluônă
đ ợcăxemălàăki uăvoid.ăĐi uăđóăcóănghĩaălàăbi uăthứcăbên ph iătr ăthànhăgiáătrịăc aătổngăcácăbi uăthứcă
đ ợcăphânăcáchăb iăd uăph y.
Ví dụ: x = (y=3,y+1);
Tr căh tăăgánă3ăchoăyărồiăgánă4ăchoăx.ăC păd uăngo căđơnălàăc năthi tăvìătoánăt ăd uă,ăcóăđ ă uătiênă
th păhơnătoánăt ăgán.
7) Xemăcácăd uăngo căđơnăvàăc păd uăngo căvuôngălàătoánăt
TrongăC++,ăc păd uăngo căđơnălàătoánăt ăđ ătĕngăđ ă uătiênăc aăcácăbi uăthứcăbênătrongănó.
Cácăc păd uăngo căvuôngăth căhi năthaoătácătruyăxu tăph năt ătrongăm ng.
8) Tổngăk tăv ăđ ă uătiên
Cao nhất () []
! ~ ++ -- (Ki u)ă*ă&
* / %
+ -
<< >>
< <= > >=
&
^
2.3.3. Lệnh đơn và lệnh phức
- Câuăl nh:ăTrongăngônăng ăl pătrìnhălàăs ăk tăhợpăcácăt ăkhóa,ăt ăchu n,ăcácătênăg iănóiăchungăvàă
cácătoánăt ătheoăm tăquyătắcăcúăphápănh tăđịnhăđ ăt oăthànhăchỉăthịăc aăch ơngătrình.
- Câuăl nhăđơn: Câuăl nhăđơnăgi năgồm:ăL nhăgán,ăl nhăvàoă/ăraăăvàăcácăl nhăg iăhàm
Cácăcâuăl nhăngĕnăcáchănhauăbằngăd uă“;”
-Câuăl nhăphức: Câuăl nhăphứcăcóăt ăhaiăcâuăl nhăđơnătr ălênăchúngăđ căđ tătrongăc păd uă{ă...ă}ă
đ ăth ăbi uăthịăc uătrúcăđi uăkhi năr ănhánhăho căc uătrúcăl p.
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 20
2.4. Biến và khai báo biến
2.4.1. Biến
Một biến (variable)ălàăm tătênăbi uăthịăchoăm tăsốăl ợng,ăm tăkỦăhi uăhayăm tăđốiăt ợng.ăThêmă
vàoăđó,ăm tăbi năs ăđ ợcădànhăs năchỗă(ph năc aăb ănh )ăđ ăchứaăsốăl ợng,ăkỦăhi uăhayăđốiăt ợngăđó.ă
Trongălúcăch ơngătrìnhăđ ợcăthiăhànhăthìăcácăbi năc aăch ơngătrìnhăs ăcóăth ăthayăđổiăgiáătrịăho că
khôngăthayăđổiăgìăc .ăHơnăn a,ăm tăbi năcóăth ăbịăthayăđổiăc ăl ợngăb ănh ămàănóăđangăchi măh uă(doă
ng iăl pătrình hayădoăph năm mădịchăraăl nh).ă
Tr ngăhợpăbi nănàyăkhôngăđ ợcăgánăgiáătrịăhayăcóăgánăgiáătrịănh ngăkhôngăđ ợcăs ăd ngăvàoăcácă
tínhătoánăthìănóăchỉăchi măchỗătrongăb ănh ăm tăcáchăvôăích.ăMỗiăbi năs ăcóătênăc aănóăvàăcóăth ăcóă
ki uăxácăđịnh.ăTùyătheoăngônăng ,ăm tăbi n cóăth ăđ ợcăkhaiăbáoă ăvịătríănàoăđóătrongămưănguồnăvàă
cũngătùyăngônăng ,ătùyăph năm mădịchăvàăcáchăthứcăl pătrìnhămàăm tăbi năcóăth ăđ ợcăt oănênă(cùngă
v iăchỗăchứa)ăhayăbịăxóaăb ăt iăm tăth iăđi mănàoăđóătrongălúcăth căthiăch ơngătrình.ăVi căcácăbi năbị
xóaăb ălàăđ ăti tăki măb ănh ăcũngănh ălàmătốtăhơnăvi căqu nălỦăph năb ănh ămàăđôiăkhiăm tăch ơngă
trìnhăchỉăđ ợcăc păb iăđĕngăkỦăv iăh ăđi uăhành.
Quáătrìnhătồnăt iăc aăm tăbi năg iălàăđ iăsốngăc aăbi n.ăTrongănhi uătr ngăhợpăđ iăsốngăc aăm tă
bi năchỉăx yăraătrongăn iăb ăm tăhàm,ăm tăth ăt căhayătrongăm tăkhốiămư.
2.4.2. Khai báo biến
- Cú pháp: <Kiểu dữ liệu> <danh sách biến>;
Mỗiăbi năđ ợcăvi tăcáchănhauăbằngăd uă“,”.
Ví dụ: int x , y;
float a , b , c;
- TrongăC/C++ăcóăth ăkhaiăbáoăbi nă ăb tăcứăvịătríănàoămi nălàăkhaiăbáoătr căkhiăs ăd ng.
2.5 Các kiểu dữ liệu cơ bản chuẩn
2.5.1. KiÓu ký tù (char)
M tăgiáătrịăki uăcharăchi mă1ăbyteă(8bit)ăvàăbi uădi năđ ợcăm tăkỦăt ăthôngăquaăb ngămáă
ASCII.
VÝ dô :
KỦăt Mã ASCII
0 048
1 049
2 050
A 065
B 066
a 097
b 098
... ....
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 21
Cóăhaiăăki uăkỦăt ălàăăsignedăcharăvà unsigned.
KiÓu Ph¹m vi biÓu diÔn Sè ký tù KÝch th-íc
Char ( Signed char ) -128 ®Õn 127 256 1 byte
Unsigned char 0 ®Õn 255 256 1 byte
VÝ dô sau minh ho¹ sù kh¸c nhau gi÷a hai kiÓu d÷ liÖu trªn : XÐt ®o¹n ch- ¬ng tr×nh sau :
char ch1;
unsigned char ch2;
......
ch1=200; ch2=200;
Khi ®ã thùc chÊt :
ch1= - 56;
ch2= 200;
Nh- ng c¶ ch1 vµ ch2 ®Òu biÓu diÔn cïng mét ký tù cã m· 200.
Ph©n lo¹i ký tù:
Cã thÓ chia 256 ký tù lµm ba nhãm :
Nhãm 1: Nhãm c¸c ký tù ®iÒu khiÓn cã m· tõ 0 ®Õn 31. Ch¼ng h¹n ký tù m· 13 dïng ®Ó chuyÓn con
trá vÒ ®Çu dßng, ký tù 10 chuyÓn con trá xuèng dßng d- íi ( trªn cïng mét cét ). C¸c ký tù nhãm nµy
nãi chung kh«ng hiÓn thÞ ra mµn h×nh.
Nhãm 2 : Nhãm c¸c ký tù v¨n b¶n cã m· tõ 32 ®Õn 126. C¸c ký tù nµy cã thÓ ®- îc ®- a ra mµn h×nh
hoÆc m¸y in.
Nhãm 3 : Nhãm c¸c ký tù ®å ho¹ cã m· sè tõ 127 ®Õn 255. C¸c ký tù nµy cã thÓ ®- a ra mµn h×nh
nh- ng kh«ng in ra ®- îc (b»ng c¸c lÖnh DOS).
2.5.2. KiÓu nguyªn
Trong C++ cho phÐp sö dông sè nguyªn kiÓu int, sè nguyªn dµi kiÓu long vµ sè nguyªn kh«ng dÊu
kiÓu unsigned. KÝch cì vµ ph¹m vi biÓu diÔn cña chóng ®- îc chØ ra trong b¶ng d- íi ®©y :
KiÓu Ph¹m vi biÓu diÔn KÝch th-íc
int -32768 ®Õn 32767 2 byte
unsigned int 0 ®Õn 65535 2 byte
long -2147483648 ®Õn 2147483647 4 byte
unsigned long 0 ®Õn 4294967295 4 byte
Chó ý : KiÓu ký tù còng cã thÓ xem lµ mét d¹ng cña kiÓu nguyªn.
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 22
2.5.3. Kiểu số thực.
Trong C++ cho phÐp sö dông ba lo¹i d÷ liÖu dÊu ph¶y ®éng, ®ã lµ float, double vµ long double.
KÝch cì vµ ph¹m vi biÓu diÔn cña chóng ®- îc chØ ra trong b¶ng d- íi ®©y :
KiÓu Ph¹m vi biÓu diÔn Sè ch÷ sè
cã nghÜa
KÝch th-íc
Float 3.4E-38 ®Õn 3.4E+38 7 ®Õn 8 4 byte
Double 1.7E-308 ®Õn 1.7E+308 15 ®Õn 16 8 byte
long double 3.4E-4932 ®Õn 1.1E4932 17 ®Õn 18 10 byte
Gi¶i thÝch: M¸y tÝnh cã thÓ l- u tr÷ ®- îc c¸c sè kiÓu float cã gi¸ trÞ tuyÖt ®èi tõ 3.4E-38 ®Õn 3.4E+38.
C¸c sè cã gi¸ trÞ tuyÖt ®èi nhá h¬n3.4E-38 ®- îc xem b»ng 0. Ph¹m vi biÓu diÔn cña sè double ®- îc
hiÓu theo nghÜa t- ¬ng tù.
Ngoàiăraătaăcònăcóăki uăd ăli uăvoid,ăki uănàyămangăỦănghĩaălàăki uărỗngăkhôngăchứaăgiáătrịăgìăc .
2.6. Cấu trúc một chương trình C++
Tr căkhiănóiăđ năc uătrúcătổngăquátăc aăm tăch ơngătrìnhănguồnăC,ăchúngătaăhưyăxem
m tăvíăd ăđơnăgi năsauăđâyăậ ch ơngătrìnhăinăxâuă„Chaoăcacăban!‟ăraămànăhình
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
void main()
{
clrscr();
cout<<”năChaoăcacăbană!”;
getch();
}
(trongăđo nămưănguồnătrênăchúngătaăthêmăcácăsốădòngăvàăd u:ăđ ăti năchoăvi c gi iăthích,ăcònătrongă
ch ơngătrìnhăthìăkhôngăđ ợcăcóăchúng).
Trongăch ơngătrìnhătrênăgồmăhaiăph năchínhăđóălàă:
- Cácădòngăbaoăhàmăt păậ dòngă1,ă2;ăđĕngăkỦăs ăd ngăcácăt pătiêuăđ .ăTrongăch ơng trình này
chúngătaăc nădùngăhaiăfileătiêuăđ ă<stdio.h> và <conio.h>.
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 23
- Hàm main t ădòngă3ăt iădòngă8.ăĐâyălàăhàmăchínhăc aăch ơngătrìnhă,ădòngă3ălàătiêu đ ăhàmăchoă
bi tătên:ămain,ăki uăhàm:ăvoid,ăvàăđốiăc aăhàmă(trongăvíăd ănàyăkhông cóăđối).ăThânăc aăhàmămainăbắtă
đ uăngayăsauăd uă{ă(dòngă4),ăvàăk tăthúcăt iăd uă} (dòng 8).
Cấu trúc tổng quát:
M t ch ơng trình C++ bao gồm các ph nănh : Các chỉ thịăti n x lý, khai báo bi năngoài,ăcácăhàmăt ă
t o,ăch ơngătrìnhăchínhă(hàmămain).
C uătrúcăcóăth ănh ăsau:
Các chỉ thị tiền xử lý (Preprocessor directives)
#include <Tên t pătinăth ăvi n>
#defineăầ.//ăcácăđịnhănghĩa,ăđịnhădanh
Định nghĩa kiểu dữ liệu (ph n này không bắt bu c): dùng đ đ t tên l i cho m t ki uăd li u nào đó
đ gợi nh hay đ t 1 ki u d li u cho riêng mình d a trên các ki u d ăli uăđư có.
Cú pháp: typedef <Tênăki uăcũ> <Tênăki uăm i>
Ví dụ: typedef int SoNguyen; //ăKi uăSoNguyenălàăki uăint
Khai báo các prototype (tên hàm, các tham số, ki u k t qu tr v ,ầ c a các hàm sẽ cài đặt trong
phần sau, phần này không bắt buộc): ph n này chỉ là các khai báo đ u hàm, không ph iălàăph n
định nghĩa hàm.
Khai báo các biến ngoài (các bi n toàn c c) phần này không bắt buộc: ph n này khai báo các bi n
toànăc căđ ợcăs ăd ngătrongăc ăch ơng trình.
Chương trình chính (main) phần này bắt buộc phải có
<Ki uăd ăli uătr ăv > main()
{
Các khai báo cục bộ trong hàm main: Các khai báo này chỉătồnăt i trong hàm mà thôi, có
th ălàăkhaiăbáoăbi năhayăkhaiăbáoăki u.
Các câu lệnh dùng để định nghĩa hàm main
return <kết quả trả về>; // Hàm ph iătr ăv ăk t qu
}
Cài đặt các hàm
<Ki uăd li uătr ăv > function1( các tham số)
{ Các khai báo c căb ătrongăhàm.
Cácă câuă l nhă dùngă đ ă địnhă nghĩa hàm return
<k t qu ătr ăv >;
}
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 24
ầ
M tăch ơng trình C++ bắt đ uăth căthiăt ăhàm main (thôngăth ngălàăt câu l nhăđ uătiênăđ n câu l nhă
cuối cùng).
Lưu ý: Nh ng gi iăthíchătrongăch ơngătrìnhăđ t sau d u // lời giải thích ho c trong d u /* lời giải
thích */
Ví dụ 1: Inăraămànăhìnhădòngăch ă“Helloăworld”ă
// my first program in C++
#include <iostream.h>
int main ()
{
cout << "Hello World!";
return 0;
}
Hello World!
Ví dụ 2: Inăraămànăhìnhădưyăsốăgi măd n
// custom countdown using while
#include <iostream.h>
int main ()
{
int n;
cout << "Enter the starting number > ";
cin >> n;
while (n>0) {
cout << n << ", ";
--n;
}
cout << "FIRE!";
return 0;
}
Enter the starting number > 8
8, 7, 6, 5, 4, 3, 2, 1, FIRE!
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 25
Chương 3. CÁC THÀNH PHẦN CĂN BẢN KHÁC CỦA C++
3.1 Các toán tử gán
Toán tử gán dùng để gán một giá trị nào đó cho một biến
Ví dụ: a = 5;
Gánăgiáătrịănguyênă5ăchoăbi năa.ăV ătráiăbắtăbu căph iălàăm tăbi năcònăv ăph iăcóăth ălàăb tăkỳăhằng,ă
bi năhayăk tăqu ăc aăm tăbi uăthức.
C năph iănh năm nhărằngătoánăt ăgánăluônăđ ợcăth căhi năt ătráiăsangăph iăvàăkhôngăbaoăgi ăđ oă
ng ợc.
Ví dụ: a = b;
gánăgiáătrịăc aăbi n aăbằngăgiáătrịăđangăchứaătrongăbi năb.ăChúăỦărằngăchúngătaăchỉăgánăgiáătrịăc aăbă
choăaăvàăs ăthayăđổiăc aăbăsauăđóăs ăkhôngă nhăh ngăđ năgiáătrịăc aăa.
M tăthu cătínhăc aătoánăt ăgánătrongăC++ăgópăph năgiúpănóăv ợtălênăcácăngônăng ăl pătrìnhăkhácălàă
vi căchoăphépăv ăph iăcóăth ăchứaăcácăphépăgánăkhác.ă
Ví dụ: aă=ă2ă+ă(bă=ă5);ăt ơngăđ ơngăv i:ăbă=ă5;ăaă=ă2ă+ăb;
Vìăv yăbi uăthứcăsauăcũngăhợpăl ătrongăC++:ăa = b = c = 5;
gánăgiáătrịă5ăchoăc ăbaăbi năa,ăbăvàă.
Các toán tử gán phức hợp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=)
M tăđ cătínhăc aăngônăng ăC++ălàmăchoănóănổiăti ngălàăm tăngônăng ăsúcătíchăchínhălàăcácătoánăt ă
gánăphứcăhợpăchoăphépăchỉnhăs aăgiáătrịăc aăm tăbi năv iăm tătrongănh ngătoánăt ăcơăb năsau:
value += increase; t ơngăđ ơngăv iă value = value + increase;
a -= 5; t t ơngăđ ơngăv iă a = a - 5;
a /= b; t ơngăđ ơngăv iă a = a / b;
price *= units + 1; t ơngăđ ơngăv iă price = price * (units + 1);
vàăt ơngăt ăchoăt tăc ăcácătoánăt ăkhác.
3.2 Định dạng số liệu để xuất ra
Tr căkhiăd ăli uăđ ợcăinăraămànăhìnhăc năđịnhăd ngăd ăli u. S ăd ngăcácăcôngăc ăđịnhăd ngăcóă
s nănh :ăăxuốngădòngă(ănă),ăd uătabă(ătă),ăv ăđ uădòngă(ără),ăầăvàăm tăsốăđịnhăd ngăsố.ă
3.3 Cách dùng các hàm thư viện toán học
Cácăhàmătoánăh c cóătrongăth ăviênă<math.h>, <float.h>:
abs(int x): tínhătrịătuy tăđốiăc aăsốănguyênăx
fabs(double x):ătínhătrịătuy tăđốiăc aăsốăth căx
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 26
random(int n):ăchoăsốăng uănhiênăt ă0ăđ năn - 1
randomize():ăkh iăđ uăb ăt oăsốăng uănhiên,ătaănênăch yăhàmănàyătr căkhiădùngăhàmărandom
cos(double x) và sin(double x) và tan(double x): tínhăcosăvàăsinăvàătangăc aăxă(đơnăvịăc aăxălàă
radianăchứăkhôngăph iălàăđ ,ă1ăradianăbằngăkho ngă57ăđ ,ăc ăth ălàăbằngă180/3.14ă- chắcăcácăb nă
cònănh ă3.14ălàăgìăchứ?)
exp(double x): tínhăeămũăx
log(double x): tính logarităt ănhiênăc aăxă(tứcălàăln(x)ăn uăvi tătheoătoánăh c)
pow(double y,double x): tínhăyămũăx.ă
Chú ý: làăyămũăxăcóăth ătínhătheoăcôngăthức:ăyămũăxă=ăexp(y*log(x))
sqrt(double x): tínhăcĕnăb că2ăc aăx.ă
Chú ý: làăcĕnăb cănăc aăxăcóăth ătínhătheoăcôngăthứcăpow(x,ă1/n)
floor(double x): choăsốănguyênăl nănh tăd iăx.ăVíăd :ăfloor(8.6)ălàă8
ceil(double x): choăsốănguyênăbéănh tătrênăx.ăVíăd :ăceil(8.6)ălàă9
3.4 Phát biểu nh p với đối tượng cin xuất với đối tượng cout
C¸c tiÖn Ých vµo/ra cña th- viÖn C chuÈn ®Òu cã thÓ sö dông trong C++. §Ó sö dông c¸c hµm nµy
chóng ta chØ cÇn khai b¸o tÖp tiªu ®Ò trong ®ã cã chøa khai b¸o hµm nguyªn mÉu cña c¸c tiÖn Ých nµy.
Bªn c¹nh ®ã, C++ cßn cµi ®Æt thªm c¸c kh¶ n¨ng vµo/ra míi dùa trªn hai to¸n tö “<<”(xuÊt) vµ
“>>” (nhËp) víi c¸c ®Æc tÝnh sau ®©y:
Trong tÖp tiªu ®Ò <iostream.h> ng- êi ta ®Þnh nghÜa hai ®èi t- îng cout vµ cin t- ¬ng øng víi hai
thiÕt bÞ chuÈn ra/vµo ®­îc sö dông cïng víi “<<” vµ “>>”. Th«ng th­êng ta hiÓu cout lµ mµn h×nh cßn
cin lµ bµn phÝm.
Ghi d÷ liÖu lªn thiÕt bÞ ra chuÈn (mµn h×nh) cout
Trong phÇn nµy ta xem xÐt mét sè vÝ dô minh ho¹ c¸ch sö dông cout vµ “<<” ®Ó ®­a th«ng tin ra mµn
h×nh.
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 27
VÝ dô : Ch- ¬ng tr×nh sau minh ho¹ c¸ch sö dông cout ®Ó ®- a ra mµn h×nh mét x©u ký tù.
#include<iostream.h>/*ph¶i khai b¸o khi muèn sö dông cout*/
main()
{
cout<<"WelcomeC++";
}
Welcome C++
“<<” lµ mét to¸n tö hai ng«i, to¸n h¹ng ë bªn tr¸i m« t¶ n¬i kÕt xuÊt th«ng tin (cã thÓ lµ mét thiÕt bÞ
ngo¹i vi chuÈn hay lµ mét tËp tin ), to¸n h¹ng bªn ph¶i cña “<<” lµ mét biÓu thøc nµo ®ã. Trong ch­¬ng
tr×nh trªn, c©u lÖnh cout <<"Welcome C++" ®­a ra mµn h×nh x©u ký tù “Welcome C++”.
VÝ dô: Sö dông cout vµ “<<” ®­a ra c¸c gi¸ trÞ kh¸c nhau:
#include<iostream.h>/*ph¶i khai b¸o khi muèn sö dông cout*/
voidmain(){
intn=25;
cout<<"Value:";
cout<<n;
}
Value : 25
VÝ dô: Trong vÝ dô nµy ta gép c¶ hai c©u lÖnh kÕt xuÊt trong vÝ dô 2.3 thµnh mét c©u lÖnh phøc t¹p h¬n,
tuy kÕt qu¶ kh«ng kh¸c tr- íc:
#include<iostream.h>/*ph¶i khai b¸o khi muèn sö dông cout*/
voidmain(){
intn=25;
cout<<"Value:"<<n;
}
Value : 25
§äc d÷ liÖu tõ thiÕt bÞ vµo chuÈn (bµn phÝm) cin
cin ®­îc dïng ®Ó chØ mét thiÕt bÞ vµo chuÈn. Mét c¸ch t­¬ng tù, to¸n tö “>>” ®­îc dïng kÌm víi cin ®Ó
nhËp vµo c¸c gi¸ trÞ; hai c©u lÖnh
intn;
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 28
cin>>n;
Yªu cÇu ®äc c¸c ký tù trªn bµn phÝm vµ chuyÓn chóng thµnh mét sè nguyªn vµ g¸n cho biÕn n.
Gièng nh- cout vµ “<<”, cã thÓ nhËp nhiÒu gi¸ trÞ cïng kiÓu hay kh¸c kiÓu b»ng c¸ch viÕt liªn tiÕp
tªn c¸c biÕn cÇn nhËp gi¸ trÞ cïng víi “>>” ngay sau cin. Ch¼ng h¹n:
intn;
floatp;
charc;
cin>>c>>n>>p;
Cã thÓ sö dông to¸n tö “>>” ®Ó nhËp d÷ liÖu cho c¸c biÕn cã kiÓu char, int, float, double vµ
char *.
cin tu©n theo mét sè qui - íc dïng trong viÖc ph©n tÝch c¸c ký tù:
C¸c gi¸ trÞ sè ®- îc ph©n c¸ch bëi: SPACE, TAB, CR, LF. Khi gÆp mét ký tù “kh«ng hîp lÖ” (dÊu
“.” ®èi víi sè nguyªn, ch÷ c¸i ®èi víi sè, ...) sÏ kÕt thóc viÖc ®äc tõ cin; ký tù kh«ng hîp lÖ nµy sÏ ®- îc
xem xÐt trong lÇn ®äc sau.
§èi víi gi¸ trÞ x©u ký tù, dÊu ph©n c¸ch còng lµ SPACE, TAB,CR, cßn ®èi víi gi¸ trÞ ký tù, dÊu
ph©n c¸ch lµ ký tù CR. Trong hai tr­êng hîp nµy kh«ng cã kh¸i niÖm “ký tù kh«ng hîp lÖ”. M· sinh ra
do bÊm phÝm Enter cña lÇn nhËp tr- íc vÉn ®- îc xÐt trong lÇn nhËp x©u/ký tù tiÕp theo vµ do vËy sÏ cã
“nguy c¬ ” kh«ng nhËp ®­îc ®óng gi¸ trÞ mong muèn khi ®­a ra lÖnh nhËp x©u ký tù hoÆc ký tù ngay
sau c¸c lÖnh nhËp c¸c gi¸ trÞ kh¸c. Gi¶i ph¸p kh¾c phôc vÊn ®Ò nµy ®Ó ®¶m b¶o c«ng viÖc diÔn ra ®óng
theo ý lµ tr- íc mçi lÇn gäi lÖnh nhËp d÷ liÖu cho x©u/ký tù ta sö dông mét trong hai chØ thÞ sau ®©y:
fflush(stdin);//khai b¸o trong stdio.h
cin.clear();//hµm thµnh phÇn cña líp ®Þnh nghÜa ®èi t-îng cin
Ta tham kh¶o ch- ¬ng tr×nh sau:
Vídụ:
#include<iostream.h>
#include<conio.h>
voidmain(){
intn;
floatx;
chart[81];
clrscr();
do{
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 29
cout<<"Nhapvaomotsonguyen,motxau,motsothuc:";
cin>>n>>t>>x;
cout<<"Danhap"<<n<<","<<t<<"va"<<x<<"n";
}while(n);
}
Nhap vao mot so nguyen, mot xau, mot so thuc : 3 long 3.4
Da nhap 3,long va 3.4
Nhap vao mot so nguyen, mot xau, mot so thuc : 5 hung 5.6
Da nhap 5,hung and 5.6
Nhap vao mot so nguyen, mot xau, mot so thuc : 0 4
3
Da nhap 0,4 va 3
3.5. Khai báo hằng
H»ng lµ c¸c ®¹i l- îng mµ gi¸ trÞ cña nã kh«ng thay ®æi trong qu¸ tr×nh tÝnh to¸n.
a. Tªn h»ng
Nguyªn t¾c ®Æt tªn h»ng ta ®· xem xÐt trong môc 1.3.
§Ó ®Æt tªn mét h»ng, ta dïng dßng lÖnh sau :
#define <tªn h»ng> <gi¸ trÞ>
VÝ dô : #define MAX 1000
Lóc nµy, tÊt c¶ c¸c tªn MAX trong ch- ¬ng tr×nh xuÊt hiÖn sau nµy ®Òu ®- îc thay b»ng 1000. V×
vËy, ta th- êng gäi MAX lµ tªn h»ng, nã biÓu diÔn sè 1000.
Mét vÝ dô kh¸c : #define pi 3.141593
§Æt tªn cho mét h»ng float lµ pi cã gi¸ trÞ lµ 3.141593.
b. C¸c lo¹i h»ng
+ H»ng int
H»ng int lµ sè nguyªn cã gi¸ trÞ trong kho¶ng tõ -32768 ®Õn 32767.
VÝ dô :
#define number1 -50 §Þnh nghi· h»ng int number1 cã gi¸ trÞ lµ -50
#define sodem 2732 §Þnh nghi· h»ng int sodem cã gi¸ trÞ lµ 2732
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 30
Chó ý :
CÇn ph©n biÖt hai h»ng 5056 vµ 5056.0 : ë ®©y 5056 lµ sè nguyªn cßn 5056.0 lµ h»ng thùc.
+ H»ng long :
H»ng long lµ sè nguyªn cã gi¸ trÞ trong kho¶ng tõ -2147483648 ®Õn 2147483647.
H»ng long ®- îc viÕt theo c¸ch : 1234L hoÆc 1234l ( thªm L hoÆc l vµo ®u«i )
Mét sè nguyªn v- ît ra ngoµi miÒn x¸c ®Þnh cña int còng ®- îc xem lµ long.
VÝ dô :
#define sl 8865056L §Þnh nghi· h»ng long sl cã gi¸ trÞ lµ 8865056
#define sl 8865056 §Þnh nghi· h»ng long sl cã gi¸ trÞ lµ 8865056
+ H»ng int hÖ 8
H»ng int hÖ 8 ®- îc viÕt theo c¸ch 0c1c2c3....ë ®©y ci lµ mét sè nguyªn d- ¬ng trong kho¶ng tõ 1
®Õn 7. H»ng int hÖ 8 lu«n lu«n nhËn gi¸ trÞ d- ¬ng.
VÝ dô :
#define h8 0345 §Þnh nghi· h»ng int hÖ 8 cã gi¸ trÞ lµ
3*8*8+4*8+5=229
+ H»ng int hÖ 16 :
Trong hÖ nµy ta sö dông 16 ký tù : 0,1..,9,A,B,C,D,E,F.
C¸ch viÕt Gi¸ trÞ
a hoÆc A 10
b hoÆc B 11
c hoÆc C 12
d hoÆc D 13
e hoÆc E 14
f hoÆc F 15
H»ng sè hÖ 16 cã d¹ng 0xc1c2c3... hÆc 0Xc1c2c3... ë ®©y ci lµ mét sè trong hÖ 16.
VÝ dô :
#define h16 0xa5
#define h16 0xA5
#define h16 0Xa5
#define h16 0XA5
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 31
Cho ta c¸c h¾ng sè h16 trong hÖ 16 cã gi¸ trÞ nh- nhau. Gi¸ trÞ cña chóng trong hÖ 10 lµ :
10*16+5=165.
+ H»ng ký tù:
H»ng ký tù lµ mét ký tù riªng biÖt ®- îc viÕt trong hai dÊu nh¸y ®¬n, vÝ dô 'a'.
Gi¸ trÞ cña 'a' chÝnh lµ m· ASCII cña ch÷ a. Nh- vËy gi¸ trÞ cña 'a' lµ 97. H»ng ký tù cã thÓ tham gia vµo
c¸c phÐp to¸n nh- mäi sè nguyªn kh¸c. VÝ dô: '9'-'0'=57-48=9
VÝ dô:
#define kt 'a' §Þnh nghi· h»ng ký tù kt cã gi¸ trÞ lµ 97
H»ng ký tù cßn cã thÓ ®- îc viÕt theo c¸ch sau : ' c1c2c3'
trong ®ã c1c2c3 lµ mét sè hÖ 8 mµ gi¸ trÞ cña nã b»ng m· ASCII cña ký tù cÇn biÓu diÔn.
VÝ dô: ch÷ a cã m· hÖ 10 lµ 97, ®æi ra hÖ 8 lµ 0141. VËy h»ng ký tù 'a' cã thÓ viÕt d- íi d¹ng '141'. §èi
víi mét vµi h»ng ký tù ®Æc biÖt ta cÇn sö dông c¸ch viÕt sau (thªm dÊu ):
C¸ch viÕt Ký tù
''' '
'"' "
'' 
'n' n (chuyÓn dßng )
'0' 0 ( null )
't' Tab
'b' Backspace
'r' CR ( vÒ ®Çu dßng )
'f' LF ( sang trang )
Chó ý : CÇn ph©n biÖt h»ng ký tù '0' vµ '0'. H»ng '0' øng víi ch÷ sè 0 cã m· ASCII lµ 48, cßn h»ng
'0' øng víi kýtù 0 ( th- êng gäi lµ ký tù null ) cã m· ASCII lµ 0.
H»ng ký tù thùc sù lµ mét sè nguyªn, v× vËy cã thÓ dïng c¸c sè nguyªn hÖ 10 ®Ó biÓu diÔn c¸c ký
tù, vÝ dô lÖnh (code C) printf("%c%c",65,66) sÏ in ra AB.
+ H»ng x©u ký tù :
H»ng x©u ký tù lµ mét d·y ký tù bÊt kú ®Æt trong hai dÊu nh¸y kÐp.
VÝ dô : #define xau1 "Ha noi"
#define xau2 "My name is Giang"
X©u ký tù ®- îc l- u tr÷ trong m¸y d- íi d¹ng mét b¶ng cã c¸c phÇn tö lµ c¸c ký tù riªng biÖt. Tr×nh
biªn dÞch tù ®éng thªm ký tù null 0 vµo cuèi mçi x©u ( ký tù 0 ®- îc xem lµ dÊu hiÖu kÕt thóc cña mét
x©u ký tù ).
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 32
Chó ý: CÇn ph©n biÖt hai h»ng 'a' vµ "a". 'a' lµ h»ng ký tù ®- îc l- u tr÷ trong 1 byte, cßn "a" lµ h»ng x©u
ký tù ®- îc l- u tr÷ trong 1 m¶ng hai phÇn tö : phÇn tö thø nhÊt chøa ch÷ a cßn phÇn tö thø hai chøa 0.
3.6. Các hàm thư viện xử lý chuỗi
Các hàm x ălỦăkỦăt ăvàăchuỗiăkỦăt cóătrongăth ăvi nă<string.h>, <ctype.h>:
Cộng chuỗi - Hàm strcat()
Cú pháp: char *strcat(char *des, const char *source)
Hàmănàyăcóătácăd ngăghépăchuỗiănguồnăvàoăchuỗiăđích.
Ví dụ: Nh păvàoăh ălótăvàătênăc aăm tăng i,ăsauăđóăinăc ăh ăvàătênăc aăh ălênămànăhình.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main(){
char HoLot[30], Ten[12];
printf("Nhap Ho Lot: ");gets(HoLot);
printf("Nhap Ten: ");gets(Ten);
strcat(HoLot,Ten); /* Ghep Ten vao HoLot*/
printf("Ho ten la: ");puts(HoLot);
getch();
return 0;
}
Xác định độ dài chuỗi - Hàm strlen()
Cú pháp: int strlen(const char* s)
Ví dụ: S ăd ngăhàmăstrlenăxácăđịnhăđ ădàiăm tăchuỗiănh păt ăbànăphím.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main(){
char Chuoi[255];
int Dodai;
printf("Nhap chuoi: ");gets(Chuoi);
Dodai = strlen(Chuoi)
printf("Chuoi vua nhap: ");puts(Chuoi);
printf(“Co do dai %d”,Dodai);
getch();
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 33
return 0;
}
Đổi một ký tự thường thành ký tự hoa - Hàm toupper()
Hàmă toupper()ă (trongă ctype.h)ă đ ợcă dùngă đ ă chuy nă đổiă m tă kỦă t ă th ngă thànhă kỦă t ă hoa.
Cú pháp: char toupper(char c)
Đổi chuỗi chữ thường thành chuỗi chữ hoa, hàm strupr()
Hàmăstruppr()ăđ ợcădùngăđ ăchuy năđổiăchuỗiăch ăth ngăthànhăchuỗiăch ăhoa,ăk t qu ătr ăv ăc aă
hàmălàăm tăconătr ăchỉăđ năđịaăchỉăchuỗiăđ ợcăchuy năđổi.
Cú pháp: char*strupr(char *s)
Ví dụ: Vi tă ch ơngătrìnhănh păvàoăm tăchuỗiă kỦă t ăt ăbànăphím.ăSauă đóăs ăd ngăhàmă strupr()ăđ ă
chuy năđổiăchúngăthànhăchuỗiăch ăhoa.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main(){
char Chuoi[255],*s;
printf("Nhap chuoi: ");gets(Chuoi);
s=strupr(Chuoi) ;
printf(“Chuoi chu hoa: ”);puts(s);
getch();
return 0;
}
Đổi chuỗi chữ hoa thành chuỗi chữ thường, hàm strlwr()
Muốnăchuy năđổiăchuỗiăch ăhoaăthànhăchuỗiătoànăch ăth ng,ătaăs ăd ngăhàmăstrlwr(),ăcácăthamăsốă
c aăhàmăt ơngăt ănh ăhàmăstrupr()
Cú pháp: char *strlwr(char *s)
Sao chép chuỗi, hàm strcpy()
Hàmă nàyă đ ợcă dùngă đ ă saoă chépă toànă b ă n iă dungă c aă chuỗiă nguồnă vàoă chuỗiă đích.
Cú pháp: char*strcpy(char *Des, const char *Source)
Ví dụ: Vi tăch ơngătrìnhăchoăphépăchépătoànăb ăchuỗiănguồnăvàoăchuỗiăđích.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 34
char Chuoi[255],s[255];
printf("Nhap chuoi: ");gets(Chuoi);
strcpy(s,Chuoi);
printf(“Chuoi dich: ”);puts(s);
getch();
return 0;
}
Sao chép một phần chuỗi, hàm strncpy()
HàmănàyăchoăphépăchépănăkỦăt ăđ uătiênăc aăchuỗiănguồnăsangăchuỗiăđích.
Cú pháp: char *strncpy(char *Des, const char *Source, size_t n)
Trích một phần chuỗi, hàm strchr()
Đ ătríchăm tăchuỗiăconăc aăm tăchuỗiăkỦăt ăbắtăđ uăt ăm tăkỦăt ăđ ợcăchỉăđịnhătrongăchuỗiăchoăđ nă
h tăchuỗi,ătaăs ăd ngăhàmăstrchr().
Cú pháp :char *strchr(const char *str, int c)
Ghi chú:
- N uăkỦăt ăđưăchỉăđịnhăkhôngăcóătrongăchuỗi,ăk tăqu ătr ăv ălàăNULL.
- K tăqu ătr ăv ăc aăhàmălàăm tăconătr ,ăconătr ănàyăchỉăđ năkỦăt ăcăđ ợcătìmăth yăđ uătiênătrongăchuỗiă
str.
Tìm kiếm nội dung chuỗi hàm strstr(): Hàmăstrstr()ăđ ợcăs ăd ngăđ ătìmăki măs ăxu tăhi năđ uătiênă
c aăchuỗiăs2ătrongăchuỗiăs1.
Cú pháp: char*strstr(const char *s1, const char *s2)
K tăqu ătr ăv ăc aăhàmălàăm tăconătr ăchỉăđ năph năt ăđ uătiênăc aăchuỗiăs1ăcóăchứaăchuỗiăs2ăho că
giáătrịăNULLăn uăchuỗiăs2ăkhôngăcóătrongăchuỗiăs1.
Ví dụ: Vi tăch ơngătrìnhăs ăd ngăhàmăstrstr()ăđ ăl yăraăm tăph năc aăchuỗiăgốcăbắtăđ uăt ăchuỗiă“hoc”.
#include<conio.h>
#include<stdio.h>
#include<string.h>
int main()
{
char Chuoi[255],*s;
printf("Nhap chuoi: ");gets(Chuoi);
s=strstr(Chuoi,”hoc”);
printf(“Chuoi trich ra: ”);puts(s);
getch();
return 0;
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 35
}
So sánh chuỗi, hàm strcmp(): Đ ăsoăsánhăhaiăchuỗiătheoăt ngăkỦăt ătrongăb ngămưăAscii,ătaăcóăth ăs ă
d ngăhàmăstrcmp().
Cú pháp: int strcmp(const char *s1, const char *s2)
Haiăchuỗiăs1ăvàăs2ăđ ợcăsoăsánhăv iănhau,ăk tăqu ătr ăv ălàăm tăsốănguyênă(sốănàyăcó đ ợcăbằngă
cáchăl yăkỦăt ăc aăs1ătr ăkỦăt ăc aăs2ăt iăvịătríăđ uătiênăx yăraăs ăkhácănhau).
- N uăk tăqu ălàăsốăâm,ăchuỗiăs1ănh ăhơnăchuỗiăs2.
- N uăk tăqu ălàă0,ăhaiăchuỗiăbằngănhau.
- N uăk tăqu ălàăsốăd ơng,ăchuỗiăs1ăl năhơnăchuỗiăs2.
So sánh chuỗi, hàm stricmp(): Hàmănàyăth căhi năvi căsoăsánhătrongănăkỦăt ăđ uătiênăc aă2ăchuỗiăs1ăvàă
s2,ăgi aăch ăth ngăvàăch ăhoaăkhôngăphânăbi t.
Cú pháp: int stricmp(const char *s1, const char *s2)
K tăqu ătr ăv ăt ơngăt ănh ăk tăqu ătr ăv ăc aăhàmăstrcmp()
Khởi tạo chuỗi, hàm memset() :Hàmănàyăđ ợcăs ăd ngăđ ăđ tănăkỦăt ăđ uătiênăc aăchuỗiălàăkỦăt ăc.
Cú pháp:memset(char *Des, int c, size_t n)
Đổi từ chuỗi ra số, hàm atoi(), atof(), atol() (trong stdlib.h)
Đ ăchuy năđổiăchuỗiăraăsố,ătaăs ăd ngăcácăhàmătrên.
Cú pháp : intăatoi(constăchară*s)ă:ăchuy năchuỗiăthànhăsốănguyên
longăatol(constăchară*s)ă:ăchuy năchuỗiăthànhăsốănguyênădài
floatăatof(constăchară*s)ă:ăchuy năchuỗiăthànhăsốăth c
N uăchuy năđổiăkhôngăthànhăcông,ăk tăqu ătr ăv ăc aăcácăhàmălàă0.
Ngoàiăra,ăth ăvi năstring.hăcònăhỗătrợăcácăhàmăx ălỦăchuỗiăkhác,ătaăcóăth ăđ căthêmătrongăph nă
trợăgiúp.
Danh sách các thư viện hàm hay dùng:
Th vi n vào/ra (nh p/xu t) : <stdio.h>
X lý ký t và chuỗi ký t :<string.h>, <ctype.h>
Th vi n hàm toán h c :<math.h>, <float.h>
Th i gian, ngày tháng :<time.h>, <locale.h>
C p phát b nh đ ng :<stdlib.h>
Các hàm ký t r ng :<wchar.h>, <wctype.h>
Các hàm khác :<stdlib.h>, ...
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 36
Chương 4. CÁC CẤU TRÚC RẼ NHÁNH
4.1 Các điều kiện rẽ nhánh
M tăch ơngătrìnhăth ngăkhôngăchỉăbaoăgồmăcácăl nhătu năt ănốiăti pănhau.ăTrongăquáătrìnhăch yă
nóăcóăth ăr ănhánhăhayăl păl iăm tăđo nămưănàoăđó.ăĐ ălàmăđi uănàyăchúngătaăs ăd ngăcácăc uătrúcăđi uă
khi n.
Cùngăv iăvi căgi iăthi uăcácăc uătrúcăđi uăkhi năchúngătaăcũngăs ăph iăbi tăt iăm tăkháiăni măm i:ă
khối lệnh,ăđóălàăm tănhómăcácăl nhăđ ợcăngĕnăcáchăb iăd uăch măph yă(;)ănh ngăđ ợcăg pătrongăm tă
khốiăgi iăh năb iăm tăc păngo cănh n:ă{ăvàă}.
H uăh tăcácăc uătrúcăđi uăkhi nămàăchúngătaăs ăxemăxétătrongăch ơngănàyăchoăphépăs ăd ngăm tă
l nhăđơnăhayăm tăkhốiăl nhălàmăthamăsố,ătuỳăthu căvàoăchúngătaăcóăđ tănóătrongăc păngo cănh năhayă
không.
4.2 Phát biểu if-else
C uătrúcănàyăđ ợcădùngăkhiăm tăl nhăhayăm tăkhốiăl nhăchỉăđ ợcăth căhi năkhiăm tăđi uăki nănàoă
đóătho ămưn.ăD ngăc aănóănh ăsau:
4.2.1. Cú pháp if đơn: if (condition) statement
Trongăđóăcondition làăbi uăthứcăđi uăki năs ăđ ợcătínhătoán.ăN uăđi uăki năđóălàătrue, statement
đ ợcăth căhi n.ăN uăkhôngăstatement bịăb ăquaă(khôngăth căhi n)ăvàăch ơngătrìnhăti păt căth căhi nă
l nhăti păsauăc uătrúcăđi uăki n.ă
Ví dụ,ăđo nămưăsauăđâyăs ăvi tăxăisă100ăchỉăkhiăbi n xăchứaăgiáătrịă100:ă
if (x = = 100)
cout << "x is 100";
N uăchúngătaămuốnăcóăhơnăm tăl nhăđ ợcăth căhi nătrongătr ngăhợpăcondition là true chúng ta có
th ăchỉăđịnhăm t khốiăl nhăbằngăcáchăs ăd ngăm tăc păngo cănh nă{ă}:ă
Ví dụ:
if (x == 100) {
cout << "x is "<<x;
}
Chúngătaăcũngăcóăth ăchỉăđịnhăđi uăgìăs ăx yăraăn uăđi uăki năkhôngăđ ợcătho ămưnăbằngăcáchăs uă
d ngăt ăkhoáăelse.ăNóăđ ợcăs ăd ngăcùngăv iăif nh ăsau:
4.2.2. Cú pháp if - else: if (condition) statement1 else statement2
Ví dụ:
if (x == 100) cout << "x is 100";
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 37
else cout << "x is not 100";
C uătrúcăif + else cóăth ăđ ợcămócănốiăđ ăki mătraănhi uăgiáătrị.ăVíăd ăsauăđâyăs ăki mătraăxemăgiáătrịă
chứaătrongăbi năxălàăd ơng,ăâmăhayăbằngăkhông.
if (x > 0) cout << "x is positive";
else if (x < 0) cout << "x is negative";
else cout << "x is 0";
4.3 Phát biểu if-else lồng
Phátăbi uăif-else lồngănhauătrongătr ngăhợpăcácăphátăbi uăif-elseăl iănằmătrongăcácăphátăbi uăif-else
khác.
Ví dụ: 1)ăGi iăph ơngătrìnhăax+b=0
2)ăGi iăph ơngătrìnhăax2 + bx + c = 0
4.4 Phát biển switch
Cúăphápăc aăl nhăswitch hơiăđ căbi tăm tăchút.ăM căđíchăc aănóălàăki mătraăm tăvàiăgiáătrịăhằngăchoă
m tăbi uăthức,ăt ơngăt v iănh ngăgìăchúngătaălàmă ăđ uăbàiănàyăkhiăliênăk tăm tăvàiăl nhăif và else if
v iănhau.ăD ngăthứcăc aănóănh ăsau:ă
Cú pháp: switch (expression) {
case constant1:
block of instructions 1
break;
case constant2:
block of instructions 2
break;
…
default:
default block of instruction
}
Nóăho tăđ ngătheoăcáchăsau:ă switch tínhăbi uăthứcăvàăki mătraăxemănóăcóăbằngă constant1 hay
không,ăn uăđúngăthìănóăth căhi năblock of instructions 1 choăđ năkhiătìmăth yăt ăkhoáăbreak,ăsauăđóă
nh yăđ năph năcuốiăc aăc uătrúcăl aăch năswitch.
Cònăn uăkhông,ăswitchăs ăki mătraăxemăbi uăthứcăcóăbằngăconstant2 hayăkhông.ăN uăđúngănóăs ă
th căhi năblock of instructions 2 choăđ năkhiătìmăth yăt ăkhoáăbreak.
Cuốiăcùng,ăn uăgiáătrịăbi uăthứcăkhôngăbằngăb tăkìăhằngănàoăđ ợcăchỉăđịnhă ătrênă(b năcóăth ăchỉă
địnhăbaoănhiêuăcâuăl nhăcaseătuỳăthích),ăch ơngătrìnhăs ăth căhi năcácăl nhătrongăph nădefault:ăn uănóă
tồnăt iăvìăph nănàyăkhôngăbắtăbu căph iăcó.ă
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 38
Hai đoạn mã sau là tương đương:
ví dụ switch if-else tương đương
switch (x) {
case 1:
cout << "x is 1";
break;
case 2:
cout << "x is 2";
break;
default:
cout << "value of x unknown";
}
if (x == 1) {
cout << "x is 1";
}
else if (x == 2) {
cout << "x is 2";
}
else {
cout << "value of x unknown";
}
4.5 Biểu thức điều kiện
C++ cóăm tătoánăt ăr tăm nhăvàăthíchăhợpăđ ăthayăth ăchoăcácăcâuăl nhăc aăIf- Then-Else. Cú pháp
c aăvi căs ăd ngătoánăt ă“?” là: E1 ? E2 : E3;
TrongăđóăE1,ăE2,ăE3ălàăcácăbi uăthức.
Ý nghĩa: Tr cătiênăE1ăđ ợcă căl ợng,ăn uăđúng E2ăđ ợcă căl ợngăvàănóătr ăthànhăgiáătrịăc aăbi uă
thức;ăn uăE1ăsai,ăE2ăđ ợcă căl ợngăvàătr ăthànhăgiáătrịăc aăbi uăthức.
Thì y đ ợcăgánăgiáătrịă100,ăn uăx nh ăhơnă9ăthìăy s ănh năgiáătrịălàă200.
Ví dụ: Đo nămưănàyăt ơngăđ ơngăc uătrúcăif nh ăsau:
x=10;
y = (x<9) ? 100 : 200;
//ăt ơngăđ ơngăv i
x = 10;
if (x < 9) y = 100;
else y = 200;
4.6 Khai báo enum
Ki uăenum làăm tăki uăd ăli uăđ căbi tăđ ợcădùngăđ ăđịnhănghĩaăm tăquanăh ăthứăt ăchoăm tăt pă
h păh uăh năcácătên.ă(Trongăth căt ăthìăenum cóăki uălà int):
Ví dụ: enum Wiki {Arisa, Bluesman, VietBio, Trung, Quang, Minh};
Đ ăkhaiăbáoăbi năwiki cóăki uăenum dùngăcâuăl nh:
enum wiki;
Cácă giáă trịă (hi uă ng m)ă c aă cácă kíă hi uă Arisa, Bluesman, VietBio, Trung, Quang,
Minh theoăm căđịnhăs ăt ơngăứngăv iă0,ă1, 2,ă3,ă4,ă5.ăCácăcâuăl nhăcáchăvi tăsauăđâyălàăcóăhi uăl c:
int member = Minh;
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 39
if (member == VietBio) { do_some_commands }
for (member=Arisa; member <= Trung; member++) { do_some_commands }
Nh ăv y,ătheoăm căđịnh,ăcácătênăc aăm tăenum đ ợcăxemălàăcác hằngăsốăt ă0ătĕngăd năchoăđ nătênăcuốiă
cùng.
Tuy nhiên, C++ khôngălo iătr ăkh ănĕngăx păl iăgiáătrịăc aăm tăki uăenum theo cách riêng:
Ví dụ: enum reordert={duck,cat=10, mouse =50, elephant =1000, lion,
virus};
Trongăthíăd ătrênăthìăduck cóăgiáătrịăt ơngăứngălàă0,ăcat là 10, ..., elephant là 1000, còn lion
t ơngăứngăv iăgiáătrịă1001ăvàăvirus t ơngăứngăv iă1002.
M tătrongănh ngăứngăd ngăchínhăc aăki uănàyălàăđ ătĕngăc ngăkh ănĕngăđ cămưăđ ợcăd ăhi uăhayă
phùăhợpăhơn.
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 40
Chương 5. CÁC CẤU TRÚC LẶP
5.1 Vòng lặp while
Cú pháp: while (expression) statement
vàăchứcănĕngăc aănóăđơnăgi năchỉălàăl păl iăstatement khiăđi uăki năexpression cònătho ămưn.ă
Ví dụ,ăchúngătaăs ăvi tăm tăch ơngătrìnhăđ măng ợcăs ăd ngăvàoăl păwhile:
// custom countdown using while
#include <iostream.h>
int main ()
{
int n;
cout << "Enter the starting
number > ";
cin >> n;
while (n>0) {
cout << n << ", ";
- - n;
}
cout << "FIRE!";
return 0;
}
Enter the starting number > 8
8, 7, 6, 5, 4, 3, 2, 1, FIRE!
Khi ch ơngătrìnhăch yăng iăs ăd ngăđ ợcăyêuăc uănh păvàoăm tăsốăđ ăđ măng ợc.ăSauăđó,ăkhiă
vòngăl păwhile bắtăđ uăn uăsốămàăng iădùngănh păvàoătho ămưnăđi uăki năđi uăki năn>0ăkhốiăl nhă
s ăđ ợcăth căhi năm tăsốăl năkhôngăxácăđịnhăch ngănàoăđi uăki nă(n>0)ăcòn đ ợcătho ămưn.
Chúngătaăc năph iănh ărằngăvòngăl păph iăk tăthúcă ăm tăđi mănàoăđó,ăvìăv yăbênătrongăvòngăl pă
chúngătaăph iăcungăc păm tăph ơngăthứcănàoăđóăđ ăbu căcondition tr ăthànhăsaiăn uăkhôngăthìănóăs ă
l păl iămưiămưi.ăTrongăvíăd ătrênăvòngăl păph i cóăl nhă- - n;ăđ ălàmăchoăconditionătr ăthànhăsaiăsauă
m tăsốăl năl p.
5.2 Vòng lặp for
Cú pháp: for (initialization; condition; increase) statement;
Chứcănĕngăchínhăc aănóălàăl păl iăstatement ch ngănàoăcondition cònămangăgiáătrịăđúng,ănh ă
trong vòng lặp while.ăNh ngăthêmăvàoăđó,ăfor cungăc păchỗădànhăchoăl nhăkh iăt oăvàăl nhătĕng.ăVìă
v yăvòngăl pănàyăđ ợcăthi tăk ăđ căbi tăl păl iăm tăhànhăđ ngăv iăm tăsốăl năxácăđịnh.ă
Cáchăthứcăho tăđ ngăc aănóănh ăsau:ă
Initialization (bi uăthứcă1) đ ợcăth căhi n. Nóiăchungănóăđ tăm tăgiáăkhíăbanăđ uăchoăbi năđi uăkhi n.ă
L nhănàyăđ ợcăth căhi năchỉăm tăl n.
condition (bi uăthứcă2)ăđ ợcăki mătra,ăn uănóălàăđúngăvòngăl păti păt căcònăn uăkhôngăvòngăl păk tă
thúcăvàăstatementăđ ợcăb ăqua.
statementăđ ợcăth căhi n.ăNóăcóăth ălàăm tăl nhăđơnăho călàăm tăkhốiăl nhăđ ợcăbaoătrongăm tăc pă
ngo cănh n.
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 41
Cuốiăcùng, increase (bi uăthứcă3)ăđ ợcăth căhi năđ ăthayăđổi bi năđi uăkhi năvàăvòngăl păquayătr ăl iă
ki uătraăđi uăki năcondition.
Sauăđâyălàăm tăvíăd ăđ măng ợcăs ăd ngăvòngăfor.
// countdown using a for loop
#include <iostream.h>
int main ()
{
for (int n=10; n>0; n--) {
cout << n << ", ";
}
cout << "FIRE!";
return 0;
}
10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
FIRE!
Ph năkh iăt oăvàăl nhătĕngăkhôngăbắtăbu căph iăcó.ăChúngăcóăth ăđ ợcăb ăquaănh ngăv năph iăcóă
d uăch măph yăngĕnăcáchăgi aăcácăph n.ăVìăv y,ăchúngătaăcóăth ăvi tăfor (;n<10;) ho căfor
(;n<10;n++).
Bằngăcáchăs ăd ngăd uăph y,ăchúngătaăcóăth ădùngănhi uăl nhătrongăb tăkìătr ngănàotrong vòng
for,ănh ălàătrongăph năkh iăt o.ăVíăd ăchúngătaăcóăth ăkh iăt oăm tălúcănhi uăbi nătrongăvòngăl p:ă
for ( n=0, i=100 ; n!=i ; n++, i-- )
{
// cái gì ở đây cũng được...
}
Vòngăl pănàyăs ăth căhi nă50ăl năn uănh ănăvàăiăkhôngăbịăthayăđổiătrongăthânăvòngăl p:ă
5.3 Các vòng lặp lồng
Trongătr ngăhợpăcácăvòngăl păl iăchứaăcácăvòngăl păkhác.
Ví dụ: Tínhăgiáătrịăc aăbi uăthức:ăSă=ă2!ă+ 4! + 6! +ăầă+ăn!; (nănh păvàoăt ăbànăphím).
#include <iostream.h>
int main(){
int n;
cout<<”n n=”; cin>>n;
int gt=1,s=0;
for(int i=2; i<=n;i=i+2)
{
for (int j=1;j<=i;j++) gt=gt*j;
s=s+gt;
gt=1;
}
cout << “n S=” <<s;
return 0;
}
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 42
5.4 Vòng lặp do-while
Cú pháp: do statement while (condition);
Chứcănĕngăc aănóălàăhoànătoànăgiốngăvòngăl păwhile chỉătr ăcóăm tăđi uălàăđi uăki năđi uăkhi nă
vòngăl păđ ợcătínhătoánăsauăkhiăstatement đ ợcăth căhi n,ăvìăv yăstatement s ăđ ợcăth căhi năítănh tă
m tăl năngayăc ăkhi condition khôngăbaoăgi ăđ ợcătho ămưn.ăVíăd ,ăch ơngătrìnhăd iăđâyăs ăvi tăraă
b tăkìăsốănàoămàăb nănh păvàoăchoăđ năkhiăb nănh păsốă0.
// number echoer
#include <iostream.h>
int main ()
{
unsigned long n;
do {
cout << "Enter number (0 to
end): ";
cin >> n;
cout << "You entered: " << n
<< "n";
} while (n != 0);
return 0;
}
Enter number (0 to end): 12345
You entered: 12345
Enter number (0 to end): 160277
You entered: 160277
Enter number (0 to end): 0
You entered: 0
Vòngăl pădo-whileăth ngăđ ợcădùngăkhiăđi uăki năđ ăk tăthúcăvòngăl pănằmătrongăvòngăl p,ănh ă
trongăvíăd ătrên,ăsốămàăng iădùngănh păvàoălàăđi uăki năki mătraăđ ăk tăthúcăvòngăl p.ăN uăb năkhôngă
nh păsốă0ătrongăvíăd ătrênăthìăvòngăl păs ăkhôngăbaoăgi ăch mădứt.
5.5 Câu lệnh break, continue, goto và hàm exit
5.5.1. Lệnh break.
S ăd ngăbreakăchúngătaăcóăth ăthoátăkh iăvòngăl păngayăc ăkhiăđi uăki năđ ănóăk tăthúcăch aăđ ợcă
tho ămưn.ăL nhănàyăcóăth ăđ ợcădùngăđ ăk tăthúcăm t vòngăl păkhôngăxácăđịnhăhayăbu cănóăph iăk tă
thúcăgi aăch ngăthayăvìăk tăthúcăm tăcáchăbìnhăth ng.ăVíăd ,ăchúngătaăs ăd ngăvi căđ măng ợcătr că
khiănóăk tăthúc:ă
// break loop example
#include <iostream.h>
int main ()
{
int n;
for (n=10; n>0; n--) {
cout << n << ", ";
if (n==3)
{
cout<<"countdown aborted!";
break;
}
}
return 0;
}
10, 9, 8, 7, 6, 5, 4, countdown
aborted!
5.5.2.Lệnh continue.
Bàiăgi ngăKỹăthu tăl pătrình
Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 43
L nhăcontinueălàmăchoăch ơngătrìnhăb ăquaăph năcònăl iăc aăvòngăl păvàănh yăsangăl năl păti pătheo.ă
Víăd ăchúngătaăs ăb ăquaăsốă5ătrongăph năđ măng ợc:
// break loop example
#include <iostream.h>
int main ()
{
for (int n=10; n>0; n--) {
if (n==5) continue;
cout << n << ", ";
}
cout << "FIRE!";
return 0;
}
10, 9, 8, 7, 6, 4, 3, 2, 1, FIRE!
5.5.3. Lệnh goto.
L nhănàyăchoăphépănh yăvôăđi uăki năt iăb tăkìăđi mănàoătrongăch ơngătrình.ăNóiăchungăb nănênă
tránhădùngănóătrongăch ơngătrìnhăC++.ăTuyănhiênăchúngătaăv năcóăm tăvíăd ădùngăl nhăgotoăđ ăđ mă
ng ợc:ă
// goto loop example
#include <iostream.h>
int main ()
{
int n=10;
loop: ;
cout << n << ", ";
n--;
if (n>0) goto loop;
cout << "FIRE!";
return 0;
}
10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
FIRE!
5.5.4. Hàm exit.
M căđíchăc aăexit làăk tăthúcăch ơngătrìnhăvàătr ăv ăm tămưăxácăđịnh.ăD ngăthứcăc aănóănh ăsauă
void exit (int exit code);
exităcodeăđ ợcădùngăb iăm tăsốăh ăđi uăhànhăho căcóăth ăđ ợcădùngăb iăcácăch ơngătrìnhăg i.ăTheoă
quyă c,ămưătr ăv ă0ăcóănghĩaălàăch ơngătrìnhăk tăthúcăbìnhăth ngăcònăcácăgiáătrịăkhácă0ăcóănghĩaălàăcóă
lỗi.
5.6 Mảng và xâu kí tự
5.6.1. Khai niệm mảng.
M ngălàăm tădưyăcácăph năt ăcóăcùngăki uăđ ợcăđ tăliênăti pătrongăb ănh ăvàăcóăth ătruyăxu tăđ nă
t ngăph năt ăbằngăcáchăthêmăm tăchỉăsốăvàoăsauătênăc aăm ng.
Chẳngăh năchúngătaăcóăth ăl uă5ăgiáătrịăki uăint màăkhôngăc năph iăkhaiăbáoă5ăbi năkhácănhau.
Víăd ,ăm tăm ngăchứaă5ăgiáătrịănguyênăki uăint có tên là billy cóăth ăđ ợcăbi uădi nănh ăsau:ă
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre

Contenu connexe

En vedette

FOSS4G 2014 Hokkaido懇親会 突然振られるプレゼン課題スライド
FOSS4G 2014 Hokkaido懇親会 突然振られるプレゼン課題スライドFOSS4G 2014 Hokkaido懇親会 突然振られるプレゼン課題スライド
FOSS4G 2014 Hokkaido懇親会 突然振られるプレゼン課題スライド
Kosuke Asahi
 
Mha Garage Catalogue
Mha Garage CatalogueMha Garage Catalogue
Mha Garage Catalogue
adele101
 
Mha Catalogue 2012
Mha Catalogue 2012Mha Catalogue 2012
Mha Catalogue 2012
adele101
 
FOSS4G 2013 Osaka karaoke LT 課題スライド
FOSS4G 2013 Osaka karaoke LT 課題スライドFOSS4G 2013 Osaka karaoke LT 課題スライド
FOSS4G 2013 Osaka karaoke LT 課題スライド
Kosuke Asahi
 

En vedette (20)

Atemporal
AtemporalAtemporal
Atemporal
 
Azure WorkshopPart1 Intro
Azure WorkshopPart1   IntroAzure WorkshopPart1   Intro
Azure WorkshopPart1 Intro
 
Katalog Ajija Edisi 03
Katalog Ajija Edisi 03Katalog Ajija Edisi 03
Katalog Ajija Edisi 03
 
FOSS4G 2014 Hokkaido懇親会 突然振られるプレゼン課題スライド
FOSS4G 2014 Hokkaido懇親会 突然振られるプレゼン課題スライドFOSS4G 2014 Hokkaido懇親会 突然振られるプレゼン課題スライド
FOSS4G 2014 Hokkaido懇親会 突然振られるプレゼン課題スライド
 
Foss4gkorea2012
Foss4gkorea2012Foss4gkorea2012
Foss4gkorea2012
 
FOSS4Gを利用したWebでの地理空間情報公開入門
FOSS4Gを利用したWebでの地理空間情報公開入門FOSS4Gを利用したWebでの地理空間情報公開入門
FOSS4Gを利用したWebでの地理空間情報公開入門
 
Iribarren
IribarrenIribarren
Iribarren
 
Mha Garage Catalogue
Mha Garage CatalogueMha Garage Catalogue
Mha Garage Catalogue
 
Who am i
Who am iWho am i
Who am i
 
Declarative JavaScript concepts and implemetation
Declarative JavaScript concepts and implemetationDeclarative JavaScript concepts and implemetation
Declarative JavaScript concepts and implemetation
 
Real Estate Investment Trusts
Real Estate Investment TrustsReal Estate Investment Trusts
Real Estate Investment Trusts
 
Mha Catalogue 2012
Mha Catalogue 2012Mha Catalogue 2012
Mha Catalogue 2012
 
Presentation1
Presentation1Presentation1
Presentation1
 
Introduction to MHA Lighting
Introduction to MHA LightingIntroduction to MHA Lighting
Introduction to MHA Lighting
 
FOSS4Gでオープンデータもかんたん
FOSS4GでオープンデータもかんたんFOSS4Gでオープンデータもかんたん
FOSS4Gでオープンデータもかんたん
 
Jeudi 7 avril 2016 | Transparence et collaboration avec les personnes morales...
Jeudi 7 avril 2016 | Transparence et collaboration avec les personnes morales...Jeudi 7 avril 2016 | Transparence et collaboration avec les personnes morales...
Jeudi 7 avril 2016 | Transparence et collaboration avec les personnes morales...
 
Jeudi 24 mars 2016 | Savoir exploiter les congrès en évitant le risque de qu...
Jeudi 24 mars 2016 | Savoir exploiter les congrès en évitant  le risque de qu...Jeudi 24 mars 2016 | Savoir exploiter les congrès en évitant  le risque de qu...
Jeudi 24 mars 2016 | Savoir exploiter les congrès en évitant le risque de qu...
 
FOSS4G 2013 Osaka karaoke LT 課題スライド
FOSS4G 2013 Osaka karaoke LT 課題スライドFOSS4G 2013 Osaka karaoke LT 課題スライド
FOSS4G 2013 Osaka karaoke LT 課題スライド
 
FOSS4G KOREA 2012参加報告
FOSS4G KOREA 2012参加報告FOSS4G KOREA 2012参加報告
FOSS4G KOREA 2012参加報告
 
From innovation to implementation – eHealth in the WHO European Region (2016)
From innovation to implementation – eHealth in the WHO European Region (2016)From innovation to implementation – eHealth in the WHO European Region (2016)
From innovation to implementation – eHealth in the WHO European Region (2016)
 

Similaire à Bai giang ktlt-v2010_academia.edu-libre

đTkh.ứng dụng tin học trong hoạt động kiểm toán nguyễn đình hựu[bookbooming...
đTkh.ứng dụng tin học trong hoạt động kiểm toán   nguyễn đình hựu[bookbooming...đTkh.ứng dụng tin học trong hoạt động kiểm toán   nguyễn đình hựu[bookbooming...
đTkh.ứng dụng tin học trong hoạt động kiểm toán nguyễn đình hựu[bookbooming...
bookbooming1
 
De cuong web2.0 cq-k37-2014
De cuong web2.0 cq-k37-2014De cuong web2.0 cq-k37-2014
De cuong web2.0 cq-k37-2014
thaihoc2202
 
THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
CNTT-DHQG
 
Bai 20 tin hoc 10
Bai 20 tin hoc 10Bai 20 tin hoc 10
Bai 20 tin hoc 10
novemberha
 
THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)
THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)
THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)
CNTT-DHQG
 
mangcoban_k07406taminhchau
mangcoban_k07406taminhchaumangcoban_k07406taminhchau
mangcoban_k07406taminhchau
Vo Oanh
 
THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)
THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)
THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)
CNTT-DHQG
 
THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
CNTT-DHQG
 
Bai giang pttkht 1 2_lop_5
Bai giang pttkht 1 2_lop_5Bai giang pttkht 1 2_lop_5
Bai giang pttkht 1 2_lop_5
Ảo Ảo
 

Similaire à Bai giang ktlt-v2010_academia.edu-libre (20)

Quan ly bo nho
Quan ly bo nhoQuan ly bo nho
Quan ly bo nho
 
đTkh.ứng dụng tin học trong hoạt động kiểm toán nguyễn đình hựu[bookbooming...
đTkh.ứng dụng tin học trong hoạt động kiểm toán   nguyễn đình hựu[bookbooming...đTkh.ứng dụng tin học trong hoạt động kiểm toán   nguyễn đình hựu[bookbooming...
đTkh.ứng dụng tin học trong hoạt động kiểm toán nguyễn đình hựu[bookbooming...
 
De cuong web2.0 cq-k37-2014
De cuong web2.0 cq-k37-2014De cuong web2.0 cq-k37-2014
De cuong web2.0 cq-k37-2014
 
THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W02_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
 
Thiet ke va lap trinh web
Thiet ke va lap trinh webThiet ke va lap trinh web
Thiet ke va lap trinh web
 
Thiet ke va lap trinh web
Thiet ke va lap trinh webThiet ke va lap trinh web
Thiet ke va lap trinh web
 
Giao trinh tin a iuh
Giao trinh tin a iuhGiao trinh tin a iuh
Giao trinh tin a iuh
 
Hướng dẫn sử dụng Pipetool.DOC
Hướng dẫn sử dụng Pipetool.DOCHướng dẫn sử dụng Pipetool.DOC
Hướng dẫn sử dụng Pipetool.DOC
 
Ch01
Ch01Ch01
Ch01
 
Bai 20 tin hoc 10
Bai 20 tin hoc 10Bai 20 tin hoc 10
Bai 20 tin hoc 10
 
THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)
THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)
THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)
 
Bai 20 Mang May Tinh(Day Du Nhat)
Bai 20 Mang May Tinh(Day Du Nhat)Bai 20 Mang May Tinh(Day Du Nhat)
Bai 20 Mang May Tinh(Day Du Nhat)
 
13.chap13 distributed systems
13.chap13 distributed systems13.chap13 distributed systems
13.chap13 distributed systems
 
mangcoban_k07406taminhchau
mangcoban_k07406taminhchaumangcoban_k07406taminhchau
mangcoban_k07406taminhchau
 
THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)
THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)
THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (1)
 
Android program 6167
Android program 6167Android program 6167
Android program 6167
 
056 giao trinh thvp2011
056 giao trinh thvp2011056 giao trinh thvp2011
056 giao trinh thvp2011
 
THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W03_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
 
Bai giang pttkht 1 2_lop_5
Bai giang pttkht 1 2_lop_5Bai giang pttkht 1 2_lop_5
Bai giang pttkht 1 2_lop_5
 
Lohong Buoi34
Lohong Buoi34Lohong Buoi34
Lohong Buoi34
 

Dernier

C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoiC6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
dnghia2002
 
bài tập lớn môn kiến trúc máy tính và hệ điều hành
bài tập lớn môn kiến trúc máy tính và hệ điều hànhbài tập lớn môn kiến trúc máy tính và hệ điều hành
bài tập lớn môn kiến trúc máy tính và hệ điều hành
dangdinhkien2k4
 
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
ltbdieu
 
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận HạnTử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Kabala
 
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdfxemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
Xem Số Mệnh
 

Dernier (20)

C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoiC6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
C6. Van de dan toc va ton giao ....pdf . Chu nghia xa hoi
 
Giáo trình nhập môn lập trình - Đặng Bình Phương
Giáo trình nhập môn lập trình - Đặng Bình PhươngGiáo trình nhập môn lập trình - Đặng Bình Phương
Giáo trình nhập môn lập trình - Đặng Bình Phương
 
Kiến thức cơ bản về tư duy số - VTC Net Viet
Kiến thức cơ bản về tư duy số - VTC Net VietKiến thức cơ bản về tư duy số - VTC Net Viet
Kiến thức cơ bản về tư duy số - VTC Net Viet
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
20 ĐỀ DỰ ĐOÁN - PHÁT TRIỂN ĐỀ MINH HỌA BGD KỲ THI TỐT NGHIỆP THPT NĂM 2024 MÔ...
 
Đề thi tin học HK2 lớp 3 Chân Trời Sáng Tạo
Đề thi tin học HK2 lớp 3 Chân Trời Sáng TạoĐề thi tin học HK2 lớp 3 Chân Trời Sáng Tạo
Đề thi tin học HK2 lớp 3 Chân Trời Sáng Tạo
 
bài tập lớn môn kiến trúc máy tính và hệ điều hành
bài tập lớn môn kiến trúc máy tính và hệ điều hànhbài tập lớn môn kiến trúc máy tính và hệ điều hành
bài tập lớn môn kiến trúc máy tính và hệ điều hành
 
xemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdf
xemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdfxemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdf
xemsomenh.com-Vòng Thái Tuế và Ý Nghĩa Các Sao Tại Cung Mệnh.pdf
 
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
26 Truyện Ngắn Sơn Nam (Sơn Nam) thuviensach.vn.pdf
 
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
TUYỂN TẬP ĐỀ THI GIỮA KÌ, CUỐI KÌ 2 MÔN VẬT LÍ LỚP 11 THEO HÌNH THỨC THI MỚI ...
 
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...
ĐỀ KIỂM TRA CUỐI KÌ 2 BIÊN SOẠN THEO ĐỊNH HƯỚNG ĐỀ BGD 2025 MÔN TOÁN 10 - CÁN...
 
các nội dung phòng chống xâm hại tình dục ở trẻ em
các nội dung phòng chống xâm hại tình dục ở trẻ emcác nội dung phòng chống xâm hại tình dục ở trẻ em
các nội dung phòng chống xâm hại tình dục ở trẻ em
 
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
Danh sách sinh viên tốt nghiệp Đại học - Cao đẳng Trường Đại học Phú Yên năm ...
 
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
 
Giới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vn
Giới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vnGiới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vn
Giới Thiệu Về Kabala | Hành Trình Thấu Hiểu Bản Thân | Kabala.vn
 
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận HạnTử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
Tử Vi Là Gì Học Luận Giải Tử Vi Và Luận Đoán Vận Hạn
 
Bài học phòng cháy chữa cháy - PCCC tại tòa nhà
Bài học phòng cháy chữa cháy - PCCC tại tòa nhàBài học phòng cháy chữa cháy - PCCC tại tòa nhà
Bài học phòng cháy chữa cháy - PCCC tại tòa nhà
 
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
TUYỂN TẬP 50 ĐỀ LUYỆN THI TUYỂN SINH LỚP 10 THPT MÔN TOÁN NĂM 2024 CÓ LỜI GIẢ...
 
xemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdf
xemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdfxemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdf
xemsomenh.com-Vòng Lộc Tồn - Vòng Bác Sĩ và Cách An Trong Vòng Lộc Tồn.pdf
 
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdfxemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
xemsomenh.com-Vòng Tràng Sinh - Cách An 12 Sao Và Ý Nghĩa Từng Sao.pdf
 

Bai giang ktlt-v2010_academia.edu-libre

  • 1. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 1 Chương 1. NHẬP MÔN VỀ MÁY TÍNH VÀ LẬP TRÌNH 1.1 Phần cứng và phần mềm 1.1.1. Phần cứng (hardware) Phần cứng,ăcònăg iălàăcương liệu (hardware),ălàăcácăăthànhăph nă(v tălỦ)ăc ăth ăc aămáyătínhă hayăh ăthốngămáyătínhănh ălàămàn hình, chu t, bàn phím, máy in, máy quét, v ămáyătính, b ă nguồn,ăb ăviăx ălỦăCPU, boăm chăch ,ăcácălo iădâyănối,ăloa, ổăđĩaăm m, ổăđĩaăcứng,ăổăCDROM, ổăDVD, ... D aătrênăchứcănĕngăvàăcáchăthứcăho tăđ ngăng iătaăcònăphânăbi tăph năcứngăraăthành: - Nh p hay đầu vào (Input):ăCácăb ăph năthuănh păd ăli uăhayăm nhăl nhănh ălàăbànăphím,ă chu t... - Xuất hay đầu ra (Output):ăCácăb ăph nătr ăl i,ăphátătínăhi u,ăhayăth căthiăl nhăraăbênăngoàiă nh ălàămànăhình,ămáyăin,ăloa,ă... Ngoàiăcácăb ăph nănêuătrênăliênăquanăt iăph năcứngăc aămáyătínhăcònăcóăcácăkháiăni măquană tr ngăsauăđây: - Bus: chuy năd ăli uăgi aăcácăthi tăbịăph năcứng. - BIOS (BasicăInputăOutputăSystem):ăcònăg iălàăh ăthốngăxu tănh păcơăb n nhằmăkh iăđ ng,ă ki mătra,ăvàăcàiăđ tăcácăm nhăl nhăcơăb n choăph năcứngăvàăgiaoăquy năđi uăkhi năchoăh ăđi uă hành - CPU: b ăphânăviăx ălỦăđi uăkhi nătoàn b ămáyătính - Kho lưu trữ dữ liệu: l uăgi ,ăcungăc p,ăthuănh năd ăli u - Các loại chíp hỗ trợ: nằmăbênătrongăboăm chăch hayănằmătrongăcácăthi tăbịăngo iăvi c aă máyătínhăcácăconăchipăquanătr ngăs ăgi ăvaiătròăđi uăkhi năthi tăbịăvàăliênăl căv iăh ăđi uăhành qua b ăđi uăv n hay qua ph năs n - Bộ nhớ: làăthi tăbịăbênătrongăboăm chăch ăgi ănhi măv ătrungăgianăcungăc păcácăm nhăl nh cho CPU vàăcácăd ăli uăt ăcácăb ăph nănh ălàăBIOS,ăph năm m, khoăl uătr , chu t đồngăth iă t iăv ăchoăcácăb ăph năv aăk ăk tăqu ăcácătínhătoán,ăcácăphép toán hayăcácăd ăli uăđư/đangă đ ợcăx ălỦ.
  • 2. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 2 - Các cổng vào/ra: USB (Universal Serial Bus), Máyăin,ămànăhình,ăchu tăphímă,ăầ 1.1.2. Phần mềm (Sotfware) Phần mềm hayănhuăli uă(software)ălàăm tăt păhợpănh ngăcâuăl nh đ ợcăvi tăbằngăm tăho că nhi uăngônăng ăl pătrình theoăm tătr tăt ăxácăđịnhănhằmăt ăđ ngăth căhi năm tăsốăchứcănĕngă ho căgi iăquy tăm tăbàiătoánănàoăđó. - Đặc điểm Tr căđây,ăđ ăt oăraăch ơngătrìnhămáyătínhăng iătaăph iălàmăvi cătr căti păv iăcácăconăsốă0ă ho că1,ăhayăcònăg iălàăngônăng ămáy.ăCôngăvi cănàyăvôăcùngăkhóăkhĕn,ăchi mănhi uăth iăgian,ă côngăsứcăvàăđ căbi tăd ăgâyăraălỗi.ăĐ ăkhắcăph cănh ợcăđi mănày,ăng iătaăđ ăxu tăraăhợpăng ,ă m tăngôn ng ăchoăphépăthayăth ădưyă0ăho că1ănàyăb iăcácăt ăgợiănh ăti ngăAnh.ăTuyănhiên,ăc iă ti nănàyăv năcònăch aăth tăthíchăhợpăv iăđaăsốăng iădùngămáyătính,ănh ngăng iăluônămongă muốnăcácăl nhăchínhălàăỦănghĩaăc aăcácăthaoătácămàănóămôăt .ăVìăv y,ăngayăt ănh ngănĕmă1950,ă ng iătaăđưăxâyăd ngănh ngăngônăng ăl pătrìnhămàăcâuăl nhăc aănóăg năv iăngônăng ăt ănhiên.ă Cácăngônăng ănàyăđ ợcăg iălàăngônăng ăl pătrìnhăb căcao. Ch ơngătrìnhămáyătínhăth ngăđ ợcăt oăraăb iăconăng i,ănh ngăng iănàyăđ ợcăg iălàăl pă trình viên,ătuyănhiênăcũngătồnăt iănh ngăch ơngătrìnhăđ ợcăsinhăraăb iăcácăch ơngătrìnhăkhác. - Phân loại + Theo phương thức hoạt động Phần mềm hệ thống: dùngăđ ăv năhànhămáyătínhăvàăcácăph năcứngămáyătính,ăvíăd ănh ăcácăh ă đi uăhành máy tính Windows XP, Linux, Unix,ăcácăth ăvi năđ ngă(cònăg iălàăth ăvi năliênăk tă đ ng:ădynamic linked library - DLL)ăc aăh ăđi uăhành,ăcácătrìnhăđi uăkhi n (driver), ph năs n (firmware) và BIOS.ăĐâyălàăcácălo iăph năm mămàăh ăđi uăhànhăliênăl căv iăchúngăđ ăđi uă khi năvàăqu nălỦăcácăthi tăbịăph năcứng. Phần mềm ứng dụng: đ ăng iăs ăd ngăcóăth ăhoànăthànhăm tăhayănhi uăcôngăvi cănàoăđó,ăvíă d ă nh ă cácă ph nă m mă vĕnă phòng (Microsoft Office, Lotus 1-2-3, FoxPro,ă ầ), ph nă m mă doanhănghi p, ph năm măqu nălỦănguồnănhânăl căXETA, ph năm măgiáoăd c, cơăs ăd ăli u, ph năm mătròăchơi, ch ơngătrìnhăti n ích,ăhayăcácălo iăph năm măácătính. Các phần mềm dịch mã: baoăgồmătrìnhăbiênădịch và trìnhăthôngădịch:ăcácălo iăch ơngătrìnhă nàyăs ăđ căcácăcâuăl nh t ămưănguồn đ ợcăvi tăb iăcácăl pătrìnhăviên theoăm tăngônăng ăl pă trình và dịch nóăsangăd ngăngônăng ămáy màămáyătínhăcóăth ăhi uăđ c,ăhayădịchănóăsangăm tă d ngăkhácănh ălàăt pătinăđốiăt ợng (object file)ăvàăcácăt pătinăth ăvi n (library file)ămàăcácăph nă m măkhácă(nh ăh ăđi uăhànhăchẳngăh n)ăcóăth ăhi uăđ ăv năhànhămáyătínhăth căthiăcácăl nh. Theo khả năng ứng dụng: Nh ngăph năm măkhôngăph ăthu c,ănóăcóăth ăđ ợcăbánăchoăb tăkỳă kháchăhàngănàoătrênăthịătr ngăt ădo.ăVíăd :ăph năm măv ăcơăs ăd ăli u nh ăOracle,ăđồăh aă
  • 3. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 3 nh ăPhotoshop, Corel Draw,ăso năth oăvàăx ălỦăvĕnăb n,ăb ngătính...ă uăđi m:ăThôngăth ngă đâyă làă nh ngă ph nă m mă cóă kh ă nĕngă ứngă d ngă r ngă rưiă choă nhi uă nhómă ng iă s ă d ng.ă Khuy tăđi m:ăThi uătínhăuy năchuy n,ătùyăbi n. Nh ngăph năm măđ ợcăvi tătheoăđơnăđ tăhàngăhayăhợpăđồngăc aăm tăkháchăhàngăc ăth ă nàoăđóă(m tăcôngăty,ăb nhăvi n,ătr ngăh c...).ăVíăd :ăph năm măđi uăkhi n,ăph năm măhỗătrợă bán hàng... uăđi m:ăCóătínhăuy năchuy n,ătùyăbi năcaoăđ ăđápăứngăđ ợcănhuăc uăc aăm tănhómăng iă s ăd ngănàoăđó.ăKhuy tăđi m:ăThôngăth ngăđâyălàănh ngăph năm măứngăd ngăchuyênăngànhă hẹp. + Các loại khác: Cũngădoăconăng iăvi tănênăđ ăph căv ăm căđíchănàoăđó,ănh ngăVirus (máy tính) làăvirus,ătrojan....ăđ ợcăvi tăđ ăch yăv iănh ngăm căđíchăriêngăc aăm tăm tănhómăng iă nhằnăl aăđ o,ăqu ngăcáo,ăĕnăcắp,ăpháăho iăthôngătin,ăpháăho iăph năcứngăho căchỉălàăđ ătrêuă ch căng iădùngăviătính. - Quá trình tạo phần mềm Về mặt thiết kế Tùyătheoămứcăđ ăphứcăt păc aăph năm mălàmăra,ăng iăthi tăk ăph năm m s ăítănhi uădùngă đ năcácăph ơngăti năđ ăt oăraăm uăthi tăk ătheoăỦămuốnă(chẳngăh nănh ălàăcácăsơăđồăkhối, các l uăđồ, các thu tătoán và các mưăgi ),ăsauăđóăm uănàyăđ ợcămưăhoáăbằngăcácăngônăng ăl pătrình vàăđ ợc các trìnhădịch chuy năthànhăcácăkhốiăl nh (module) hay/và các t păkh ăthi.ăT păhợp cácăt păkh ăthiăvàăcácăkhốiăl nhăđóălàmăthànhăm tăph năm m.ăTh ngăkhiăm tăph năm măđ ợcă t oăthành,ăđ ăchoăhoànăh oăthìăph năm măđóăph iăđ căđi uăchỉnhăhayăs aăch aăt ăkhâuăthi tă k ăchoăđ năkhâuăt oăthànhăphiênăb n ph năm măm tăsốăl n.ăM tăph năm măthôngăth ngăs ă t ơngăthích v iăm tăhayăvàiăh ăđi uăhành, tùy theoăcáchăthi tăk ,ăcáchăvi tămưănguồn và ngôn ng ăl pătrình đ ợc dùng. Sản xuất và phát triển Vi căphátătri năvàăđ aăraăthịătr ngăc aăm tăph năm mălàăđốiăt ợngănghiênăcứuăc aăb ămônă kỹăngh ăph năm m hayăcònăg iălàăcôngăngh ăph năm m (software engineering).ăB ămônănàyă nghiênăcứuăcácăph ơngăphápătổăchức,ăcáchăthứcăs ăd ngănguồnătàiănguyên,ăvòngăquyătrìnhăs nă xu t,ăcùngăv iăcácămốiăliênăh ăv iăthịătr ng,ăcũngănh ăliênăh ăgi aăcácăy uătốănàyăv iănhau.ă Tốiă uăhoáăquiătrìnhăs năxu tăph năm măcũngălàăđốiăt ợngăđ căcứuăxétăc aăb ămôn. 1.2 Các ngôn ngữ l p trình 1.2.1. Khái niệm ngôn ngữ l p trình
  • 4. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 4 Ngôn ngữ l p trình (programming language)ălàăm tăt păconăc aăngônăng ămáyătính.ăĐây là m tăd ngăngônăng đ ợcăchu năhóa.ăNóăđ ợcădùngăđ ămiêuăt ănh ngăquáătrình,ănh ngăng ă c nhăm tăcáchăr tăchiăti t. Định nghĩa (theo [Loud 94], T.3): Ngônăng ăl pătrìnhălàăm tăh ăthốngăđ ợcăkỦăhi uăhóaăđ ămiêuăt ă nh ngătínhătoánă(quaămáyătính)ătrongăm tăd ng màăc ăconăng iăvàămáyăđ uăcóăth ăđ căvàăhi u đ ợc. Theoăđịnhănghĩaă ătrênăthìăm tăngônăng ăl pătrìnhăph iăth aămưnăđ ợcăhaiăđi uăki năcơăb nălà: Nóăph iăd ăhi uăvàăd ăs ăd ngăđốiăv iăng iăl pătrình, đ ăconăng iăcóăth ădùngănóăgi iăquy tăcácă bài toán khác. Nóăph iămiêuăt ăm tăcáchăđ yăđ ăvàărõăràngăcácăti nătrìnhă(process),ăđ ăcóăth ăch yăđ ợcă trên các máy tính khác. M tăt păhợpăcácăchỉăthịăđ ợcăbi uăthịănh ăngônăng ăl pătrìnhăđ ăth căhi năcácăthaoătácămáyă tínhănàoăđóăthôngăquaăm tăch ơngătrình.ăCácătênăkhácăc aăkháiăni mănàyăn uăkhôngăbịăl măl nă là ch ơngătrìnhămáyătính hay ch ơngătrìnhăđi nătoán. Lưu ý: Kháiăni măchương trình (program)ăvi tăchoămáyăviătínhănhằmăgi iăquy tăm tăv năđ ă nàoăđóăth ngăđ ợcăg iălàăphần mềm máy tính.ă(Thíăd ăchương trình MS Word làăm tăcáchăg iă chungăchung,ăchínhăxácăhơnălàăphần mềm MS Word thìărõăhơnăđóălàăm tăch ơngătrìnhăứngă d ng.) Ch ăl p trình dùngăđ ăchỉăthaoătácăc aăconăng iănhằmăki năt oănênăcácăch ơngătrìnhămáyă tínhăthôngăquaăcácăngônăng ăl pătrình.ăNg iătaăcònăg iăquáătrìnhăl pătrìnhăđóălàăquá trình mã hoá thôngătinăt ănhiênăthànhăngônăng ămáy.ăTrongăcácătr ngăhợpăxácăđịnhăthìăch ăl p trình cònăđ ợcăvi tălàă"vi tămư"ă(choăch ơngătrìnhămáyătính). Nh ăv y,ătheoăđịnhănghĩa,ămỗiăngônăng ăl pătrìnhăcũngăchínhălàăm tăch ơngătrình,ănh ngă cóăth ăđ ợcădùngăđ ăt oănênăcácăch ơngătrìnhăkhác.ăM tăch ơngătrìnhămáyătínhăđ ợcăvi tăbằngă m tăngônăng l pătrìnhăthìănh ngăchỉăthịă(c aăriêngăngônăng ă y)ăgópăph năt oănênăch ơngă trìnhăđ ợcăg iălàămã nguồn c aăch ơngătrìnhă y. Thaoătácăchuy năd ngăt ămưănguồnăsangăthànhăchuỗiăcácăchỉăthịămáyătínhăđ ợcăth căhi nă hoànătoànăt ơngăt ănh ălàăvi căchuy nădịchăgi aăcácăngônăng t ănhiênăc aăconăng i.ăCácă thaoătácănàyăg iălàăbiên dịch (hayăngắnăg năhơnălàădịch).ăNg iătaăcònăphânăvi căbiênădịchălàmă haiălo iătùyătheoăquáătrìnhădịchăx yăraătr căquáătrìnhăth căthiăcácătínhătoánăhayănóăx yăraăcùngă lúcăv iăquáătrìnhătínhătoán: M tăphần mềm thông dịch làăm tăph năm m cóăkh ănĕngăđ c,ăchuy nădịchămưănguồnăc aă m tăngônăng ăvàăraăl nhăchoămáyătínhăti năhànhăcácătínhătoánăd aătheoăcú pháp c aăngônăng . M tăphần mềm biên dịch hayăngắnăg năhơnătrình dịch làăph năm măcóăkh ănĕngăchuy nă dịchămưănguồnăc aăm tăngônăng ăbanăđ uăsangăd ngămưăm iăthu căv ăngônăng ăc păth păhơn.
  • 5. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 5 Ngônăng ăc păth pănh tălàăm tăchuỗiăcácăchỉăthịămáyătính màăcóăth ăđ ợcăth căhi nătr că ti păb iăchính máy tính (thông qua các thao tác trên vùngănh ).ăTr căđây,ăh uăh tăcácătrìnhă dịchăcũăth ngăph iăthôngădịchăt ămưănguồnăsangăb ămưăph ă(cácăt păcóădangă*.obj),ărồiăsauă đó,ăm iăbiênădịchăti păsangăcácăt pătinăthiăhành.ăNgàyănay,ăh uăh tăcácătrìnhădịchăđ uăcóăkh ă nĕngăbiênădịchămưănguồnătr căti păsangăthànhăcácăt pătinăthiăhànhăhayăbiênădịchăsangăcácăd ngă mưăkhácăth păhơnătuỳătheoăyêuăc uăc aăng iăl pătrình. Đi măkhácănhauăgi aăthông dịch và biên dịch là: Trìnhăthôngădịch s ădịchăt ngăcâuăl nhăm tă vàăch ơngătrìnhăđíchăs ăkhôngăđ ợcăl uăl i.ăCònătrìnhăbiênădịch s ădịchătoànăb ăch ơngătrình,ă choăraăch ơngătrìnhăđíchăđ ợcăl uăl iătrongămáyătínhărồiăm iăth căhi năch ơngătrình. M tăch ơngătrìnhămáyătínhăcóăth ăđ ợcăth căthiăbằngăcáchătổăhợpăc aăvi căbiênădịchăvàă thôngădịch. Vì yêu c uăđòiăh iăđ ăchínhăxácăchiăti tăcaoănênăvi căvi tămưăth ngăgâyăkhóăkhĕnăchoă ng iăđ căđ ătheoădõiăvàăđôiăkhiăgâyăkhóăchoăchínhăl pătrìnhăviên đưăt oăraămư nguồnăđó.ăDoăđó,ă m tăl iăkhuyênălàănênădùngăthêmănhi uăchúăgi iătrongălúcăl pătrình.ăCácăchúăgi iănàyăth ngăr tă quanătr ngăchoăng iăkhácăđ căvàăhi uăcácămưănguồn 1.2.2. Phân loại ngôn ngữ l p trình Sauăđâyălàăm tătrongănh ngăcáchăphânălo iăphổăbi n: Logic Programming (L pătrìnhălogic - LTL): M tăph ơngăphápăti păc năvi căbi uădi nătriăthứcă vàăgi iăcácăbàiătoánălôgicăt ăm tăcơăs ătriăthứcăchoătr cătrênămáyătính.ăM tăcơăs ătriăthứcălàă m tăt păcácăs ăki năvàăcácălu tăbi uădi năquanăh ălôgicăgi aăcácăs ăki năđó.ăLTLăxu tăphátăt ă m tăcơăs ătriăthứcăvàăm tăcâuăh i,ăti năhànhăcácăl pălu nălôgicăđ tìmăraăl iăgi iăchoăcâuăh iăđó.ă (VD: prolog,ầ). Functional Programming (l pătrình hàm): s ăd ngăcácăhàmăhi uătheoănghĩaătoánăh călàmăc uă trúcăđi uăkhi năc aăch ơngătrình. (VD: Lisp,ầ) Structural Programming (L pătrìnhăcóăc uătrúc):ăKĩăthu tăl pătrìnhăd aătrênăquanăni măphână tíchăm tăchứcănĕngăx ălíăthôngătinăthànhăcácăchứcănĕngănh ăhơn,ălàmămịnăd năquáătrìnhănàyăchoă t iăkhiăxâyăd ngăđ ợcăcácăđơnăth .ăCh ơngătrìnhăchỉădùngăcácăc uătrúcăđi uăkhi năcơăb n:ătu nă t ,ăr ănhánh,ăl păvàăraăkh iăl p.ăL pătrìnhăcóăc uătrúc s ăd ngăcáchăti păc năt ătrênăxuống,ătứcă làăphânătáchăt ătoànăth ăđ năb ăph n,ărồiăl iăt ăb ăph năđ năb ăph nănh ăhơn.ăCácăđơnăth ătrongă m tăch ơngătrìnhăcóăc uătrúcăcóătínhăđ căl păt ơngăđốiăcao,ăchỉăgiaoăti păv iănhauăthôngăquaă giaoădi năđưăxácăl pătr c,ădoăđóăL pătrìnhăcóăc uătrúc cóăm tăsốă uăđi m:ăd ăphânăcôngănhi uă ng iăcùngăl păm tăch ơngătrình,ăd ăth ăvàăhi uăchỉnhăch ơngătrình.ă(VD:ăC,ăPascal,ầ) Concurrent Programming (L pătrìnhăsongăsong): Chiaăm tăv năđ ălàmă2ăph năvàăgi iăquy tă songăsongăv iănhauă(VD:ăAda,ăErlang,ăJavaă.v.v.)
  • 6. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 6 Object-Oriented Programming - OOP (L pă trìnhă h ngă đốiă t ợng):ă đ ợcă phátă minhă nĕmă 1965 b iăOle-Johan Dahl và Kristen Nygaard trongăngônăng ăSimula.ăSoăv iăph ơngăphápăl pă trình cổăđi n,ăthìătri tălỦăchínhăbênătrongălo iăngônăng ălo iănàyălàăđ ătáiăd ngăcácăkhốiămưă nguồnăvàăcungăứngăchoăcácăkhốiănàyăm tăkh ănĕngăm i:ăchúngăcóăth ăcóăcácăhàmă(g iălàăcácă ph ơngăthức)ăvàăcácăd ăli uă(g iălàăthu cătính)ăn iăt i.ăKhốiămưănh ăv yăđ ợcăg iălàăđốiăt ợng.ă Cácăđốiăt ợngăthìăđ căl păv iămôiătr ngăvàăcóăkh ănĕngătr ăl iăv iăyêuăc uăbênăngoàiătùyătheoă thi tăk ăc aăng iăl pătrình.ăV iăcáchăxâyăd ngănày,ămỗiăđốiăt ợngăs ăt ơngăđ ơngăv iăm tă ch ơngătrìnhăriêngăcóănhi uăđ cătínhăm iămàăquanătr ng nh tălàătínhăđaăhình,ătínhăđóng,ătínhă tr uăt ợngăvàătínhăth aăk . (VD: Java, Ruby, C++ , C#, .v.v.) Concurrency oriented programs (L pătrìnhăh ngăthànhăph n):ăụăt ngăxâyăd ngăcácăph nă m mă bằngă cácă k tă hợpă cácă modulă l iă v iă nhau,ă giốngă nh ă m tă nhàă máyă lắpă rápă oto.ă (VD:ă Java,..) Agent oriented programs (L pătrìnhăh ngăAgent):ăMỗiăch ơngătrìnhăkhiăt oăraăcóăkh ănĕngă t ăch ,ăt ăth căthiătùyăthu căvàoămôiătr ngămàănóătồnăt iă(VD:ăJava,ăC#,ầ) M tăngônăng ăkhôngănh tăthi tălàăchỉăđ ợcăphépăthu că1ătrongăcác lo iătrên,ămàăcóăth ăhỗă trợănhi uăki uăt ăduyăkhácănhau. 1.3 Giải quyết vấn đề và phát triển phần mềm - Các mô hình phát triển sản phẩm phần mềm Quáătrìnhăphátătri năph năm mălàăt păhợpăcácăthaoătácăvàăcácăk tăqu ăt ơngăquanăđ ăs nă xu tăraăm tăs năph m ph năm m.ăH uăh tăcácăthaoătácănàyăđ ợcăti năhànhăb iăcácăkỹăs ăph nă m m.ăCácăcôngăc ăhỗătrợămáyătínhăv ăkỹăthu tăph năm m cóăth ăđ ợcădùngăđ ăgiúpătrongăm tă sốăthaoătác. Cóă4ăthaoătácălàăn năt ngăc aăh uăh tăcácăquáătrìnhăph năm mălà: + Đ căt ăph năm m:ăCácăchứcănĕngăc aăph năm măvàăđi uăki năđ ănóăho tăđ ngăph iăđ ợcă địnhănghĩa. + S ăphátătri năph năm m:ăĐ ăph năm măđ tăđ ợcăđ căt ăthìăph iăcóăquáătrìnhăphátătri nă này. + Đánhăgiáăph năm m:ăPh năm măph iăđ ợcăđánhăgiáăđ ăchắcăchắnărằngănóălàmănh ngăgìă màăkháchăhàngămuốn. + S ăti năhóaăc aăph năm m:ăPh năm măph iăti năhóaăđ ăth aămưnăs ăthayăđổiăcácăyêuăc uă c aăkháchăhàng. - Mô hình thác nước MôăhìnhănàyălàmăchoăỦănghĩaăvi căs năxu tăph năđ ợcăth yărõăhơn.ă
  • 7. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 7 + Phânătíchăcácăyêuăc uăvàăđịnhănghĩa:ăh ăthốngădịchăv ,ăkhóăkhĕnăvàăm cătiêuăđ ợcăhìnhăthànhăb iă s ătrợăỦăc aăh ăthốngăng iătiêuădùng.ăSauăđóăcácăy uătốănàyăđ ợcăđịnhănghĩaăsaoăchoăcóăth ăhi uăđ ợcă b iăc ăng iăphátătri năvàăng iătiêuădùng. + Thi tăk ăph năm măvàăh ăthống:ăThi tăk ăh ăthốngăcácăquáătrình,ăcácăb ăph năvàăcácăyêuăc uăv ă c ăph năm măl năph năcứng.ăHoànăt tăh uănh ăt tăc ăki nătrúcăc aăcácăh ăthốngănày.ăThi tăk ăph nă m măthamăgiaăvàoăvi căbi uăthịăcácăchứcănĕngăh ăthốngăph năm mămàăcóăth ăđ ợcăchuy năd ngăthànhă m tăhayănhi uăch ơngătrìnhăkh ăthi. + Th căhi năvàăth ănghi măcácăđơnăvị:ăTrongăgiaiăđo nănày,ăthi tăk ăph năm măph iăđ ợcăchứngă th cănh ălàăm tăt păh pănhi uăch ơngătrìnhăhayănhi uăđơnăvịănh .ăTh ănghi măcácăđơnăvịăbaoăgồmăxácă minhărằngămỗiăđơnăvịăth aămưnăđ căt ăc aănó. + Tổngăhợpăvàăth ănghi mătoànăb :ăCácăđơnăvịăch ơngătrìnhăriêngăl ăhayăcácăch ơngătrìnhăđ ợcă tíchăhợpăl iăvàăth ănghi mănh ălàăm tăh ăthốngăhoànăt tăvàăchứngăt ăđ ợcăcácăyêuăc uăc aăph năm mă đ ợcăth aămưn.ăSauăkhiăth ănghi măph năm măđ ợcăcungăứngăchoăng iătiêuădùng. + S năxu tăvàăb oătrì:ăThôngăth ngă(nh ngăkhôngăbắtăbu c)ăđâyălàăphaălâuănh tăc aăchuăkỳăsốngă (c aăs năph m).ăPh năm măđ ợcăcàiăđ tăvàăđ ợcădùngătrongăth căt .ăB oătrìăbaoăgồmăđi uăchỉnhăcácălỗiă màăch aăđ ợcăphátăhi nătrongăcácăgiaiăđ anătr căc aăchuăkìăsống;ănângăc păs ăth căhi năc aăh ăthốngă cácăđơnăvịăvàănângăcaoăh ăthốngădịchăv ăchoălàăcácăphátăhi năvêăyêuăc uăm i. Đi măh năch c aămôăhìnhănàyălàănóăkhôngălinhăho t.ăCácăb ăph năc aăđ ăánăchiaăraăthànhănh ngă ph năriêngăc aăcácăgiaiăđo n.ăH ăthốngăphânăphốiăđôiăkhiăkhôngădùngăđ ợcăvìăkhôngăth aămưnăđ ợcă yêuăc uăc aăkháchăhàng.ăM cădùăv yămôăhìnhănàyăph nă nhăth căt ăcôngăngh .ăNh ălàăm tăh ăqu ăđâyă v nălàămôăhìnhăcơăs ăchoăđaăsốăcácăh ăthốngăphátătri năph năm mă- ph năcứng. - Mô hình phát triển tiến hoá của phần mềm Phân loại sự phát triển tiến hóa + L pătrìnhăthĕmădò:ăđốiăt ợngăc aăquáătrìnhăbằngăcáchălàmăvi căv iăkháchăhàngăđ ăthĕmădòăcácă yêuăc uăvàăphânăphốiăph năm mădứtădi m.ăS ăphátătri nănênăbắtăđ uăv iănh ngăph nănàoăđưăđ ợcăhi uă
  • 8. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 8 rõ.ăPh năm măs ăđ ợcăthêmăvàoăcácăchứcănĕngăm iăkhiămàănóăđ ợcăđ ănghịăchoăkháchăhàngă(vàănh nă v ăcácăthôngătin). + M uăthĕmădò:ăđốiăt ợngăc aăphátătri năti năhoáănàyălàănhằmăhi uăcácăyêuăc uăc aăkháchăhàng và doăđóăphátătri năcácăđịnhănghĩaăyêuăc uătốtăhơnăchoăph năm m.ăCácăm uăt pătrungătrênăcácăthíănghi mă v iănh ngăph năđòiăh iănàoăc aăkháchăhàngămàăcóăth ăgâyăs ăkhóăhi uăhayăng ănh n. Phátătri năph năm mătheoămôăhìnhăti năhoá Phân tích mô hình: Môăhìnhăphátătri năti năhóaănàyăhi uăqu ăhơnămôăhìnhăthácăn c.ăTuyănhiên,ă nóăv năcònăcácăkhuy tăđi m:ă + Quáătrìnhăthìăkhôngănhìnăth yărõăđ ợc:ăCácănhàăqu nălỦăc năphânăphốiăth ngăxuyênăđ ăđoăl ngă s ăti năb .ăNóăkhôngăkinhăt ătrongăvi călàmăraăcácăhồăsơăchoăph năm m. + Ph năm măth ngăd ợcăc uătrúc nghèoănàn:ăS ăthayăđổiăliênăt căd ălàmăđổăvỡăc uătrúcăc aăph nă m m,ăt oăraăs ăkhóăkhĕnăvàătốnăphí. + Th ngăđòiăh iănh ngăkỹănĕngăđ căbi t:ăH uăh tăcácăh ăthốngăkh ădĩătheoăcáchănàyăđ ợcăti nă hànhăb iăcácănhómănh ăcóăkỹănĕngăcaoăcũngănh ăcácăcáănhânăph i nĕngăđ ng. Môăhìnhănàyăthíchăhợpăv i:ă + Phátătri năcácălo iăph năm măt ơngăđốiănh + Phátătri năcácălo iăph năm măcóăđ iăsốngăt ơngăđốiăngắn + Ti năhànhătrongăcácăh ăthốngăl năhơnă ănh ngăchỗămàăkhôngăth ăbi uăthịăđ ợcăcácăđ căt ăchiăti tă trong lúc ti năhành.ăThíăd ăc aătr ngăhợpănàyălàăcácăh ăthốngăthôngăminhănhânăt oă(AI) và các giao di năchoăng iădùng. - Mô hình xoắn ốc Boehm
  • 9. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 9 Phátătri năph năm mătheoăki uăBoehm Đâyălàămôăhìnhăphátătri n t ămôăhìnhăthácăn căchoăth yămứcăđ ătổngăquátăhơnăc aăcácăphaăs nă xu tăc aăm tăs năph m.ăMôăhìnhăđ ợcăđ ănghịăb iăBoehm vàoănĕmă1988.ăMôăhìnhănàyăcóăth ăchỉăraă cácăr iăroăcóăth ăhìnhăthànhătrênăcĕnăb năc aămôăhìnhăquáătrìnhă(s năxu t)ătổngăquát. MôăhìnhăBoehmăcóăd ngăxoắnăốc.ăMỗiăvòngăl păđ iădi năchoăm tăphaăc aăquáătrìnhăph năm m.ăVòngă trongăcùngăt pătrungăv ătínhăkh ăthi,ăvòngăk ăloăv ăđịnhănghĩaăcácăyêuăc u,ăk ăđ nălàăthi tăk ,ă... Khôngăcóăm tăphaănàoăđ ợcăxemălàăcốăđịnhătrongăvòngăxoắn.ăMỗiăvòngăcóă4ăph năt ơngăứngăv iăm tă pha. + Càiăđ tăđốiăt ợng:ăChỉăraăcácăđốiăt ợngăc a phaătrongăđ ăán.ăNh ngăkhóăkhĕnăhayăc ỡngăbứcăc aă quáătrìnhăvàăc aăs năph măđ ợcăxácăđịnhăvàăđ ợcălênăk ăho chăchiăti t.ăXácăđịnhăcácăy uătốăr iăroăc aă đ ăán.ăCácăph ơngăánăthayăth ătùyătheoăcácăr iăroănàyăcóăth ăđ ợcăd ătrù. + L ợngăđịnhăvàăgi măthi uăr iăro.ăTi năhànhăphânătíchămỗiăy uătốăr iăroăđưăxácăđịnh.ăCácăb căđ tă raăđ ăgi măthi uăr iăro. + Phátătri năvàăđánhăgiá:ăSauăkhiăđánhăgiáăcácăy uătốăr iăro,ăm tămôăhìnhăphátătri năchoăh ăthốngă đ ợcăch n. + Lênăk ăho ch:ăĐ ăánăđ ợcăxemăxétăvàăquy tăđịnhăcóănênăhayăkhôngăti păt căphaăm iătrongăvòngă l p. Các quá trình linh hoạt Làăquáătrìnhămàătrongăđóăc uătrúcăkh iăđ ngăs ănh ănh ngălinhăđ ngăvàăl năd năc aăcácăđ ăánăph nă m mănhằmătìmăraăcácăkhóăkhĕnătr căkhiănóătr ăthànhăv năđ ăcóăth ăd năt iănh ngăh y ho i.ăQuáătrìnhă nàyănh năm nhăs ăg nănhẹăvàăt pătrungăhơnălàăcácăph ơngăphápătruy năthống.ăCácăquáătrìnhălinhăho tă
  • 10. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 10 dùngăcácăthôngătinăph năhồiăthayăvìădùngăcácăk ăho ch,ănh ălàăm tăcơăch ădi uăkhi năchính.ăCácăthôngă tinăph năhồiăcóăđ ợcăt ăcácăth ănghi măvàăcácăphiênăb năphátăhànhăc aăph năm măthamăgia. Cácăquáătrìnhălinhăho tăth òngăcóăhi uăqu ăhơnăcácăph ơngăphápăcũ,ănóădùngăítăth iăgianăl pătrìnhă đ ăs năxu tăraănhi uăchứcănĕngăhơn,ăch tăl ợngăcaoăhơn,ănh ngănóăkhôngăcungăc păm tăkh ănĕngăk ă ho chălâuădài. M tăcáchăngắnăg năcácăphuơngăphápănàyăcungăứngăhi uăqu ăcaoănh tăchoăvốnăđ uăt ,ănh ngăl iă khôngăđịnhărõăhi uăqu ăgì. L pătrìnhăc căh n,ăg iătắtălàăXP,ălàălo iăquáătrìnhălinhăho tăđ ợcăbi tăđ nănhi uănh t.ăTrongăXP,ăcácă phaăđ ợcăxúcăti nătrongăcácăb căc cănh ă(hayăliênăt c)ăn uăsoăv iăcácăquáătrìnhăki uăcũ,ăg iălàăcácă "toán"ăx ălỦ.ăB căđ uătiênă(v iăch ăđịnhălàăkhôngăhoànăt t)ăchoăđ năcácăb căcóăth ăchỉătốnăm tăngàyă hayăm tătu n,ăthayăvìăph iătốnănhi uăthángănh ătrongăph ơngăphápăthácăn c.ăĐ uătiên,ăm tăng iăvi tă cácăth ănghi măt ăđ ngăđ ăcungăc păcácăm cătiêuăc ăth ăchoăs ăphátătri n.ăK ăđ nălàăgiaiăđo năvi tămưă (b iăm tăc păl pătrìnhăviên);ăgiaiăđo nănàyăhoànăt tăkhiămàăcácămưăvi tăquaăđ ợcăt tăc ăcácăth ănghi mă và nh ngăng iăl pătrìnhăkhôngătìmăraăthêmăđ ợcăth ănghi măc năthi tănàoăn a.ăThi tăk ăvàăki nătrúcă đ ợcăđi uăchỉnhăvàănângăcaoăngayăsauăgiaiăđo năvi tămưănàyăb iăng iăđưăvi tămưătrongăgiaiăđo nă tr c.ăH ăthốngăch aăhoànăt tănh ngăho tăđ ngăđ ợcănàyăđ ợcăkhaiăthácăhayăđ ợcăđemăraăminhăh aă choă(m tăph n)ăng iătiêuădùngămàătrongăsốăđóăcóăng iătrongăđ iăphátătri năph năm m.ăTh iăđi mănàyă nh ngăng iăth cănghi măl iăbắtăđ uăvi tăcácăth ănghi măchoănh ngăph năquanătr ngăk ăti păc aăh ă thống. 1.4. Giải thu t Thu t toán,ăcònăg iălàăgiải thu t,ălàăm tăt păhợpăh uăh n c aăcácăchỉăthịăhayăph ơngăcáchăđ ợcă địnhănghĩaărõăràngăchoăvi căhoànăt tăm tăsốăs ăvi căt ăm tătr ngătháiăbanăđ uăchoătr c;ăkhiăcácăchỉăthịă nàyăđ ợcăápăd ngătri tăđ ăthìăs ăd năđ năk tăqu ăsauăcùngănh ăđưăd ăđoán. Nóiăcáchăkhác,ăthu tătoánălàăm tăb ăcácăquiătắcăhayăquiătrìnhăc ăth ănhằmăgi iăquy tăm tăv năđ ă trongăm tăsốăb căh uăh n,ăho cănhằmăcungăc păm tăk tăqu ăt ăm tăt păhợpăc aăcácăd ăki năđ aăvào. Ví dụ: thu tătoánăđ ăgi iăph ơngătrìnhăb cănh tăP(x):ăax + b = c, (a, b, c là các sốăth c),ătrongăt pă hợpăcácăsốăth căcóăth ălàăm tăb ăcácăb căsauăđây: 1. N uăa = 0 o b = c thìăP(x)ăcóănghi măb tăkì o b ≠ăc thì P(c)ăvôănghi m 2. N uăa ≠ă0ă o P(x)ăcóăduyănh tăm tănghi măxă=ă(c - b)/a Lưu ý Khiăm tăthu tătoánăđưăhìnhăthànhăthìătaăkhôngăxétăđ năvi căchứngăminhăthu tătoánăđóămàăchỉăchúă tr ngăđ năvi căápăd ngăcácăb cătheoăs ăh ngăd năs ăcóăk tăqu ăđúng.ăVi căchứngăminhătínhăđ yăđ ă
  • 11. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 11 vàătínhăđúngăc aăcácăthu tătoánăph iăđ ợcăti năhànhăxongătr căkhiăcóăthu tătoán.ăNóiărõăhơn,ăthu tă toánăcóăth ăchỉălàăvi căápăd ngăcácăcôngăthứcăhayăquiătắc,ăquiătrìnhăđưăđ ợcăcôngănh nălàăđúngăhayăđưă đ ợcăchứngăminhăv ăm tătoánăh c. "Thuật toán" hi nănayăth ngăđ ợcădùngăđ ăchỉăthu tătoánăgi iăquy tăcácăv năđ ătinăh c.ăH uăh tă cácăthu tătoánătinăh căđ uăcóăth ăvi tăthànhăcácăch ơngătrìnhămáyătính m cădùăchúngăth ngăcóăm tăvàiă h năch ă(vìăkh ănĕngăc aămáyătínhăvàăkh ănĕngăc aăng iăl pătrình).ăTrongănhi uătr ngăhợp,ăm tă ch ơngătrình khiăthi tăk ăbịăth tăb iălàădoălỗiă ăcácăthu tătoánămàăng iăl pătrìnhăđ aăvàoălàăkhôngă chínhăxác,ăkhôngăđ yăđ ,ăhayăkhôngă căđịnhăđ ợcătr năvẹnăl iăgi iăc aăv năđ .ăTuyănhiênăcũngăcóăm tă sốăbàiătoánămàăhi nănayăng iătaăch aătìmăđ ợcăl iăgi iătri tăđ ,ănh ngăbàiătoánă yăg iălàănh ngăbàiă toán NP - khôngăđ yăđ . Tính chất của thu t toán M tăthu tătoánăcóăcácătínhăch tăsau: o Tínhăchínhăxác:ăđ ăđ măb oăk tăqu ătínhătoánăhayăcácăthaoătácămàămáyătínhăth căhi năđ ợcălàă chính xác. o Tínhărõăràng:ăThu tătoánăph iăđ ợcăth ăhi năbằngăcácăcâuăl nhăminhăb ch;ăcácăcâuăl nhăđ ợcă sắpăx pătheoăthứăt ănh tăđịnh. o Tínhăkháchăquan:ăM tăthu tătoánădùăđ ợcăvi tăb iănhi u ng iătrênănhi uămáyătínhăv năph iă choăk tăqu ănh ănhau. o Tínhăphổăd ng:ăThu tătoánăkhôngăchỉăápăd ngăchoăm tăbàiătoánănh tăđịnhămàăcóăth ăápăd ngă choăm tăl păcácăbàiătoánăcóăđ uăvàoăt ơngăt ănhau. o Tínhăk tăthúc:ăThu tătoánăph iăgồmăm tăsốăh uăh năcácăb c tính toá Độ phức tạp thu t toán Đặt vấn đề Th iăgianămàămáy tính khiăth căhi năm tăthu tătoán khôngăchỉăph ăthu căvàoăb năthânăthu tătoánă đó,ăngoàiăraăcònătùyăthu căt ngămáyătính.ăĐ ăđánhăgiáăhi uăqu ăc aăm tăthu tătoán,ăcóăth ăxétăsốăcácă phépătínhăph iăth căhi năkhiăth căhi năthu tătoánănày.ăThôngăth ngăsốăcácăphépătínhăđ ợcăth căhi nă ph ăthu căvàoăcỡăc aăbàiătoán,ătứcălàăđ ăl năc aăđ uăvào.ăVìăth ăđộ phức tạp thu t toán làăm tăhàmă ph ăthu căđ uăvào.ăTuyănhiênătrongănh ngăứngăd ngăth căti n,ăchúngătaăkhôngăc năbi tăchínhăxácăhàmă nàyămàăchỉăc năbi tăm tă căl ợngăđ ătốtăc aăchúng. Đ ă căl ợng đ ăphứcăt păc aăm tăthu tătoánătaăth ngădùngăkháiăni măb căO-l năvàăb căΘă(b că Theta). B c O-lớn G iăn làăđ ăl năđ uăvào.ăTùyăthu căt ngăbàiătoánămàăn cóăth ănh nănh ngăgiáătrịăkhácănhau.ăChẳngă h n,ăbàiătoánătínhăgiaiăth a thì n chínhălàăsốăc nătínhăgiaiăth a.ăNhi uăbàiătoánăsốătrị,ăchẳngăh nătínhăsai
  • 12. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 12 phân thì n làăsốăch ăsốăcóănghĩa c năđ tăđ ợc.ăTrongăcácăphép tínhăđốiăv iămaătr n thì n làăsốăhàngăho că c tăc aămaătr n. Đ ăphứcăt păc aăbàiătoánăph ăthu căvàoăn.ă ăđâyătaăkhôngăchỉăđ cătr ngăđ ăphứcăt păb iăsốăl ợngă phépătính,ămàădùngăm tăđ iăl ợngătổngăquátălàătài nguyên cần dùng R(n).ăĐóăcóăth ălàăsốăl ợngăphépă tínhă(cóăth ătínhăc ăsốăl nătruyănh păb ănh ,ăho căghiăvàoăb ănh );ănh ngăcũngăcóăth ălàăth iăgianăth că hi năch ơngătrìnhă(độ phức tạp về thời gian)ăho cădungăl ợngăb ănh c năph iăc păđ ăch yăch ơngă trình (độ phức tạp về không gian). Xétăquanăh ăgi aătàiănguyênăvàăđ ăl năđ uăvào,ăn uănh ătìmăđ ợcăhằngăsố C > 0, C khôngăph ăthu că vào n,ăsaoăchoăv iăn đ ăl n,ăcácăhàmăR(n),g(n) đ uăd ơngăvà thìătaănóiăthu tătoánăcóăđ ăphứcăt păcỡăO(g(n)). Đ ăphứcăt păkhôngăph iălàăđ ăđoăchínhăxácăl ợngătàiănguyênămáyăc nădùng,ămàăđ cătr ngăchoăđ ngă tháiăc aăh ăthốngăkhiăkíchăth căđ uăvàoătĕngălên.ăChẳngăh năv iăthu tătoánăcóăđ ăphứcăt pătuy nătínhă O(n) (xemăph năd i),ăn uăkíchăth căđ uăvàoătĕngăg păđôiăthìăcóăth ă cătínhărằngătàiănguyênăc nă dùngăcũngătĕngăkho ngăg păđôi.ăNh ngăv iăthu tătoánăcóăđ ăphứcăt păbìnhăph ơngăO(n2 ) thì tài nguyên s ătĕngăg păbốn.ăM tăkhác,ăv iăthu tătoánăcóăđ ăphứcăt păhàmămũăO(2n ) thìăchỉăc năcôngăthêmă2ăđơnăvịă vàoăđ ăl năđ uăvàoăcũngăđưălàmătàiănguyênătĕngăg pă4ăl nă(tứcălàătheoăc păsốănhân)ărồi. Cácăđ ăphứcăt păth ngăg păđốiăv iăcácăthu tătoánăthôngăth ngăgồmăcó: o Đ ăphứcăt păhằngăsố,ăO(1).ăSốăphépătính/th iăgianăch y/dungăl ợngăb ănh ăkhôngăph ăthu că vàoăđ ăl năđ uăvào.ăChẳngăh nănh ăcácăthaoătácăh ăthống:ăđóng,ăm ăfile. o Đ ăphứcăt pătuy nătính, O(n).ăSốăphépătính/th iăgianăch y/dungăl ợngăb ănh ăcóăxuăh ngătỉăl ă thu năv iăđ ăl năđ uăvào.ăChẳngăh nănh ătínhătổngăcácăph năt ăc aăm tăm ngăm tăchi u. o Đ ăphứcăt păđaăthức, O(P(n)),ăv iăP làăđaăthứcăb căcaoă(t ă2ătr ălên).ăChẳngăh nănh ăcácăthaoă tácătínhătoánăv iăm ngănhi uăchi uă(tínhăđịnhăthức maătr n). o Đ ăphứcăt pălogarit, O(logn) (chúăỦ:ăb căc aănóăth păhơnăsoăv iăO(n))ă.ăChẳngăh năthu tătoánă Euclid đ ătìmă căsốăchungăl nănh t. o Đ ăphứcăt păhàmămũ, O(2n ).ăTr ngăhợpănàyăb tălợiănh tăvàăs ăr tăphiăth căt ăn uăth căhi nă thu tătoánăv iăđ ăphứcăt pănày. Lưu ý: Địnhănghĩaătrênămangătínhă"anătoàn"ătheoănghĩaănóăchỉăxétăs ătiêuătốnătàiănguyênă khôngăv ợtăquáăm tăng ỡngăg(n) nàoăđó,ăchứăkhôngănh tăthi tăđúngăbằngăg(n) (chúăỦăd uă b tăđẳngăthức). Theoăđó,ăm tăthu tătoánăcóăđ ăphứcăt păcỡăn thìăđồngăth iăs ăcóăđ ăphứcăt pă cỡăn2 ;ăv iăhàmăỦărằngăthu tătoánănàyăkhôngăbaoăgi ăcóăđ ngătháiăphứcăt păhóaăv ợtăquaă ng ỡngăđaăthứcăb căhai. B c Ω và Θ
  • 13. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 13 T ơngăt ănh ăv iăb căO-l n, n uănh ătìmăđ ợcăcácăhằngăsốăC,k1,k2 đ uăd ơngăvàăkhôngăph ăthu căvàoă n,ăsaoăchoăv iăn đ ăl n,ăcácăhàmăR(n),f(n) và h(n) đ uăd ơngăvà thìătaănóiăthu tătoánăcóăđ ăphứcăt păcỡăl năhơnăΩ(n),ăvàăđúngăbằngăcỡăΘ(h(n)). Nh ăv yăn uăxétăm tăcáchăch tăch ,ăkíăhi uăΘăm iăbi uăthịăđ ăphứcăt păc aăthu tătoánăm tăcáchăch tă ch .ăTuyănhiênăquaăm tăth iăgianădàiăkíăhi uăO(n) cũngăđưăđ ợcădùngăphổăbi n.
  • 14. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 14 Chương 2. KIỂU DỮ LIỆU, TOÁN TỬ VÀ PHÁT BIỂU 2.1 Giới thiệu về ngôn ngữ C++ C++ (C-plus-plus)ălàăm tălo iăngônăng ăl pătrình.ăĐâyălàăm tăd ngăngônăng ăđaăm uăhình t ădoăcóă ki uătĩnh vàăhỗătrợăl pătrìnhăth ăt c, d ăli uătr uătr ợng, l pătrìnhăh ngăđốiăt ợng, và l pătrìnhăđaăhình. T ăth păniênă1990,ăC++ăđưătr ăthànhăm tătrongănh ngăngônăng ăth ơngăm iăphổăbi nănh t. Bjarne Stroustrup c aăBell Labs đưăphátătri năC++ă(màătênănguyênăth yălàă"C with class"ătrongăsuốtă th păniênă1980 nh ălàăm tăb nănângăcaoăc aăngônăng ăC.ăNh ngăbổăsungănângăcaoăbắtăđ uăv iăs ăthêmă vàoăc aăkháiăni măl p,ăti pătheoăđóălàăcácăkháiăni măhàmă o, toánăt ăquáăt i, đaăk ăth a, tiêuăb n, và x ă lỦă ngo iă l .ă Tiêuă chu nă c aă ngônă ng ă C++ă đưă đ ợcă thôngă quaă trongă nĕmă 1998 nh ă làă ISO/IEC 14882:1998.ăPhiênăb năhi năđangăl uăhànhălàăphiênăb nă2003, ISO/IEC 14882:2003.ăPhiênăb nătiêuă chu năm iăhơnăn aă(đ ợcăbi tăd iătênăg iăkhôngăchínhăthứcălàăC++0x)ăđangăđ ợcăxâyăd ng. Tổng quan về kĩ thu t Trong tiêuăchu n 1998 c aăC++ăcóăhaiăph năchính:ăph n ngônăng ăcốtălõi vàăph năTh ăvi năchu nă C++(STL - StandardăTemplateăLibrary)ă.ăPh năth ăvi nănàyăl iăbaoăgồmăh uăh tă th ăvi nătiêuăb nă chu n vàăphiênăb năcóăđi uăchỉnhăchútăítăc aăth ăvi năchu năC.ăNhi uăth ăvi năC++ăhi năh uăkhôngă thu căv ătiêuăchu nănh ălàăth ăvi năBoost.ăThêmăvàoăđó,ănhi uăth ăvi năkhôngătheoătiêuăchu năđ ợcă vi tătrongăC m tăcáchătổngăquátăđ uăcóăth ăs ăd ngătrongăcácăch ơngătrìnhăC++. Chức năng d n nh p trong C++ Soăv iăC,ăC++ătĕngăc ngăthêmănhi uătínhănĕng,ăbaoăgồm:ăkhai báo nh ăm nhăđ ,ăchuy năki uă giốngănh ăhàm,ănew/delete, bool,ăcácăki uăthamăchi u,ăconst, các hàm trong dòng (inline), cácăđốiăsốăm căđịnh,ăquáăt iăhàm,ăvùng tên (namespace),ăcácăl pă(baoăgồmăt tăc ăcácăchứcănĕngăliênă quanăt iăl pănh ăk ăth a,ăhàmăthànhăviênă(ph ơngăpháp),ăhàmă o,ăl pătr uăt ợng,ăvàăc uăt ),ăs ăquáăt iă toánăt ,ătiêuăb n,ătoánăt ă::,ăx ălíăngo iăl ,ăvàăs ănh năd ngăki uătrongăth iăgianăthiăhành. C++ăcònăti năhànhănhi uăphépăki mătraăki uăhơnăCătrongănhi uătr ngăhợp. Câuă l nhă chúă gi i bắtă đ uă v iă // nguyênă làă m tă ph nă c aă BCPL(Basic Combined Programming Language) đ ợcătáiăs ăd ngătrongăC++. M tăsốăthànhăph năc aăC++ăsauănàyăđưăđ ợcăthêmăvàoăC,ăbaoăgồmăconst, inline,ăkhaiăbáoăbi nă trongăvòngăl păfor vàăchúăgi iăki uăC++ă(s ăd ngăkỦăhi uă//). Tuy nhiên, C99 cũngăbổăsungăthêmă m tăsốătínhănĕngăkhôngăcóătrongăC++,ăvíăd ănh ămacro v iăsốăđốiăsố đ ng. Vìăđ ợcăphátătri năt ăC,ătrongăC++,ăthu tăng ăđốiăt ợng cóănghĩaălàăvùng nhớ nh ăđ ợcădùngătrongă C,ăchứăkhôngăph iălàăm tăphiênăb năc aăl pănh ăđ ợcăhi uătrongăph năl năngônăng ăl pătrìnhăh ngă đốiăt ợngăkhác.ăVíăd ănh : int i; Dòngătrênăs ăđịnhănghĩaăm tăđốiăt ợngăki uăint (sốănguyên),ătứcălàăm tăvùngănh ăs ăđ ợcăs ăd ngă đ ăl uăgi ăbi năi.
  • 15. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 15 Thư viện C++ Th ăvi năchu năC++ dùngăl iăth ăvi năchu năCăv iăm tăsốăđi uăchỉnhănh ăđ ăgiúpănóăho tăđ ngătốtă hơnăv iăngônăng ăC++.ăM tăb ăph năl năkhácăc aăth ăvi năC++ăd aătrênăTh ăvi nătiêuăb năchu n (hay cònăg iălàăSTLă- vi tătắtăt ăch ăStandard Template Library).ăTh ăvi nănàyăcóănhi uăcôngăc ăh uăd ngă nh ălàăcácăthùngăchứa (thíăd ănh ăvector, danh sách liênăk t và bi năl p (tổngăquátăhóaăt ăkháiăni mă conătr )ăđ ăcungăc pănh ngăthùngăchứaănàyăs ătruyăc păgiốngănh ălàătruyăc păm ng.ăXaăhơnăn a,ăb ngă (đa)ăánhăx ă(m ngăk tăhợp)ăvàă(đa)ăt p,ăt tăc ăđ ợcăcungăc păđ ăcóăth ăxu tăraăcácăgiaoădi n t ơngă thích.ăDoăđó,ăcóăth ădùngătiêuăb năđ ăvi tăcácăthu tătoánătổngăquátămàăchúngălàmăvi căđ ợcăv iăb tăkìă thùngăchứaănàoăhayăv iăb tăkìădưyănàoăđ ợcăđịnhănghĩaăb iăbi năl p.ăGiốngănh ăC,ăcácătínhănĕngăc aă th ăvi nănàyăthìăđ ợcătruyăc păb iăvi căs ăd ngăl nhăd năh ng #include đ ăbaoăgồmăm tăt pătinătiêu đ ăchu n.ăC++ăcungăứngă69ătiêuăđ ăchu n,ătrongăđóăcóă19ătiêuăđ ăkhôngăcònăhi uăl căn a. Vì th ăvi năchu năđ ợcăthi tăk ăb iănh ngăchuy năgiaăhàngăđ uăvàăđưăđ ợcăchứngăminhătrongătoànă b ălịchăs ăkĩăngh ,ăcácăthànhăph năc aăth ăvi nănàyăđ ợcăkhuy năcáoăs ăd ngăthayăvìădùngănh ngăph nă vi tătayăbênăngoàiăhayănh ngăph ơngăti năc păth păkhác.ăThíăd ,ădùng std:vector hay std::string thayăvìădùngăki uăm ngăđơnăthu năs ăkhôngănh ngălàăchoă"đ iăsốngăd ăth ăhơn",ămàăcònălàăm tăcáchă h uăhi uăđ ăvi tăph năm măđ ợcăanătoànăvàălinhăho tăhơn. STLănguyênălàăm tăth ăvi năc aăhưngăHP vàăsauăđóălàăc aăSGI,ătr căkhiănóăđ ợcănh năvàoăthànhă chu năC++.ăTiêuăchu năthìăkhôngăthamăchi uănóăbằngăcáiătênă"STL",ăkhiăđaăph nănóăchỉălàăb ăph nătiêuă chu n.ăTuyăv y,ănhi uăng iăv nădùngăkháiăni mă"STL"ănàyăđ ăphânăbi tănóăv iăph năcònăl iăc aăth ă vi năC++ănh ălàăIOstream,ăquốcăt ăhóaă(kíăt ăvàăngônăng ătrìnhăbày),ăch năđoán,ăth ăvi năC, v.v.. M tă đ ă ánă mangă tênă STLPort,ă d aă cơă s ă trênă SGI STL,ă b oă trìă cácă thi tă l pă m iă c aă STL, IOStream và string.ăCácăđ ăánăkhácăcũngăcóănh ngăxâyăd ngăđ căthùăriêngăc aăth ăvi năchu năv iă cácăm cătiêuăthi tăk ăkhácănhau.ăMỗiănơiăs năxu tăhayăphổăbi nănhàătrìnhădịchăC++ăđ uăbaoăgồmăm tă s ăthi tăl păc aăth ăvi n,ăvìăđâyălàăph năquanătr ngăc aătiêuăchu năvàăl iălàăkỳăv ngăc aăng iăl pătrình 2.2 Câu chú thích Cácăchúăthíchăđ ợcăcácăl pătrìnhăviênăs ăd ngăđ ăghiăchúăhayămôăt ătrongăcácăph năc aăch ơngă trình.ăTrongăC++ăcóăhaiăcáchăđ ăchúăthích // Chú thích theo dòng /* Chú thích theo khối */ Chúăthíchătheoădòngăbắtăđ uăt ăc păd uăxổă(//)ăcho đ năcuốiădòng.ăChúăthíchătheoăkhối bắtăđ uăbằngă /* vàăk tăthúcăbằngă*/ vàăcóăth ăbaoăgồmănhi uădòng.ăChúngătaăs ăthêmăcácăchúăthíchăchoăch ơngă trình :
  • 16. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 16 /* my second program in C++ with more comments */ #include <iostream.h> int main () { cout << "Hello World! ";//says Hello World! cout << "I'm a C++ program"; // says I'm a C++ program return 0; } Hello World! I'm a C++ program N uăb năvi tăcácăchúăthíchătrongăch ơngătrìnhămàăkhôngăs ăd ngăcácăd uă//,ă/*ăhayă*/,ătrìnhădịchăs ăcoiă chúngănh ălàăcácăl nhăC++ăvàăs ăhi năthịăcácălỗi. 2.3 Kiểu dữ liệu, toán tử và các phát biểu khai báo 2.3.1. Kiểu dữ liệu M tăh ăthốngăđ căthù,ămàătheoăđóăcácăd ăli uăđ ợcătổăchứcăsắpăx pătrongăm tăch ơngătrìnhăg iălàă h ăthốngăki uăc aăngônăng ăl p trình.ăVi căthi tăk ăvàănghiênăcứuăcácăh ăthốngăki uăđ ợcăbi tănh ălàălý thuy tăki u (ki uăd ăli u). Chứcănĕngăc aămáyăđi nătoánălàăx ălỦăcácăthôngătin.ăCácăthôngătinăđ ợcănh păvàăl uătr ătrongăb ă nh ăc aămáyăd iăcácăd ngăkhácănhau:ăcóăth ălàăsố,ălàăch ,ăcóăth ălàăhìnhă nh,ăâmăthanh,.v.v.ămàăthu tă ng ătinăh căg iăchungălàăd ăli u.ăTínhăđaăd ngăc aăd ăli uăđòiăh iăph iătổăchứcăvàăphânăphốiăb ănh ă thíchăhợpăđ ăl uătr ăvàăx ălỦătốtăcácăd ăli u.ăNgônăng ăl pătrìnhăchiaăcácăd ăli uăthànhăt ngănhómăriêngă trên đóăxâyăd ngăm tăsốăphépătoánăt oănênăcácăki uăd ăli uăkhácănhau,ămỗiăki uăd ăli uălàăm tăt păhợpă cácăgíaătrịămàăm tăbi năthu căki uăđóăcóăth ănh n.ăKhiăm tăbi năđ ợcăkhaiăbáoăthu căki uăd ăli uănàoă thìămáyăs ădànhăchoăbi năđóăm tădungăl ợngăthíchăhợpătrong b ănh ăđ ăcóăth ăl uătr ăcácăgíaătrịăthu că ki uăd ăli uăđó 2.3.2. Toán tử 1) Cácătoánăt ăsốăh c Toán tử Ý nghĩa + C ng - Tr * Nhân / Chia % Chiaăl yăph năd -- Gi mă1ăđơnăvị ++ Tĕngă1ăđơnăvị
  • 17. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 17 Tăng và giảm (++ và --) Toánăt ă++ăthêmă1ăvàoătoánăh ngăc aănóăvàăậ ậ tr ăb tă1.ăNóiăcáchăkhác: Ví dụ: xă=ăxă+ă1ăgiốngănh ă++x hay x++ x = x -1ăgiốngănh ăxă- - hay x - - C ă2ătoánăt ătĕngăvàăgi măđ uăcóăth ăti nătốă(đ tătr c)ăhayăh uătốă(đ tăsau)ătoánăh ng. Tuyănhiênăgi aăti nătốăvàăh uătốăcóăs ăkhácăbi tăkhiăs ăd ngătrongă1ăbi uăthức.ăKhiă1ătoánăt ătĕngă hayăgi măđứngătr cătoánăh ngăc aănó,ăC++ăth căhi năvi cătĕngăhayăgi mătr căkhiăl yăgiáătrịădùngă trongăbi uăthức.ăN uătoánăt ăđiăsauătoánăh ng,ăC++ăl yăgiáătrịătoánăh ngătr căkhiătĕngăhayăgi mănó.ă Ví dụ: x = 10; y = ++x ; //y = 11, x=11 Tuy nhiên: x = 10; y = x++; //y = 10, x=11 Thứăt ă uătiênăc aăcácătoánăt ăsốăh c:ă++, -- sauăđóălàă*, /, %ărồiăm iăđ nă+, - 2) Cácătoánăt ăquanăh ăvàăcácătoánăt ăLogic ụăt ngăchínhăc aătoánăt ăquanăh ăvàătoánăt ăLogicălàăđúngăho căsai.ăTrongăC++ăm iăgiáătrịăkhácă0ă đ ợcăg iălàăđúng,ăcònăsaiălàă0.ăCácăbi uăthứcăs ăd ngăcácătoánăt ăquanăh ăvàăLogicătr ăv ă0ăn uăsaiăvàă tr ăv ă1ăn uăđúng. Toán tử ý nghĩa Các toán tử quan hệ > L năhơn >= L năhơnăho căbằng < Nh ăhơn <= Nh ăhơnăho căbằng == Bằng != Khác Các toán tử Logic && AND || OR ! NOT
  • 18. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 18 B ngăchânătrịăchoăcácătoánăt ăLogic: P q p&&q p||q !p 0 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 0 Cácătoánăt ăquanăh ăvàăLogicăđ uăcóăđ ă uătiênăth păhơnăcácătoánăt ăsốăh c. Do đóăm tăbi uăthứcănh :ă 10ă>ă1+ă12ăs ăđ ợcăxemălàă10ă>ă(1ă+ă12)ăvàăk tăqu ălàăsai (0). Taăcóăth ăk tăhợpăvàiătoánăt ăl iăv iănhauăthànhăbi uăthứcănh ăsau: Ví dụ: (10>5)&&!(10<9)||3<=4 K tăqu ălàăđúng Thứăt ă uătiênăc aăcácătoánăt ăquanăh ălàăLogic : ! ; > ; >= ; < ; <= ; = = ;!= ; && ; || 3) Cácătoánăt ăBitwise: Cácătoánăt ăBitwiseăỦănóiăđ năki mătra,ăgánăhayăs ăthayăđổiăcácăBităth tăs ătrong 1ăByteăc aăWord,ă màătrongăC++ăchu nălàăcácăki uăd ăli uăvàăbi năchar,ăint.ăTaăkhôngăth s ăd ngăcácătoánăt ăBitwiseăv iă d ăli uăthu căcácăki uăfloat,ădouble,ălongădouble,ăvoidăhayăcácăki uăphứcăt păkhác. Toán tử ý nghĩa & AND | OR ^ XOR ~ NOT >> Dịchăph i << Dịchătrái B ngăchânătrịăc aătoánăt ă^ă(XOR) p q p^q 0 0 0 0 1 1 1 0 1 1 1 0 5) Toánăt ăconătr ă& và * M tăconătr ălàăđịaăchỉătrongăb ănh ăc aăm tăbi n.ăM tăbi năconătr ăălàăm tăbi n đ ợcăkhaiăbáoăriêngă đ ăchứaăm tăconătr ăđ năm tăđốiăt ợngăc aăki uăđưăchỉăraănó. Taăs ătìmăhi uăkỹăhơnăv ăconătr ătrongăch ơngăv ăconătr .ă ăđây,ăchúngătaăs ăđ c păngắn g năđ năhaiă toánăt ăđ ợcăs ăd ngăđ ăthaoătácăv iăcácăconătr .
  • 19. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 19 Toánăt ăthứănh tălàă&,ălàăm tătoánăt ăquyă cătr ăv ăđịaăchỉăb ănh ăc aăh ăsố c aănó. Ví dụ: m = &count; Đ tăvàoăbi nămăđịaăchỉăb ănh ăc aăbi năcount. Chẳngăh n,ăăbi năăcountă ăăvịătríăb ănh ăă2000,ăgi ăs ăăcountăcóăgiáătrịălà 100.ăSauăcâuăl nhătrênămăs ănh năgiáătrịă2000. Toánăt ăthứăhaiălàă*,ălàăm tăbổăsungăchoă&;ăđâyălàăm tătoánăt ăquyă cătr ăv giáătrịăc aăbi năđ ợcăc păphátăt iăđịaăchỉătheoăsauăđó. Ví dụ: q = *m; S ăđ tăgiáătrịăc aăcountăvàoăq.ăBâyăgi ăqăs ăcóăgiáătrịălàă100ăvìă100ăđ ợcăl uătr ăt iăđịaăchỉă2000. 6)ăToánăt ăd uă“,” . Toánăt ăd uă,ăđ ợcăs ăd ngăđ ăk tăhợpăcácăbi uăthứcăl iăv iănhau.ăBênătráiăc aătoánăt ăd uă,ăluônă đ ợcăxemălàăki uăvoid.ăĐi uăđóăcóănghĩaălàăbi uăthứcăbên ph iătr ăthànhăgiáătrịăc aătổngăcácăbi uăthứcă đ ợcăphânăcáchăb iăd uăph y. Ví dụ: x = (y=3,y+1); Tr căh tăăgánă3ăchoăyărồiăgánă4ăchoăx.ăC păd uăngo căđơnălàăc năthi tăvìătoánăt ăd uă,ăcóăđ ă uătiênă th păhơnătoánăt ăgán. 7) Xemăcácăd uăngo căđơnăvàăc păd uăngo căvuôngălàătoánăt TrongăC++,ăc păd uăngo căđơnălàătoánăt ăđ ătĕngăđ ă uătiênăc aăcácăbi uăthứcăbênătrongănó. Cácăc păd uăngo căvuôngăth căhi năthaoătácătruyăxu tăph năt ătrongăm ng. 8) Tổngăk tăv ăđ ă uătiên Cao nhất () [] ! ~ ++ -- (Ki u)ă*ă& * / % + - << >> < <= > >= & ^ 2.3.3. Lệnh đơn và lệnh phức - Câuăl nh:ăTrongăngônăng ăl pătrìnhălàăs ăk tăhợpăcácăt ăkhóa,ăt ăchu n,ăcácătênăg iănóiăchungăvàă cácătoánăt ătheoăm tăquyătắcăcúăphápănh tăđịnhăđ ăt oăthànhăchỉăthịăc aăch ơngătrình. - Câuăl nhăđơn: Câuăl nhăđơnăgi năgồm:ăL nhăgán,ăl nhăvàoă/ăraăăvàăcácăl nhăg iăhàm Cácăcâuăl nhăngĕnăcáchănhauăbằngăd uă“;” -Câuăl nhăphức: Câuăl nhăphứcăcóăt ăhaiăcâuăl nhăđơnătr ălênăchúngăđ căđ tătrongăc păd uă{ă...ă}ă đ ăth ăbi uăthịăc uătrúcăđi uăkhi năr ănhánhăho căc uătrúcăl p.
  • 20. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 20 2.4. Biến và khai báo biến 2.4.1. Biến Một biến (variable)ălàăm tătênăbi uăthịăchoăm tăsốăl ợng,ăm tăkỦăhi uăhayăm tăđốiăt ợng.ăThêmă vàoăđó,ăm tăbi năs ăđ ợcădànhăs năchỗă(ph năc aăb ănh )ăđ ăchứaăsốăl ợng,ăkỦăhi uăhayăđốiăt ợngăđó.ă Trongălúcăch ơngătrìnhăđ ợcăthiăhànhăthìăcácăbi năc aăch ơngătrìnhăs ăcóăth ăthayăđổiăgiáătrịăho că khôngăthayăđổiăgìăc .ăHơnăn a,ăm tăbi năcóăth ăbịăthayăđổiăc ăl ợngăb ănh ămàănóăđangăchi măh uă(doă ng iăl pătrình hayădoăph năm mădịchăraăl nh).ă Tr ngăhợpăbi nănàyăkhôngăđ ợcăgánăgiáătrịăhayăcóăgánăgiáătrịănh ngăkhôngăđ ợcăs ăd ngăvàoăcácă tínhătoánăthìănóăchỉăchi măchỗătrongăb ănh ăm tăcáchăvôăích.ăMỗiăbi năs ăcóătênăc aănóăvàăcóăth ăcóă ki uăxácăđịnh.ăTùyătheoăngônăng ,ăm tăbi n cóăth ăđ ợcăkhaiăbáoă ăvịătríănàoăđóătrongămưănguồnăvàă cũngătùyăngônăng ,ătùyăph năm mădịchăvàăcáchăthứcăl pătrìnhămàăm tăbi năcóăth ăđ ợcăt oănênă(cùngă v iăchỗăchứa)ăhayăbịăxóaăb ăt iăm tăth iăđi mănàoăđóătrongălúcăth căthiăch ơngătrình.ăVi căcácăbi năbị xóaăb ălàăđ ăti tăki măb ănh ăcũngănh ălàmătốtăhơnăvi căqu nălỦăph năb ănh ămàăđôiăkhiăm tăch ơngă trìnhăchỉăđ ợcăc păb iăđĕngăkỦăv iăh ăđi uăhành. Quáătrìnhătồnăt iăc aăm tăbi năg iălàăđ iăsốngăc aăbi n.ăTrongănhi uătr ngăhợpăđ iăsốngăc aăm tă bi năchỉăx yăraătrongăn iăb ăm tăhàm,ăm tăth ăt căhayătrongăm tăkhốiămư. 2.4.2. Khai báo biến - Cú pháp: <Kiểu dữ liệu> <danh sách biến>; Mỗiăbi năđ ợcăvi tăcáchănhauăbằngăd uă“,”. Ví dụ: int x , y; float a , b , c; - TrongăC/C++ăcóăth ăkhaiăbáoăbi nă ăb tăcứăvịătríănàoămi nălàăkhaiăbáoătr căkhiăs ăd ng. 2.5 Các kiểu dữ liệu cơ bản chuẩn 2.5.1. KiÓu ký tù (char) M tăgiáătrịăki uăcharăchi mă1ăbyteă(8bit)ăvàăbi uădi năđ ợcăm tăkỦăt ăthôngăquaăb ngămáă ASCII. VÝ dô : KỦăt Mã ASCII 0 048 1 049 2 050 A 065 B 066 a 097 b 098 ... ....
  • 21. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 21 Cóăhaiăăki uăkỦăt ălàăăsignedăcharăvà unsigned. KiÓu Ph¹m vi biÓu diÔn Sè ký tù KÝch th-íc Char ( Signed char ) -128 ®Õn 127 256 1 byte Unsigned char 0 ®Õn 255 256 1 byte VÝ dô sau minh ho¹ sù kh¸c nhau gi÷a hai kiÓu d÷ liÖu trªn : XÐt ®o¹n ch- ¬ng tr×nh sau : char ch1; unsigned char ch2; ...... ch1=200; ch2=200; Khi ®ã thùc chÊt : ch1= - 56; ch2= 200; Nh- ng c¶ ch1 vµ ch2 ®Òu biÓu diÔn cïng mét ký tù cã m· 200. Ph©n lo¹i ký tù: Cã thÓ chia 256 ký tù lµm ba nhãm : Nhãm 1: Nhãm c¸c ký tù ®iÒu khiÓn cã m· tõ 0 ®Õn 31. Ch¼ng h¹n ký tù m· 13 dïng ®Ó chuyÓn con trá vÒ ®Çu dßng, ký tù 10 chuyÓn con trá xuèng dßng d- íi ( trªn cïng mét cét ). C¸c ký tù nhãm nµy nãi chung kh«ng hiÓn thÞ ra mµn h×nh. Nhãm 2 : Nhãm c¸c ký tù v¨n b¶n cã m· tõ 32 ®Õn 126. C¸c ký tù nµy cã thÓ ®- îc ®- a ra mµn h×nh hoÆc m¸y in. Nhãm 3 : Nhãm c¸c ký tù ®å ho¹ cã m· sè tõ 127 ®Õn 255. C¸c ký tù nµy cã thÓ ®- a ra mµn h×nh nh- ng kh«ng in ra ®- îc (b»ng c¸c lÖnh DOS). 2.5.2. KiÓu nguyªn Trong C++ cho phÐp sö dông sè nguyªn kiÓu int, sè nguyªn dµi kiÓu long vµ sè nguyªn kh«ng dÊu kiÓu unsigned. KÝch cì vµ ph¹m vi biÓu diÔn cña chóng ®- îc chØ ra trong b¶ng d- íi ®©y : KiÓu Ph¹m vi biÓu diÔn KÝch th-íc int -32768 ®Õn 32767 2 byte unsigned int 0 ®Õn 65535 2 byte long -2147483648 ®Õn 2147483647 4 byte unsigned long 0 ®Õn 4294967295 4 byte Chó ý : KiÓu ký tù còng cã thÓ xem lµ mét d¹ng cña kiÓu nguyªn.
  • 22. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 22 2.5.3. Kiểu số thực. Trong C++ cho phÐp sö dông ba lo¹i d÷ liÖu dÊu ph¶y ®éng, ®ã lµ float, double vµ long double. KÝch cì vµ ph¹m vi biÓu diÔn cña chóng ®- îc chØ ra trong b¶ng d- íi ®©y : KiÓu Ph¹m vi biÓu diÔn Sè ch÷ sè cã nghÜa KÝch th-íc Float 3.4E-38 ®Õn 3.4E+38 7 ®Õn 8 4 byte Double 1.7E-308 ®Õn 1.7E+308 15 ®Õn 16 8 byte long double 3.4E-4932 ®Õn 1.1E4932 17 ®Õn 18 10 byte Gi¶i thÝch: M¸y tÝnh cã thÓ l- u tr÷ ®- îc c¸c sè kiÓu float cã gi¸ trÞ tuyÖt ®èi tõ 3.4E-38 ®Õn 3.4E+38. C¸c sè cã gi¸ trÞ tuyÖt ®èi nhá h¬n3.4E-38 ®- îc xem b»ng 0. Ph¹m vi biÓu diÔn cña sè double ®- îc hiÓu theo nghÜa t- ¬ng tù. Ngoàiăraătaăcònăcóăki uăd ăli uăvoid,ăki uănàyămangăỦănghĩaălàăki uărỗngăkhôngăchứaăgiáătrịăgìăc . 2.6. Cấu trúc một chương trình C++ Tr căkhiănóiăđ năc uătrúcătổngăquátăc aăm tăch ơngătrìnhănguồnăC,ăchúngătaăhưyăxem m tăvíăd ăđơnăgi năsauăđâyăậ ch ơngătrìnhăinăxâuă„Chaoăcacăban!‟ăraămànăhình #include <stdio.h> #include <conio.h> #include <iostream.h> void main() { clrscr(); cout<<”năChaoăcacăbană!”; getch(); } (trongăđo nămưănguồnătrênăchúngătaăthêmăcácăsốădòngăvàăd u:ăđ ăti năchoăvi c gi iăthích,ăcònătrongă ch ơngătrìnhăthìăkhôngăđ ợcăcóăchúng). Trongăch ơngătrìnhătrênăgồmăhaiăph năchínhăđóălàă: - Cácădòngăbaoăhàmăt păậ dòngă1,ă2;ăđĕngăkỦăs ăd ngăcácăt pătiêuăđ .ăTrongăch ơng trình này chúngătaăc nădùngăhaiăfileătiêuăđ ă<stdio.h> và <conio.h>.
  • 23. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 23 - Hàm main t ădòngă3ăt iădòngă8.ăĐâyălàăhàmăchínhăc aăch ơngătrìnhă,ădòngă3ălàătiêu đ ăhàmăchoă bi tătên:ămain,ăki uăhàm:ăvoid,ăvàăđốiăc aăhàmă(trongăvíăd ănàyăkhông cóăđối).ăThânăc aăhàmămainăbắtă đ uăngayăsauăd uă{ă(dòngă4),ăvàăk tăthúcăt iăd uă} (dòng 8). Cấu trúc tổng quát: M t ch ơng trình C++ bao gồm các ph nănh : Các chỉ thịăti n x lý, khai báo bi năngoài,ăcácăhàmăt ă t o,ăch ơngătrìnhăchínhă(hàmămain). C uătrúcăcóăth ănh ăsau: Các chỉ thị tiền xử lý (Preprocessor directives) #include <Tên t pătinăth ăvi n> #defineăầ.//ăcácăđịnhănghĩa,ăđịnhădanh Định nghĩa kiểu dữ liệu (ph n này không bắt bu c): dùng đ đ t tên l i cho m t ki uăd li u nào đó đ gợi nh hay đ t 1 ki u d li u cho riêng mình d a trên các ki u d ăli uăđư có. Cú pháp: typedef <Tênăki uăcũ> <Tênăki uăm i> Ví dụ: typedef int SoNguyen; //ăKi uăSoNguyenălàăki uăint Khai báo các prototype (tên hàm, các tham số, ki u k t qu tr v ,ầ c a các hàm sẽ cài đặt trong phần sau, phần này không bắt buộc): ph n này chỉ là các khai báo đ u hàm, không ph iălàăph n định nghĩa hàm. Khai báo các biến ngoài (các bi n toàn c c) phần này không bắt buộc: ph n này khai báo các bi n toànăc căđ ợcăs ăd ngătrongăc ăch ơng trình. Chương trình chính (main) phần này bắt buộc phải có <Ki uăd ăli uătr ăv > main() { Các khai báo cục bộ trong hàm main: Các khai báo này chỉătồnăt i trong hàm mà thôi, có th ălàăkhaiăbáoăbi năhayăkhaiăbáoăki u. Các câu lệnh dùng để định nghĩa hàm main return <kết quả trả về>; // Hàm ph iătr ăv ăk t qu } Cài đặt các hàm <Ki uăd li uătr ăv > function1( các tham số) { Các khai báo c căb ătrongăhàm. Cácă câuă l nhă dùngă đ ă địnhă nghĩa hàm return <k t qu ătr ăv >; }
  • 24. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 24 ầ M tăch ơng trình C++ bắt đ uăth căthiăt ăhàm main (thôngăth ngălàăt câu l nhăđ uătiênăđ n câu l nhă cuối cùng). Lưu ý: Nh ng gi iăthíchătrongăch ơngătrìnhăđ t sau d u // lời giải thích ho c trong d u /* lời giải thích */ Ví dụ 1: Inăraămànăhìnhădòngăch ă“Helloăworld”ă // my first program in C++ #include <iostream.h> int main () { cout << "Hello World!"; return 0; } Hello World! Ví dụ 2: Inăraămànăhìnhădưyăsốăgi măd n // custom countdown using while #include <iostream.h> int main () { int n; cout << "Enter the starting number > "; cin >> n; while (n>0) { cout << n << ", "; --n; } cout << "FIRE!"; return 0; } Enter the starting number > 8 8, 7, 6, 5, 4, 3, 2, 1, FIRE!
  • 25. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 25 Chương 3. CÁC THÀNH PHẦN CĂN BẢN KHÁC CỦA C++ 3.1 Các toán tử gán Toán tử gán dùng để gán một giá trị nào đó cho một biến Ví dụ: a = 5; Gánăgiáătrịănguyênă5ăchoăbi năa.ăV ătráiăbắtăbu căph iălàăm tăbi năcònăv ăph iăcóăth ălàăb tăkỳăhằng,ă bi năhayăk tăqu ăc aăm tăbi uăthức. C năph iănh năm nhărằngătoánăt ăgánăluônăđ ợcăth căhi năt ătráiăsangăph iăvàăkhôngăbaoăgi ăđ oă ng ợc. Ví dụ: a = b; gánăgiáătrịăc aăbi n aăbằngăgiáătrịăđangăchứaătrongăbi năb.ăChúăỦărằngăchúngătaăchỉăgánăgiáătrịăc aăbă choăaăvàăs ăthayăđổiăc aăbăsauăđóăs ăkhôngă nhăh ngăđ năgiáătrịăc aăa. M tăthu cătínhăc aătoánăt ăgánătrongăC++ăgópăph năgiúpănóăv ợtălênăcácăngônăng ăl pătrìnhăkhácălàă vi căchoăphépăv ăph iăcóăth ăchứaăcácăphépăgánăkhác.ă Ví dụ: aă=ă2ă+ă(bă=ă5);ăt ơngăđ ơngăv i:ăbă=ă5;ăaă=ă2ă+ăb; Vìăv yăbi uăthứcăsauăcũngăhợpăl ătrongăC++:ăa = b = c = 5; gánăgiáătrịă5ăchoăc ăbaăbi năa,ăbăvàă. Các toán tử gán phức hợp (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=) M tăđ cătínhăc aăngônăng ăC++ălàmăchoănóănổiăti ngălàăm tăngônăng ăsúcătíchăchínhălàăcácătoánăt ă gánăphứcăhợpăchoăphépăchỉnhăs aăgiáătrịăc aăm tăbi năv iăm tătrongănh ngătoánăt ăcơăb năsau: value += increase; t ơngăđ ơngăv iă value = value + increase; a -= 5; t t ơngăđ ơngăv iă a = a - 5; a /= b; t ơngăđ ơngăv iă a = a / b; price *= units + 1; t ơngăđ ơngăv iă price = price * (units + 1); vàăt ơngăt ăchoăt tăc ăcácătoánăt ăkhác. 3.2 Định dạng số liệu để xuất ra Tr căkhiăd ăli uăđ ợcăinăraămànăhìnhăc năđịnhăd ngăd ăli u. S ăd ngăcácăcôngăc ăđịnhăd ngăcóă s nănh :ăăxuốngădòngă(ănă),ăd uătabă(ătă),ăv ăđ uădòngă(ără),ăầăvàăm tăsốăđịnhăd ngăsố.ă 3.3 Cách dùng các hàm thư viện toán học Cácăhàmătoánăh c cóătrongăth ăviênă<math.h>, <float.h>: abs(int x): tínhătrịătuy tăđốiăc aăsốănguyênăx fabs(double x):ătínhătrịătuy tăđốiăc aăsốăth căx
  • 26. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 26 random(int n):ăchoăsốăng uănhiênăt ă0ăđ năn - 1 randomize():ăkh iăđ uăb ăt oăsốăng uănhiên,ătaănênăch yăhàmănàyătr căkhiădùngăhàmărandom cos(double x) và sin(double x) và tan(double x): tínhăcosăvàăsinăvàătangăc aăxă(đơnăvịăc aăxălàă radianăchứăkhôngăph iălàăđ ,ă1ăradianăbằngăkho ngă57ăđ ,ăc ăth ălàăbằngă180/3.14ă- chắcăcácăb nă cònănh ă3.14ălàăgìăchứ?) exp(double x): tínhăeămũăx log(double x): tính logarităt ănhiênăc aăxă(tứcălàăln(x)ăn uăvi tătheoătoánăh c) pow(double y,double x): tínhăyămũăx.ă Chú ý: làăyămũăxăcóăth ătínhătheoăcôngăthức:ăyămũăxă=ăexp(y*log(x)) sqrt(double x): tínhăcĕnăb că2ăc aăx.ă Chú ý: làăcĕnăb cănăc aăxăcóăth ătínhătheoăcôngăthứcăpow(x,ă1/n) floor(double x): choăsốănguyênăl nănh tăd iăx.ăVíăd :ăfloor(8.6)ălàă8 ceil(double x): choăsốănguyênăbéănh tătrênăx.ăVíăd :ăceil(8.6)ălàă9 3.4 Phát biểu nh p với đối tượng cin xuất với đối tượng cout C¸c tiÖn Ých vµo/ra cña th- viÖn C chuÈn ®Òu cã thÓ sö dông trong C++. §Ó sö dông c¸c hµm nµy chóng ta chØ cÇn khai b¸o tÖp tiªu ®Ò trong ®ã cã chøa khai b¸o hµm nguyªn mÉu cña c¸c tiÖn Ých nµy. Bªn c¹nh ®ã, C++ cßn cµi ®Æt thªm c¸c kh¶ n¨ng vµo/ra míi dùa trªn hai to¸n tö “<<”(xuÊt) vµ “>>” (nhËp) víi c¸c ®Æc tÝnh sau ®©y: Trong tÖp tiªu ®Ò <iostream.h> ng- êi ta ®Þnh nghÜa hai ®èi t- îng cout vµ cin t- ¬ng øng víi hai thiÕt bÞ chuÈn ra/vµo ®­îc sö dông cïng víi “<<” vµ “>>”. Th«ng th­êng ta hiÓu cout lµ mµn h×nh cßn cin lµ bµn phÝm. Ghi d÷ liÖu lªn thiÕt bÞ ra chuÈn (mµn h×nh) cout Trong phÇn nµy ta xem xÐt mét sè vÝ dô minh ho¹ c¸ch sö dông cout vµ “<<” ®Ó ®­a th«ng tin ra mµn h×nh.
  • 27. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 27 VÝ dô : Ch- ¬ng tr×nh sau minh ho¹ c¸ch sö dông cout ®Ó ®- a ra mµn h×nh mét x©u ký tù. #include<iostream.h>/*ph¶i khai b¸o khi muèn sö dông cout*/ main() { cout<<"WelcomeC++"; } Welcome C++ “<<” lµ mét to¸n tö hai ng«i, to¸n h¹ng ë bªn tr¸i m« t¶ n¬i kÕt xuÊt th«ng tin (cã thÓ lµ mét thiÕt bÞ ngo¹i vi chuÈn hay lµ mét tËp tin ), to¸n h¹ng bªn ph¶i cña “<<” lµ mét biÓu thøc nµo ®ã. Trong ch­¬ng tr×nh trªn, c©u lÖnh cout <<"Welcome C++" ®­a ra mµn h×nh x©u ký tù “Welcome C++”. VÝ dô: Sö dông cout vµ “<<” ®­a ra c¸c gi¸ trÞ kh¸c nhau: #include<iostream.h>/*ph¶i khai b¸o khi muèn sö dông cout*/ voidmain(){ intn=25; cout<<"Value:"; cout<<n; } Value : 25 VÝ dô: Trong vÝ dô nµy ta gép c¶ hai c©u lÖnh kÕt xuÊt trong vÝ dô 2.3 thµnh mét c©u lÖnh phøc t¹p h¬n, tuy kÕt qu¶ kh«ng kh¸c tr- íc: #include<iostream.h>/*ph¶i khai b¸o khi muèn sö dông cout*/ voidmain(){ intn=25; cout<<"Value:"<<n; } Value : 25 §äc d÷ liÖu tõ thiÕt bÞ vµo chuÈn (bµn phÝm) cin cin ®­îc dïng ®Ó chØ mét thiÕt bÞ vµo chuÈn. Mét c¸ch t­¬ng tù, to¸n tö “>>” ®­îc dïng kÌm víi cin ®Ó nhËp vµo c¸c gi¸ trÞ; hai c©u lÖnh intn;
  • 28. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 28 cin>>n; Yªu cÇu ®äc c¸c ký tù trªn bµn phÝm vµ chuyÓn chóng thµnh mét sè nguyªn vµ g¸n cho biÕn n. Gièng nh- cout vµ “<<”, cã thÓ nhËp nhiÒu gi¸ trÞ cïng kiÓu hay kh¸c kiÓu b»ng c¸ch viÕt liªn tiÕp tªn c¸c biÕn cÇn nhËp gi¸ trÞ cïng víi “>>” ngay sau cin. Ch¼ng h¹n: intn; floatp; charc; cin>>c>>n>>p; Cã thÓ sö dông to¸n tö “>>” ®Ó nhËp d÷ liÖu cho c¸c biÕn cã kiÓu char, int, float, double vµ char *. cin tu©n theo mét sè qui - íc dïng trong viÖc ph©n tÝch c¸c ký tù: C¸c gi¸ trÞ sè ®- îc ph©n c¸ch bëi: SPACE, TAB, CR, LF. Khi gÆp mét ký tù “kh«ng hîp lÖ” (dÊu “.” ®èi víi sè nguyªn, ch÷ c¸i ®èi víi sè, ...) sÏ kÕt thóc viÖc ®äc tõ cin; ký tù kh«ng hîp lÖ nµy sÏ ®- îc xem xÐt trong lÇn ®äc sau. §èi víi gi¸ trÞ x©u ký tù, dÊu ph©n c¸ch còng lµ SPACE, TAB,CR, cßn ®èi víi gi¸ trÞ ký tù, dÊu ph©n c¸ch lµ ký tù CR. Trong hai tr­êng hîp nµy kh«ng cã kh¸i niÖm “ký tù kh«ng hîp lÖ”. M· sinh ra do bÊm phÝm Enter cña lÇn nhËp tr- íc vÉn ®- îc xÐt trong lÇn nhËp x©u/ký tù tiÕp theo vµ do vËy sÏ cã “nguy c¬ ” kh«ng nhËp ®­îc ®óng gi¸ trÞ mong muèn khi ®­a ra lÖnh nhËp x©u ký tù hoÆc ký tù ngay sau c¸c lÖnh nhËp c¸c gi¸ trÞ kh¸c. Gi¶i ph¸p kh¾c phôc vÊn ®Ò nµy ®Ó ®¶m b¶o c«ng viÖc diÔn ra ®óng theo ý lµ tr- íc mçi lÇn gäi lÖnh nhËp d÷ liÖu cho x©u/ký tù ta sö dông mét trong hai chØ thÞ sau ®©y: fflush(stdin);//khai b¸o trong stdio.h cin.clear();//hµm thµnh phÇn cña líp ®Þnh nghÜa ®èi t-îng cin Ta tham kh¶o ch- ¬ng tr×nh sau: Vídụ: #include<iostream.h> #include<conio.h> voidmain(){ intn; floatx; chart[81]; clrscr(); do{
  • 29. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 29 cout<<"Nhapvaomotsonguyen,motxau,motsothuc:"; cin>>n>>t>>x; cout<<"Danhap"<<n<<","<<t<<"va"<<x<<"n"; }while(n); } Nhap vao mot so nguyen, mot xau, mot so thuc : 3 long 3.4 Da nhap 3,long va 3.4 Nhap vao mot so nguyen, mot xau, mot so thuc : 5 hung 5.6 Da nhap 5,hung and 5.6 Nhap vao mot so nguyen, mot xau, mot so thuc : 0 4 3 Da nhap 0,4 va 3 3.5. Khai báo hằng H»ng lµ c¸c ®¹i l- îng mµ gi¸ trÞ cña nã kh«ng thay ®æi trong qu¸ tr×nh tÝnh to¸n. a. Tªn h»ng Nguyªn t¾c ®Æt tªn h»ng ta ®· xem xÐt trong môc 1.3. §Ó ®Æt tªn mét h»ng, ta dïng dßng lÖnh sau : #define <tªn h»ng> <gi¸ trÞ> VÝ dô : #define MAX 1000 Lóc nµy, tÊt c¶ c¸c tªn MAX trong ch- ¬ng tr×nh xuÊt hiÖn sau nµy ®Òu ®- îc thay b»ng 1000. V× vËy, ta th- êng gäi MAX lµ tªn h»ng, nã biÓu diÔn sè 1000. Mét vÝ dô kh¸c : #define pi 3.141593 §Æt tªn cho mét h»ng float lµ pi cã gi¸ trÞ lµ 3.141593. b. C¸c lo¹i h»ng + H»ng int H»ng int lµ sè nguyªn cã gi¸ trÞ trong kho¶ng tõ -32768 ®Õn 32767. VÝ dô : #define number1 -50 §Þnh nghi· h»ng int number1 cã gi¸ trÞ lµ -50 #define sodem 2732 §Þnh nghi· h»ng int sodem cã gi¸ trÞ lµ 2732
  • 30. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 30 Chó ý : CÇn ph©n biÖt hai h»ng 5056 vµ 5056.0 : ë ®©y 5056 lµ sè nguyªn cßn 5056.0 lµ h»ng thùc. + H»ng long : H»ng long lµ sè nguyªn cã gi¸ trÞ trong kho¶ng tõ -2147483648 ®Õn 2147483647. H»ng long ®- îc viÕt theo c¸ch : 1234L hoÆc 1234l ( thªm L hoÆc l vµo ®u«i ) Mét sè nguyªn v- ît ra ngoµi miÒn x¸c ®Þnh cña int còng ®- îc xem lµ long. VÝ dô : #define sl 8865056L §Þnh nghi· h»ng long sl cã gi¸ trÞ lµ 8865056 #define sl 8865056 §Þnh nghi· h»ng long sl cã gi¸ trÞ lµ 8865056 + H»ng int hÖ 8 H»ng int hÖ 8 ®- îc viÕt theo c¸ch 0c1c2c3....ë ®©y ci lµ mét sè nguyªn d- ¬ng trong kho¶ng tõ 1 ®Õn 7. H»ng int hÖ 8 lu«n lu«n nhËn gi¸ trÞ d- ¬ng. VÝ dô : #define h8 0345 §Þnh nghi· h»ng int hÖ 8 cã gi¸ trÞ lµ 3*8*8+4*8+5=229 + H»ng int hÖ 16 : Trong hÖ nµy ta sö dông 16 ký tù : 0,1..,9,A,B,C,D,E,F. C¸ch viÕt Gi¸ trÞ a hoÆc A 10 b hoÆc B 11 c hoÆc C 12 d hoÆc D 13 e hoÆc E 14 f hoÆc F 15 H»ng sè hÖ 16 cã d¹ng 0xc1c2c3... hÆc 0Xc1c2c3... ë ®©y ci lµ mét sè trong hÖ 16. VÝ dô : #define h16 0xa5 #define h16 0xA5 #define h16 0Xa5 #define h16 0XA5
  • 31. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 31 Cho ta c¸c h¾ng sè h16 trong hÖ 16 cã gi¸ trÞ nh- nhau. Gi¸ trÞ cña chóng trong hÖ 10 lµ : 10*16+5=165. + H»ng ký tù: H»ng ký tù lµ mét ký tù riªng biÖt ®- îc viÕt trong hai dÊu nh¸y ®¬n, vÝ dô 'a'. Gi¸ trÞ cña 'a' chÝnh lµ m· ASCII cña ch÷ a. Nh- vËy gi¸ trÞ cña 'a' lµ 97. H»ng ký tù cã thÓ tham gia vµo c¸c phÐp to¸n nh- mäi sè nguyªn kh¸c. VÝ dô: '9'-'0'=57-48=9 VÝ dô: #define kt 'a' §Þnh nghi· h»ng ký tù kt cã gi¸ trÞ lµ 97 H»ng ký tù cßn cã thÓ ®- îc viÕt theo c¸ch sau : ' c1c2c3' trong ®ã c1c2c3 lµ mét sè hÖ 8 mµ gi¸ trÞ cña nã b»ng m· ASCII cña ký tù cÇn biÓu diÔn. VÝ dô: ch÷ a cã m· hÖ 10 lµ 97, ®æi ra hÖ 8 lµ 0141. VËy h»ng ký tù 'a' cã thÓ viÕt d- íi d¹ng '141'. §èi víi mét vµi h»ng ký tù ®Æc biÖt ta cÇn sö dông c¸ch viÕt sau (thªm dÊu ): C¸ch viÕt Ký tù ''' ' '"' " '' 'n' n (chuyÓn dßng ) '0' 0 ( null ) 't' Tab 'b' Backspace 'r' CR ( vÒ ®Çu dßng ) 'f' LF ( sang trang ) Chó ý : CÇn ph©n biÖt h»ng ký tù '0' vµ '0'. H»ng '0' øng víi ch÷ sè 0 cã m· ASCII lµ 48, cßn h»ng '0' øng víi kýtù 0 ( th- êng gäi lµ ký tù null ) cã m· ASCII lµ 0. H»ng ký tù thùc sù lµ mét sè nguyªn, v× vËy cã thÓ dïng c¸c sè nguyªn hÖ 10 ®Ó biÓu diÔn c¸c ký tù, vÝ dô lÖnh (code C) printf("%c%c",65,66) sÏ in ra AB. + H»ng x©u ký tù : H»ng x©u ký tù lµ mét d·y ký tù bÊt kú ®Æt trong hai dÊu nh¸y kÐp. VÝ dô : #define xau1 "Ha noi" #define xau2 "My name is Giang" X©u ký tù ®- îc l- u tr÷ trong m¸y d- íi d¹ng mét b¶ng cã c¸c phÇn tö lµ c¸c ký tù riªng biÖt. Tr×nh biªn dÞch tù ®éng thªm ký tù null 0 vµo cuèi mçi x©u ( ký tù 0 ®- îc xem lµ dÊu hiÖu kÕt thóc cña mét x©u ký tù ).
  • 32. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 32 Chó ý: CÇn ph©n biÖt hai h»ng 'a' vµ "a". 'a' lµ h»ng ký tù ®- îc l- u tr÷ trong 1 byte, cßn "a" lµ h»ng x©u ký tù ®- îc l- u tr÷ trong 1 m¶ng hai phÇn tö : phÇn tö thø nhÊt chøa ch÷ a cßn phÇn tö thø hai chøa 0. 3.6. Các hàm thư viện xử lý chuỗi Các hàm x ălỦăkỦăt ăvàăchuỗiăkỦăt cóătrongăth ăvi nă<string.h>, <ctype.h>: Cộng chuỗi - Hàm strcat() Cú pháp: char *strcat(char *des, const char *source) Hàmănàyăcóătácăd ngăghépăchuỗiănguồnăvàoăchuỗiăđích. Ví dụ: Nh păvàoăh ălótăvàătênăc aăm tăng i,ăsauăđóăinăc ăh ăvàătênăc aăh ălênămànăhình. #include<conio.h> #include<stdio.h> #include<string.h> int main(){ char HoLot[30], Ten[12]; printf("Nhap Ho Lot: ");gets(HoLot); printf("Nhap Ten: ");gets(Ten); strcat(HoLot,Ten); /* Ghep Ten vao HoLot*/ printf("Ho ten la: ");puts(HoLot); getch(); return 0; } Xác định độ dài chuỗi - Hàm strlen() Cú pháp: int strlen(const char* s) Ví dụ: S ăd ngăhàmăstrlenăxácăđịnhăđ ădàiăm tăchuỗiănh păt ăbànăphím. #include<conio.h> #include<stdio.h> #include<string.h> int main(){ char Chuoi[255]; int Dodai; printf("Nhap chuoi: ");gets(Chuoi); Dodai = strlen(Chuoi) printf("Chuoi vua nhap: ");puts(Chuoi); printf(“Co do dai %d”,Dodai); getch();
  • 33. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 33 return 0; } Đổi một ký tự thường thành ký tự hoa - Hàm toupper() Hàmă toupper()ă (trongă ctype.h)ă đ ợcă dùngă đ ă chuy nă đổiă m tă kỦă t ă th ngă thànhă kỦă t ă hoa. Cú pháp: char toupper(char c) Đổi chuỗi chữ thường thành chuỗi chữ hoa, hàm strupr() Hàmăstruppr()ăđ ợcădùngăđ ăchuy năđổiăchuỗiăch ăth ngăthànhăchuỗiăch ăhoa,ăk t qu ătr ăv ăc aă hàmălàăm tăconătr ăchỉăđ năđịaăchỉăchuỗiăđ ợcăchuy năđổi. Cú pháp: char*strupr(char *s) Ví dụ: Vi tă ch ơngătrìnhănh păvàoăm tăchuỗiă kỦă t ăt ăbànăphím.ăSauă đóăs ăd ngăhàmă strupr()ăđ ă chuy năđổiăchúngăthànhăchuỗiăch ăhoa. #include<conio.h> #include<stdio.h> #include<string.h> int main(){ char Chuoi[255],*s; printf("Nhap chuoi: ");gets(Chuoi); s=strupr(Chuoi) ; printf(“Chuoi chu hoa: ”);puts(s); getch(); return 0; } Đổi chuỗi chữ hoa thành chuỗi chữ thường, hàm strlwr() Muốnăchuy năđổiăchuỗiăch ăhoaăthànhăchuỗiătoànăch ăth ng,ătaăs ăd ngăhàmăstrlwr(),ăcácăthamăsốă c aăhàmăt ơngăt ănh ăhàmăstrupr() Cú pháp: char *strlwr(char *s) Sao chép chuỗi, hàm strcpy() Hàmă nàyă đ ợcă dùngă đ ă saoă chépă toànă b ă n iă dungă c aă chuỗiă nguồnă vàoă chuỗiă đích. Cú pháp: char*strcpy(char *Des, const char *Source) Ví dụ: Vi tăch ơngătrìnhăchoăphépăchépătoànăb ăchuỗiănguồnăvàoăchuỗiăđích. #include<conio.h> #include<stdio.h> #include<string.h> int main() {
  • 34. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 34 char Chuoi[255],s[255]; printf("Nhap chuoi: ");gets(Chuoi); strcpy(s,Chuoi); printf(“Chuoi dich: ”);puts(s); getch(); return 0; } Sao chép một phần chuỗi, hàm strncpy() HàmănàyăchoăphépăchépănăkỦăt ăđ uătiênăc aăchuỗiănguồnăsangăchuỗiăđích. Cú pháp: char *strncpy(char *Des, const char *Source, size_t n) Trích một phần chuỗi, hàm strchr() Đ ătríchăm tăchuỗiăconăc aăm tăchuỗiăkỦăt ăbắtăđ uăt ăm tăkỦăt ăđ ợcăchỉăđịnhătrongăchuỗiăchoăđ nă h tăchuỗi,ătaăs ăd ngăhàmăstrchr(). Cú pháp :char *strchr(const char *str, int c) Ghi chú: - N uăkỦăt ăđưăchỉăđịnhăkhôngăcóătrongăchuỗi,ăk tăqu ătr ăv ălàăNULL. - K tăqu ătr ăv ăc aăhàmălàăm tăconătr ,ăconătr ănàyăchỉăđ năkỦăt ăcăđ ợcătìmăth yăđ uătiênătrongăchuỗiă str. Tìm kiếm nội dung chuỗi hàm strstr(): Hàmăstrstr()ăđ ợcăs ăd ngăđ ătìmăki măs ăxu tăhi năđ uătiênă c aăchuỗiăs2ătrongăchuỗiăs1. Cú pháp: char*strstr(const char *s1, const char *s2) K tăqu ătr ăv ăc aăhàmălàăm tăconătr ăchỉăđ năph năt ăđ uătiênăc aăchuỗiăs1ăcóăchứaăchuỗiăs2ăho că giáătrịăNULLăn uăchuỗiăs2ăkhôngăcóătrongăchuỗiăs1. Ví dụ: Vi tăch ơngătrìnhăs ăd ngăhàmăstrstr()ăđ ăl yăraăm tăph năc aăchuỗiăgốcăbắtăđ uăt ăchuỗiă“hoc”. #include<conio.h> #include<stdio.h> #include<string.h> int main() { char Chuoi[255],*s; printf("Nhap chuoi: ");gets(Chuoi); s=strstr(Chuoi,”hoc”); printf(“Chuoi trich ra: ”);puts(s); getch(); return 0;
  • 35. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 35 } So sánh chuỗi, hàm strcmp(): Đ ăsoăsánhăhaiăchuỗiătheoăt ngăkỦăt ătrongăb ngămưăAscii,ătaăcóăth ăs ă d ngăhàmăstrcmp(). Cú pháp: int strcmp(const char *s1, const char *s2) Haiăchuỗiăs1ăvàăs2ăđ ợcăsoăsánhăv iănhau,ăk tăqu ătr ăv ălàăm tăsốănguyênă(sốănàyăcó đ ợcăbằngă cáchăl yăkỦăt ăc aăs1ătr ăkỦăt ăc aăs2ăt iăvịătríăđ uătiênăx yăraăs ăkhácănhau). - N uăk tăqu ălàăsốăâm,ăchuỗiăs1ănh ăhơnăchuỗiăs2. - N uăk tăqu ălàă0,ăhaiăchuỗiăbằngănhau. - N uăk tăqu ălàăsốăd ơng,ăchuỗiăs1ăl năhơnăchuỗiăs2. So sánh chuỗi, hàm stricmp(): Hàmănàyăth căhi năvi căsoăsánhătrongănăkỦăt ăđ uătiênăc aă2ăchuỗiăs1ăvàă s2,ăgi aăch ăth ngăvàăch ăhoaăkhôngăphânăbi t. Cú pháp: int stricmp(const char *s1, const char *s2) K tăqu ătr ăv ăt ơngăt ănh ăk tăqu ătr ăv ăc aăhàmăstrcmp() Khởi tạo chuỗi, hàm memset() :Hàmănàyăđ ợcăs ăd ngăđ ăđ tănăkỦăt ăđ uătiênăc aăchuỗiălàăkỦăt ăc. Cú pháp:memset(char *Des, int c, size_t n) Đổi từ chuỗi ra số, hàm atoi(), atof(), atol() (trong stdlib.h) Đ ăchuy năđổiăchuỗiăraăsố,ătaăs ăd ngăcácăhàmătrên. Cú pháp : intăatoi(constăchară*s)ă:ăchuy năchuỗiăthànhăsốănguyên longăatol(constăchară*s)ă:ăchuy năchuỗiăthànhăsốănguyênădài floatăatof(constăchară*s)ă:ăchuy năchuỗiăthànhăsốăth c N uăchuy năđổiăkhôngăthànhăcông,ăk tăqu ătr ăv ăc aăcácăhàmălàă0. Ngoàiăra,ăth ăvi năstring.hăcònăhỗătrợăcácăhàmăx ălỦăchuỗiăkhác,ătaăcóăth ăđ căthêmătrongăph nă trợăgiúp. Danh sách các thư viện hàm hay dùng: Th vi n vào/ra (nh p/xu t) : <stdio.h> X lý ký t và chuỗi ký t :<string.h>, <ctype.h> Th vi n hàm toán h c :<math.h>, <float.h> Th i gian, ngày tháng :<time.h>, <locale.h> C p phát b nh đ ng :<stdlib.h> Các hàm ký t r ng :<wchar.h>, <wctype.h> Các hàm khác :<stdlib.h>, ...
  • 36. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 36 Chương 4. CÁC CẤU TRÚC RẼ NHÁNH 4.1 Các điều kiện rẽ nhánh M tăch ơngătrìnhăth ngăkhôngăchỉăbaoăgồmăcácăl nhătu năt ănốiăti pănhau.ăTrongăquáătrìnhăch yă nóăcóăth ăr ănhánhăhayăl păl iăm tăđo nămưănàoăđó.ăĐ ălàmăđi uănàyăchúngătaăs ăd ngăcácăc uătrúcăđi uă khi n. Cùngăv iăvi căgi iăthi uăcácăc uătrúcăđi uăkhi năchúngătaăcũngăs ăph iăbi tăt iăm tăkháiăni măm i:ă khối lệnh,ăđóălàăm tănhómăcácăl nhăđ ợcăngĕnăcáchăb iăd uăch măph yă(;)ănh ngăđ ợcăg pătrongăm tă khốiăgi iăh năb iăm tăc păngo cănh n:ă{ăvàă}. H uăh tăcácăc uătrúcăđi uăkhi nămàăchúngătaăs ăxemăxétătrongăch ơngănàyăchoăphépăs ăd ngăm tă l nhăđơnăhayăm tăkhốiăl nhălàmăthamăsố,ătuỳăthu căvàoăchúngătaăcóăđ tănóătrongăc păngo cănh năhayă không. 4.2 Phát biểu if-else C uătrúcănàyăđ ợcădùngăkhiăm tăl nhăhayăm tăkhốiăl nhăchỉăđ ợcăth căhi năkhiăm tăđi uăki nănàoă đóătho ămưn.ăD ngăc aănóănh ăsau: 4.2.1. Cú pháp if đơn: if (condition) statement Trongăđóăcondition làăbi uăthứcăđi uăki năs ăđ ợcătínhătoán.ăN uăđi uăki năđóălàătrue, statement đ ợcăth căhi n.ăN uăkhôngăstatement bịăb ăquaă(khôngăth căhi n)ăvàăch ơngătrìnhăti păt căth căhi nă l nhăti păsauăc uătrúcăđi uăki n.ă Ví dụ,ăđo nămưăsauăđâyăs ăvi tăxăisă100ăchỉăkhiăbi n xăchứaăgiáătrịă100:ă if (x = = 100) cout << "x is 100"; N uăchúngătaămuốnăcóăhơnăm tăl nhăđ ợcăth căhi nătrongătr ngăhợpăcondition là true chúng ta có th ăchỉăđịnhăm t khốiăl nhăbằngăcáchăs ăd ngăm tăc păngo cănh nă{ă}:ă Ví dụ: if (x == 100) { cout << "x is "<<x; } Chúngătaăcũngăcóăth ăchỉăđịnhăđi uăgìăs ăx yăraăn uăđi uăki năkhôngăđ ợcătho ămưnăbằngăcáchăs uă d ngăt ăkhoáăelse.ăNóăđ ợcăs ăd ngăcùngăv iăif nh ăsau: 4.2.2. Cú pháp if - else: if (condition) statement1 else statement2 Ví dụ: if (x == 100) cout << "x is 100";
  • 37. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 37 else cout << "x is not 100"; C uătrúcăif + else cóăth ăđ ợcămócănốiăđ ăki mătraănhi uăgiáătrị.ăVíăd ăsauăđâyăs ăki mătraăxemăgiáătrịă chứaătrongăbi năxălàăd ơng,ăâmăhayăbằngăkhông. if (x > 0) cout << "x is positive"; else if (x < 0) cout << "x is negative"; else cout << "x is 0"; 4.3 Phát biểu if-else lồng Phátăbi uăif-else lồngănhauătrongătr ngăhợpăcácăphátăbi uăif-elseăl iănằmătrongăcácăphátăbi uăif-else khác. Ví dụ: 1)ăGi iăph ơngătrìnhăax+b=0 2)ăGi iăph ơngătrìnhăax2 + bx + c = 0 4.4 Phát biển switch Cúăphápăc aăl nhăswitch hơiăđ căbi tăm tăchút.ăM căđíchăc aănóălàăki mătraăm tăvàiăgiáătrịăhằngăchoă m tăbi uăthức,ăt ơngăt v iănh ngăgìăchúngătaălàmă ăđ uăbàiănàyăkhiăliênăk tăm tăvàiăl nhăif và else if v iănhau.ăD ngăthứcăc aănóănh ăsau:ă Cú pháp: switch (expression) { case constant1: block of instructions 1 break; case constant2: block of instructions 2 break; … default: default block of instruction } Nóăho tăđ ngătheoăcáchăsau:ă switch tínhăbi uăthứcăvàăki mătraăxemănóăcóăbằngă constant1 hay không,ăn uăđúngăthìănóăth căhi năblock of instructions 1 choăđ năkhiătìmăth yăt ăkhoáăbreak,ăsauăđóă nh yăđ năph năcuốiăc aăc uătrúcăl aăch năswitch. Cònăn uăkhông,ăswitchăs ăki mătraăxemăbi uăthứcăcóăbằngăconstant2 hayăkhông.ăN uăđúngănóăs ă th căhi năblock of instructions 2 choăđ năkhiătìmăth yăt ăkhoáăbreak. Cuốiăcùng,ăn uăgiáătrịăbi uăthứcăkhôngăbằngăb tăkìăhằngănàoăđ ợcăchỉăđịnhă ătrênă(b năcóăth ăchỉă địnhăbaoănhiêuăcâuăl nhăcaseătuỳăthích),ăch ơngătrìnhăs ăth căhi năcácăl nhătrongăph nădefault:ăn uănóă tồnăt iăvìăph nănàyăkhôngăbắtăbu căph iăcó.ă
  • 38. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 38 Hai đoạn mã sau là tương đương: ví dụ switch if-else tương đương switch (x) { case 1: cout << "x is 1"; break; case 2: cout << "x is 2"; break; default: cout << "value of x unknown"; } if (x == 1) { cout << "x is 1"; } else if (x == 2) { cout << "x is 2"; } else { cout << "value of x unknown"; } 4.5 Biểu thức điều kiện C++ cóăm tătoánăt ăr tăm nhăvàăthíchăhợpăđ ăthayăth ăchoăcácăcâuăl nhăc aăIf- Then-Else. Cú pháp c aăvi căs ăd ngătoánăt ă“?” là: E1 ? E2 : E3; TrongăđóăE1,ăE2,ăE3ălàăcácăbi uăthức. Ý nghĩa: Tr cătiênăE1ăđ ợcă căl ợng,ăn uăđúng E2ăđ ợcă căl ợngăvàănóătr ăthànhăgiáătrịăc aăbi uă thức;ăn uăE1ăsai,ăE2ăđ ợcă căl ợngăvàătr ăthànhăgiáătrịăc aăbi uăthức. Thì y đ ợcăgánăgiáătrịă100,ăn uăx nh ăhơnă9ăthìăy s ănh năgiáătrịălàă200. Ví dụ: Đo nămưănàyăt ơngăđ ơngăc uătrúcăif nh ăsau: x=10; y = (x<9) ? 100 : 200; //ăt ơngăđ ơngăv i x = 10; if (x < 9) y = 100; else y = 200; 4.6 Khai báo enum Ki uăenum làăm tăki uăd ăli uăđ căbi tăđ ợcădùngăđ ăđịnhănghĩaăm tăquanăh ăthứăt ăchoăm tăt pă h păh uăh năcácătên.ă(Trongăth căt ăthìăenum cóăki uălà int): Ví dụ: enum Wiki {Arisa, Bluesman, VietBio, Trung, Quang, Minh}; Đ ăkhaiăbáoăbi năwiki cóăki uăenum dùngăcâuăl nh: enum wiki; Cácă giáă trịă (hi uă ng m)ă c aă cácă kíă hi uă Arisa, Bluesman, VietBio, Trung, Quang, Minh theoăm căđịnhăs ăt ơngăứngăv iă0,ă1, 2,ă3,ă4,ă5.ăCácăcâuăl nhăcáchăvi tăsauăđâyălàăcóăhi uăl c: int member = Minh;
  • 39. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 39 if (member == VietBio) { do_some_commands } for (member=Arisa; member <= Trung; member++) { do_some_commands } Nh ăv y,ătheoăm căđịnh,ăcácătênăc aăm tăenum đ ợcăxemălàăcác hằngăsốăt ă0ătĕngăd năchoăđ nătênăcuốiă cùng. Tuy nhiên, C++ khôngălo iătr ăkh ănĕngăx păl iăgiáătrịăc aăm tăki uăenum theo cách riêng: Ví dụ: enum reordert={duck,cat=10, mouse =50, elephant =1000, lion, virus}; Trongăthíăd ătrênăthìăduck cóăgiáătrịăt ơngăứngălàă0,ăcat là 10, ..., elephant là 1000, còn lion t ơngăứngăv iăgiáătrịă1001ăvàăvirus t ơngăứngăv iă1002. M tătrongănh ngăứngăd ngăchínhăc aăki uănàyălàăđ ătĕngăc ngăkh ănĕngăđ cămưăđ ợcăd ăhi uăhayă phùăhợpăhơn.
  • 40. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 40 Chương 5. CÁC CẤU TRÚC LẶP 5.1 Vòng lặp while Cú pháp: while (expression) statement vàăchứcănĕngăc aănóăđơnăgi năchỉălàăl păl iăstatement khiăđi uăki năexpression cònătho ămưn.ă Ví dụ,ăchúngătaăs ăvi tăm tăch ơngătrìnhăđ măng ợcăs ăd ngăvàoăl păwhile: // custom countdown using while #include <iostream.h> int main () { int n; cout << "Enter the starting number > "; cin >> n; while (n>0) { cout << n << ", "; - - n; } cout << "FIRE!"; return 0; } Enter the starting number > 8 8, 7, 6, 5, 4, 3, 2, 1, FIRE! Khi ch ơngătrìnhăch yăng iăs ăd ngăđ ợcăyêuăc uănh păvàoăm tăsốăđ ăđ măng ợc.ăSauăđó,ăkhiă vòngăl păwhile bắtăđ uăn uăsốămàăng iădùngănh păvàoătho ămưnăđi uăki năđi uăki năn>0ăkhốiăl nhă s ăđ ợcăth căhi năm tăsốăl năkhôngăxácăđịnhăch ngănàoăđi uăki nă(n>0)ăcòn đ ợcătho ămưn. Chúngătaăc năph iănh ărằngăvòngăl păph iăk tăthúcă ăm tăđi mănàoăđó,ăvìăv yăbênătrongăvòngăl pă chúngătaăph iăcungăc păm tăph ơngăthứcănàoăđóăđ ăbu căcondition tr ăthànhăsaiăn uăkhôngăthìănóăs ă l păl iămưiămưi.ăTrongăvíăd ătrênăvòngăl păph i cóăl nhă- - n;ăđ ălàmăchoăconditionătr ăthànhăsaiăsauă m tăsốăl năl p. 5.2 Vòng lặp for Cú pháp: for (initialization; condition; increase) statement; Chứcănĕngăchínhăc aănóălàăl păl iăstatement ch ngănàoăcondition cònămangăgiáătrịăđúng,ănh ă trong vòng lặp while.ăNh ngăthêmăvàoăđó,ăfor cungăc păchỗădànhăchoăl nhăkh iăt oăvàăl nhătĕng.ăVìă v yăvòngăl pănàyăđ ợcăthi tăk ăđ căbi tăl păl iăm tăhànhăđ ngăv iăm tăsốăl năxácăđịnh.ă Cáchăthứcăho tăđ ngăc aănóănh ăsau:ă Initialization (bi uăthứcă1) đ ợcăth căhi n. Nóiăchungănóăđ tăm tăgiáăkhíăbanăđ uăchoăbi năđi uăkhi n.ă L nhănàyăđ ợcăth căhi năchỉăm tăl n. condition (bi uăthứcă2)ăđ ợcăki mătra,ăn uănóălàăđúngăvòngăl păti păt căcònăn uăkhôngăvòngăl păk tă thúcăvàăstatementăđ ợcăb ăqua. statementăđ ợcăth căhi n.ăNóăcóăth ălàăm tăl nhăđơnăho călàăm tăkhốiăl nhăđ ợcăbaoătrongăm tăc pă ngo cănh n.
  • 41. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 41 Cuốiăcùng, increase (bi uăthứcă3)ăđ ợcăth căhi năđ ăthayăđổi bi năđi uăkhi năvàăvòngăl păquayătr ăl iă ki uătraăđi uăki năcondition. Sauăđâyălàăm tăvíăd ăđ măng ợcăs ăd ngăvòngăfor. // countdown using a for loop #include <iostream.h> int main () { for (int n=10; n>0; n--) { cout << n << ", "; } cout << "FIRE!"; return 0; } 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, FIRE! Ph năkh iăt oăvàăl nhătĕngăkhôngăbắtăbu căph iăcó.ăChúngăcóăth ăđ ợcăb ăquaănh ngăv năph iăcóă d uăch măph yăngĕnăcáchăgi aăcácăph n.ăVìăv y,ăchúngătaăcóăth ăvi tăfor (;n<10;) ho căfor (;n<10;n++). Bằngăcáchăs ăd ngăd uăph y,ăchúngătaăcóăth ădùngănhi uăl nhătrongăb tăkìătr ngănàotrong vòng for,ănh ălàătrongăph năkh iăt o.ăVíăd ăchúngătaăcóăth ăkh iăt oăm tălúcănhi uăbi nătrongăvòngăl p:ă for ( n=0, i=100 ; n!=i ; n++, i-- ) { // cái gì ở đây cũng được... } Vòngăl pănàyăs ăth căhi nă50ăl năn uănh ănăvàăiăkhôngăbịăthayăđổiătrongăthânăvòngăl p:ă 5.3 Các vòng lặp lồng Trongătr ngăhợpăcácăvòngăl păl iăchứaăcácăvòngăl păkhác. Ví dụ: Tínhăgiáătrịăc aăbi uăthức:ăSă=ă2!ă+ 4! + 6! +ăầă+ăn!; (nănh păvàoăt ăbànăphím). #include <iostream.h> int main(){ int n; cout<<”n n=”; cin>>n; int gt=1,s=0; for(int i=2; i<=n;i=i+2) { for (int j=1;j<=i;j++) gt=gt*j; s=s+gt; gt=1; } cout << “n S=” <<s; return 0; }
  • 42. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 42 5.4 Vòng lặp do-while Cú pháp: do statement while (condition); Chứcănĕngăc aănóălàăhoànătoànăgiốngăvòngăl păwhile chỉătr ăcóăm tăđi uălàăđi uăki năđi uăkhi nă vòngăl păđ ợcătínhătoánăsauăkhiăstatement đ ợcăth căhi n,ăvìăv yăstatement s ăđ ợcăth căhi năítănh tă m tăl năngayăc ăkhi condition khôngăbaoăgi ăđ ợcătho ămưn.ăVíăd ,ăch ơngătrìnhăd iăđâyăs ăvi tăraă b tăkìăsốănàoămàăb nănh păvàoăchoăđ năkhiăb nănh păsốă0. // number echoer #include <iostream.h> int main () { unsigned long n; do { cout << "Enter number (0 to end): "; cin >> n; cout << "You entered: " << n << "n"; } while (n != 0); return 0; } Enter number (0 to end): 12345 You entered: 12345 Enter number (0 to end): 160277 You entered: 160277 Enter number (0 to end): 0 You entered: 0 Vòngăl pădo-whileăth ngăđ ợcădùngăkhiăđi uăki năđ ăk tăthúcăvòngăl pănằmătrongăvòngăl p,ănh ă trongăvíăd ătrên,ăsốămàăng iădùngănh păvàoălàăđi uăki năki mătraăđ ăk tăthúcăvòngăl p.ăN uăb năkhôngă nh păsốă0ătrongăvíăd ătrênăthìăvòngăl păs ăkhôngăbaoăgi ăch mădứt. 5.5 Câu lệnh break, continue, goto và hàm exit 5.5.1. Lệnh break. S ăd ngăbreakăchúngătaăcóăth ăthoátăkh iăvòngăl păngayăc ăkhiăđi uăki năđ ănóăk tăthúcăch aăđ ợcă tho ămưn.ăL nhănàyăcóăth ăđ ợcădùngăđ ăk tăthúcăm t vòngăl păkhôngăxácăđịnhăhayăbu cănóăph iăk tă thúcăgi aăch ngăthayăvìăk tăthúcăm tăcáchăbìnhăth ng.ăVíăd ,ăchúngătaăs ăd ngăvi căđ măng ợcătr că khiănóăk tăthúc:ă // break loop example #include <iostream.h> int main () { int n; for (n=10; n>0; n--) { cout << n << ", "; if (n==3) { cout<<"countdown aborted!"; break; } } return 0; } 10, 9, 8, 7, 6, 5, 4, countdown aborted! 5.5.2.Lệnh continue.
  • 43. Bàiăgi ngăKỹăthu tăl pătrình Biên soạn: ThS. Trần Xuân Thanh – Khoa CNTT – ĐH Thành Đô 43 L nhăcontinueălàmăchoăch ơngătrìnhăb ăquaăph năcònăl iăc aăvòngăl păvàănh yăsangăl năl păti pătheo.ă Víăd ăchúngătaăs ăb ăquaăsốă5ătrongăph năđ măng ợc: // break loop example #include <iostream.h> int main () { for (int n=10; n>0; n--) { if (n==5) continue; cout << n << ", "; } cout << "FIRE!"; return 0; } 10, 9, 8, 7, 6, 4, 3, 2, 1, FIRE! 5.5.3. Lệnh goto. L nhănàyăchoăphépănh yăvôăđi uăki năt iăb tăkìăđi mănàoătrongăch ơngătrình.ăNóiăchungăb nănênă tránhădùngănóătrongăch ơngătrìnhăC++.ăTuyănhiênăchúngătaăv năcóăm tăvíăd ădùngăl nhăgotoăđ ăđ mă ng ợc:ă // goto loop example #include <iostream.h> int main () { int n=10; loop: ; cout << n << ", "; n--; if (n>0) goto loop; cout << "FIRE!"; return 0; } 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, FIRE! 5.5.4. Hàm exit. M căđíchăc aăexit làăk tăthúcăch ơngătrìnhăvàătr ăv ăm tămưăxácăđịnh.ăD ngăthứcăc aănóănh ăsauă void exit (int exit code); exităcodeăđ ợcădùngăb iăm tăsốăh ăđi uăhànhăho căcóăth ăđ ợcădùngăb iăcácăch ơngătrìnhăg i.ăTheoă quyă c,ămưătr ăv ă0ăcóănghĩaălàăch ơngătrìnhăk tăthúcăbìnhăth ngăcònăcácăgiáătrịăkhácă0ăcóănghĩaălàăcóă lỗi. 5.6 Mảng và xâu kí tự 5.6.1. Khai niệm mảng. M ngălàăm tădưyăcácăph năt ăcóăcùngăki uăđ ợcăđ tăliênăti pătrongăb ănh ăvàăcóăth ătruyăxu tăđ nă t ngăph năt ăbằngăcáchăthêmăm tăchỉăsốăvàoăsauătênăc aăm ng. Chẳngăh năchúngătaăcóăth ăl uă5ăgiáătrịăki uăint màăkhôngăc năph iăkhaiăbáoă5ăbi năkhácănhau. Víăd ,ăm tăm ngăchứaă5ăgiáătrịănguyênăki uăint có tên là billy cóăth ăđ ợcăbi uădi nănh ăsau:ă