1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bai ging k thut lp trinh

105 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 105
Dung lượng 1,14 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

- 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 ăv

Trang 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,ă

- 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Ủ

Trang 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ă

Trang 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

Trang 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 ă

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

Trang 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ịchs ă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.)

Trang 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.ă

Trang 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

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ă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í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

(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

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ă

Trang 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)

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:ă

s ăti năb ăNóăkhôngăkinhăt ătrongăvi călàmăraăcácăhồăsơăchoăph năm m

m m,ăt oăraăs ăkhóăkhĕnăvàătốnăphí

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ă

di năchoăng iădùng

- Mô hình xoắn ốc Boehm

Trang 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

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 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ă

Trang 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 ă

đ ợ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

T hu 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:

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ăđ ă

Trang 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ă

Tính chất của thu t toán

M tăthu tătoánăcóăcácătínhăch tăsau:

chính xác

sắpăx pătheoăthứăt ănh tăđịnh

choăk tăqu ănh ănhau

choăm tăl păcácăbàiătoánăcóăđ uăvàoăt ơngăt ănhau

Độ 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

Trang 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ă

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ă

) thì tài nguyên

) 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ó:

vàoăđ ăl năđ uăvào.ăChẳngăh nănh ăcácăthaoătácăh ăthống:ăđóng,ăm ăfile

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

tácătínhătoánăv iăm ngănhi uăchi uă(tínhăđịnhăthức maătr n)

).ă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à Θ

Trang 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

Trang 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

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

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

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

Trang 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ă

đ ă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

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ă

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

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ă

trình :

Trang 16

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ă

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ăđó

Trang 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ó.ă

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

Trang 18

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 : ! ; > ; >= ; < ; <= ; = = ;!= ; && ; ||

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

Trang 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

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)ă*ă&

* / % + -

- 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ă“;”

đ ăth ăbi uăthịăc uătrúcăđi uăkhi năr ănhánhăho căc uătrúcăl p

Trang 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

Trang 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 :

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)

Chú ý : Kiểu ký tự cũng có thể xem là một dạng của kiểu nguyên

Trang 22

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

Trongăch ơngătrỡnhătrờnăgồmăhaiăph năchớnhăđúălàă:

chỳngătaăc nădựngăhaiăfileătiờuăđ ă<stdio.h> và <conio.h>

Trang 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:

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

C hươ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ă câuă l nhă dùngă đ ă địnhă nghĩa hàm return

<k t qu ătr ăv >;

}

Trang 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

Trang 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.ă

sqrt(double x): tớnhăcĕnăb că2ăc aăx.ă

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

Trang 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*/

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*/

Đọ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

int n;

Trang 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:

cin tuân theo một số qui - ớc dùng trong việc phân tích các ký tự:

“.” đố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:

Trang 29

cout << "Nhap vao mot so nguyen, mot xau, mot so thuc : ";

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

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

Trang 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ụ :

+ 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

Trang 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ụ:

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 \):

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ự )

Trang 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>:

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

printf("Chuoi vua nhap: ");puts(Chuoi);

printf(“Co do dai %d”,Dodai);

getch();

Trang 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

Đổ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()

Trang 34

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”

Trang 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

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>

Trang 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";

Trang 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

Ví dụ: 1)ăGi iăph ơngătrìnhăax+b=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;

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ó.ă

Trang 38

Hai đoạn mã sau là tương đương:

} 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 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:

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:

Trang 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

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

Trang 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

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 ă

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

Ngày đăng: 23/12/2022, 13:09

TỪ KHÓA LIÊN QUAN