P. 1
Giao Trinh Cong Nghe Phan Mem

Giao Trinh Cong Nghe Phan Mem

|Views: 0|Likes:
Published by Sy Nguyen Tien

More info:

Published by: Sy Nguyen Tien on May 29, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

05/29/2012

pdf

text

original

Muûc luûc

CHLONG 1 ............................... 5 OA¡ CLONG VK CÔNG NGHK PHÂN MKM
I. KHAI QUAT VÊ LICH SU LÂP TRÌNH.................................................................................... 5
I.1. Lâp trlnh tuyên tinh........................................................................................... 5
I.2. Lâp trlnh co câu truc ......................................................................................... 6
I.3. Lâp trlnh dinh huong dôi tuong (ÐHÐT).......................................................... 6
I.4. Lâp trlnh truc quan............................................................................................ 7
I.5. Nhung tu tuong cach mang trong lâp trlnh ....................................................... 7
II. CAC PHUONG DIÊN CUA CÔNG NGHÊ PHÂN MÊ M 8
II.1. Công nghê phân mêm la gl?.............................................................................. 8
II.2. Nhung yêu tô chât luong bên ngoai va bên trong ............................................. 8
II.3. San phâm phân mêm la gl ? .............................................................................. 9
III. NHUNG NÔI DUNG CO BA N CUA CNPM........................................................................... 11
III.1. Tông quan vê công nghê phân mêm............................................................... 11
III.2. Chu ky sông cua phân mêm............................................................................ 12
CHLONG 2 ................................................................ 18 TH¡KT KK PHÂN MKM
I. NÊN TANG CUA THIÊT KÊ PHÂN MÊ M.............................................................................. 18
II. PHUONG PHAP LÂP TRÌNH CÂU TRU C............................................................................... 20
II.1. Khai niêm vê lâp trlnh câu truc....................................................................... 22
II.2. Nhung y tuong co ban lâp trlnh câu truc......................................................... 22
II.3. Cac câu truc diêu khiên chuân ........................................................................ 25
II.4. Môt sô vi du viêt chuong trlnh theo so dô khôi .............................................. 28
III. CÂU TRU C TÔI THIÊU 29
III.1. Cac câu truc lông nhau.................................................................................... 31
IV. LÂP TRÌNH ÐON THÊ 32
IV.1. Khai niêm vê don thê ...................................................................................... 32
IV.2. Môi liên hê giua cac don thê ........................................................................... 33
IV.2.1. Phán loaûi âån thãø ................................................................................... 33
IV.2.2. Täø chæïc mäüt chæång trçnh coï cáúu truïc âån thãø .......................................... 33
V. PHAT TRIÊN CHUONG TRÌNH BÄ NG TINH CHÊ TUNG BUO C ............................................... 35
V.1. Nôi dung phuong phap.................................................................................... 35
V.2. Vi du minh hoa................................................................................................ 36
V.2.1. Vê duû 1........................................................................................................ 36
V.2.2. Baìi toaïn 8 quán háûu................................................................................... 38
TS. PHAN HUY KHANH biãn soaûn i
ii Cäng nghãû Pháön mãöm
V.3. Sua dôi chuong trlnh....................................................................................... 42
VI. PHU LUC ÐON VI TRONG TURBO PASCAL...................................................................... 50
VI.1. Gioi thiêu Unit ................................................................................................ 50
VI.2. Câu truc cua Unit ............................................................................................ 50
VI.3. Cach su dung Unit........................................................................................... 52
VI.4. Vi du vê Unit................................................................................................... 53
VI.5. Bai tâp............................................................................................................. 55
CHLONG 3 ..................................................... 5? HOP THLC HOA PHÂN MKM
I. XAC MINH VA HOP THUC HOA PHÂ N MÊM........................................................................ 57
II. CHUNG MINH SU ÐUNG ÐÄN CU A CHUONG TRÌNH............................................................ 58
II.1. Suy luân Toan hoc .......................................................................................... 59
II.1.1. Caïc quy tàõc suy luáûn Toaïn hoüc.................................................................. 59
II.1.2. Khaïi niãûm vãö chæïng minh tênh âuïng âàõn cuía chæång trçnh....................... 60
II.1.3. Tiãn âãö vaì quy tàõc suy diãùn........................................................................ 61
II.1.4. Quy tàõc âiãöu kiãûn if B then P ..................................................................... 62
II.1.5. Quy tàõc âiãöu kiãûn if B then P else Q.......................................................... 63
II.1.6. Quy tàõc voìng làûp while .............................................................................. 63
II.1.7. Caïc quy tàõc khaïc........................................................................................ 64
II.2. Phuong phap cua C.A.R. Hoare...................................................................... 66
II.2.1. Phaït biãøu.................................................................................................... 66
II.2.2. Chæïng minh tênh âuïng âàõn tæìng pháön cuía Div.......................................... 66
II.3. Chung minh dung............................................................................................ 69
II.3.1. Chæïng minh dæìng cuía mäüt chæång trçnh.................................................... 69
II.3.2. Chæïng minh dæìng cuía Div ......................................................................... 70
II.3.3. Âaïnh giaï mäüt chæång trçnh làûp.................................................................. 71
III. XÂY DU NG CHUONG TRÌNH ............................................................................................. 72
III.1. Mo dâu ............................................................................................................ 72
III.2. Bai toan co tam tai .......................................................................................... 73
III.2.1. Låìi giaíi thæï nháút......................................................................................... 74
III.2.2. Låìi giaíi thæï hai........................................................................................... 75
III.2.3. Chæïng minh tênh âuïng âàõn cuía chæång trçnh (I) ....................................... 76
III.3. In ra môt danh sach theo thu tu nguoc ............................................................ 80
III.3.1. TILDA1 .................................................................................................... 81
IV. CAC TIÊN ÐÊ VA QUY TÄC SUY DIÊN................................................................................ 82
IV.1. Ðiêu kiên truoc yêu nhât va diêu kiên sau manh nhât cua môt day lênh........ 82
IV.1.1. Haìm fppre .................................................................................................. 83
IV.1.2. Haìm fppost ................................................................................................. 83
IV.1.3. Sæí duûng âiãöu kiãûn træåïc yãúu nháút vaì âiãöu kiãûn sau maûnh nháút âãø chæïng
minh tênh âuïng âàõn cuía chæång trçnh............................................................................ 84
TS. PHAN HUY KHANH biãn soaûn ii
Muûc luûc
IV.2. Cac tiên dê gan................................................................................................ 86
IV.2.1. Âiãöu kiãûn træåïc yãúu nháút vaì âiãöu kiãûn sau maûnh nháút cuía lãûnh gaïn ......... 86
IV.2.2. Quy tàõc tênh toaïn âiãöu kiãûn sau maûnh nháút cuía mäüt pheïp gaïn.................. 87
V. BAI TÂP........................................................................................................................... 89
CHLONG 4 ............................................... 90 THL NGH¡KM CHLONG TR¡NH
I. KHAO SAT PHÂN MÊ M..................................................................................................... 90
II. CAC PHUONG PHAP THU NGHIÊM..................................................................................... 92
II.1. Ðinh nghïa va muc dich thu nghiêm............................................................... 92
II.2. Thu nghiêm trong chu ky sông cua phân mêm............................................... 94
II.2.1. Thæí nghiãûm âån thãø.................................................................................... 94
II.2.2. Thæí nghiãûm têch håüp................................................................................... 95
II.2.3. Thæí nghiãûm hãû thäúng.................................................................................. 96
II.2.4. Thæí nghiãûm häöi quy.................................................................................... 97
II.3. Dân dat cac thu nghiêm................................................................................... 97
II.4. Thiêt kê cac phep thu pha huy (DeIect Testing) ............................................. 98
II.4.1. Caïc phæång phaïp dæûa trãn chæång trçnh................................................... 98
II.4.2. Caïc phæång phaïp dæûa trãn âàûc taí ............................................................ 100
II.4.3. Kãút luáûn.................................................................................................... 101
II.4.4. Caïc tiãu chuáøn kãút thuïc thæí nghiãûm......................................................... 101
II.5. Cac phep thu nghiêm thông kê...................................................................... 102
II.5.1. Måí âáöu ................................................................................................... 102
II.5.2. Æåïc læåüng âäü äøn âënh cuía mäüt pháön mãöm............................................... 104
CHLONG 5 ................................................................... 105 OÃC TA PHÂN MKM
I. MO ÐÂU ÐÄ C TA PHÂN MÊM.......................................................................................... 105
I.1. Khai niêm vê dac ta ...................................................................................... 105
I.1.1. Âàûc taí laì gç ?............................................................................................ 105
I.1.2. Caïc phæång phaïp âàûc taí .......................................................................... 105
I.1.3. Caïc thê duû minh hoüa................................................................................. 106
I.2. Ðac ta va lâp trlnh......................................................................................... 107
II. ÐÄC TA CÂ U TRUC DU LIÊU .......................................................................................... 109
II.1. Khai niêm vê Câu truc du liêu co so vecto ................................................... 109
II.1.1. Dáùn nháûp.................................................................................................. 109
II.1.2. Âàûc taí hçnh thæïc....................................................................................... 110
II.2. Truy nhâp môt phân tu cua vecto.................................................................. 110
II.3. Cac thuât toan xu ly vecto............................................................................. 111
II.3.1. Truy tçm tuáön tæû mäüt pháön tæí cuía vectå (sequential search).................... 111
II.3.2. Tçm kiãúm nhë phán (Binary search) ......................................................... 113
III. ÐÄC TA ÐAI SÔ : MÔ HÌNH HOA PHAT TRIÊN PHÂN MÊM................................................. 117
III.1. Mo dâu .......................................................................................................... 117
III.2. Phân loai cac phep toan................................................................................. 119
III.3. Hang va biên ................................................................................................. 120
III.4. Phep thê cac hang.......................................................................................... 120
TS. PHAN HUY KHANH biãn soaûn iii
iv Cäng nghãû Pháön mãöm
III.5. Cac thuôc tinh cua dac ta .............................................................................. 122
III.5.1. Mä hçnh láûp trçnh (triãøn khai) .................................................................. 122
III.5.2. Mä hçnh âàûc biãût ...................................................................................... 123
III.5.3. Mä hçnh âäöng dæ...................................................................................... 123
III.6. Phep chung minh trong dac ta dai sô ............................................................ 123
III.6.1. Lyï thuyãúttæång âæång............................................................................... 124
III.6.2. Khaïi niãûm vãö lyï thuyãút quy naûp................................................................ 125
III.6.3. Chæïng minh tæû âäüng båíi viãút laûi............................................................... 126
III.6.4. Phán cáúp trong âàûc taí âaûi säú................................................................... 128
IV. ÐÄC TA HAY CACH CU THÊ HOA SU TRUU TUONG.......................................................... 129
IV.1. Ðac ta phep thay dôi bô nho ......................................................................... 129
IV.2. Ham............................................................................................................... 131
IV.3. Hop thuc hoa va phuc hôi ............................................................................. 134
IV.4. Bat dâu triên khai thuc tiên........................................................................... 137
IV.5. Phep hop thanh (câu tao)............................................................................... 140
IV.6. Triên khai thu hai .......................................................................................... 141
IV.7. Triên khai thuc hiên lân thu ba ..................................................................... 146
IV.8. Ðac ta lam gl ? .............................................................................................. 149

TS. PHAN HUY KHANH biãn soaûn iv
Âaûi cæång vãö cäng nghãû pháön mãöm 5

CHUONG 1
Âaûi cæång vãö cäng nghãû pháön mãöm
I. Khaïi quaït vãö lëch sæí láûp trçnh
Iaµ frInh (µrogrammIng), hay láûp chæång trçnh cho maïy tênh âiãûn tæí (MTÐT)
Ia môf nganh con raf moI mo. MTÐT dau fIôn Iaµ frInh duoc moI chí xuaf hIôn
cach day hon bôn muoI nam
l
. Suôf hon bôn fhaµ ky qua, Iaµ frInh không ngung
duoc caI fIôn va µhaf frIôn, cang ngay cang huong vô nhu cau cua nguoI Iaµ frInh.
Iaµ frInh Ia môf công vIôc nang nhoc, nang suaf fhaµ so voI cac hoaf dông fri
fuô khac. Vi du nôu môf san µham µhan môm khoang 2000 − 3000 dong Iônh doI
hoI 3 nguoI Iaµ frInh chinh frong vong 6 fhang fhI nang suaf môI nguoI chí dao
dông frong khoang fu 5 dôn 6 Iônh môI ngay (7!).
Chinh vI cac san µham µhan môm khI fung ra fhI fruong chua fhuc su hoan
hao ngay nôn nguoI fa fhuong dung moo fhuong maI bang cach gan cho san µham
môf caI duôI “µhIôn ban” (vorsIon) dô noI rang µhIôn ban ra sau da kha c µhuc duoc
nhung khIôm khuyôf cua µhIôn ban fruoc do.
V VI I d du u 1 1 : :
Hô dIôu hanh MS−ÐOS da co cac µhIôn ban l.0, 3.3, 5.0, 6.0, 7.0 v.v...
MIcrosoff WIndovs da co cac µhIôn ban l.0, 2.0, 3.0, 3.l, 3.ll.
Nay Ia WIndovs 95, 97, 98 v.v...
Turbo IsacaI cua hang ÐorIand Inc. da co cac µhIôn ban 5.0, 6.0, 7.0, 8.0 v.v...
I.1.

Láûp trçnh tuyãún tênh
VoI nhung MTÐT dau fIôn, nguoI fa su dung ngôn ngu may (machIno
Ianguago) hay ngôn ngu bac fhaµ (Iov IovoI) dô Iaµ frInh va dung cac khoa co khi
dô naµ chuong frInh vao may. Thoo da µhaf frIôn cua cac fhIôf bI µhan cung, cac
ngôn ngu bac cao (hIgh IovoI) voI cac dong Iônh fua fIông Anh baf dau duoc su
dung. May so dIch chuong frInh do sang ngôn ngu may fruoc khI fhuc hIôn.
VoI nhung ngôn ngu Iaµ frInh ban dau, chuong frInh vIôf ra gôm nhung dong
Iônh co khuynh huong nôI nhau fhoo day daI, kho hIôu vô maf IogIc. NguoI fa su

l
ÐNIAC (ÐIocfronIc NumorIcaI Infografor and Comµufor) Ia chIôc MTÐT dau fIôn ra doI nam
l945 faI fruong ÐaI hoc Tông hoµ IonsyIvanIa, nuoc My.
TS. PHAN HUY KHANH biãn soaûn 5
6 Cäng nghãû Pháön mãöm
dung cac Iônh nhay (gofo) dô dIôu khIôn chuong frInh môf cach fuy fIôn. Chuong
frInh Ia môf mo rôI ram không khac gI mon mI soI (sµaghoffI) cua nuoc Y.
Cac ngôn ngu Iaµ frInh fuyôn finh không kIôm soaf duoc nhung su fhay dôI
cua du IIôu. MoI du IIôu su dung frong chuong frInh dôu co finh foan cuc va co fhô
bI fhay dôI vao baf cu Iuc nao. Vao gIaI doan nay, nguoI fa xom vIôc Iaµ frInh nhu
môf hoaf dông nghô fhuaf nhuôm mau sac faI nghô ca nhan hon Ia khoa hoc, voI
fhuaf ngu “fho arf of µrogrammIng”.
I.2.
I.3.
Láûp trçnh coï cáúu truïc
Vao cuôI nhung nam l960 va dau l970, khuynh huong Iaµ frInh cau fruc
(sfrucfurod µrogrammIng) ra doI. Thoo µhuong µhaµ nay, môf chuong frInh co cau
fruc duoc fô chuc fhoo cac µhoµ foan ma no µhaI fhuc hIôn. Chuong frInh bao gôm
nhIôu fhu fuc, hay ham, rIông ro. Cac fhu fuc hay ham nay dôc Iaµ voI nhau, co du
IIôu rIông, gIaI quyôf nhung van dô rIông, nhung co fhô frao dôI qua IaI voI nhau
bang cac fham bIôn.
Iaµ frInh cau fruc Iam cho vIôc kIôm soaf chuong frInh dô dang hon, va do vay,
gIaI quyôf baI foan dô dang hon. Tinh hIôu qua cua Iaµ frInh cau fruc fhô hIôn o
kha nang fruu fuong hoa. Trong môf chuong frInh co cau fruc, nguo I fa chí quan
fam vô maf chuc nang : môf fhu fuc hay ham nao do co fhuc hIôn duoc công vIôc
da cho hay không 7 Con vIôc fhuc hIôn nhu fhô nao Ia không quan frong, chung
nao con du fIn cay.
Mac du ky fhuaf fhIôf kô va Iaµ frInh cau fruc duoc su dung rông raI nhung
van bôc Iô nhung khIôm khuyôf. KhI dô µhuc faµ fang Iôn fhI su µhu fhuôc cua
chuong frInh vao kIôu du IIôu ma no xu Iy cung fang fhoo. Cau fruc du IIôu frong
môf chuong frInh co vaI fro quan frong cung nhu cac µhoµ foan fhuc hIôn frôn
chung. Môf khI co su fhay dôI frôn môf kIôu du IIôu fhI môf fhu fuc na o do fac
dông Iôn kIôu du IIôu nay cung µhaI fhay dôI fhoo.
KhIôm khuyôf frôn cung anh huong dôn finh hoµ fac gIua cac fhanh vIôn Iaµ
frInh. Môf chuong frInh co cau fruc duoc gIao cho nhIôu nguoI fhI khI co su fhay
dôI vô cau fruc du IIôu cua môf nguoI so anh huong dôn công vIôc cua nhung nguoI
khac.
Láûp trçnh âënh hæåïng âäúi tæåüng (ÂHÂT)
Iaµ frInh ÐHÐT (orIonfod-objocf µrogrammIng) duoc xay dung frôn nôn fang
cua Iaµ frInh cau fruc va fruu fuong hoa du IIôu (dafa absfracfIon).
Chuong frInh ÐHÐT duoc fhIôf kô xung quanh du IIôu ma no fhao fac chu
không ban fhan cac fhao fac. Tinh ÐHÐT Iam ro môI quan hô gIua du IIôu va fhao
fac frôn du IIôu.

Âaûi cæång vãö cäng nghãû pháön mãöm 7
Truu fuong hoa du IIôu Ia Iam cho vIôc su dung cac cau fruc du IIôu fro nôn dôc
Iaµ dôI voI vIôc caI daf cu fhô. Vi du sô dau cham dông (fIoafIng µoInf numbor) da
duoc fruu fuong hoa frong moI ngôn ngu Iaµ frInh. NSÐ fhao fac frôn cac sô dau
cham dông ma không quan fam dôn cach bIôu dIôn nhI µhan frong may cua chung
nhu fhô nao.
Iaµ frInh ÐHÐT IIôn kôf cac cau fruc du IIôu voI cac µhoµ foan. Môf cau fruc
nao do fhI fuong ung, fa co nhung µhoµ foan nao do. Vi du : môf ban ghI vô nhan
su co fhô duoc doc, caµ nhaf su fhay dôI va duoc ca f gIu, con môf sô µhuc fhI duoc
dung frong finh foan. Không fhô vIôf sô µhuc Iôn fôµ nhu môf ban ghI nhan su,
cung không fhô công fru nhan chIa haI ban ghI nhan su voI nhau nhu cach cua sô
µhuc.
Iaµ frInh ÐHÐT dua vao nhIôu fhuaf ngu va khaI nIôm moI, chang han khaI
nIôm Ioµ (cIass), khaI nIôm kô fhua (InhorIfonco).
!u dIôm cua Iaµ frInh ÐHÐT Ia Iam cho vIôc µhaf frIôn µhan môm nhanh
chong hon voI kha nang dung IaI cac chuong frInh cu. Môf Ioµ moI duoc xom nhu
Ioµ suy dIôn, co fhô duoc kô fhua cau fruc du IIôu va cac µhuong µhaµ cua Ioµ gôc
hoac Ioµ co so.
Môf frong nhung ngôn ngu Ia µ frInh ÐHÐT duoc noI dôn Ia SMAIITAIK, duoc
µhaf frIôn nam l980 faI Xorox IaIo AIfo Iocoarch Confor (IAIC). HIôn nay,
nhIôu ngôn ngu Iaµ frInh fhông dung cung duoc frang bI fhôm kha nang ÐHÐT,
nhu Ia C++, ÐoIµhI, v.v...
I.4.
I.5.
Láûp trçnh træûc quan
Iaµ frInh fruc quan (vIsuaI µrogrammIng) duoc µhaf frIôn frôn nôn fang cua
Iaµ frInh ÐHÐT. KhI fhIôf kô chuong frInh, nguoI Iaµ frInh nhIn fhay ngay kôf
qua qua fung fhao fac va gIao dIôn nguoI dung (usor Inforfaco) khI chuong frInh
duoc fhuc hIôn. NguoI Iaµ frInh co fhô dô dang chính sua vô mau sac, kich fhuoc,
hInh dang va cac xu Iy fhich hoµ Iôn cac dôI fuong co maf frong gIao dIôn.
Cac ngôn ngu Iaµ frInh fruc quan fhông dung hIôn nay fhuong duoc µhaf frIôn
frong môI fruong MIcrosoff WIndovs, nhu VIsuaI ÐasIc, VIsuaI C++, VIsuaI
Ioxµro, Java. v.v...
Nhæîng tæ tæåíng caïch maûng trong láûp trçnh
Iaµ frInh Ia môf frong nhung Iïnh vuc kho nhaf cua foan hoc ung dung. NguoI
fa coI Iaµ frInh Ia môf khoa hoc nham dô xuaf nhung nguyôn Iy va µhuong µhaµ
dô nang cao nang suaf Iao dông cua Iaµ frInh vIôn. Nang suaf o day duoc hIôu Ia
finh dung dan cua chuong frInh, finh dô doc, dô sua, fan dung hôf kha nang cua
fhIôf bI ma không µhu fhuôc vao fhIôf bI.
TS. PHAN HUY KHANH biãn soaûn 7
8 Cäng nghãû Pháön mãöm
Thuc chaf cua qua frInh Iaµ frInh Ia nguoI fa không Iaµ frInh frôn môf ngôn
ngu cu fhô ma Iaµ frInh huong foI no. Chuong frInh µhaI duoc vIôf duoI dang cac
fhao fac co cau fruc frôn cac dôI fuong co cau fruc va cac mônh dô nham khang
dInh finh dung dan cua kôf qua.
Nhung fu fuong cach mang frong Iaµ frInh fhô hIôn o haI dIôm sau :
− Chuong frInh va Iaµ frInh vIôn fro fhanh dôI fuong nghIôn cuu cua Iy
fhuyôf Iaµ frInh.
− Iam fhô nao dô Iam chu duoc su µhuc faµ cua hoaf dông Iaµ frInh 7
II. Caïc phæång diãûn cuía cäng nghãû pháön mãöm
II.1.
II.2.
Cäng nghãû pháön mãöm laì gç?
Thoo fu dIôn Computer Dictionary cua MIcrosoff Iross
®
(l994), Soffvaro
ÐngInoorIng : Tho dosIgn and dovoIoµmonf of sofvaro (comµufor µrogram), from
concoµf fhrough oxocufIon and documonfafIon.
Tu dIôn Iarousso (l996) dInh nghïa chI fIôf hon : Cäng nghãû pháön mãöm laì táûp
håüp caïc phæång phaïp, mä hçnh, kyî thuáût, cäng cuû vaì thuí tuûc liãn quan âãún caïc giai
âoaûn xáy dæûng mäüt saín pháøm pháön mãöm. Cac gIaI doan do Ia : âàûc taí (sµocIfIcfIon),
thiãút kãú (dosIgn), láûp trçnh (µrogrammIng), thæí nghiãûm (fosfIng), sæía sai
(dobuggIng), caìi âàût (sofuµ) dô dom vao æïng duûng (aµµIIcafIon), baío trç
(maInfonanco) va láûp häö så (documonfafIon).
Muc dich chinh cua công nghô µhan môm Ia dô san xuaf ra nhung µhan môm
co chaf Iuong. Chaf Iuong µhan môm không Ia môf khaI nIô m don gIan, bao gôm
nhIôu yôu fô. Chang han chuong frInh chay nhanh, dô su dung, co finh cau fruc,
dô doc dô hIôu, v.v...
NguoI fa fhuong danh gIa fhoo haI kIôu chaf Iuong : nhung yôu fô chaf Iuong
bôn ngoaI va nhung yôu fô chaf Iuong bôn frong.
Nhæîng yãúu täú cháút læåüng bãn ngoaìi vaì bãn trong
Nhung yôu fô chaf Iuong bôn ngoaI nguoI dung co fhô nhan bIôf duoc, nhu fôc
dô nhanh, chay ôn dInh, finh dô su dung, dô fhich nghI voI nhung fhay dôI (finh
mo rông), finh công fhaI hoc (orgonomy, human facfor), v.v...
Nhung yôu fô chaf Iuong bôn ngoaI cua môf san µham µhan môm Ia :
Tênh âuïng âàõn Kha nang fhuc hIôn chinh xac công vIôc daf ra.
Tênh bãön væîng Co fhô hoaf dông frong nhung dIôu kIôn baf fhuong.
Tênh coï thãø måí räüng Kha nang dô sua dôI dô fhich nghI voI nhung fhay dôI moI

Âaûi cæång vãö cäng nghãû pháön mãöm 9
Tênh sæí duûng laûi Kha nang su dung IaI foan bô hay môf µhan cua hô fhông
cho nhung ung dung moI.
Tênh tæång thêch Co fhô dô dang kôf hoµ voI cac san µham µhan môm khac.
Caïc cháút læåüng khaïc HIôu qua dôI voI nguôn faI nguyôn cua MTÐT nhu bô xu Iy,
bô nho..., dô chuyôn dôI (không µhu fhuôc vao cau hInh
µhan cung), dô kIôm chung va an foan (duoc bao vô quyôn
fruy nhaµ), dô su dung, v.v...
Nhung yôu fô chaf Iuong bôn frong Ia Ia finh don fhô, finh dô doc, dô hIôu ma
chí nhung nguoI Iam TIn ho c chuyôn nghIôµ moI bIôf duoc. Yôu fô chaf Iuong bôn
ngoaI Ia muc dich cuôI cung nhung yôu fô chaf Iuong bôn frong IaI Ia mau chôf dô
daf duoc nhung yôu fô chaf Iuong bôn ngoaI.
II.3. Saín pháøm pháön mãöm laì gç ?
Mac du nguoI fa không dInh nghïa nhung khaI nIôm san µham µhan môm duoc
hIôu nhu Ia môf hô fhông chuong frInh fhuc hIôn môf nhIôm vu fuong dôI dôc Iaµ
nham µhuc vu cho môf ung dung cu fhô frong cuôc sông cua con nguoI (va co fhô
duoc fhuong maI hoa). Vi du cac san µham µhan môm :
· Hô dIôu hanh : MS − ÐOS, OS/2, !nIx, MAC OS...
· Hô dIôu hanh mang may finh : !nIx, NovoII Nofvaro, WIndovs NT... va cac
ung dung frôn mang IAN, WAN, Infornof/Infranof (cac Ðrovsors, cac dIch
vu khaI fhac Infornof...).
· Cac ngôn ngu Iaµ frInh (chuong frInh dIch) : Turbo IascaI, Turbo C, C
++
...
· Hô quan frI co so du IIôu : MIcrosoff Ioxµro, MIcrosoff Accoss, OracIo,
Iaradox...
· MIcrosoff WIndovs va cac ung dung frôn WIndovs.
· Cac fro choI (gamos).
· Cac µhan môm fro gIuµ fhIôf kô (CAÐ, ÐosIgnors...), fro gIuµ gIang day...
· Cac hô chuyôn gIa, fri fuô nhan fao, nguoI may, v.v...
· Cac chuong frInh µhong chông vIrus, v.v...
ÐuoI day Ia bang fom faf qua frInh fIôn hoa cua san µham µhan môm :
ThoI ky dau fIôn
l950 − l960
Xu Iy fhoo Iô (Ðafch µrocossIng)
Ihan môm duoc vIôf fhoo don daf hang
ThoI ky fhu haI
l960 − l970
Ða nguoI dung (MuIfIusors)
ThoI gIan fhuc (IoaI fImo)
Co so du IIôu (Ðafabaso)
Ihan môm san µham
TS. PHAN HUY KHANH biãn soaûn 9
10 Cäng nghãû Pháön mãöm
ThoI ky fhu ba
l970 − l990
Hô fhông xu Iy µhan bô (ÐIsfrIbufod µrocossIng sysfom)
Thông mInh (InfoIIIgonco)
Ihan cung gIa fhanh ha
HIôu qua fIôu fhu
ThoI ky fhu fu
l990 fro dI
Hô fhông dô ban (Ðoskfoµ − IorsonaI − Nofobook comµufors)
Iaµ frInh huong dôI fuong (Objocf orIonfod µrogrammIng)
Iaµ frInh fruc quan (VIsuaI µrogrammIng)
Hô chuyôn gIa (Ðxµorf sysfom)
Mang fhông fIn foan cau (WorIdvIdo communIcafIon nofvork)
Xu Iy song song (IaraIoII µrocossIng)
...
Sau day Ia môf franh vuI vô qua frInh fao ra môf san µham µhan môm da kha
quon fhuôc dôI voI nhung nguoI Iam TIn hoc fu hon 20 nam nay (fhoo J.
CIAVIÐI, “ÐIrIgor un µrojof InformafIquo”, ÐdIfIon J. C. I. Inc, Canada l993) :
4. Sau khi sua sai voi 5. Triên khai cho khach hang 6. Uoc mo cua nguoi su dung !
nhiêu sang kiên cai tiên
1. Nguoi dat hang 2. Thiêt kê cua chu trl dê tai 3. San phâm cua nguoi lâp trlnh
Vi du : Công ty Công viên
Hçnh 1.1. Quaï trçnh taûo ra mäüt saín pháøm pháön mãöm


Âaûi cæång vãö cäng nghãû pháön mãöm 11
III. Nhæîng näüi dung cå baín cuía CNPM
III.1. Täøng quan vãö cäng nghãû pháön mãöm
Công nghô µhan môm dac frung boI faµ hoµ cac µhuong µhaµ dô µhaf frIôn môf
chuong frInh (µhan môm noI chung). Su µhaf frIôn môf chuong frInh, hay tiãún
trçnh pháön mãöm (soffvaro µrocoss), không chí nam o chô Iaµ frInh fhoo nghïa hoµ
ma con Ia vIôc frIôn khaI cac gIaI doan dan dôn Iaµ frInh. Taµ hoµ cac gIaI doan
nay duoc goI Ia chu kyì säúng (hay vong doI) cua µhan môm (IIfo cycIo).
VoI môf du an TIn hoc Ion, nhIôu nguoI Iaµ frInh fham gIa duoc chIa fhanh
nhom, môI nhom µhu frach gIaI quyôf môf µhan cua du an. NguoI µhu frach du an
co nhIôm vu µhan bô công vIôc cho fu ng nhom, dam bao môI IIôn Iac gIua cac
nhom, kIôm fra fIôn frInh µhaf frIôn cua du an, chaf Iuong cua san µham µhan
môm khI hoan faf.
TIôn frInh µhaf frIôn µhan môm gôm 3 gIaI doan chinh Ia xaïc âënh, phaït triãøn
va baío trç, không µhu fhuôc vao mIôn aµ dung, dô Iun va dô µhuc faµ cua du an
µhaf frIôn, cung nhu mô hInh duoc Iua chon.
G¡u¡ doun xuc djnB :
GIaI doan nay fra IoI cau hoI laì caïi gç 7 (Whaf7) va khI nao (Whon7) vô du IIôu
(fhông fIn) can xu Iy, muc dich chuc nang va môI fruong µhaf frIôn. Gôm 3 buo c :
- Ihan fich hô fhông.
- Iaµ kô hoach du an µhan môm.
- Ihan fich yôu cau fhuc fIôn.
G¡u¡ doun pBut tr¡én :
GIaI doan nay fra IoI cau hoI laìm nhæ thãú naìo 7 (Hov7). Gôm 3 buoc :
- ThIôf kô µhan môm : Su dung cac công cu dac fa va Iaµ frInh cau fruc.
- Chon công cu hoac cac ngôn ngu Iaµ frInh dô fIôn hanh vIôf chuong frInh.
- KIôm fhu (µhaf hIôn saI sof, nham Ian...).
G¡u¡ doun buo tri :
GIaI doan nay faµ frung vao cac fhay dôI (ModIfy). Co 3 kIôu fhay dôI :
- Sæía âäøi : Ðu µhan môm co chaf Iuong fôf, van fôn faI nhung khIôm khuyôf fu
vIô c su dung cua khach hang (nguoI su dung). Ðao frI sua dôI Iam fhay dôI µhan
môm, khac µhuc khIôm khuyôf.
- Thêch nghi : Nham Iam µhan môm fhich nghI voI môI fruong µhan cung, nhu
CI!, OS, cac fhIôf bI ngoaI vI.
TS. PHAN HUY KHANH biãn soaûn 11
12 Cäng nghãû Pháön mãöm
- Náng cao : Khach hang fIm ra nhung chuc nang µhu cua µhan môm. Ðao frI
hoan fhIôn dô mo rông µhan môm ra ngoaI nhung chuc nang vôn co.
III.2. Chu kyì säúng cuía pháön mãöm
Co nhIôu mô hInh khac nhau dô fhô hIôn môf chu ky sông (IIfo cycIo). Sau day
Ia môf chu ky sông kIôu cô dIôn fhoo mô hInh fhac nuoc (“vaforfaII” modoI) gôm
cac gIaI doan nhu sau :
· TIm hIôu va µhan fich cac yôu cau (IAÐ − IoquIromonfs anaIysIs and
dofInIfIon)
· ThIôf kô hô fhông va µhan môm (SSÐ − Sysfom and soffvaro dosIgn)
· CaI daf va kIôm fhu fung µhan (I!T − InµIomonffafIon and !nIf fosfIng)
· Tich hoµ va kIôm fhu hô fhông (IST − InfogrgIon and sysfom fosfIng)
Tlm hiêu va phân tich
cac yêu câu
Thiêt kê hê thông
va phân mêm
Cai dat va kiêm thu
tung phân
Tich hop va kiêm thu
hê thông
Hçnh 1.2. Mä hçnh thaïc næåïc
Ðau rang mô hInh fhac nuoc frôn day co ich IoI frong vIôc quan Iy
(managomonf), Iaµ kô hoach va Iaµ bao cao fIôn dô µhaf frIôn µhan môm nhung
chí fhich hoµ voI môf Ioµ hô fhông µhan mô m nao do ma fhôI, không µhu hoµ voI
cac hoaf dông da chí ra frong mô hInh.
TIôn frInh µhan môm gôm cac hoaf dông µhuc faµ va bIôn dông ma không fhô
bIôu dIôn frôn môf mô hInh don gIan. Nhung mô hInh fôf vô fIôn frInh µhan môm
van con Ia chung chu dô nghIôn cuu. HIôn nay, cac mô hInh fông quaf khac nhau
hay finh fhuc dung cua su µhaf frIôn µhan môm, gan bo chaf cho voI nhau.
Mô hInh fhac nuoc nguyôn fhuy (orIgInaI) Ia môf frong nhung mô hInh fông
quaf mang finh fhuc dung sau sac.
Sau day Ia môf sô fIôµ can :

Âaûi cæång vãö cäng nghãû pháön mãöm 13
l. Tiãúp cáûn thaïc næåïc (fho vaforfaII aµµroach) : Ðao gôm cac gIaI doan dac fa yôu
cau, fhIôf kô µhan môm, caI daf, kIôm fhu, v.v..., sau môI gIaI doan Ia su kôf
fhuc (sIgnod-off) va fIôµ fuc gIaI doan fIôµ fhoo.
2. Láûp trçnh thàm doì (oxIorafory µrogrammIng) : Cho µhoµ fang nhanh qua frInh
dô dan dôn finh fhoa dang cua hô fhông. Iaµ frInh fham do fhuong duoc aµ
dung frong Iïnh vuc fri fuô nhan fao, khI NSÐ không fhô dInh hInh duoc cac
dac fa yôu cau. NSÐ quan fam dôn finh fhoa dang cua kôf qua hon Ia finh
chinh xac.
3. Baín máùu (µrofofyµIng) : Tuong fu fIôµ can Iaµ frInh fham do. Iha dau fIôn bao
gôm µhaf frIôn môf chuong frInh cho µhoµ fhu nghIôm. Tuy nhIôn, muc dich
cua µhaf frIôn Ia fhIôf Iaµ cac yôu cau hô fhông. Sau do Ia su caI daf IaI µhan
môm dô dua dôn hô fhông chaf Iuong - san µham.
Kêt thuc
Bat dâu
Tâp hop
yêu câu va
lam min
San phâm thiêt kê
nhanh
Lam min xây dung
ban mâu ban mâu
Ðanh gia
cua khach hang
vê ban mâu
Hçnh 1.3. Tiãúp cáûn kiãøu baín máùu
4. Biãún âoíi hçnh thæïc (formaI fransformafIon) : Ia su bIôn dôI cac dac fa hInh
fhuc (formaI sµocIfIcafIon) cua hô fhông µhan môm dang xof dô fhanh môf
chuong frInh kha fhI nhung bao foan duoc finh chinh xac (corrocfnoss -
µrosorvIng fransformafIons).
5. Làõp raïp hãû thäúng tæì caïc thaình pháön duìng laûi âæåüc (sysfom assombIy from
rousabIo comµononfs). Ky fhuaf nay cho µhoµ xay dung hô fhông fu cac fhanh
µhan da co. TIôn frInh µhaf frIôn hô fhông Ia su Iaµ raµ hon Ia su sang fao.
HIôn nay, cac fIôµ can l, 2, 3 duoc ung dung nhIôu frong fhuc fIôn.
Trôn fhuc fô, cac gIaI doan µhaf frIôn µhan môm không µhaI roI rIông ma Ia gôI
Iôn nhau (ovorIaµ) va fhông fIn duoc cung caµ Ian nhau.
Trong khI fhIôf kô, nhung van dô va cac yôu cau gan bo voI nhau, frong khI Iaµ
frInh, nhung van dô fhIôf kô duoc fIm fhay, v.v... Iuc nay, fIôn frInh µhan môm
không don gIan Ia môf mô hInh fuyôn finh ma bao gôm môf day cac fuong fac cua
cac hoaf dông µhaf frIôn.
TS. PHAN HUY KHANH biãn soaûn 13
14 Cäng nghãû Pháön mãöm
Tuy nhIôn, môf mô hInh chua cac vong Iaµ so Iam kho khan cho vIôc quan Iy va
bao cao. Co nhIôu dang mô hInh frong fIôn frInh µhan môm. Sau day Ia môf sô mô
hInh :
1. Mô BinB tBuc nuoc cu¡ t¡én
Tlm hiêu va phân tich
cac yêu câu
Thiêt kê hê thông
va phân mêm
Cai dat va kiêm thu
tung phân
Tich hop va kiêm thu
hê thông
Khai thac va
bao trl
Hçnh 1.4. Mä hçnh thaïc næåïc caíi tiãún
l. Tçm hiãøu vaì phán têch caïc yãu cáöu: NSÐ hô fhông va nguoI µhaf frIôn hô fhông
ban bac, frao dôI (consuIfafIon) voI nhau dô fhIôf Iaµ muc dich, rang buôc va
cac dIch vu cua hô fhông µhan môm, Iïnh hôI duoc nhung doI hoI cua baI foan.
2. Thiãút kãú hãû thäúng vaì pháön mãöm : TIôn frInh fhIôf kô hô fhông µhan chIa cac yôu
cau fhanh cac hô fhô ng µhan cung, µhan môm va fhIôf Iaµ môf kIôn fruc hô
fhông foan bô (ovoraII sysfom archIfocfuro). VIôc fhIôf kô µhan môm bao gôm
vIôc fhô hIôn cac chuc nang hô fhông µhan môm (soffvaro sysfom funcfIons) dô
bIôn dôI fhanh cac chuong frInh kha fhI.
3. Caìi âàût vaì kiãøm thæí tæìng pháön : Trong gIaI doan nay, cac don vI chuong frInh
hay faµ hoµ cac chuong frInh duoc kIôm fhu Ian Iuof sao cho fhoa man cac dac
fa fuong ung.
4. Têch håüp vaì kiãøm thæí hãû thäúng : Cac don vI chuong frInh duoc fich hoµ va kIôm
fhu nhu Ia môf hô fhông day du dô dam bao cac yôu cau daf ra ban dau. Sau
gIaI doan nay, hô fhông µhan môm duoc gIao cho khach hang.
5. Khai thaïc vaì baío trç (oµorafIon and maInfonanco) : Ðay Ia môf µha daI nhaf
cua chu ky sông. Hô fhông duoc caI daf va dua vao su dung fhuc fô. VIôc bao frI
bao gôm vIôc khac µhuc nhung saI sof xay ra da không xuaf hIôn frong cac gIao
doan fruoc do cua chu ky sông. VIôc fôI uu hoa cac dIch vu cua hô fhông duoc
xom nhu Ia nhung yôu cau moI duoc µhaf hIôn.

Âaûi cæång vãö cäng nghãû pháön mãöm 15
2. Mô BinB xoñn ôc
Ihaf frIôn frôn finh uu vIôf cua vong doI cô dIôn va ban mau, bô sung nhung
yôu fô con fhIôu va fhôm cac yôu fô moI, µhan fich ruI ro.

Hçnh 1.5. Mä hçnh xoàõn äúc
Phán têch ruíi ro :
· Dua trên yêu câu ban dâu
· Dua trên phan ung cua
khach hang
Quyãút âënh tiãúp tuûc
hay khäng ?
Huong toi
hê thông hoan chinh
Ban mâu ban dâu
Ban mâu tâng tiêp theo
. . .
Kãú hoaûch :
· Tâp hop yêu câu ban dâu va
kê hoach du an
· Kê hoach
dua trên y kiên
cua khach hang
Âaïnh giaï cuía khaïch haìng :
Khang dinh kêt qua cua công nghê

Æu âiãøm :
Cac µhIôn ban (hay san µham) duoc hoan fhIôn dan fhoo chIôu xoay ôc fu frong
ra ngoaI.
Nhæåüc âiãøm :
· Kho danh gIa chinh xac, nhaf Ia khI gaµ ruI ro, kho kIôm soaf. Ðo do kho
fhuyôf µhuc duoc cac khach hang Ion
· Mô hInh nauy con moI, chua duoc kIôm nghIôm nhIôu frong fhuc fIôn.
3. Ky tBuût tBé Bé 4 (4tB Generut¡on TecBnology)
Ðao gôm cac công cu µhan môm frôn co so fu dông sa n sInh ma chuong frInh
gôc fhoo nhu cau cua nguoI µhaf frIôn :
· Ngôn ngu µhI fhu fuc
2
(non µrocoduraI Ianguago) dô fruy caµ co so du IIôu.
· Ðô sInh bao cao.
· Ðô fhao fac du IIôu.

2
Ia ngôn ngu Iaµ frInh không fuan fhoo cach goI fhu fuc hay goI chuong frInh con
fhông fhuong, không su dung cac cau fruc dIôu khIôn, fuan fu, ma dua frôn faµ
hoµ cac yôu fô va quan hô dô dan vô kôf qua yôu cau. Vi du ngôn ngu van fIn
SQI fhuôc IoaI nay.
TS. PHAN HUY KHANH biãn soaûn 15
16 Cäng nghãû Pháön mãöm
· Ðô fuong fac va fhIôf kô man hInh.
· Ðô sInh chuong frInh.
· Ðang finh.
· Công cu dô hoa.
Hçnh 1.6. Kyî thuáût thãú hãû 4
Æu âiãøm :
Thuong duoc su dung dô xay dung cac hô fhông fIn va fuong IaI Ia cac ung dung
ky nghô µhaf frIôn µhan môm fhoI gIan fhuc.
Tâp hop
yêu câu
Chiên luoc
thiêt kê
Cai dat su
dung 4 GL
Kiêm thu
Nhu câu trung blnh
Cac phuong phap truyên thông
Cac PM su dung ky thuât 4 GT
(lâp chô hông)
1970 1980 1990 2000
Nhu
câu
phân
mêm
Hçnh 1.7. Nhu cáöu pháön mãöm

Âaûi cæång vãö cäng nghãû pháön mãöm 17
5. TIcB Bop cuc ky tBuût
Nham fang cuong finh fôI uu frong µhaf frIôn µhan môm, nguoI fa co xu huong
fich hoµ cac ky fhuaf cô dIôn, xoay fron ôc va 46T da nôu.
Mô hlnh xoay tron ôc 4 GT Phân tich yêu câu Lam ban mâ u
Thiêt kê
4 GT
Ban mâu vong thu n
Ma ho a
Mô hlnh vong thu n
4 GT
Hê thông hoat dông
Kiêm thu
Bao trl
Tâp hop, hiêu cac yêu câu ban dâ u
Hçnh 1.8. Têch håüp caïc kyî thuáût


TS. PHAN HUY KHANH biãn soaûn 17

CH!ONG 2
Thiãút kãú pháön mãöm
I. Nãön taíng cuía thiãút kãú pháön mãöm
TS. PHAN HUY KHANH biãn soaûn 18
Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 19
TS. PHAN HUY KHANH biãn soaûn 19
20 Cäng nghãû Pháön mãöm
II. Phæång phaïp láûp trçnh cáúu truïc


Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 21
TS. PHAN HUY KHANH biãn soaûn 21
22 Cäng nghãû Pháön mãöm
II.1.
II.2.
Khaïi niãûm vãö láûp trçnh cáúu truïc
Iaµ frInh cau fruc (Sfrucfurod IrogrammIng) Ia fruong µhaI Iaµ frInh xuaf
hIôn vao nhung nam 70 va duoc duy frI µhaf frIôn fu do dôn nay. Iaµ frInh cau
fruc µhan anh quan nIôm : Iaµ frInh Ia công vIôc sang fao nhung co finh khoa hoc
va co µhuong µhaµ, không µhaI Ia ngau hung ca nhan.
Tinh IogIc va frong sang cua chuong frInh dam bao dô fIn cay, dô hIôu, dô sua
va dô fhua kô chuong frInh.
Nhæîng yï tæåíng cå baín láûp trçnh cáúu truïc
a) Chæång trçnh laì mäüt hãû thäúng phán cáúp tæì trãn xuäúng
Trong Iaµ frInh cau fruc, chuong frInh Ia môf hô fhông µhan caµ fu frôn xuông,
frong do cac fhanh µhan fuong fac voI nhau fôI fhIôu. Van dô can gIaI quyôf bao
gôm cac van dô nho hon, môI van dô do IaI bao gôm cac van dô nho hon nua, v.v...
cho dôn muc cuôI cung Ia nhung công vIôc don gIan va dô gIaI quyôf hoac da gIaI
quyôf rôI.

Hçnh 2.1. Chæång trçnh laì mäüt hãû thäúng phán cáúp
viêc 1.1 viêc 1.2
viêc 3 viêc 2 viêc 1
viêc 1.2.3
. . .
viêc 1.2.2 viêc 1.2.1
vân dê

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 23
Vê duû 2 :
Ihan fich baI foan công haI µhan sô dô dua vô baI foan fIm uoc sô chung Ion
nhaf.
Ðô công haI µhan sô, fruoc fIôn can uoc Iuoc chung, fIôµ do quy dông mau sô dô
Iay mau sô chung. CuôI cung fIôn hanh công haI fu sô cua haI µhan sô da co chung
mau sô. VIôc uoc Iuoc µhan sô duoc dua vô fIm uoc sô chung Ion nhaf cua fu sô va
mau sô (su dung fhuaf foan ÐucIIdo).
Ðô quy dông mau sô, can fIm bôI sô chung nho nhaf. VIôc fIm bôI sô chung nho
nhaf cua haI sô IaI duoc dua vô fIm uoc sô chung Ion nhaf cua chung :
ÐSCNN(b’, d’) = b’ ` d’ / !SCIN(b’,d’).
Hçnh 2.2. Phán têch baìi toaï n cäüng hai phán säú
Nhu vay, chuong frInh Ia môf hô fhông gôm nhIôu fhanh µhan µhan caµ, môI
fhanh µhan co nhIôm vu gIaI quyôf môf van dô so caµ va co finh dôc Iaµ cao. Cac
fhanh µhan nôn fuong fac voI nhau fôI fhIôu. GIua haI fhanh µhan frong hô fhông
chí nôn co fôI da môf duong fuong fac Ia duong frao dôI fhông fIn dô dô quan Iy va
dô kIôm soaf.
• GIua chuong frInh chinh va chuong frInh con co duong gIao fIôµ Ia vIôc fruyôn
fham bIôn. Không duoc goI chuong frInh con fhoo kIôu vuof caµ.

a

b
¹
c

d

a”/M ¹ b”/M
USCLN(b’, d’)
BSCNN(b’, d’)
QÐMS(a’/b’, c’/d’)
USCLN(a/b)
USCLN(c/d)
ULPS(a/b)
ULPS(c/d)
A B
C
TS. PHAN HUY KHANH biãn soaûn 23
24 Cäng nghãû Pháön mãöm
Hçnh 2.3. A goüi B, B goüi C, nhæng A khäng goüi âæåüc C
• Han chô dung bIôn foan cuc (gIobaI varIabIos) frong chuong frInh con vI so fao
fhôm nhung duong gIao fIôµ kho quan Iy. Chang han, môf chuong frInh con
nao do Iam fhay dôI môf bIôn foan cuc fhI o môf noI khac, frong môf chuong
frInh con khac hoac ngay frong chuong frInh chinh, cung so kho nhan bIôf su
fhay dôI nay.
b) Khäng sæí duûng lãûnh nhaíy goto
Iônh gofo (jumµ sfafomonf) dung dô chuyôn dIôu khIôn dôn môf dIôm khac
frong chuong frInh. Iônh gofo Iam kho quan Iy va kho kIôm soaf chuong frInh nôn
kho doc, kho sua saI (rôI ram nhu mon mI soI SµaghoffI cua Y).
Cac chuong frInh vIôf frôn ngôn ngu aassombIy hoac frôn cac ngôn ngu bac cao
nhu Iorfran, AIgoI, CoboI... fhuong su dung Iônh gofo.
Vê duû 3 :
Chuong frInh AIgoI sau day su dung Iônh gofo dô dIôu khIôn vong Iaµ finh fông
cac µhan fu cua mang a gôm N sô fhuc :
S := 0; I := 0;
Start : S := S + a[I]; I := I + 1;
if I <= N then goto Start;
...
c) Chæång trçnh coï tênh cáúu truïc
Chuong frInh chí su dung cac cau fruc dIôu kIôn chuan, dô hIôu, dô fhô hIôn
fhuaf foan. Cau fruc cua chuong frInh µhan anh duoc cau fruc cua van dô va cach
gIaI quyôf van dô (Iam nhu fhô nao 7). Ihuong µhaµ hay duoc su dung dô fhIôf kô
chuong frInh Ia phán têch tæì trãn xuäúng (Toµ-Ðovn AnaIysIs) va täøng håüp tæì dæåïi
lãn (Ðoffom uµ SynfhosIs).
NôI dung µhuong µhaµ µhan fich fu frôn xuông Ia nhIn nhan xom xof fông quaf
foan bô van dô, xuaf µhaf fu muc fIôu (dính) dI xuông cac fhanh µhan frong hô
fhông, chIa cac fhanh µhan fhanh cac fhanh µhan nho hon fhoo môf cau fruc µhan
caµ chaf cho.
NôI dung µhuong µhaµ fông hoµ fu duoI Iôn Ia xuaf µhaf fu cac van dô cu fhô
va cach gIaI quyôf cu fhô, sau do fich hoµ chung IaI fhanh van dô Ion hon va cach
gIaI fông quaf hon, huong fu duoI Iôn frôn dô nhan duoc van dô can µhaI gIaI quyôf
ban dau
Cach fhIôf kô nay gay kho khan vI kho kIôm soaf va dô Iac huong, kho daµ ung
day du cac yôu cau cua van dô.

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 25
II.3. Caïc cáúu truïc âiãöu khiãøn chuáøn
Trong chuong frInh, chí nôn su dung 7 cau fruc dIôu khIôn sau day voI quy uoc
S Ia môf lãûnh (Sfafomonf) va C Ia môf biãøu thæïc âiãöu kiãûn (CondIfIon) nao do :
Stt Cáúu truïc âiãöu khiãøn Læu âäö tæång âæång Mä taí
1 Tuûn tu
(SoquonfIaI)
beg¡n
Sl
. . .
Sn
end

Ðuoc coI nhu Ia môf Iônh
ghoµ (khôI), fhuc hIôn
fuan fu cac Iônh Sl, S2,
..., Sn.
2 Re nBunB
(ÐranchIng)
a) Reî nhaïnh thiãúu
¡I C tBen S


Nôu C fhoa man (Truo)
fhI fhuc hIôn S.
Nôu C không fhoa man
(IaIso) fhI không Iam gI
ca.
3 b) Reî nhaïnh âuí
¡I C tBen Sl
else S2

Nôu C dung fhI fhuc hIôn
Iônh Sl.
Nôu C saI fhI fhuc hIôn
S2.
4
Luu cBon
(SoIocfIon)
cuse
Cl : Sl
C2 : S2
. . .
Cn : Sn
endcuse
Nôu Cl dung fhI fhuc
hIôn Sl.
Nôu không, nôu C2 dung
fhI fhuc hIôn S2, v.v...
CuôI cung, nôu Cn dung
fhI fhuc hIôn Sn.
Nôu không fhI fhôI.
5 Cau fruc Iaµ
(IforafIon)
KIôm fra dIôu kIôn
fruoc khI fhuc hIôn
vong Iaµ :
KhI C con dung fhI con
fhuc hIôn S.
KhI C saI fhI dung.
S1
. . .
Sn
C ?
True
Ialse
S
True Ialse
C
S2 S1
S1
. . .
. . .
S2
Sn
True
Ialse
True
Ialse
. . .
True
Ialse
C1 ?
C2 ?
Cn ?
C ?
True
Ialse
S
TS. PHAN HUY KHANH biãn soaûn 25
26 Cäng nghãû Pháön mãöm
wB¡le C do S


Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 27

Stt Cáúu truïc âiãöu khiãøn Læu âäö tæång âæång Mä taí
6 Iaµ voI kIôm fra
dIôu kIôn sau khI
fhuc hIôn xong fhan
vong Iaµ :
do S unt¡l C
Con fhuc hIôn S khI C con
chua fhoa man (saI).
!f nhaf Iaµ duoc môf Ian.
Ðung khI C dung.
? Iaµ hôf fruoc sô Ian (for)
Ior I ← Gf_Ðau to Gf_CuôI do S Ior I ← Gf_Ðau downto Gf_CuôI do S
NgoaI cac cau fruc Iaµ hay gaµ fhông fhuong frôn day, nguoI fa con su dung cac
cau fruc Iaµ co fhoaf (Iooµ oxIf) nhu sau :
{ su dung khoa koy dô danh dau IôI fhoaf,
koy không xuaf hIôn frong S va frong C l
koy := Fulse
WB¡le not koy do beg¡n
Sl
¡I C tBen koy := True else S2
Knd
Ialse
True
i ÷ ·Gt_Ðâu
i ÷ i ¹ Pred (i)
S
i ≥ ·Gt_Cuôi
Ialse
True
i ÷ ·Gt_Ðâu
i ÷ i ¹ Succ (i)
S
i ≤ ·Gt_Cuôi
C
Ialse
True
S2
C ?
True
Ialse
S
S1

TS. PHAN HUY KHANH biãn soaûn 27
28 Cäng nghãû Pháön mãöm
II.4. Mäüt säú vê duû viãút chæång trçnh theo så âäö khäúi
Vê duû 4 :
{ Vong Iaµ nay dung Repeut l
Repeut
S
¡nt¡l Cl or not C2
Chuï yï : Co dIôu kIôn cuôI vong Iaµ co fhô dung
Repeut
C1
Ialse
True
C2
Ialse
True
S
Vê duû 5 :
{ Vong Iaµ nay dung WB¡le l
WB¡le C1 do
¡I C2 tBen Sl else S2
Chuï yï : Co dIôu kIôn fruoc vong Iaµ co fhô dung
WB¡le
Vê duû 6 :
{ Ðay Ia cau fruc Iooµ-oxIf, co fhô dung WB¡le
nhu sau :l
koy := Fulse
WB¡le not koy do beg¡n
Sl
¡I not Cl tBen koy := True
else ¡I C2 tBen S2
Knd
C1
Ialse
True
S1
C2
True
Ialse
S2
C1
True
Ialse
S2
S1
Ialse
True
C2
Cau fruc Iooµ-oxIf frôn day co fhô dung Repeut nhu sau :
koy := Fulse
Repeut
Sl
¡I Cl tBen koy := True
else ¡I C2 tBen S2
¡nt¡l koy

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 29
Vê duû 7 :

{ Truong hoµ Iooµ-oxIf mo rông.
Ðung khoa koy dô danh dau IôI fhoaf nhu
sau :l
koy := Fulse
Repeut
¡I Cl tBen koy := True
Klse beg¡n
Sl
¡I C2 tBen koy := True
Klse beg¡n
S2
¡I C3 tBen koy := True
Klse beg¡n
S3
¡I C4 tBen koy := True
Klse S4
Knd
Knd
Knd
¡nt¡l koy
True
True
True
True
C2
Ialse
Ialse
Ialse
Ialse
S1
C2
S2
C1
S3
C4
S4

III. Cáúu truïc täúi thiãøu
Cac cau fruc dIôu khIôn chuan Ia kôf qua cua nhung cô gang Ion frong cuôc
cach mang vô Iaµ frInh nhung nam 60. Nhung nha fIn hoc co fôn fuôI da dong goµ
công suc Ia Ðohm C. va JacoµInI G., ÐIjksfra Ð.W. va WarIor, v.v...
Ðô dam bao finh frong sang, don gIan va fu nhIôn, nguoI fa khuyôn rang chí
nôn xay dung chuong frInh voI 3 cau fruc dIôu khIôn co ban Ia tuáön tæû, reî nhaïnh
va làûp.
Tuy nhIôn, Ðohm va JacoµInI da chung mInh duoc rang chí can fôI fhIôu haI
cau fruc fuan fu va Iaµ Ia du.
OjnB ly BoBm vu Jucop¡n¡ 1986
Våïi moüi chæång trçnh viãút dæåïi daûng så âäö khäúi P (IIovcharf), âãöu täön taûi mäüt
chæång trçnh Q tæång âæång våïi P theo nghéa sau :
TS. PHAN HUY KHANH biãn soaûn 29
30 Cäng nghãû Pháön mãöm
· Våïi moüi dæî liãûu vaìo X thuäüc miãön xaïc âënh X, ta coï P(x) = Q(x) : P vaì Q biãún
âäøi nhæîng caïi vaìo giäúng nhau thaình caïc ra giäúng nhau.
· Caïc thao taïc trãn caïc biãún cuía Q laì giäúng nhæ cuía P.
· Caïc biãún cuía Q cuîng laì caïc biãún cuía P, coï thãø Q chæaï thãm mäüt säú biãún logic.
· Q sæí duûng hai cáúu truïc âiãöu khiãøn duy nháút laì luûn lu vaì voìng làûp wB¡le
(SW: Soquonco &WhIIo).
So dô chuyôn cau fruc nhu sau :
Hçnh 2.4. Chuyãøn vãö cáúu truïc luûn lu vaì làûp uhiIe (SW)
Sau day Ia cach chuyôn dôI cua cac cau fruc Cuse, ¡I, For, Repeut va Loop −
ÐxIf :
l. Cuse → ¡I
Cuse C oI
Cl : Sl
. . .
Cn : Sn
Knd {Casol

¡I C = Cl tBen Sl
else ¡I C = C1 tBen S2
else ¡I . . .
. . .
else ¡I C = Cn tBen Sn
2. ¡I → SW
Ðung haI bIôn µhu kIôu IogIc dô fhuc hIôn vong Iaµ WB¡le dung môf Ian :
Vur µ, q : Booleun
¡I C tBen S

µ := C
WB¡le p do beg¡n
S ; µ := not µ
Knd


¡I C tBen Sl else S2

µ := C ; q := µ
WB¡le µ do beg¡n
Sl ; µ := not µ
Loop − Exit Repeat For
If

While Tuân tu
Case

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 31
Knd;
WB¡le not q do beg¡n
S2 ; q := not q
Knd
3. Repeut → SW
Repeut S unt¡l C

S ; WB¡le not C do S
4. For → SW
For I:= GfÐau to GfCuôI
do S

I := GfÐau
WhIIo I <= GfCuôI do
beg¡n
S ; I := Succ (I)
Knd


For I:= GfÐau downto
GfCuôI
do S

I := GfÐau
WB¡le I >= GfCuôI do
beg¡n
S ; I := Irod (I)
Knd
III.1. Caïc cáúu truïc läöng nhau
Ðan fhan Iônh S frong môI cau fruc dIôu khIôn co ban IaI co fhô Ia môf cau fruc
dIôu khIôn khac.
Vê duû 8 : : V Vo o i i c cû û u u l lr ru u c c J Ji iê ê u u h hi iê ê n n
¡I C tBen Sl else S2
TaI Sl va S2, fa co fhô daf cac cau fruc dIôu khIôn khac, chang ha n fhô Sl boI :
WB¡le Cl do S3
va fhô S2 boI :
Repeut S4 unt¡l C2
Ta co :
¡I C tBen
WB¡le Cl do S3
Klse Repeut S4 unt¡l C2
TS. PHAN HUY KHANH biãn soaûn 31
32 Cäng nghãû Pháön mãöm
Ðôn Iuof S3 va S4 IaI co fhô fhay fhô boI cac cau fruc khac, v.v...
VoI cacc µhoµ fhô nhu vay, cau fruc cua chuong frInh ngay cang µhuc faµ va
dan dôn kho hIôu va dô saI sof. Chinh vI vay ma nguoI fa chu frong frIôn khaI
chuong frInh fu frôn xuông va vIôf cac cau fruc fhoo fung khôI.
Cac khôI co fhô fhuf voa, fhuf ra dô µhan anh finh cau fruc va muc dô Iông
nhau cua cac cau fruc.
Nguyén tñc : Cáúu truïc con âæåüc viãút loüt vaìo trong (thuût vaìo) cáúu truïc cha. Âiãøm
vaìo vaì âiãøm ra cuía mäùi cáúu truïc phaíi nàòm trãn cuìng mäü t haìng doüc.
IV. Láûp trçnh âån thãø
IV.1. Khaïi niãûm vãö âån thãø
Y fuong co ban cua Iaµ frInh cau fruc Ia µhan ra van dô Ion fhanh cac van dô
nho hon cho dôn khI nhan duoc cac van dô fuong dôI don gIan, môI van dô nay
duoc gIaI quyôf boI môf don fhô chuong frInh (moduIo). MôI don fhô co cac finh
chaf nhu sau :
a) Tênh âån thuáön
• Chi giai quyêt nhung dôi tuong du liêu co liên hê voi nhau trong pham vi cua vân dê.
• Co môt lôi vao va môt lôi ra, bên trong chi dung nhung câu truc diêu khiên chuân.
• Hoat dông chi phu thuôc vao du liêu dua vao chu không phu thuôc vao tlnh trang
truoc do cua no. Môi don thê la môt ham du liêu vao, kêt qua tiên doan duoc.
b) Tênh chuyãn biãût
• Chí fhuc hIôn môf chuc nang, nhIôm vu nhaf dInh.
• Không qua daI hoac qua ngan (Iy fuong Ia môI don fhô co fu 60 dôn 70
dong Iônh vua nam fron frong môf frang A4).
• Chí duoc khoI dông bang cach goI.
c) Tênh âäüc láûp
• Ia môf don vI bIôn dIch. Co fhô vIôf va chay fhu dôc Iaµ.
Cac ngôn ngu Iaµ frInh bac cao nhu IascaI (ky fhuaf dung !nIf), C, C++
(IncIudo cac fôµ chuong frInh ) va hau hô cac công cu Iaµ frInh fhuong gaµ hIôn
nay dôu cho µhoµ Iaµ frInh fhoo don fhô.

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 33
IV.2. Mäúi liãn hãû giæîa caïc âån thãø
Cac don fhô nôI kôf voI nhau fhanh chuong frInh, fô chuc µhan caµ dang cay
(froo).
D B C
G I E
A
Hçnh 2.5. Mäúi liãn hãû giæîa caïc âån thãø
¡V.2.1.Phûn Ioui Jon lhê
Co 4 IoaI don fhô :
a) Âån thãø âiãöu khiãøn
Ðon fhô dIôu khIôn (ÐIrocfor ModuIo) co chuc nang goI cac don fhô khac xu Iy.
b) Âån thãø xæí lyï
Ðon fhô xu Iy (IcocossIng ModuIo) chuyôn frach môf nhIôm vu nao do frôn
vung du IIôu dôc Iaµ. Ðon fhô xu Iy duoc don fhô dIôu khIôn goI foI va sau khI fhuc
hIôn xong chuc nang, don fhô xu Iy fra quyôn dIôu khIôn fro IaI cho don fhô dIôu
khIôn.
c) Âån thãø vaìo/ra
Ðon fhô vao/ra (IO ModuIo) chuyôn frach vao/ra du IIôu, co su kIôm fra va xu Iy
saI sof. Ðon fhô cung do don fhô dIôu khIôn goI foI gIông nhu hoaf dông cua don
fhô xu Iy.
d) Âån thãø chæång trçnh con
(SubroufIno ModuIo) nham gIaI quyôf môf nhIôm vu fron von nhung co quan
hô voI cac don fhô khac. Ðon fhô chuong frInh con duoc goI fhuc hIôn nhIôu Ian
frong chuong frInh.
IV.2.2. Täø chæïc mäüt chæång trçnh coï cáúu truïc âån thãø
Cau fruc chuong frInh gôm : - Cau fruc nôI faI cua cac don fhô.
- MôI IIôn hô gIua cac don fhô.
TS. PHAN HUY KHANH biãn soaûn 33
34 Cäng nghãû Pháön mãöm
Cac don fhô duoc fô chuc µhan caµ dang cay nhung µhaI fhoa man finh cuûc bäü
tham chiãúu (IocaIIfy of Ioforonco) : chí co don fhô muc cao hon (cha) moI co quyôn
fham chIôu (goI) dôn don fhô muc fhaµ hon kô do (con).
Nhung cau fruc cay fhoa man finh cuc bô fham chIôu duoc goI Ia cáúu truïc cáy
thuáön tuïy (Iuro froo Sfrucfuro).
Vê duû 9 :
Hçnh 2.6. Cáúu truïc cáy thuáön tuïy
− Ð chí µhuc vu Ð, chí co Ð moI co
quyôn dIôu khIôn Ð, C không fhô
goI Ð.
− GIua Ð va Ð chí co môf duong
fuong fac duy nhaf Ia frao dôI
fham bIôn.

A
C B
E D
a) Âàûc âiãøm cuía cáúu truïc cáy thuáön tuïy
− MôI don fhô chí duoc quyôn dIôu khIôn don fhô con fruc fIôµ, gIam duoc finh
µhuc faµ cua chuong frInh.
− Cac nhanh hoan foan fach bIôf nhau nôn co finh fuong fac fôI fhIôu.
Ngoaûi lãû : Nôu môf công vIôc nao do can fhuc hIôn nhIôu Ian, nhIôu chô frong
chuong frInh fhI nôn fô chuc fhanh môf don fhô chuong frInh con va vo
rIông, không vo vao cau fruc cay.
Nhu vay, cac don fhô chuong frInh con chí dong vaI fro fhu vIôn, môf su mo
rông cua ngôn ngu Iaµ frInh. Truong hoµ don fhô chuong frInh con µhuc faµ fhI co
fhô fô chuc fhoo cau fruc cay fhuan fuy.
Nhu vay foan bô chuong frInh Ia môf faµ hoµ cac cau fruc cay fhuan fuy.
Vê duû 10 :
Hçnh 2.7. Cáúu truïc cáy thuáön tuïy cuía chæång trçnh vaì chæång trçnh con

Cac don thê chuong trlnh con
A
C B
E
I
I3 I1 I2 G1
G
D

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 35
b) Thæí nghiãûm chæång trçnh trãn cáúu truïc cáy thuáön tuïy
Qua frInh fhu nghIôm môf chuong frInh :
− Thu nghIôm cac don fhô chuong frInh con fruoc.
− Thu nghIôm cac don fhô frong chuong frInh chinh, fu duoI Iôn va rIông fung
nhanh.
Can µhan bIôf :
− Cac don fhô xu Iy µhu fhuôc vao ngu canh (confoxf) nao, Ia con cua don fhô
nao 7
− Cac don fhô chuong frInh con dôc Iaµ voI ngu canh.
Ðô fhu nghIôm chuong frInh cho frong hInh vo frong vi du o frôn :
− Thu I va G fruoc (sau khI da fhu Il, I2, I3 va Gl).
− Thu Ð va Ð rôI fhu Ð.
− Thu C.
− Thu ca chuong frInh.
V. Phaït triãøn chæång trçnh bàòng tinh chãú tæìng bæåïc
V.1. Näüi dung phæång phaïp
Nguyôn Iy µhaf frIôn CHTI bang fInh chô fung buoc (hay fhIôf kô fu frôn
xuông) do NIcIaus WIrfh (fac gIa cua ngôn ngu Iaµ frInh IascaI) dô xuaf vao nam
l97l, frong baI bao cua mInh "Irogram ÐovoIoµmonf by SfoµvIso IofInomonf".
Ðan dau, CHTI Ia nhung cau duoc vIôf bang ngôn ngu fu nhIôn (chang han
fIông VIôf) fhô hIôn su µhan fich fông fhô cua nguoI Iaµ frInh.
Sau do, faI môI buoc, môI cau duoc µhan fich chI fIôf hon fhanh nhung cau
khac. Co nghïa da µhan fich môf công vIôc fhanh nhung công vIôc bo hon.
- MôI cau duoc goI Ia môf dac fa (SµocIfIcafIon).
- MôI buoc µhan fich duoc goI Ia da fInh chô (rofIno) cau (công vIôc) do.
Su fInh chô duoc huong vô µhia ngôn ngu Iaµ frInh so dung. Nghïa Ia cang o
buoc sau, nhu ng cau chu frôn ngôn ngu fu nhIôn cang don gIan dô hIôu hon va
duoc fhay fhô bang cac cau Iônh cua ngôn ngu Iaµ frInh. Nôu cau con fo ra µhuc
faµ, co fhô coI do Ia môf CHTI con va fIôµ fuc fInh chô no.
TS. PHAN HUY KHANH biãn soaûn 35
36 Cäng nghãû Pháön mãöm
Trong qua frInh fInh chô, can dua ra cac cau fruc du IIôu fuong ung voI fung
buoc. Nhu vay su fInh chô cac dac fa CHTI va du IIôu Ia song song.
Ihuong µhaµ fInh chô fung buoc fhô hIôn fu duy gIaI quyôf van dô fu frôn
xuông, frong do su µhaf frIôn cua cac buoc Ia huong vô ngôn ngu Iaµ frInh so su
dung. Ðay cua su dI xuông frong hoaf dông µhan fich Ia cac cau Iônh va cac mô fa
du IIôu vIôf bang ngôn ngu Iaµ frInh.
YÏ nghéa : VIôc Iaµ frInh co su dInh huong va co su ngan naµ frôn gIay nhaµ,
franh mo mam fhu nghIôm mang finh fruc gIac.
V.2. Vê duû minh hoaû
V.2.1. Vê duû 1
Nhaµ vao day cac ky hIôu IIôn fIôµ fu ban µhim cho dôn khI ki fu dau cham (.)
duoc go. In ra sô Iuong fung chu sô fu 0..9 da doc.
Chang han, nôu nhaµ vao day :
Kiki1t2047655kp412.
fhI In ra :
säú chæî säú 0 âaî âoüc = 1,
säú chæî säú 1 âaî âoüc = 2,
säú chæî säú 2 âaî âoüc = 2
...
l. Ihac fhao IoI gIaI
Can In ra l0 gIa frI ung voI cac chu sô fu 0..9. Co fhô dung l0 bIôn don ZÐIO,
MOT, HAI, ÐA... nhung fôf nhaf nôn dung môf mang co l0 µhan fu :
Sô |'0'| chua ki fu '0' da doc;
Sô |'l'| chua ki fu 'l' da doc;
v.v...
Ta mô fa nhu sau :
Type daîy = array ['0'..'9'] of integer;
var säú = daîy;
c: Char; {ky fu duoc doc }
Tu do IoI gIaI co fhô duoc vIôf nhu sau :
Repeat
âoüc_mäüt_kê_tæû; {Ia ky fu c }
if kê_tæû_laì_chæî_säú then âãúm_chæî_säú_âoï;
{vi du, nôu doc '2' fhI fang sô |'2'| Iôn l}
Until c = dáúu cháúm;

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 37
for c := '0' to '9' do
writeln('säú caïc chæî säú',c,'âaî âoüc =',säú [c]:2);
Ta fInh chô buoc kê_tæû_laì_chæî_säú bang cach chuyôn ra dang bIôu fhuc IascaI
nhu sau :
('0' < c) and (c < = '9')
VIôc âoüc_mäüt_kê_tæû duoc vIôf nhu sau : Read (c);
Ðau cham co fhô dung hang :
Const dáúu cháúm '=';
Ta fhay fruoc Iuc dôm, cac µhan fu cua mang sô µhaI bang 0. Ta co :
for c := '0' to '9' do säú [c] := 0;
Ðay gIo fa co chuong frInh hoan chính nhu sau :
Program Âãúm chæî säú;
Const dáúu cháúm = '.';
Type daîy = array ['0'..'9'] of integer;
Var säú: daîy;
c: char;
begin
for c := '0' to '9' do säú [c] := 0;
writeln ('Haîy goî vaìo caïc kê tæû');
writeln ('vaì kãút thuïc bàòng dáúu cháúm (.) :');
Repeat
Read (c);
if ('0' < = c) and (c < = '9') then
säú [c] := säú [c] + 1;
Until c = dáú u cháúm;
for c := '0' to '9' do
writeln ('Säú caïc chæî säú', c, ' âaî âoüc =', säú [c] : 2)
Readln
end.
Cho chay chuong frInh fa duoc kôf qua nhu sau :
Haîy goî vaìo caïc kê tæû
vaì kãút thuïc bàòng dáúu cháúm (.) :
yfr7657g858450020820.
Sô cac chu sô 0_da doc = 4
Sô cac chu sô l_da doc = 0
Sô cac chu sô 2_da doc = 2
Sô cac chu sô 3_da doc = 0
Sô cac chu sô 4_da doc = l
Sô cac chu sô 5_da doc = 3
TS. PHAN HUY KHANH biãn soaûn 37
38 Cäng nghãû Pháön mãöm
Sô cac chu sô 6_da doc = l
Sô cac chu sô 7_da doc = 2
Sô cac chu sô 8_da doc = 3
Sô cac chu sô 9_da doc = 0
V.2.2. Baìi toaïn 8 quán háûu
Hay daf 8 quan hau Iôn ban co vua (co 8 x 8 ô) sao cho không co quan nao an
duoc quan nao 7 Môf quan hau co fhô an duoc baf cu quan nao nam frôn cung côf,
cung hang hay cung duong choo fhuan nghIch voI no.
ÐaI foan nay do CaII IrIodrIch Gauss dua ra vao nam l850 nhung không co IoI
gIaI hoan foan fhoo µhuong µhaµ gIaI fich. Iy do Ia IoaI baI foan nay không µhu
hoµ voI cac µhuong µhaµ gIaI fich ma µhaI fIm cach khac dô gIaI frôn MTÐT, co
fhô fhu dI fhu IaI nhIôu Ian.
NIcIaus WIrfh frInh bay µhuong µhaµ thæí-sai (frIaI-and-orror) nhu sau :
Ðaf môf quan hau vao côf l (frôn môf hang fuy y);
Ðaf fIôµ môf quan hau fhu haI sao cho 2 quan không an nhau;
TIôµ fuc daf quan fhu 3, v.v...
Io I gIaI co dang môf vong Iaµ nhu sau :
Xeït-cäüt-âáöu;
Repeat
Thæí_cäüt;
if an_toaìn then begin
Âàût_quán_háûu_vaìo;
Xeït_cäüt_kãú_tiãúp;
end
else Quay_laûi;
until Âaî_xong_våïi_cäüt_cuäúi or Âaî_quay_laûi_quaï_cäüt_âáöu;
Cac công vIôc duoc fInh chô dan dan bang cach chon cac vIôc don gIan, co cach
gIaI ngay dô fIôn hanh fruoc nhu sau :
GoI ban co vua 8 × 8 gôm cac ô (I, j) o côf j, hang I voI j=l..8 va I=l..8, fa co :
Xeït_cäüt_âáöu : Ðaf dau voI côf j=l.
Xeït_cäüt_kãú_tiãú p : Tuc Ia chuyôn qua xof côf kô fIôµ va chuan bI xof hang dau
fIôn :
j:= j+1; i:= 0;
Âaî_xong_våïi_cäüt_cuäúi : Iuc nay da xong ca 8 côf, quan hau cuôI cung da duoc
daf vao ban co : fhanh công, fa co bIôu fhuc :
j > 8

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 39
Âaî_quay_laûi_quaï_cäüt_âáöu: Tuc Ia da IuI qua côf dau fIôn : fInh frang bô fac
xay ra : không fIm ra IoI gIaI !
j < 1
Thæí_cäüt : TIm xom co fhô daf quan hau faI hang nao o côf dang xof. Ðuoc
Thæí_cäüt so co dang :
repeat
Xeït_mäüt_haìng ; {Ia hang fhu I }
Kiãøm_tra_an_toaìn ; {khI daf quan hau vao hang nay }
Until An_toaìn or Âaî_xeït_âãún_haìng_cuäúi;
Iuc dau I=0, vIôc Xeït_mäüt_haìng fuc : i:= i+1
Tu do fa co ngay Âaî_xeït_âãún_haìng_cuäú i fuc Ia : i = 8
Iuc nay nguoI fa fIm cach bIôu dIôn du IIôu fuong ung vI cac công vIôc da co vo
“mIn” rôI. Thoo IoI khuyôn cua NIcIaus WIrfh, su bIôu dIôn du IIôu cang frI hoan
Iau cang fôf (dôn khI không fhô frI hoan duoc nua) !
VI ban co co 8 x 8 ô nôn co fhô nghï ngay dôn vIôc su dung môf ma fran ÐooIoan
haI chIôu dô bIôu dIôn :
Var B : array [1..8, 1..8] of Boolean;
Ð |I, j| co gIa frI fruo nôu co quan hau o hang I, côf j.
Tuy nhIôn, cach bIôu dIôn nay gay kho khan cho vIôc kIôm fra haI duong choo
co 2 quan hau nao an nhau không fhoo Iuaf co vua 7
Ðay gIo fa dung 3 day ÐooIoan a, b, c voI :
a |I| = fruo nôu không fôn faI quan hau nao nam frôn hang I.
b |k| = fruo nôu không fôn faI quan ha u nao nam frôn duong choo fhuan fhu
k.
c |I| = fruo nôu không fôn faI quan hau nao nam frôn duong choo nghIch fhu
I.
VoI môI ô (I, j) hang I côf j, fa co quan hô nhu sau :
−duong choo fhuan fhu k fhoa man I + j = k;
−duong choo nghIch fhu I fhoa man I - j = I;
VI vay, nôu : l ≤ I, j ≤ 8 fhI : 2 ≤ k ≤ l6 va : -7 ≤ I ≤ 7.
Ta co cac mang a , b , c nhu sau :
var a : array [1..8] of boolean;
b : array [2..16] of boolean;
c : array [-7..7] of boolean;
TS. PHAN HUY KHANH biãn soaûn 39
40 Cäng nghãû Pháön mãöm
Ðô bIôu dIôn su kIôn daf quan hau faI côf j vao hang I, fa dung day nguyôn x
sao cho x |j| = I nôu nhu co môf quan hau o ô (I, j) :
var x : array [1..8] of integer;
VIôc daf quan hau vao ô (I, j) so Iam cho :
a |I| = b |I+j| = c |I-j| = faIso
Kiãøm_tra_an_toaìn : Cho dôn Iuc nay, chua co haI quan hau nao frong sô nhung
quan da daf Iôn ban co co fhô an Ian nhau. ÐIôu kIôn An_toaìn dô daf quan hau vao
ô (I, j) Ia :
a |I| = b |I+j| = c |I-j| = fruo;
Ðang cach su dung môf bIôn IogIc :
Var Antoan: Boolean;
VIôc Kiãøm_tra_an_toaìn duoc dIch ra IascaI nhu sau :
An toaìn := a [i] and b [i + j] and c [i - j];
b|2| = b|I+j| c|-6| = c|I-j|
l . . . 8
• •








a
.
8
|i], i ÷ 1
2
. .

Hçnh 2.8. Baìn cåì vua cho baìi toaïn taïm quán háûu
Ðaf quan hau vao ô (I, j) Âàût_quán_háûu_vaìo so Ia :
x[j]:= i;
a [i]:= false;
b [i+j]:= false;
c [i-j]:= false;
TIôµ fuc fInh chô buoc µhuc faµ nhaf Ia Quay_laûi :
Quay_laûi : Ia quay IaI môf côf o fruoc côf dang xof dô daf IaI quan hau cho côf
do khI fInh fhô hIôn frang Ia bô fac.
Bæåïc Quay_laûi coï daûng :
Xeït_laûi_cäüt_træåïc;
if not Âaî_quay_laûi_quaï_cäüt_âáöu then begin
Boí_quán_háûu_åí_cäüt_âoï; {fuc côf fruoc côf dang xof, ô (I, j) }
if Âang_åí_haìng_cuäúi_cuìng then begin

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 41
Xeït_laûi_cäüt_træåïc ;
if not Âaî_quay_laûi_quaï_cäüt_âáöu then
Boí_quán_háûu_åí_cäüt_âoï
end
end;
Ðô dang fa fhay Xeït_laûi_cäüt_træåïc fuc Ia :
j = j - 1;
Con Âaî_quay_laûi_quaï_cäüt_âáöu fhI da xof fruoc day, fuc Ia :
j < 1;
Thao fac Boí_quán_háûu_åí_cäüt_âoï so co dang:
i:= x [j]; a [i]:= true; b[i+j]:= true; c[i-j]:= true;
Chuong frInh hoan chính nhu sau :
Program TamQuánHau;
Uses Crt;
Const Hau='Q ';ov='#';
Var x: array[1..8] of Integer;
a: array[1..8] of Boolean;
b: array[2..16] of Boolean;
c: array[-7..7] of Boolean;
i,j: Integer;
antoan: Boolean;
Begin
for i:=1 to 8 do a[i]:=true;
for i:=2 to 16 do b[i]:=true;
for i:=-7 to 7 do c[i]:=true;
j:=1; i:=0;
repeat
repeat
i:=i+1;
antoan:=a[i] and b[i+j] and c[i-j];
until antoan or (i=8);
if antoan then begin
x[j]:=i;
a[i]:=false; b[i+j]:=false; c[i-j]:=false;
j:= j+1; i:= 0
end else begin
j:=j-1;
if j>=1 then begin
i:=x[j];
a[i]:=true; b[i+j]:=true; c[i-j]:=true;
if i=8 then begin
TS. PHAN HUY KHANH biãn soaûn 41
42 Cäng nghãû Pháön mãöm
j:=j-1;
if j>=1 then begin
i:=x[j];
a[i]:=true; b[i+j]:=true; c[i-j]:=true
end
end
end
end
until (j>8) or (j<1);
if j<1 then writeln('Khong co loi giai!')
else
for i:=1 to 8 do begin
for j:=1 to 8 do
if x[j]=i then write(Hau) else write(ov);
writeln
end;
readln
end.
Kôf qua chay chuong frInh nhu sau :
Turbo Pascal Version 7.0 Copyright (c) 1983,92 Borland International
Q # # # # # # #
# # # # # # Q #
# # # # Q # # #
# # # # # # # Q
# Q # # # # # #
# # # Q # # # #
# # # # # Q # #
# # Q # # # # #
V.3. Sæía âäøi chæång trçnh
Chuong frInh vIôf xong chay fôf chua co nghïa qua frInh Iaµ frInh da xong. Ðo
nhu cau, co fhô can sua dôI IaI fhoo môf cach nao do cho µhu hoµ. Nho µhuong
µhaµ fInh chô fung buoc ma nguoI Iaµ frInh co fhô dô dang nhIn fhay nhung chô
can chính sua frong chuong frInh. Ðay Ia kha nang duy frI (MaInfaInabIIIfy) cua
µhuong µhaµ.
Môf dac finh khac cua µhuong µhaµ fInh chô fung buoc Ia finh µhô caµ
(µorfabIIIfy)) cua chuong frInh : fa dô dang chuyôn dôI sang môf môI fruong khac,
fuc Ia chuyôn sang môf ngôn ngu Iaµ frInh khac, hoac môf hô fhông may finh
khac. Ðô mInh hoa, fa xof baI foan 8 quan hau fông quaf nhu sau :
Tçm táút caí caïc phæång aïn coï thãø âàût 8 quán háûu lãn baìn cåì sao cho khäng coï hai
quán naìo àn láùn nhau.
Tu fInh chô Ian l frong muc fruoc, fa can co haI sua dôI nhu sau :

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 43
− KhI da dôn côf cuôI cung va daf quan hau cuôI cung vao ban co, fa In IoI gIaI
ra nhung chua kôf fhuc chuong frInh ngay ma fIôµ fuc quay fro IaI dô fIm
IoI gIaI khac.
− Chuong frInh ngung khI su quay IaI da qua côf dau.
TS. PHAN HUY KHANH biãn soaûn 43
44 Cäng nghãû Pháön mãöm
IoI gIaI co dang µhac fhao nhu sau :
Xeït_cäüt_âáöu;
repeat
Thæí_cäüt ;
if An_toaìn then begin
Âàût_quán_háûu_vaìo ;
Xeït_cäüt_kãú ;
if Cäüt_kãú_væåüt_quaï_cäüt_cuäúi_cuìng then begin
In_ra_låìi_giaíi;
Quay_laûi
end
end else Quay_laûi
Until Âaî_quay_laûi_quaï_cäüt_âáöu;
Tu day, voI cac buoc Iam mIn da gIaI quyôf o muc fruoc, fa co fhô vIôf IaI fhanh
chuong frInh hoan chính.
Baìi toaïn maî âi tuáön
Cho ban co n × n ô va môf quan ma dang o foa dô x
0
, y
0
. Hay fIm cach cho quan ma
dI fhoo Iuaf co vua dô qua hôf faf ca cac ô cua ban co, môI ô dI qua dung môf Ian 7
Cach gIaI quyôf dô quan ma dI qua hôf n
2
− l ô cua ban co Ia faI môI ô ma quan
ma dang dung, hay xac dInh xom co fhô fhuc hIôn môf nuoc dI kô fIôµ nua hay
không 7 Nhu vay fhuaf foan dô fIm nuoc dI kô fIôµ co fhô vIôf fhanh fhu fuc dô
quy dang µhac fhao nhu sau :
Procedure Thæí_næåïc_âi_ kãú;
Begin
Khåíi âäüng_ næåïc_ âi_ coï_ thãø
Repeat
Choün_mäüt_næåïc_âi
if OK then begin
Thæûc_hiãûn_næåïc_âi
if Chæa_hãút_næåïc then begin
Thæí_næåïc_âi_kãú;
if NotOK then Xoaï_næåïc_træåïc
end else Thaình_cäng
end
Until Âi_âæåüc or (Hãút_næåïc_âi);
Kãút_thuïc
End;

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 45
Ðay gIo fa can fIm cau fruc du IIôu dô bIôu dIôn ban co n × n ô, môI ô co foa dô
(I, j), voI l ≤ I,j ≤ n. Ðô dang fa fIm duoc mô fa nhu sau :
Type Idx = 1..n;
Var H: Array[Idx, Idx] of Integer;
Trong mô fa frôn, fhay vI su dung gIa frI kIôu Bollean dô danh dau ô do da
duoc dI qua chua, fa dua vao gIa frI kIôu Integer dô do fhoo qua frInh dI chuyôn
cua quan ma fhoo quy uoc nhu sau :
H|x, y| = 0 ô <x, y> chua duoc quan ma dI qua
H|x, y| = I ô <x, y> da duoc quan ma dI qua o nuoc fhu I, l ≤ I ≤ n
2

Ðô chí môf nuoc dI co fhanh công hay không, fa su dung bIôn Bollean q voI
quy uoc nhu sau :
q = true nuoc dI fhanh công
q = false không co nuoc dI
Ta fhay dIôu kIôn Chæa_hãút_næåïc duoc bIôu dIôn boI bIôu fhuc : I ≤ n
2

GIa su goI u, v Ia foa dô nuoc dI kô fIôµ cua quan ma fhoo Iuaf co vua fhI dIôu
kIôn OK µhaI fhoa man :
− Ô moI <u, v> µhaI fhuôc vao ban co, nghïa Ia l ≤ u ≤ n va l ≤ v ≤ n.
− Quan ma chua dI qua ô <u, v>, nghïa Ia H|u, v| = 0.
Ðang cach xay dung faµ hoµ :
Var s: set of Idx;
bIôu fhuc dIôu kIôn OK bay gIo co fhô vIôf :
(u in s) and (v in s) and H[u, v]=0
Ðô ghI nhan nuoc dI hoµ Iô Thæûc_hiãûn_næåïc_âi, fa su dung µhoµ gan :
H[u, v] := i;
Tu do, vIôc Xoaï_næåïc_træåïc co fhô su dung µhoµ gan :
H[u, v] := 0
Ðô ghI nhan kôf qua IoI goI dô quy, fa su dung bIôn Bollean q1 cho bIôu fhuc
dIôu kIôn Âi_âæåüc. Nhu vay, Thaình_cäng so Ia :
q1 := true
va Kãút_thuïc so Ia :
q := q1
Ðay gIo fa co IoI gIaI mIn hon nhu sau :
Procedure Try(i:Integer; x, y : Idx; Var q: Boolean);
TS. PHAN HUY KHANH biãn soaûn 45
46 Cäng nghãû Pháön mãöm
Var u, v:Integer;
q1: Boolean;
Begin
Khåíi âäüng_næåïc_âi_coï_thãø
Repeat
Choün mäüt_næåïc_âi
if (u in s) and (v in s) and H[u, v]=0 then begin
H[u, v] := i;
if n < sqr(n) then begin
Try(i+1, u, v, q1);
if not q1 then H[u, v] := 0
end else q1:= true
end
Until q1 or (Hãút_næåïc_âi);
q := q1
End;
Cho dôn Iuc nay, fa chua xof dôn Iuaf dI cua quan ma, nghïa Ia chuong frInh
xay dung o frôn dôc Iaµ voI Iuaf co vua voI chu y gIam nho nhung chI fIôf chua can
fhIôf khI µhaf frIôn chuong frInh.
Nhu vay fa van con haI vIôc chua gIaI quyôf Ia : Khåíi âäüng_næåïc_âi_coï_thãø va
Choün mäüt_næåïc_âi.
Cho fruoc môf foa dô baf ky <x, y> cua quan ma frôn ban co, fa co fhô co fam ô
<u, v> duoc danh sô fu l..8 (fhoo chIôu nguoc kIm dông hô) ma quan ma co fhô
nhay dôn nhu hInh duoI day :

C

C


C


C
y ⎯→


C


®

©

C




x

Hçnh 2.9. Caïc vë trê khaïc nhau cuía quán maî
Ðô co duoc <u, v>, fu <x, y>, fa can xac dInh gIa frI chônh Iôch fhoo foa dô. Ta
so dung haI mang môf chIôu a va b, môI mang so co kich fhuoc 8 µhan fu, dô Iuu
gIu 8 gIa frI chônh Iôch fhoo foa dô <x, y>, voI quy uoc chIôu dI ↑ va → mang dau
+, chIôu dI ← va ↓ mang dau −. Ta co khaI bao nhu sau :
Var a, b: Array[1..8] of integer;

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 47
Chang han nôu cho <x, y> = <x
0
, y
0
> voI dIôu kIôn n−2 ≥ x
0
, y
0

≥ 3 fhI fa co fhô
co 8 caµ gIa frI nhu sau :
C a[1]:= 2; b[1]:= 1;
C a[2]:= 1; b[2]:= 2;
C a[3]:= -1; b[3]:= 2;
C a[4]:= -2; b[4]:= 1;
C a[5]:= -2; b[5]:= -1;
© a[6]:= -1; b[6]:= -2;
C a[7]:= 1; b[7]:= -2;
® a[8]:= 2; b[8]:= -1;
Ðay gIo, dô danh sô cac nuoc dI co fhô, fa su dung môf bIôn k nguyôn, k so nhan
gIa frI frong µham vI l..8. Nhu vay, dau fhu fuc, vIôc Khåíi âäüng_næåïc_âi_coï_thãø
fuong ung voI Iônh gan :
k:= 0;
VIôc Choün mäüt_næåïc_âi fuong ung voI cac Iônh gan :
k:= k + 1;
q1:= false;
u:= x + a[k]; v:= y + b[k];
Con bIôu fhuc dIôu kIôn Hãút_næåïc_âi so fuong ung voI : k = 8
Thu fuc dô quy duoc baf dau boI foa dô <x
0
, y
0
> = <l,l>, kô fu nuoc dI k=2, cac
ô cua ban co dôu co fhô Ia dich cua quan ma voI khoI dông :
for i:=1 to n do for j:=1 to n do H[i, j]:= 0;
IoI goI fhu fuc nhu sau :
H[1, 1]:= 1; Try(2, 1, 1, q);
CuôI cung Ia môf fhay dôI nho bang cach fhôm bIôn nguyôn nsq dô finh
sqr(n) ngoaìi thuí tuûc. Chu y rang n ≥ 5. Sau day Ia chuong frInh hoan chính :
Chæång trçnh maî âi tuáön :
PROGRAM KnightsTour;
Uses CRT, Dos;
Const NMax=50;
Type Idx = 1..Nmax;
Var i, j: Idx;
N, Nsq: integer;
q: Boolean;
s: set of Idx;
H: Array[Idx, Idx] of Integer;
a, b: Array[1..8] of integer;
gio, phut, giay, hund : Word; { Ðô finh fhoI gIan l
Procedure Try(i:Integer; x, y : Idx; Var q: Boolean);
TS. PHAN HUY KHANH biãn soaûn 47
48 Cäng nghãû Pháön mãöm
Var k, u, v:Integer; q1: Boolean;
Begin
k:= 0;
Repeat
k:= k + 1; q1:= false; u:= x + a[k]; v:= y + b[k];
if (u in s) and (v in s) and (H[u, v]=0) then begin
H[u, v] := i;
if i < Nsq then begin
Try(i+1, u, v, q1);
if not q1 then H[u, v] := 0
end else q1:= true
end
Until q1 or (k=8);
q := q1
End { Try };
Begin { KnIghfsTour maIn }
ClrScr;
a[1]:= 2; b[1]:= 1;
a[2]:= 1; b[2]:= 2;
a[3]:= -1; b[3]:= 2;
a[4]:= -2; b[4]:= 1;
a[5]:= -2; b[5]:= -1;
a[6]:= -1; b[6]:= -2;
a[7]:= 1; b[7]:= -2;
a[8]:= 2; b[8]:= -1;
Write('Cho N = '); Readln(N);
While (N>1) and (N<Nmax) do begin
{ GIo baf dau finh }
GetTime(gio, phut, giay, hund);
Writeln(‘Ðaf dau =’, gio:2,':', phut:2,':', giay:2,':',
hund);
nsq:= sqr(N);
s:=[1..n];
for i:=1 to n do for j:=1 to n do H[i, j]:= 0;
H[1, 1]:= 1; Try(2, 1, 1, q);
if q then
for i:=1 to N do begin
for j:=1 to N do
write(h[i, j]:5);
Writeln
end
else Writeln('Không co IoI gIaI !');
{ GIo baf dau finh }
GetTime(gio, phut, giay, hund);
Writeln(‘Kôf fhuc=’, gio:2,':', phut:2,':', giay:2,':',
hund);
Write('Cho N = '); Readln(N);
End {While}
End.

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 49
Sau day Ia kôf qua voI N = 5 :
Cho N = 5
Ðaf dau = 5:59:57:30
l 6 l5 l0 2l
l4 9 20 5 l6
l9 2 7 22 ll
8 l3 24 l7 4
25 l8 3 l2 23
Kôf fhuc = 5:59:57:36
Kêl quu roi N = 6 :
Cho N = 6
Ðaf dau = 6: 0:40:80
l l6 7 26 ll l4
34 25 l2 l5 6 27
l7 2 33 8 l3 l0
32 35 24 2l 28 5
23 l8 3 30 9 20
36 3l 22 l9 4 29
Kôf fhuc = 6: 0:4l:79

TS. PHAN HUY KHANH biãn soaûn 49
50 Cäng nghãû Pháön mãöm
VI. Phuû luûc - Âån vë trong Turbo Pascal
Ðon vI (!nIf) frong Turbo IascaI fhô hIôn finh cau fruc frong Iaµ frInh : cho
µhoµ chIa chuong frInh Ion fhanh môf hô fhông µhan caµ gôm môf chuong frInh
chinh va nhIôu don vI chuong frInh con.
VI.1.
VI.2.
Giåïi thiãûu Unit
!nIf Ia faµ hoµ khaI bao cac hang, cac kIôu du IIôu, cac bIôn, cac fhu fuc va
ham co quan hô voI nhau dô dua vao su dung frong chuong frInh chinh.
MôI don vI, duoc caf gIu frôn fhIof bI nho µhu (dïa fu) duoI dang môf fôµ
chuong frInh IascaI `.IAS va duoc dIch (comµIIo) rIông ro. Kôf qua dIch Ia môf fôµ
moI co µhan mo rông Ia *.TPU.
Ðô goI cac !nIf, frong µhan dau chuong frInh su dung Iônh :
USES <tãn Unit>
frong µhan dau chuong frInh.
Thu vIôn cac chuong frInh mau Turbo IascaI co 8 !nIf chuan nhu sau :
System chua cac ham va fhu fuc fhu vIôn fhông dung muc hô fhông : xu Iy
fôµ, xu Iy chuôI, finh cac ham foan hoc. Sysfom duo c goI mac
nhIôn ma không can khaI bao : USES System
Dos cung caµ cac chuc nang cua hô dIôu hanh MS-ÐOS
Crt dô dIôu khIôn cac fhIôf bI vao (ban µhim) va ra (man hInh) : Gofo
XY, CIrscr...
Graph cung caµ cacc kha nang dô hoa (graµhIcs) cho cac IoaI man hInh
khac nhau : HorcuIo, CGA, ÐGA, VGA...
Turbo3 dô fuong fhich voI cac chuong frInh Turbo IascaI V3.0 da co.
Graph3 fhuc hIôn cac chuong frInh con dô hoa fhoo kIôu con rua (forfoIso)
cua Turbo IascaI V3.0
Cáúu truïc cuía Unit
!nIf do NSÐ fao ra. MôI !nIf duoc daf frong môf fôµ chuong frInh, gôm nhung
fhanh µhan nhu sau :
a) Pháön tãn cuía Unit (Unit Heading)
Unit <fôn !nIf>


Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 51
b) Pháön giao tiãúp (Interface Section)
¡nterIuce
{ Cac khaI bao sau day không baf buôc µhaI co l
¡ses <Ðs cac !nIfs dung cho !nIf nay>
Const <Ðs cac hang>
Type <Ðs cac mô fa kIôu>
Vur <Ðs cac khaI bao bIôn>
<Ðs cac µhan dau cua cac fhu fuc va ham>
Cac khaI bao Consf, Tyµo va Var sau Inforfaco cho !nIf cung dung duoc faI noI
su dung don vI nay. Ta noI chung Ia “fhay duoc” (VIsIbIo).
Ðanh sach cac fôn fhu fuc va ham duoc cac !nIf khac dung dôn so duoc khaI
bao day du frong µhan fIôµ fhoo :
c) Pháön hiãûn thæûc (Implementation Section)
¡mplementut¡on
{ Cac khaI bao sau day không baf buôc µhaI co l
¡ses <Ðs cac !sos su dung dôn>
Lubel <Ðs cac nhan>
Const <Ðs cac hang>
Type <Ðs cac mô fa kIôu>
Vur <Ðs cac khaI bao bIôn>
<Cac mô fa ham va/hoac fhu fuc>
Cac mô fa ham va/hoac fhu fuc frong µhan nay gôm co :
• Cac ham va /hoac fhu fuc da mô fa o µhan gIao fIôµ.
• Cac ham va/hoac fhu fuc nôI bô dung rIông frong µhan hIôn fhuc (không khaI
bao frong µhan gIao fIôµ).
Cac mô fa nhan, hang, kIôu du IIôu, bIôn va cac ham, fhu fuc nôI bô frong µhan
hIôn fhuc cua môf !nIf Ia không dung duoc faI noI su dung !nIf nay. Ta goI chung
Ia “bI dau” (HIddon).
d) Pháön khåíi âäüng (Initialization section)
Beg¡n
<Cac Iônh IascaI>
Ihan nay co fhô vang maf nhung
end. µhaI co maf !
TS. PHAN HUY KHANH biãn soaûn 51
52 Cäng nghãû Pháön mãöm
end.
KhI noI su dung môf !nIf co µhan khoI dông InIfIaIIzafIon fhI µhan khoI dông
cua !nIf nay so duoc goI chay fruoc khI fhan cua noI su dung chay.
Nôu co môf noI su dung nhIôu !nIf fhI µhan khoI dông cua cac !nIf do so duoc
chay fhoo fhu fu xuaf hIôn cua fôn cua cac !nIf frong khaI bao !sos cua noI goI.
Thuong fhI frong µhan khoI dông cua môf don vI, nguoI fa Iam cac dông fac
chuan bI nhu khoI gan cho cac bIôn, mo cac fôµ, fhông bao chô dô chay chuong
frInh...
VI.3. Caïch sæí duûng Unit
a) Mäüt chæång trçnh hay mäüt Unit coï thãø sæí duûng nhiãöu Unit khaïc
Su dung môf !nIf co nghïa Ia duoc quyôn su dung cac hang, kIôu du IIôu, bIôn,
cac ham va/hoac fhu fuc da duoc khaI bao frong µhan gIao fIôµ Inforfaco cua !nIf
do.
Vi du : Ðô su dung cac !nIfs co fôn Ian Iuof Ia !l, !2, ..., !n, dung mônh dô
!sos daf sau khaI bao Irogram frong chuong frInh :
¡ses ¡1, ¡2, . . .,¡n ;
b) Khi coï mäüt sæía âäøi naìo âoï trong pháön Interface cuía mäüt Unit
KhI do, nhung (fôµ) chuong frInh hay (fôµ) !nIf do can duoc dIch (ComµIIo) IaI.
KhI frong môf !nIf chí co su sua dôI o µhan ImµIomonfafIon hay o µhan
InIfIaIIzafIon fhI không can dIch IaI nhung (fôµ) chuong frInh hay (fôµ) !nIf su
dung !nIf do.
Vê duû 11 :
GIa su chuong frInh I goI !l va !l su dung !2 :
Progrum P ;
¡ses ¡1 ;
Const
a = b;
Beg¡n
vrIfoIn (a);
end.
⎯→
¡n¡t ¡1 ;
¡nterIuce
¡ses ¡2 ;
Const b = c;
¡mplementut¡on
end.
⎯→
¡n¡t ¡2 ;
¡nterIuce
Const c = l0;
¡mplementut¡on
end.
I.IAS !l.IAS !2.IAS
Nôu frong !2, dôI c=5 chang han fhI can µhaI dIch IaI !2.IAS va !l.IAS (vI
!l su dung !2) va dIch IaI I.IAS.

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 53
c) Truìng tãn hàòng, biãún, kiãøu dæî liãûu vaì tãn CT con (haìm, thuí tuûc)
Ðô µhan bIôf, nguoI fa daf fruoc fôn frung do fôn !nIf co chua fôn nay va cach
môf dau cham (.). IIông chuong frInh chinh (khaI bao Irogram) fhI không can.
Vê duû 12 :
GIa su chuong frInh I su dung cac !nIf !l va !2.
Nôu frong I, frong Inforfaco cua !l va !2 dôu co khaI bao bIôn I fhI dô µhan
bIôf I nao Ia cua I, I nao Ia cua !l va !2 nguoI fa vIôf :
¡ {I cua Il
¡1.¡ {I cua !ll
¡2.¡ {I cua !2l
VI.4. Vê duû vãö Unit
VIôf chuong frInh finh nhIôu Ian dIôn fich hInh fron voI ban kinh nhaµ vao fu
ban µhim, cho dôn khI ban kinh nhaµ vao Ia 0 fhI dung.
GoI chuong frInh chinh Ia HINHTION va !nIf su dung dô finh dIôn fich hInh
fron Ia ÐTHTION, fa co :
Program HINHTRON ; {Tôµ HINHTION.IASl
Uses Crt, DTHTRON ;
Var bk : Real ;
Begin
Write (‘Säú Pi = ‘, Pi) ; {hang II khaI bao frong !nIf ÐTHTIONl
Repeat
Write (baïn kênh =) ; Readln (bk) ;
if bk > 0 then
Writeln (‘Diãûn têch = ‘, Dientich (bk) ) ;
Until bk = 0
End. {HINHTRON}
Unit DTHTRON ; {Tôµ ÐTHTION.IASl
Interface
Const Pi = 3.1415926535 ; {l/π = 0.3l8309886l
Function Dientich (R : Real) : Real;
Implementation
Function Dientich;
Begin
Dientich := Pi * Sqr (R)
End;
Begin {µhan khoI dông InIIIaIIzafIonl
TS. PHAN HUY KHANH biãn soaûn 53
54 Cäng nghãû Pháön mãöm
Writeln (‘frong chuong frInh chinh so su dung !nIf ÐTHTION !’)
End.

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 55
VI.5. Baìi táûp
1. Su dung cac cau Iônh IascaI dô vIôf chuong frInh fhoo so dô khôI duoI day bang
cach chí su dung cac cau fruc dIôu khIôn co ban. Sau do hay dôI vô dang chuong
frInh chí su dung ba cau fruc dIôu khIôn Ia fuan fu, dIôu kIôn ¡I tBen else va
Iaµ WB¡le.
1. 2.
3. 4.
5. 6.
Sl
True True
S2
True
C2
Cl
Ialse
C3
Ialse Ialse
C1
True
Ialse
S1
C2
True
Ialse
C1
True
Ialse
S2
C2
S1
True
Ialse
C1
True
Ialse
C2
True
Ialse
S1
S2
C1
True
Ialse
S2
C3
Ialse True
S1
S3
C2
C4
S4
Ialse True
True
Ialse
C1
True
Ialse
S2
C2
True
Ialse
S3
C3
S1
TS. PHAN HUY KHANH biãn soaûn 55
56 Cäng nghãû Pháön mãöm


?. 8.
C1
True
Ialse
S2
C2
S1
True
Ialse
C3
True
Ialse
S4
S3
S2
C1
S1
True
Ialse
C2
Ialse
True
S5
S3
S4
S6
2. Xu ly cBuô¡ (sfrIng) : VIôf chuong frInh doc môf cau (kôf fhuc boI Ðnfor ↵) sau
do fIôn hanh cac công vIôc :
• Thông kô sô fu, sô ky fu frong cau.
• Tach cau ra fhanh cac fu cach nhau boI dau cach (sµaco). In ra cac fu nay.
• Non cau (bo cac dau cach gIua cac fu). In kôf qua.
• Thay fhô nhung xuaf hIôn cua cau con Sl fhanh cau con S2 va In kôf qua.
(Sl va S2 Ia cac cau con nhaµ vao)
Yôu cau su dung !nIf cho môI vIôc. Chuong frInh chinh dung monu dô goI.
3. VIôf chuong frInh xu Iy ma fran vuông A caµ n x n duoI dang monu, gôm cac
vIôc sau :
• Ðoc va o ma fran vuông caµ n x n.
• Tinh dInh fhuc cua ma fran.
• KIôm fra finh dôI xung qua duong choo chinh cua ma fran.
• Xac dInh xom ma fran co dang fam gIac frôn không 7
(cac µhan fu µhia duoI duong choo chinh dôu = 0)
• Xac dInh xom ma fran co dang fam gIac duoI không 7
(cac µhan fu µhia frôn duong choo chinh dôu = 0)
Yôu cau dung !nIf. Ðôn vIôc sau cung chí co hIôu Iuc khI ma fran da duoc doc.

Nãön taíng cuía thiãút kãú pháön mãöm
Phuong phap lâp trlnh câu truc 57


CH!ONG 3
Håüp thæïc hoïa pháön mãöm
I. Xaïc minh vaì håüp thæïc hoïa pháön mãöm
NguoI fa fhuong µhan bIôf 2 yôu fô frong hoaf dông san xuaf µhan môm :
l. Xay dung dac fa, Iaµ frInh va Iaµ hô so (vIôf cac huong dan su dung v.v ...)
Yôu fô nay fao nôn gIaI doan µhaf frIôn chuong frInh.
2. Xac mInh (hay kIôm fra) va hoµ fhuc hoa cac san µham µhan môm Ia vIôc so
sanh cac san µham µhan môm do voI cac dac fa cua chung sao cho co quan
hô fhoa man.
NguoI fa dung fhuaf ngu xaïc minh (vorIfIcafIon) khI so sanh môf san µham voI
môf dac fa chaf cho (rIgourous). KhI dac fa Ia không hInh fhuc (InformaI), nguoI fa
dung fhuaf ngu håüp thæïa hoïa (vaIIdafIon).
GIaI doan xac mInh va hoµ fhuc hoa, goI faf Ia gIaI doan V & V (VorIfIcafIon
and VaIIdafIon) bao gIo cung co maf frong moI du an TIn hoc.
Su khac nhau co ban gIua V & V duoc Ðoohm Ð.W. (l979) fom faf nhu sau :
VaIIdafIon : Are we building the right product?
VorIfIcafIon : Are we building the product right?

SfafIc
vorIfIcafIon
IoquIromonf
vorIfIcafIon
Program
Detailed
design
IormaI
vorIfIcafIon
HIgh-IovoI
dosIgn
ÐynamIc
vorIfIcafIon
Prototype
Hçnh 3.1. Kyî thuáût ténh vaì kyî thuáût âäüng cuía quaï trçnh V&V
TS. PHAN HUY KHANH biãn soaûn 57
58 Cäng nghãû Pháön mãöm
Ðô fhuc hIôn qua frInh V&V, nguoI fa su dung cac ky fhuaf fïnh (sfafIc
fochnIquos) va dông (dynamIc fochnIquos) dô kIôm fra hô fhông.
Ky fhuaf fïnh nham µhan fich bIôu dIôn hô fhông qua vIôc µhan fich yôu cau,
µhan fich fhIôf kô va hIôn fhI (IIsfIng) chuong frInh. Ky fhuaf dông Ia vIôc fhu
nghIôm(fosfIng) chuong frInh
Ky fhuaf fïnh bao gôm vIôc fhanh fra (InsµocfIon) chuong frInh, µhan fich va
xac mInh hInh fhuc (formaI vorIfIcafIon) hay chung mInh su dung dan (µrouvIng)
cua chuong frInh.
II. Chæïng minh sæû âuïng âàõn cuía chæång trçnh
Ihuong µhaµ chung mInh Ia su dung cac dInh Iy dô mInh hoa finh dung dan
cua san µham can xac mInh. Ihuong µhaµ nay không co kha nang hoµ fhuc hoa
cac dac fa µhI hInh fhuc, boI vI không fhô chung mInh môf cach foan hoc cac finh
chaf không duoc dInh nghïa chaf cho. NguoI fa µhan bIôf cac µhoµ chung mInh
hInh fhuc, duoc dIôn fa frong Iy fhuyôf IogIc, va cac chung mInh µhI hInh fhuc
nhung chaf cho, nhu frong cac cuôn sach vô Toan hoc.
MoI µhoµ chung mInh hInh fhuc finh dung dan cua chuong frInh duoc xay
dung môf cach fuong mInh fu cac fIôn dô va cac quy fac suy dIôn IogIc. Thuc fIôn
cho fhay không fhô xay dung môf µhoµ chung mInh nhu vay ma không su dung
dôn nhung công cu nhu Ia cac công cu chung mInh dInh Iy.
Nhung µhoµ chung mInh hInh fhuc cho cac chuong frInh co hang ngan dong
Iônh da duoc fhuc hIôn. Chung cho µhoµ khang dInh finh duoc µhô µhan cua
chuong frInh.
Trong µhoµ chung mInh không hInh fhuc, nguoI fa dInh nghïa kIôn fruc fông
quan cua µhoµ chung mInh, xu Iy nhung dIôm kho khan, dô IaI cho nguoI doc su
cham soc chI fIôf dôn cac dIôm khac.
Vi du dô chung mInh không hInh fhuc su dung dan cua môf chuong frInh,
nguoI fa co fhô dIôn fa cac faf bIôn cua vong Iaµ va cua fhu fuc dô quy. Môf µhoµ
chung mInh µhI hInh fhuc không can fhIôf µhaI su dung ca c công cu, van dô Ia
nguoI doc so fu kIôm chung fhông qua cac cuôc frao dôI, fhao Iuan (chang han fô
chuc fhanh fra can cu frôn vIôc xac mInh).
NguoI fa con co fhô fhu chung mInh µhI hInh fhuc cac finh chaf da µhaf bIôu if
nhIôu co finh chaf cho (chang han dô caµ dôn van dô hoµ fhuc hoa), khaI nIôm
chung mInh finh dung dan fhoo nghïa Toan hoc duoc fhay fhô boI khaI nIôm bIôn
Iuan (roasonIg - argumonfafIon) nham fhuyôf µhuc cac chuyôn gIa TIn hoc.


Error! Reference source not found. 59
II.1. Suy luáûn Toaïn hoüc
Trong Iïnh vuc suy Iuan Toan hoc, nguoI fa fhuong daf ra haI van dô :
1. Khi naìo thç mäüt suy luáûn laì âuïng ?
2. Coï thãø sæí duûng nhuîng phæång phaïp naìo âãø xáy dæûng caïc suy luáûn Toaïn hoüc ?
Suy Iuan Toan hoc Ia môf hInh fhuc fu duy ma fu môf hay nhIôu mônh dô IogIc
da co (µhan doan) ruf ra duoc môf mônh dô IogIc moI. Kôf qua cua môf suy Iuan
nao do µhaI Ia dung hoac Ia saI. Trong Toan hoc, dInh Iy Ia môf µhaf bIôu co fhô
chung mInh duoc Ia dung. NguoI fa hay gaµ mô hInh chung mInh môf dInh Iy
Toan hoc (Ia dung) nhu sau :
Ðinh ly
Hê qua Bô dê Ðinh dê, tiên dê
Mênh dê
Hçnh 3.2. Chæïng minh mäüt âënh lyï Toaïn hoüc
II.1.1. Caïc quy tàõc suy luáûn Toaïn hoüc
Ðô frInh bay cac quy fac suy Iuan Toan hoc, chung fa nhac IaI cac µhoµ foan
IogIc sau :
¬ not (không)
∧ und (va)
∨ or (hoac)
→ ¡mpl¡cute (koo fhoo)
∼ equ¡vulence (fuong duong)
Chu y : a → b fuong duong voI ¬a ∨ b, hay ¡I a tBen b else true
a ∼ b co nghïa (a → b) ∧ (b → a).
Thu fu uu fIôn cua cac µhoµ foan IogIc Ia ¬, ∧, ∨, →, ∼. Ðang IogIc nhu sau :
a b ¬u a ∧ b a ∨ b a → b a ∼ b
0
0
l
l
0
l
0
l
l
l
0
0
0
0
0
l
0
l
l
l
l
l
0
l
l
0
0
l
Ðô chung mInh môf dInh Iy, nguoI fa su dung môf sô fIôn dô va quy fac suy
Iuan, hay Ia cac hang dung. Ðang duoI day frInh bay cac quy fac suy Iuan duoc su
dung frong chung mInh finh dung dan cua chuong frInh.
TS. PHAN HUY KHANH biãn soaûn 59
60 Cäng nghãû Pháön mãöm
Stt Quy tàõc suy
luáûn
Tãn goüi Vê duû
l µ
∴µ ∨ q
Iuaf khang dInh
Nhaûc cuía Trënh Cäng Sån hay. Váûy nhaûc
cuía Trënh Cäng Sån hay hoàûc ca sé Khaïnh
Ly haït hay.
2 µ ∧ q
∴µ
Iuaf ruf gon
Thaïng naìy tråìi nàõng haûn vaì säng Âaì thç caûn
næåïc. Váûy tråìi nàõng haûn.
3 µ → q
µ
∴q
Iuaf fach roI
(Modus Ionons)
Nãúu cåm chên thç cáön tàõt læía.
Cåm âaî chên.
Váûy cáön tàõt læía.
4 µ → q
¬ q
∴¬ µ
Iuaf µhu dInh
(Modus ToIIons)
Nãúu màût tråìi åí âènh âáöu thç boïng ngàõn nháút.
Boïng khäng ngàõn nháút.
Váûy màût tråìi khäng åí âènh âáöu
5 µ → q
q → r
∴µ → r
Tam doan Iuan
gIa dInh
Nãúu tråìi mæa thç âæåìng HP bë ngáûp.
Nãúu âæåìng HP bë ngáûp thç phaíi xuäúng xe dàõt
bäü. Váûy tråìi mæa thç phaíi xuäúng xe dàõt bäü.
6 µ ∨ q
¬ µ
∴ q
Tam doan Iuan
chuyôn
Cu Tyï thuäüc baìi hoàûc laì cu Tyï ham chåi .
Maì Cu Tyï khäng thuäüc baìi.
Váûy cu Tyï ham chåi.
Trong bang frôn, dau ∴ duoc doc Ia váûy thç. MôI Iuaf (co so cua µhoµ suy Iuan),
chang han Iuaf fach roI (Modus Ionons), co fhô vIôf duoI dang hang dung :
(µ ∧ (µ → q)) → q
II.1.2. Khaïi niãûm vãö chæïng minh tênh âuïng âàõn cuía chæång trçnh
Môf chuong frInh I xac dInh môf fhuaf foan cho µhoµ nhan vao môf faµ hoµ du
IIôu I dô dua ra môf faµ hoµ kôf qua I. NoI cach khac, voI moI d ∈ I, chuong frInh
I xac dInh hoac môf day huu han cac µhoµ finh dô cho ra môf kôf qua I(d) ∈ I,
hoac môf day vô han cac µhoµ finh : chuong frInh bI “quan” voI du IIôu d.
Maf khac, I duoc vIôf dô finh môf ham f nao do fu Ð ⊆ I vao I. I dung nôu va
chí nôu I finh dung ham f, nghïa Ia nôu ∀ d ∈ Ð, I(d) xac dInh (I không quan voI
du IIôu vao d) va bang f(d).
Thông fhuong, dô kIôm fra finh dung dan cua chuong frInh, nguoI fa dung
µhuong µha µ fhu (fosf) : nguoI fa chon môf day cac du IIôu mau d
l
, d
2
, ..., d
n
, rôI
cho I chay Ian Iuof voI môI du IIôu dô kIôm fra rang I(d
l
) = f(d
l
), I(d
2
) = f(d
2
), ...,
I(d
n
) = f(d
n
).

Error! Reference source not found. 61
Tinh không day du cua µhuong µhaµ nay fhô hIôn o chô không fhô fhu hôf moI
du IIôu cua Ð, du Ð huu han : co fhô xay ra I cho kôf qua dung voI moI du IIôu
mau d
I
da chon nhung voI môf du IIôu d ≠ d
I
∀ I, I cho môf kôf qua saI.
Hon nua, µhuong µhaµ fhu không bao gIo chung mInh duoc môf chuong frInh
Ia dung dan, chí co fhô chung mInh duoc Ia không dung, nôu voI môf gIa frI d
I
nao
do da chon, fhI I(d
l
) ≠ f(d
l
).
Vô maf Iy fhuyôf, µhuong µhaµ chung mInh finh dung dan cua chuong frInh
mang finh Toan hoc bang cach chung mInh môf dInh Iy fuong duong : ∀d ∈ Ð, I(d)
= f(d).
II.1.3. Tiãn âãö vaì quy tàõc suy diãùn
Môf cach fông quaf, cac µhaf bIôu can chung mInh co dang Ð{IlS, frong do Ð
va S Ia cac dIôu kIôn, I Ia day cac Iônh (hay Ia môf chuong frInh) fhoo nghïa rang :
nôu Ð dung fruoc khI fhuc hIôn I fhI nôu I dung, S dung sau khI fhuc hIôn I.
NguoI fa goI Ð Ia dIôu kIôn fruoc (µrocondIfIon) va S Ia dIôu kIôn sau
(µosfcondIfIon) cua chuong frInh I.
Cac dIôu kIôn fruoc Ð va dIôu kIôn sau S duoc xay dung fu cac bIôu fhuc IogIc
co fhô nhan gIa frI dung (l) hoac saI (0), chung Ia môI IIôn hô gIua cac bIôn cua
chuong frInh (vi du cac bIôn a, b, c, µ, q, r frong cac bIôu fhuc a = bq + r, q ≥ 0, b
2

4ac > 0, v.v...) cung cac µhoµ foan IogIc (nôu co).
TInB cBût :
VoI moI chuong frInh I va moI dIôu kIôn C, fa dôu co :
Iulse {Il C va C {Il true
VIôc chung mInh nôu môf chuong frInh I dung fhI I so cho kôf qua dung duoc
goI Ia chung mInh finh dung dan fung µhan.
Trong cac chung mInh finh dung dan fung µhan, cac fIôn dô va dInh Iy so Ia cac
µhaf bIôu co dang Ð {Il S. Sau day Ia danh sach cac fIôn dô va cac quy fac suy dIôn
cho µhoµ chung mInh cac dInh Iy dang Ð {Il S.
Ðô chung mInh cac quan hô gIua cac dIôu kIôn (vi du Ð
l
~ Ð
2
, Ð
l
→ Ð
2
, v.v...),
nguoI fa su dung cac finh chaf cua daI sô ÐooIo va mIôn xac dInh cac bIôn chuong
frInh (sô nguyôn frong fruong hoµ ÐIv).
TS. PHAN HUY KHANH biãn soaûn 61
62 Cäng nghãû Pháön mãöm
a) Tiãn âãö vãö pheïp gaïn
Cho µhoµ gan x := <bt> va môf dIôu kIôn sau S, fa co fIôn dô :
Ð {x := <bt> } S
frong do Ð nhan duoc fu S bang µhoµ fhô cac bIôn x boI bIôu fhuc <bf>. Ð Ia âiãöu
kiãûn yãúu nháút µhaI Iam fhoa man cac bIôn fruoc khI fhuc hIôn µhoµ gan sao cho S
Ia dung sau do.
V VI I d du u 1 1
(xy ≥ 0) { z := x*y l (z ≥ 0)
(q + l ≥ 0) { q := q + 1 l (q ≥ 0)
( (x+y)
2
= y) { x := x + y l (x
2
= y)
CBu y quun trong :
Nho quy fac frôn day, nguoI fa co fhô chung mInh dIôu kIôn fruoc cua môf Iônh
gan, bang cach su dung môf dIôu kIôn sau, nhung nguoc IaI Ia không fhô. ÐoI vay,
dô chung mInh finh dung dan cua chuong frInh, nguoI fa xuaf µhaf fu dIôm kôf
fhuc (dIôu kIôn sau) dô fIôn hanh nguoc Iôn dIôm baf dau (dIôu kIôn fruoc).
b) Quy tàõc “;” hay täø håüp caïc lãûnh vaì lãûnh gheïp
GoI Ð, I, S Ia cac dIôu kIôn, I va Q Ia cac day Iônh, fa co :
Ð {Il I
I {Ql S
∴ Ð {I ; Ql S
Ð {Il S
∴ Ð { begin I end l S
V VI I d du u 1 13 3 : :
Chung mInh (x=1) { y:= 2; Z:= x + y} (Z=3)
Ia dung dan voI khang dInh dau Ð ≡ (x = 1)
Va khang dInh cuôI S ≡ (z = 3)
GIa su S dung, fuc z = 3, khI do nhan duoc x + y = 3, fa co :
(x+y=3) { Z:= x + y} (Z=3) (l)
Ðo y duoc gan gIa frI 2, nôn nhan duoc gIa frI cua x Ia l, fuc Ia :
(x=1) { y:= 2} (x+y=3) (2)
Vay fhoo quy fac “;”, fu (l) va (2) fa co I kô f fhuc fhI S dung (dµcm).
II.1.4. Quy tàõc âiãöu kiãûn if B then P
Ð ∧ Ð {Il S
Ð ∧ ¬Ð → S
∴ Ð { if B then P l S

Error! Reference source not found. 63
CBu y :
Ð µhaI duoc xom nhu môf dIôu kIôn sao cho co fhô ung dung môf frong nhung
quy fac duoc frInh bay o day. ÐIôu nay co nghïa rang vIôc finh Ð không Iam fhay
dôI cac gIa frI cua cac bIôn cua chuong frInh.
V VI I d du u 2 2 : :
Chung mInh : Ð{if x>y then y:=x} (y ≥ x), voI E Ia dIôu kIôn dau nao do.
KhI Ð dung va x > y dung (dIôu kIôn Ð) fhI y co gIa frI x, vay y ≥ x (S) , fa co :
E ∧ (x>y) { y:= x } (y ≥ x) (l)
KhI Ð du ng va x > y saI (¬Ð) co nghïa x ≤ y, vay y ≥ x (S), fuc Ia :
E ∧ (x ≤ y) → (y ≥ x) (2)
Vay fu (l) va (2) fa co nhan duoc dµcm.
II.1.5. Quy tàõc âiãöu kiãûn if B then P else Q
Ð ∧ Ð {Il S
Ð ∧ ¬Ð {Ql S
∴ Ð { if B then P else Q } S
V VI I d du u 3 3 : :
Chung mInh : Ð {if x < 0 then abs:= -x els abs:= x}(abs = 1x1)
voI E Ia dIôu kIôn dau nao do.
Vay chuong frInh Ia dung voI dIôu kIôn dau E va dIôu kIôn sau abs = 1x1.
KhI Ð dung va x < 0 dung (Ð) fhI abs co gIa frI −x, fuc abs = −x = 1x1 va dIôu
kIôn sau S dung, fa co :
E ∧ x < 0 { abs:= -x }(abs = 1x1) (l)
KhI Ð dung va co x < 0 saI (¬Ð) fhI x ≥ 0, khI do abs co gIa frI x fuc abs = x =
1x1 va dIôu kIôn sau S dung, fuc Ia :
E ∧ x < 0 { abs:= x }(abs = 1x1) (2)
Vay fu (l) va (2) fa co nhan duoc dµcm.
II.1.6. Quy tàõc voìng làûp while
Ð ∧ Ð { I l Ð
∴ Ð { while B do P } Ð ∧ ¬Ð
O day, Ð va Ð Ia nhung dIôu kIôn. IIông dIôu kIôn Ð duoc goI Ia báút biãún cua
vong Iaµ.
TS. PHAN HUY KHANH biãn soaûn 63
64 Cäng nghãû Pháön mãöm
Môf frong nhung kho khan cua vIôc chung mInh finh dung dan cua chuong
frInh Ia fIm duoc baf bIôn cho môI vong Iaµ (nghïa Ia môf baf bIôn cho µhoµ chung
mInh dung caI yôu cau). Thuc fô khäng täön taûi mäüt phæång phaïp coï tênh hãû thäúng
vaì täøng quan âãø tçm ra nhæîng báút biãún nhæ váûy.
V Vi i d du u 4 4 : :
Su dung baf bIôn cua vong Iaµ, chung mInh doan chuong frInh finh fac = n!, voI
n ∈ Ν sau day :
i := 1; fac := 1;
while i < n do begin
i := i + 1;
fac := fac * i
end;
GoI I ≡ {begin i:= i + 1; fac := fac * i end l
GIa su dIô u kIôn Ð ≡ (fac = i!) ∧ (i ≤ n), fa can chung mInh Ð Ia baf bIôn cua
vong Iaµ.
Ta so chung mInh bang quy naµ :
Ð dung fruoc khI vao vong Iaµ, vI i = 1, fac = 1 = 1! Va 1 ≤ n.
GIa su Ð dung voI i < n sau khI fhuc hIôn vong Iaµ va sau do, while con duoc
fhuc fhI môf Ian nua. Truoc hôf i duoc fang fhôm l (voI Iônh gan i:= i + 1) va do
vay van con i ≤ n. Ðo gIa fhIôf quy naµ fac = (i − 1) ! fruoc khI vao vong Iaµ nôn fac
so co gIa frI Ia :
fac = (i − 1)! * i = i!
Tu do Ð qua fhaf Ia baf bIôn cua vong Iaµ va mônh dô :
(Ð ∧ (i < n)) {Il Ð dung.
Tu do suy ra khang dInh :
Ð { while i < n do P } Ð ∧ (i ≥ n) cung dung.
VI vong Iaµ kôf fhuc sau khI Iaµ n − l Ian, khI do i = n va fac = n!.
II.1.7. Caïc quy tàõc khaïc
Quy tñc d¡éu k¡én truoc :
Quy tàõc “vaì” :
Ð {Il S
Ð’ → Ð
∴ Ð’ {Il S
Ð {Il S
Ð {Il S’
∴ Ð {Il S ∧ S’


Error! Reference source not found. 65

Quy tàõc âiãöu kiãûn sau : Quy tàõc “hoàûc” :
Ð {Il S
S → S’
∴ Ð {Il S’
Ð {Il S
Ð’ {Il S
∴ Ð ∨ Ð’ {Il S ∧ S’
V Vi i d du u 5 5 : :
Chung mInh chuong frInh con I finh fich haI sô nguyôn m va n Ia dung :
I ≡ function product(m, n: Integer): Integer;
begin
{Il ≡l if n < 0 then a:= −n else a:= n;
{I2 ≡l k:= 0; x:= 0;
{I3 ≡l while k < a do begin
x:= x + m;
k:= k + 1
end;
{I4 ≡l if n < 0 then product:= −x
else product:= x
end;
Ta so chung mInh rang sau khI fhuc hIôn I fhI ham fra vô gIa frI Ia mn.
Ta chIa I gôm bôn doan CT Ia {Il; I2; I3; I4l nhu frôn.
GoI Ð Ia dIôu kIôn dau Ð ≡ «m, n nguyãn» va Sl ≡ Ð ∧ (a = 1n1).
KhI do co fhô chí ra Ð {Il} Sl Ia dung.
GoI S2 ≡ Sl ∧ (k = 0) ∧ (x = 0). Ðô dang kIôm fra rang Sl {I2} S2 Ia dung.
Ta cung fhay dIôu kIôn (x = mk) ∧ (k ≤ a) Ia môf baf bIôn frong vong Iaµ I3
fuong fu voI Iy Iuan quy naµ frong vong Iaµ finh n!. Vong Iaµ nay kôf fhuc sau a
buoc Iaµ khI k = a, fuc x = ma faI dIôm nay.
GoI S3 ≡ (x = ma) ∧ (a = |n|). Tu do suy ra S2 {I3} S3 Ia dung.
CuôI cung co fhô chí ra I4 Ia dung voI dIôu kIôn dau S3 va dIôu kIôn cuôI S, voI
S ≡ product = mn. Vay S3 {S4} S dung va ham fra vô gIa frI Ia mn.
Tu cac mônh dô Ð {Il} Sl, Sl {I2} S2, S2 {I3} S3 va S3 {S4} S Ia dung, fhoo
quy fac hoµ fhanh, fa co I cung dung, fuc Ð { I l S dung.
NgoaI ra do ca Il, I2, I3 va I4 dôu dung nôn I cung dung
(qod)
.

TS. PHAN HUY KHANH biãn soaûn 65
66 Cäng nghãû Pháön mãöm
II.2. Phæång phaïp cuía C.A.R. Hoare
II.2.1. Phaït biãøu
Sau day Ia môf vi du su dung µhuong µhaµ cua C.A.I. Hoaro :
Div : r:=a; q:= 0;
while r >= b do begin
r:= r - b;
q:= q + 1;
end;
a, b, q, r Ia cac bIôn nguyôn, a va b duoc khoI gan gIa frI dau Ian Iuof Ia A va Ð. VoI
A ∈ N va Ð ∈ N
+
, ham ÐIv finh fhuong q va sô du r cua µhoµ chIa A cho Ð. Nhu
vay voI ham ÐIv fa co :
Ð = N × N
+
, I = N × N va f Ia ham xac dInh frôn N × N
+
vao frong N × N, nghïa Ia
fu caµ (A, Ð) ∈ N × N
+
, xac dInh caµ (q, r) ∈ N × N sao cho A = Ðq + r va r < Ð.
Ðay gIo can chung mInh ÐIv finh dung ham f fhoo haI buoc nhu sau :
l. Chæïng minh tênh âuïng âàõn tæìng pháön : nôu ÐIv dung fhI ÐIv so cho kôf qua
dung.
2. Chæïng minh tênh dæìng : ÐIv dung voI moI du IIôu fhuôc N × N
+
.
Trong fruong hoµ ÐIv, fa can chung mInh µhaf bIôu sau :
Nôu fruoc khI fhuc hIôn Iônh dau fIôn cua ÐIv, a va b duoc gan gIa frI dau A ∈
N va Ð ∈ N
+
. Sau khI fhuc hIôn, q va r fhoa man cac dIôu kIôn A = Ðq + r, r < Ð, r
≥ 0, q ≥ 0. Ta co :
(a=A) ∧ (b=Ð) ∧ (A≥0) ∧ (Ð>0) {ÐIvl (A=Ðq+r) ∧ (q≥0) ∧ (r≥0) ∧ (r<Ð).
II.2.2. Chæïng minh tênh âuïng âàõn tæìng pháön cuía Div
Ta can chung mInh :
(a=A) ∧ (b=Ð) ∧ (A≥0) ∧ (Ð>0) {ÐIvl (A=Ðq+r) ∧ (q≥0) ∧ (r≥0) ∧ (r<Ð)
Ðô dô fhoo doI, fa daf fôn cac dIôu kIôn nhu sau :
Il = (a=A) ∧ (b=Ð)
I2 = (A≥0) ∧ (Ð>0)
Ql = (A=Ðq+r) ∧ (q≥0) ∧ (r≥0) (r<Ð)
Chu y rang :
Il ∧ I2 → Il ∧ (a≥0) ∧ (b>0) va
Il ∧ (a=bq+r) ∧ (q≥0) ∧ (r≥0) ∧ (r<b) → Ql

Error! Reference source not found. 67
Thoo cac quy fac dIôu kIôn fruoc va dIôu kIôn sau, chí can chung mInh :
(I)
Il ∧ (a≥0) ∧ (b>0) {ÐIvl Il ∧ (a=bq+r) ∧ (q≥0) ∧ (r≥0) ∧ (r<b)
Ta so chung mInh haI gIaI doan :
l. Il {ÐIvl Il
2. (a≥0) ∧ (b>0) {ÐIvl (a=bq+r) ∧ (q≥0) ∧ (r≥0) ∧ (r<b)
O P1 /Dir} P1
Truoc hôf can chí ra Il Ia baf bIôn cua vong Iaµ. Thoo quy fac gan, fa co :
Il { q :=q + l l Il
Il { r := r − b l Il
nhu vay, fhoo quy fac fô hoµ :
Il { r := r − b ; q := q + l l Il, nhung :
Il ∧ (r≥b) → Il
Thoo quy fac dIôu kIôn fruoc :
Il ∧ (r≥b) { r := r − b ; q :=q + l l Il
Thoo quy fac vong Iaµ :
(l) Il { vhIIo r≥b do bogIn r := r − b ; q :=q + l ond l Il ∧ (r<b)
Aµ dung Ian nua quy fac gan va quy fac fô hoµ, fa co :
(2) Il { r := a ; q := 0 l Il
Tu (l) va (2), fhoo quy fac fô hoµ, fa co :
Il {ÐIvl Il ∧ (r<b)
CuôI cung, fhoo quy fac dIôu kIôn sau :
Il {ÐIvl Il (âpcm)
O (u≥0) ∧ (b>0) /Dir} (u=bq+r) ∧ (q≥0) ∧ (r≥0) ∧ (r<b)
Ðaf :
I3 = (a=bq+r) ∧ (q≥0) ∧ (r≥0)
I4 = (a=b(q+l)+r) ∧ (q+l≥0) ∧ (r≥0) bang cach fhay q frong I3 boI q+l
I5 = (a=b(q+l)+r−b) ∧ (q+l≥0) ∧ (r−b ≥0) bang cach fhay r frong I4 boI r−b
(2.l.) Ta xom rang I3 Ia môf baf bIôn cua vong Iaµ. Thoo quy fac gan :
I4 { q := q + l l I3
va I5 { r := r − b l I4
Tu do fhoo quy fac fô hoµ :
(3) I5 { r := r − b ; q := q + l l I3
TS. PHAN HUY KHANH biãn soaûn 67
68 Cäng nghãû Pháön mãöm
Xof dIôu kIôn fruoc, fa co :
(I) I5 ~ (a=bq+r) ∧ (q≥ −l) ∧ (r≥b)
(II) VI rang :
(q≥0) → (q≥ −l) va
(r≥0) ∧ (r≥b) → (r≥b), fa co :
I3 ∧ (r≥b) → (a=bq+r) ∧ (q≥ −l) ∧ (r≥b)
Thoo quy fac dIôu kIôn fruoc, µhaf bIôu (3) so Ia :
I3 ∧ (r≥b) { r := r − b ; q := q + l l I3
Thoo quy fac vong Iaµ dan dôn :
(4) I3 { vhIIo r≥b do bogIn r := r − b ; q := q + l ond l I3 ∧ (r<b)
(2.2.) Ðay gIo su dung baf bIôn vong Iaµ nhu Ia dIôu kIôn sau cho nhung Iô nh dau
fIôn cua day. Ta co quy fac gan :
(a=b.0+r) ∧ (0≥0) ∧ (r≥0) { q := 0 l I3
va (a=b.0+r) ∧ (0≥0) ∧ (r≥0) ~ (a=r) ∧ (r≥0)
Aµ dung cho Ian nua quy fac gan :
(a=a) ∧ (a≥0) { r := a l (a=r) ∧ (r≥0) va :
(a=a) ∧ (a≥0) ~ (a≥0)
Thoo quy fac fô hoµ, fa co :
(5) (a≥0) { r := a ; q := 0 l I3
Quy fac fô hoµ aµ dung cho (4) va (5) cho fa :
(a≥0) {ÐIvl I3 ∧ (r<b)
Quy fac dIôu kIôn sau dan dôn kôf Iuan :
(a≥0) ∧ (b>0) {ÐIvl I3 ∧ (r<b)
Tu O va O da chung mInh, suy ra (I) fhoo quy fac “va ”, dông fhoI kôf fhuc vIôc
chung mInh finh dung dan fung µhan cua ÐIv.


Error! Reference source not found. 69
II.3. Chæïng minh dæìng
II.3.1. Chæïng minh dæìng cuía mäüt chæång trçnh
Môf chuong frInh không Ia dô quy, không chua Iônh gofo so chí co fhô môf day
vô han finh foan nôu no fhuc hIôn vô han Ian fhan môf vong Iaµ. VIôc chung mInh
môf chuong frInh nhu vay dung voI moI du IIôu d ∈ Ð dan dôn vIôc chung mInh
rang môI vong Iaµ cua chuong frInh chí co fhô fhuc hIôn môf sô huu han Ian ∀
d∈Ð.
Cho vong Iaµ :
while B do P
voI x
l
, x
2
, ..., x
n
Ia cac bIôn cua chuong frInh. GoI W
Ð
Ia faµ hoµ cac gIa frI cua
vocfo :
v = < x
l
, x
2
, ..., x
n
>
sao cho cac bIôn fhoa man dIôu kIôn Ð.
GIa fhIôf rang dIôu kIôn Ð Ia baf bIôn voI vong Iaµ dang xof va fhoa man fruoc
khI fhuc hIôn vong Iaµ nay.
Nôu v = v
l
∈ W
Ð

Ð
fruoc khI fhuc hIôn vong Iaµ, khI do v = v
2
∈ W
Ð
sau khI
fhuc hIôn fhan vong Iaµ I.
Nôu v
2
∈ W
Ð


¬
Ð
, vong Iaµ dung ; nôu không v = v
3
∈ W
Ð
, sau khI fhuc hIôn
I, v.v...
Nhu vay dô chung mInh vong Iaµ dung, chí can chí ra rang moI day v
l
, v
2
, v
3
,
... da xay dung Ia huu han.
Ihuong µhaµ dô chung mInh Ia dInh nghïa môf ham m fu W
Ð

Ð
vao N sao cho
co fhô chí ra rang :
Ð ∧ Ð ∧ (m(v) = m
0
) { I l ¬Ð ∧ (m(v) < m
0
) ∀ m
0
∈ N
CBu y :
Ihaf bIôu frôn co nghïa rang nôu v = v
I
fruoc khI fhuc hIôn I, fhI sau khI fhuc
hIôn I, hoac vong Iaµ dung, hoac m(v
I+l
) < m(v
I
).
Trong fruong hoµ nay (da chung mInh duoc I dung), fa co fhô khang dInh rang
voI moI day v
l
, v
2
, v
3
, ..., day m(v
l
), m(v)
2
, m(v)
3
... gIam dan fhuc su frong N, Ia
huu han.
ÐIôu do chung mInh rang day v
l
, v
2
, v
3
, ... Ia huu han, va vong Iaµ dung.
TS. PHAN HUY KHANH biãn soaûn 69
70 Cäng nghãû Pháön mãöm
II.3.2. Chæïng minh dæìng cuía Div
ÐIv chí chua môf vong Iaµ :
vhIIo r ≥ b do bogIn r := r − b ; q := q +l ond
Vong Iaµ nay Iuôn Iuôn dung.
ÐIôu kIôn { b=Ð l Ia môf baf bIôn cua vong Iaµ nay, duoc fhoa man fruoc khI
fhuc fhô vong Iaµ (xom chung mInh dung fung µhan muc O).
Tuong fu nhu vay dôI voI dIôu kIôn (r ≥ 0) (xom O).
Ta xof faµ hoµ W
l
= W
(b = Ð)

(r

0)

(r

b)
va ham m : W
l
→ N sao cho m(v) = r.
CBu y :
VIôc chon ham nay dan vIôc chung mInh dung dôn vIôc chung mInh rang bIôn r
nhan cac gIa frI gIam ngaf va IIôn fuc.
Ðaf :
I6 = (b=Ð) ∧ (r≥0) ∧ (r≥b)
TIôµ fhoo, fa con µhaI chung mInh rang :
(l) I6 ∧ (r=m
0
) { r := r − b ; q := q + l l (r<b) ∧ (r<m
0
) ∀ m
0
∈ N
Thoo quy fac gan :
(r−b < m
0
) { r := r − b ; q := q + l l (r<m
0
) ∀ m
0
∈ N
aµ dung cac quy fac dIôu kIôn fruoc va dIôu kIôn sau, fa co :
(2) I6 ∧ (r=m
0
) ∧ (r−b<m
0
) {r := r−b ; q := q+ll (r<b) ∧ (r<m
0
) ∀ m
0
∈ N
Maf khac :
(b=Ð) ∧ (r=m
0
) ∧ (r−b<m
0
) ~ (b=Ð) ∧ (r=m
0
) ∧ (m
0
−Ð<m
0
)
hay :
(b=Ð) ∧ (r=m
0
) ∧ (r−b<m
0
) ~ (b=Ð) ∧ (r=m
0
) ∧ (Β>0)
ÐIôu kIôn Ð>0 Iuôn Iuôn dung vI rang (A, Ð) ∈ Ð = N × N
+
, nhu vay :
(b=Ð) ∧ (r=m
0
) ∧ (r−b<m
0
) ~ (b=Ð) ∧ (r=m
0
)
Tu do dan dôn (l) xuaf µhaf fu (2). VIôc chung mInh ÐIv dung da xong.
CBu y :
Ðô chung mInh ÐIv dung voI ∀ d ∈ Ð, noI chung không aµ dung duoc cho
∀d∈I.
Vi du nôu I = Z × Z, ÐIv co fhô quan voI Ð = 0.

Error! Reference source not found. 71
II.3.3. Âaïnh giaï mäüt chæång trçnh làûp
Ðanh gIa môf chuong frInh I Ia xac dInh fhoI gIan va kich fhuoc bô nho can
fhIôf dô fhuc hIôn chuong frInh I :
• môf ham T
I
: I → R ∪ {+∞l sao cho, ∀ d ∈ I, T
I
(d) Ia fhoI gIan fhuc
hIôn I dôI voI du IIôu d (T
I
(d) = +∞ nôu chuong frInh quan).
• môf ham N
I
: I → N ∪ {+∞l sao cho, ∀ d ∈ I, N
I
(d) Ia sô don vI bô nho
can fhIôf dô fhuc hIôn I dôI voI du IIôu d (N
I
(d) co fhô vô han nôu
chuong frInh quan).
O day, fa chí quan fam dôn vIôc xac dInh fhoI gIan fhuc hIôn chuong frInh gôm
cac Iônh co so nhu Iônh gan (quy fac “;”), Iônh dIôu kIôn va vong Iaµ vhIIo.
Ta so goI f
I
Ia ham rIông µhan (µarfIaI funcfIon) cua I frong faµ hoµ cac kôf
qua I, duoc finh boI chuong frInh I, va W Ia faµ hoµ W
fruo
cac gIa frI co fhô cua
cac bIôn frong I.
Ham f
I
co fhô mo rông fhanh môf ham W → W. Tuong fu, nôu I’ Ia môf day cac
Iônh cua I, ham f
I
dc finh boI I co fhô duoc dInh nghïa nhu Ia môf ham cua
W → W.
V VI I d du u 1 14 4 : :
Trong fruong hoµ ÐIv, nôu I = Ð, W = N × N
+
× N × N = faµ hoµ cac gIa frI co
fhô cua a, b, r, q.
f
ÐIv
(a, b, r, q) = (a, b, fhuong cua a va b, µhan du cua a chIa cho b).
Nôu xof Iônh q := q + l cua ÐIv :
f
q := q+l
(a, b, r, q) = (a, b, q+l, r).
ThoI gIan fhuc hIôn môf chuong frInh co fhô duoc dInh nghïa nhu sau :
l. MôI Iônh co so va môI dIôu kIôn co môf fhoI gIan fhuc hIôn dôc Iaµ voI gIa frI
cua cac bIôn. Nhu vay, ∀ v ∈ W :
VoI moI µhoµ gan x := y, T
x := y
(v) = consfanf. Ta vIôf T
x := y
.
VoI moI dIôu kIôn Ð, T
Ð
(v) = consfanf. Ta vIôf T
Ð
.
2. T
I ; Q
(v) = T
I
(v) + T
Q
(f
µ
(v))
3. T
If Ð fhon I
(v) = If Ð fhon (T
Ð
+ T
I
(v)) oIso T
Ð
T
If Ð fhon I oIso Q
(v) = If Ð fhon (T
Ð
+ T
I
(v)) oIso (T
Ð
+ T
Q
(v))
4. T
vhIIo Ð do I
(v) = (n(v) + l) T
Ð
+
T ( ( )
P P
i
i 0
n(w)
I w)
=


1
TS. PHAN HUY KHANH biãn soaûn 71
72 Cäng nghãû Pháön mãöm
frong do, n Ia ham W → N ∪ { +∞ l, sao cho n(v) Ia sô Ian fhuc hIôn fhan
vong Iaµ I voI gIa frI dau v cua cac bIôn.
Âaïnh giaï thåìi gian thæûc hiãûn cuía Div :
Sô Ian Iaµ cua ÐIv Ia gIa frI cuôI cua bIôn q, gIa su Ia
A
B






, µhan nguyôn cua A
chIa cho Ð, frong do, A va Ð Ia cac du IIôu cua ÐIv.
Maf khac, fhoI gIan fhuc hIôn fhan vong Iaµ dôc Iaµ voI cac du IIôu va bang :
T
r := r − b
+ T
q := q + l
Ta co :
T
ÐIv
(A, Ð) = T
r := a
+ T
q := 0
+ (
A
B






+ l) T
r ≥ b
+
A
B






(T
r := r − b
+ T
q := q + l
)
Nhu vay, T
ÐIv
(A, Ð) co dang K
l
A
B






+ K
2
, frong do K
l
va K
2
dôc Iaµ voI cac du
IIôu A va Ð.
T
ÐIv
(A, Ð) Ia bac (ordor) cua
A
B






.
Chu y : NguoI fa fhuong quan fam dôn bac cua ham TI fhay vI ban fhan ham TI,
vI TI µhu fhuôc vao µhan cung va µhan môm su dung dô fhuc fhI chuong
frInh I. Nhu vay chí can xac dInh sô Ian fhuc hIôn day cac Iônh hay fhuc
hIôn nhaf cua chuong frInh. ÐIôu nay co fhô nhan duoc bang cach dôm sô
Ian Iaµ frong môI vong Iaµ.
III. Xáy dæûng chæång trçnh
III.1. Måí âáöu
Trong muc fruoc, fa fhay vIôc chung mInh finh dung dan cua môf chuong frInh,
du chí Ia môf chuong frInh raf ngan va don gIan, raf kho khan va môf moI. Ðô
khac µhuc, nguoI fa dua ra môf µhuong µhaµ hIôu qua hon Ia væìa thiãút kãú væìa
chæïng minh tênh âuïng âàõn cuía chæång trçnh.
Vi du, dac fa môf baf bIôn cho môf vong Iaµ fruoc khI vIôf, kIôm fra finh dung
cua vong Iaµ nay voI dIôu kIôn sau, rôI vIôf fhan cua vong Iaµ sao cho gIu duoc baf
bIôn va chí fhuc hIôn môf sô huu han Ian. Ðô finh !SCIN cua haI sô nguyôn
duong, fa su dung cac finh chaf sô hoc nhu sau :
Nôu a = b !SCIN(a, b) = a = b
Nôu a < b !SCIN(a, b) = !SCIN(a, b − a)
Nôu a > b !SCIN(a, b) = !SCIN(a − b, b)

Error! Reference source not found. 73
GIa su a va b Ia haI bIôn cua chuong frInh nhan gIa frI haI du IIôu Ian Iuof A va
Ð. Sau khI gan, dIôu kIôn !SCIN(a, b) = !SCIN(A, Ð) fhoa man.
Nôu fhan chuong frInh chua môf vong Iaµ cua baf bIôn !SCIN(a, b) =
!SCIN(A, Ð) voI dIôu kIôn kIôm fra dung Ia a = b, fhI fa co :
!SCIN(a, b) = a = b = !SCIN(A, Ð)
sau khI fhuc hIôn vong Iaµ nay. Kôf qua fIm duoc Ia môf frong haI bIôn a va b.
Can xac dInh fhan cua vong Iaµ nay sao cho, môf maf, baf bIôn duoc fhoa man,
maf khac, vong Iaµ chí fhuc hIôn môf sô huu han Ian. Thoo finh chaf cua !SCIN,
nôu a ≠ b, Iônh :
if a > b then a := a − b else b := b − a
Iam cho dIôu kIôn !SCIN(a, b) = !SCIN(A, Ð) fro nôn baf bIôn. Chí con µhaI
chung mInh ra ng vong Iaµ da vIôf chí fhuc hIôn môf sô huu han Ian.
Ta fhay quan hô : (a > 0) ∧ (b >0)
Ia baf bIôn frong vong Iaµ (dIôu kIôn cua vong Iaµ Ia a ≠ b, Iônh b := b − a chí duoc
fhuc hIôn nôu b > a).
Vay max(a, b) cung Ia baf bIôn. Hon nua max(a, b) gIam ngaf môI Ian fhuc hIôn
fhan vong Iaµ, va vong Iaµ Iuôn Iuôn dung.
Nhu vay fa da vIôf va chung mInh không hInh fhuc chuong frInh sau day :
P : while a <> b do
if a > b then a := a − b else b := b − a ;
ketqua := a ;
III.2. Baìi toaïn cåì tam taìi
Cho fruoc :
l. Môf mang cac hon bI danh sô fu l dôn N, môI hon bI mang môf mau hoac
xanh, hoac frang, hoac do.
2. Cac vI fu Ð(I), W(I) va I(I) Ia dung nôu va chí nôu hon bI fhu I (l ≤ I ≤ N) Ia
xanh, frang va do fuong ung.
3. Caµ hoan vI (I, j) dô daf hon bI fhu I fhanh j, hon bI fhu j fhanh I, ∀ I, j ∈
l..N, không IoaI fru fruong hoµ I = j.
Ta can saµ xôµ cac hon bI fhoo fhu fu “xanh, frang, do”, môI vI fu Ð, W va I chí
duoc finh dôn môfl Ian cho môI hon bI da cho. Hon nua, cac hoan vI µhaI cang if
cang fôf.
TS. PHAN HUY KHANH biãn soaûn 73
74 Cäng nghãû Pháön mãöm
III.2.1. Låìi giaíi thæï nháút
Ta so su dung môf vong Iaµ vhIIo voI baf bIôn nhu hInh duoI day va dIôu kIôn
kIôm fra dung Ia “vung X rông”.
l b v r N
↓ ↓ ↓ ↓ ↓
Ð W X I
bI xanh bI frang
←⎯⎯→
bI do

Ihan
chua xu Iy
Can co 3 chí sô b, v va r dô µhan cach 4 vung cua mang. Ta fhuc hIôn µhoµ
chon nhu sau : cac chí sô b va v dung ngay sau cac vung Ð va W fuong ung cua cac
vIôn bI. Chí sô r Ia cua vIôn bI dung ngay fruoc vung I.
Ta co : I
b, v, r
= (l ≤ α < b → Ð(α)) ∧ (b ≤ α < v → W(α)) ∧ (r < α ≤ N → I(α))
ÐIôu kIôn sau cua chuong frInh nhu sau :
l b r v N
↓ ↓ ↓ ↓ ↓
Ð W I
hay co fhô vIôf : I
b, v, r
∧ (v = r + l). Chuong frInh so co dang nhu sau :
{ KhoI gan : I
b, v, r
fruo l
while (vung_X_không_rông) do
{ Than vong Iaµ cua baf bIôn I
b, v, r
l
Sau khI fhuc hIôn chuong frInh nay, fa kIôm fra duoc rang : I
b, v, r

(vung_X_rông)
va mang cac vIôn bI da duoc saµ xôµ.
Chuong frInh sau day chua bIôn n nhan gIa frI N :
(I)
w:= 1; b := 1; r := n;
while w <= r do
if W(w) then w:= w+1
else if B(w) then
begin HoaïnVë(b, w); b:= b+1; w:= w+1 end
else
begin HoaïnVë(r, w); r:= r-1 end
Ta nhan fhay rang chuong frInh nay fhoa man cac vI fu Ð, W va I.
PBûn tIcB :
Sô Ian Iaµ = N

Error! Reference source not found. 75
Sô Ian hoan vI = no
l
= #Ð + #I (#Ð va #I Ian Iuof Ia sô vIôn bI xanh va do)
Kôf qua nay chua Ia fôI uu, fa co fhô Iam gIam sô Ian hoan vI cac vIôn bI do nhu
sau :
(I
bis
)
w:= 1; b := 1; r := n;
while w <= r do
if W(w) then w:= w+1
else if B(w) then
begin HoaïnVë(b, w); b:= b+1; w:= w+1 end
else
begin while R(r) and w < r then r:= r-1;
HoaïnVë(r, w); r:= r-1
end
III.2.2. Låìi giaíi thæï hai
Ta su dung baf bIôn bIôu dIôn nhu sau :
l b v r N
↓ ↓ ↓ ↓ ↓
Ð W X I
Tu do dua dôn chuong frInh (fam fhoI chaµ nhan vIôc chung mInh không hInh
fhuc) :
(II)
w:= 1; b := 1; r := n;
while r <= n do
if R(r) then r:= r-1
else if W(r) then
begin HoaïnVë(w, r); w:= w+1; r:= r-1 end
else
begin HoaïnVë(w, r); r:= r-1;
HoaïnVë(b, w); b:= b+1; w:= w+1
end
PBûn tIcB :
Sô Ian Iaµ = N
Sô Ian hoan vI = no
2
= #W + 2#Ð
So sanh voI chuong frInh (I), fa co : no
2
− no
l
= #Ð + #W − #I
Chuong frInh (I) so hIôu qua hon (II), nôu nhu if ra nua sô vIôn bI Ia do.

Baìi táûp :
Tu baf bIôn frôn day, fa co fhô nhan duoc chuong frInh nhu sau :
TS. PHAN HUY KHANH biãn soaûn 75
76 Cäng nghãû Pháön mãöm
(II
bis
)
w:= 1; b := 1; r := n;
while r <= n do
if R(r) then r:= r-1
else if W(r) then
begin HoaïnVë(w, r); w:= w+1; r:= r+1 end
else
begin HoaïnVë(b, r); b:= b+1;
HoaïnVë(w, r); w:= w+1; r:= r+1
end
Chuong frInh frôn Ia saI. Hay fIm môf cach µhan bô ban dau cua mang haI
vIôn bI dô fhay saI.
III.2.3. Chæïng minh tênh âuïng âàõn cuía chæång trçnh (I)
a) Caïc âënh nghéa vaì kyï hiãûu
Ta da xay dung chuong frInh (I) bang cach su dung baf bIôn :
I
b, v, r
= (l ≤ α < b → Ð(α)) ∧ (b ≤ α < v → W(α)) ∧ (r < α ≤ N → I(α))
Ðô chung mInh finh dung dan cua chuong frInh nay, fa su dung ky hIôu don
gIan hoa :
x ≤ α < y → A(α) Ia ky hIôu vIôf faf cua dIôu kIôn :
{
A(x) ∧ A(x+l) ∧ . . . ∧ A(y) nôu x ≤ y
fruo nôu không
hay : (x ≤ y) → A(x) ∧ . . . ∧ A(y)
Ðay gIo fa xom xof cac dIôu kIôn dac frung cua baI foan .
a. Cac dIôu kIôn (l) va (2) duoc bIôu dIôn boI :
Ð
l
= (l ≤ α ≤ N) → (Ð(α) ∨ W(α) ∨ I(α))
b. ÐInh nghïa (3) cua hoan vI (I, j) dua dôn fIôn dô sau day :
“Cho dIôu kIôn sau S, fa co :
Ð ∧ (l ≤ I ≤ N) ∧ (l ≤ j ≤ N) { hoan vI (I, j) l S
nôu Ð nhan duoc fu S bang cach fhay fhô :
− moI vI fu Ð(bf), W(bf), I(bf), frong do bf co gIa frI I, boI Ð(j), W(j), I(j)
− va moI vI fu Ð(bf), W(bf), I(bf), frong do bf co gIa frI j, boI Ð(I), W(I),
I(I)”.
c. ÐIôu kIôn sau cua chuong frInh (saµ xôµ mang) duoc bIôu dIôn boI :
S
l
= (l ≤ b ≤ N+l) ∧ (b−l ≤ r ≤ N) ∧ (l ≤ α < b → Ð(α)) ∧
(b ≤ α < r → W(α)) ∧ (r < α ≤ N → I(α))
Ðaf bIôn cua vong Iaµ fa vua su dung không han Ia I
b, v, r
nhung :

Error! Reference source not found. 77
Q
b, v, r
= Ð
l
∧ (l ≤ b ≤ N) ∧ (v−l ≤ r ≤ N) ∧ I
b, v, r
GIa su A
l
Ia vong Iaµ vhIIo cua chuong frInh (I) va A
2
Ia fhan cua vong Iaµ nay.
b) Chæïng minh tênh âuïng âàõn tæìng pháön
Bô dé : x ≤ α ≤ y → A(α) fuong duong voI (x ≤ α ≤ y−l → A(α)) ∧ (x ≤ y→ A(y))
Chæïng minh :
x ≤ α ≤ y → A(α)
~ (x ≤ y) → A(x) ∧ ... ∧ A(y) fhoo dInh nghïa
~ ((x < y) → A(x) ∧ ... ∧ A(y)) ∧ ((x = y) → A(y))
~ ((x < y) → A(x) ∧ ... ∧ A(y−l)) ∧ ((x < y) → A(y)) ∧ ((x = y) → A(y))
~ x ≤ α ≤ y−l → A(α)) ∧ (x ≤ y→ A(y))
dµcm
(α) CBung m¡nB cuu bût b¡én Q
b, w, r
trong A
2
Ta kIôm fra rang Ð
l
∧ (l ≤ I ≤ N) ∧ (l ≤ j ≤ N) { hoan vI (I, j) l Ð
l
(I) Truong hoµ W(v)
Io rang fa co : Q
b, v+l, r
{ v := v+l l Q
b, v, r
Va IaI : Q
b, v, r
∧ (v ≤ r) ∧ W(v) ~ Ð
l
∧ (l ≤ b ≤ v) ∧ (v ≤ r ≤ N) ∧ I
b, v, r
∧ W(v)
va : I
b, v, r
∧ W(v) → I
b, v+l, r
nhu vay : Q
b, v, r
∧ (v ≤ r) ∧ W(v) → Q
b, v+l, r
ÐIôu nay chung mInh :
Q
b, v, r
∧ (v ≤ r) ∧ W(v) { v := v+l l Q
b, v, r
(II) Truong hoµ Ð(v)
Io rang fa co : Q
b+l, v+l, r
{ b := b+l ; v := v+l l Q
b, v, r
Va IaI :
I
b+l, v+l, r
= (l ≤ α < b+l → Ð(α)) ∧ (b+l ≤ α < v+l → W(α)) ∧
(r ≤ α < N → I(α))
Tu do fhoo bô dô :
I
b+l, v+l, r
~ (l ≤ α < b+l → Ð(α)) ∧ (b+l ≤ α < v → W(α)) ∧
(r ≤ α < N → I(α)) ∧ ((b ≥ l) → Ð(b)) ∧ ((v ≥ b+l) → W(α))
Aµ dung fIôn dô dInh nghïa boI µhoµ hoan vI cho Q
b+l, v+l, r
:
I { hoan vI(b, v) l Q
b+l, v+l, r
voI :
TS. PHAN HUY KHANH biãn soaûn 77
78 Cäng nghãû Pháön mãöm
I = Ð
l
∧ (l ≤ b+l ≤ v+l) ∧ (v ≤ r ≤ N)
∧ (l ≤ α < b → Ð(α)) ∧ (b+l ≤ α < v → W(α))
∧ (r < α ≤ N → I(α)) ∧ ((b ≥ l) → Ð(v))
∧ ((v ≥ b+l) → W(b)) ∧ (l ≤ b ≤ N) ∧ (l ≤ v ≤ N)
Nhung :
(b+l ≤ α < v → W(α)) ∧ ((v ≥ b+l) → W(b)) ~ (b ≤ α < v → W(α))
Nhu vay :
I ~ Ð
l
∧ (l ≤ b ≤ v) ∧ (v ≤ r ≤ N) ∧ Ð(v) ∧ I
b, v, r
Tu do suy ra :
Q
b, v, r
(v ≤ r) ∧ ¬W(v) ∧ Ð(v) → I
ÐIôu nay chung mInh :
Q
b, v, r
∧ (v ≤ r) ∧ ¬W(v) ∧ Ð(v) { hoanvI(b, v) ; b := b+l ; v := v+l l Q
b, v, r
(III) Truong hoµ I(v)
Ta co :
Q
b, v, r −l
{ r := r −l l Q
b, v, r
Maf khac fhoo bô dô :
I
b, v, r −l
~ I
b, v, r
∧ ((r ≤ N) → I(r))
Aµ dung fIôn dô dInh nghïa boI µhoµ hoan vI cho Q
b, v, r −l
:
G { hoanvI(r, v) l Q
b, v, r −l
voI :
G = Ð
l
∧ (l ≤ b ≤ v) ∧ (v−l ≤ r−l ≤ N) ∧ I
b, v, r
∧ ((r ≤ N) → I(v))
∧ (l ≤ r ≤ N) ∧ (l ≤ v ≤ N)
Thuc fô fa co :
I
b, v, r
∧ (b ≤ v) ∧ (v ≤ r) ∧ (l≤v≤ N) ∧ (l≤ r ≤N)
{ hoanvI(r, v) l I
b, v, r
∧ (b ≤ v) ∧ (v ≤ r)
Ta co :
G ~ Ð
l
∧ (l ≤ b ≤ v) ∧ (v ≤ r ≤ N) ∧ I(v) ∧ I
b, v, r
Va IaI :
Ð
l
∧ ¬W(v) ∧ ¬Ð(v) ∧ (l≤ v ≤ N) → I(v)

Error! Reference source not found. 79
Nhu vay :
Q
b, v, r
∧ (v ≤ r) ∧¬W(v) ∧ ¬Ð(v) → G
ÐIôu nay chung mInh :
Q
b, v, r
∧ (v ≤ r) ∧ ¬W(v) ∧ ¬Ð(v) { hoanvI(r, v) ; r := r −l l Q
b, v, r
Tu 3 kôf qua frôn fa suy ra :
Q
b, v, r
∧ (v ≤ r) { A
2
l Q
b, v, r
(β) CBung m¡nB tInB dung dñn cuu cBuong trinB (¡)
Ta da co :
Q
b, v, r
{ A
2
l Q
b, v, r
∧ (v > r)
(¡) O¡éu k¡én suu
Ta co :
Q
b, v, r
∧ (v > r) → (l ≤ b ≤ v) ∧ (v=r+l) ∧ (r ≤ N) ∧ I
b, v, r
va :
I
b, v, r
∧ (v=r+l) → (l ≤ α < b → Ð(α)) ∧ (b ≤ α < r → W(α)) ∧ (r < α ≤ Ν → I(α))
Nhu vay :
Q
b, v, r
∧ (v > r) → S
l
frong do :
Q
b, v, r
{ A
l
l S
l
(¡¡) KBo¡ gun
Ta co :
Ð
l
∧ (0 ≤ n ≤ N) ∧ (n < α ≤ N → I(α)) { v := l; b := l; r := n l Q
b, v, r
va IaI :
(n=N) → (0 ≤ n ≤ N) ∧ (n < α ≤ N → I(α)),
do do :
Ð
l
∧ (n=N) { chuong frInh (I) l S
l
Nhu vay fa da chung mInh xong finh dung dan fung µhan.
c) Chæïng minh dæìng
Chuong frInh (I) chí co môf vong Iaµ A
l
va fhan cua vong Iaµ Ia A
2
.
GIa su : W
Q
bvr


(v ≤ r)
= X
l
va ham m : X
l
→ N sao cho m(x) = r − v.
TS. PHAN HUY KHANH biãn soaûn 79
80 Cäng nghãû Pháön mãöm
Chuï yï : VIôc chung mInh dung Ia chí ra rang kich fhuoc cua vung chua xu Iy r −
v gIam dan môI Ian fhuc hIôn A
2
.
Ðô chung mInh vIôc dung cua A
l
, chí can chí ra rang :
Q
b, v, r
∧ (v ≤ r) ∧ (r −v = m
0
) { A
2
l (v > r) ∨ (r −v < m
0
) ∀ m
0
∈ N
Chu y rang :
(r −v = m
0
) { v:= v+l l (r −v = m
0
−l) fruong hoµ cua W(v) va Ð(v)
va (r −v = m
0
) { r := r −l l (r −v = m
0
−l) fruong hoµ cua I(v)
Ta chung mInh duoc rang :
Q
b, v, r
∧ (v ≤ r) ∧ (r −v = m
0
) { A
2
l (r −v = m
0
−l) ∀ m
0
∈ N
Tu do chuong frInh (I) dung.
d) Chæïng minh chæång trçnh (I) thoaí maîn âiãöu kiãûn cuía baìi toaïn
Ðay gIo chí con µhaI chung mInh rang dIôu kIôn “môI vI fu Ð, W va I chí duoc
xof finh nhIôu nhaf môf Ian cho môI vIôn bI” chua xuaf hIôn frong S
l
cung fhoa
man.
Thaf vay, o frôn, fa da suy ra duoc rang A
2
duoc fhuc hIôn dung N Ian (gIa frI
cua r −v gIam l môI Ian, gIam fu N−l dôn 0). Maf khac, vIôc fhuc hIôn A
2
xof finh
(nhIôu nhaf môf Ian) cac vI fu IIôn quan dôn chí môf vIôn bI. Trong qua frInh saµ
xôµ, mau cua N vIôn bI Ia hoan foan xac dInh va vI co N Ian fhuc hIôn, môI fhuc
hIôn cua A
2
chí IIôn quan dôn l vIôn bI µhan bIôf.
III.3. In ra mäüt danh saïch theo thæï tæû ngæåüc
GIa su fa co môf danh sach fuyôn finh gôm cac µhan fu co cau fruc va môf con
fro chí dôn µhan fu dau fIôn cua danh sach nhu sau :
const n = ... { dô daI Ion nhaf cua danh sach }
type KiãøuPháönTæí = ... { kIôu cua cac µhan fu frong danh sach }
KiãøuConTroí = 0..n; { kIôu cua con fro, 0 Ia gIa frI nII }
PháönTæí = record
NäüiDung: KiãøuPháönTæí;
TiãúpTheo: KiãøuConTroí; {fro dôn µhan fu fIôµ fhoo }
end;
Danhsaïch = array[1..n] of PháönTæí;
var Ds : Danhsaïch; { danh sach cac µhan fu }
Pâáöu : KiãøuConTroí; { con fro chí dôn µhan fu dau fIôn cua danh
sach }

Error! Reference source not found. 81
GIa fhIôf rang danh sach chua if nhaf môf µhan fu (dau danh sach PÂáöu ≠
nil). ÐaI foan daf ra Ia In nôI dung danh sach fhoo fhu fu nguoc IaI. Vi du, nôu fa
co :
Idau

x
1
• x
2
• x
3
• x
4
nil
fhI chuong frInh so In ra nhu sau : x
4
, x
3
, x
2
, x
l
.
Ta so dua ra ba IoI gIaI TIIÐAl, TIIÐA2 va TIIÐA3 cho danh sach co dô daI n
µhan fu. ÐôI voI môI IoI gIaI, fa so µhan fich fhoI gIan va bô nho can fhIôf dô fhuc
hIôn chuong frInh.
Ca ba IoI gIaI dôu su dung vong Iaµ voI baf bIôn co dang sau :

(cac fruong nôI dung cac ban ghI α
k+l
, ..., α
n
duoc In fhoo chIôu nguoc IaI)
Pdâu
α
1
α
2
α
3
α
k
α
k¹1
α
n
. . . . . .
MôI buoc cua vong Iaµ Ia fIm µhan fu α
k
va vIôf nôI dung (α
k
). Ða chuong frInh
µhan bIôf nhau co ban o cach fIôµ can dôn α
k
.
¡¡¡.J.1.T¡LDA1
Ta su dung môf danh sach con fro, dau fIôn danh sach o frang fhaI rông, sau do
hoaf dông voI haI fhao fac nhu sau :
µuf(oxµr) daf vao dính danh sach gIa frI cua bIôu fhuc oxµr.
gof(x) nôu danh sach khac rông, Iay gIa frI o dính danh sach dô gan cho
bIôn x, nôu không, fhao fac không xac dInh.
Chuong frInh TIIÐAl gôm haI vong Iaµ :
(a) Vong Iaµ fhu nhaf :


(Ðanhsach = α
l
α
2
...

α
k − l
α
k
)
Pdâu x
α
1
α
2
α
k
α
k¹1
α
n
. . . . . .
(b) Vong Iaµ fhu haI :

TS. PHAN HUY KHANH biãn soaûn 81
82 Cäng nghãû Pháön mãöm


(Ðanhsach = α
l
α
2
...

α
k
)
(cac fruong nôI dung cac
ban ghI α
k+l
, ..., α
n
da
duoc In fhoo chIôu nguoc
IaI)
Pdâu
α
1
α
2
α
k
α
k¹1
α
n
. . . . . .
MôI buoc cua vong Iaµ Ia fIm µhan fu α
k
va vIôf nôI dung (α
k
). Ða chuong frInh
µhan bIôf nhau co ban o cach fIôµ can dôn α
k
.

IV. Caïc tiãn âãö vaì quy tàõc suy diãùn
Muc nay so nghIôn cuu cac van dô sau :
• − KhaI nIôm vô dIôu kIôn fruoc yôu nhaf va dIôu kIôn sau manh nhaf cua
môf day Iônh.
• − Cac kIôu fIôn dô gan khac nhau.
• − Cac fIôn dô va quy fac suy dIôn cho môf sô cau fruc ngôn ngu Iaµ frInh
(khôI, fhu fuc).
• − Ihan fich chuong frInh.
IV.1. Âiãöu kiãûn træåïc yãúu nháút vaì âiãöu kiãûn sau maûnh nháút cuía mäüt
daîy lãûnh
Trong muc fruoc, fa da ky hIôu :
− W
Ð
faµ hoµ cac gIa frI cac bIôn cua môf chuong frInh fhoa man dIôu kIôn
Ð,
− f
I
Ia ham finh duoc boI day cac Iônh I cua môf chuong frInh.
Nôu f
I
duoc dInh nghïa cho moI gIa frI cua W
Ð
, I không quan va không fhuc
hIôn cac µhoµ finh vô dInh (vi du chIa cho 0) nôu dIôu kIôn fruoc Ð fhoa man. Tinh
chaf nay duoc ky hIôu Ia form
Ð
I.
Ðay gIo fa xof µhaf bIôu Ð {Il S. Ta co cac finh chaf sau day :
(I) Ð {Il S Ia fruo nôu va chí nôu f
I
(W
Ð
) ⊆ W
S
(II) Nôu form
Ð
I fhI :
Ð {Il S Ia fruo nôu va chí nôu W
Ð
⊆ f
I
−l
(W
S
)
V VI I d du u 1 15 5 : :
(l) Cho µhaf bIôu (q > 0) { q := q+l l (q > 0), frong do q Ia bIôn duy nhaf cua
chuong frInh. Ta co :
W
Ð
= W
S
=N
+
, f
q := q+l
(N
+
) = N
+
−{ll ⊆ N
+
,

Error! Reference source not found. 83
va N
+
⊆ f
−l
q: := q+l
(N
+
) = N
(2) Cho µhaf bIôu (q ≥ 0) ∧ (y ≥ 0) { q := q dIv y l (q ≥ 0) ∧ (y ≥ 0), frong do q va
y Ia cac bIôn duy nhaf cua chuong frInh. Ta co :
W
Ð
= W
S
=N × N , f
q := q dIv y
(N × N) = N × N
+
⊂ W
S
,
nhung f
−l
q: := q dIv y
(N × N) = N × N
+


W
Ð
Trong fruong hoµ W
Ð
= f
I
−l
(W
S
), Ð Ia âiãöu kiãûn træåïc yãúu nháút (Ia µIus faIbIo
µrocondIfIon) µhaI duoc fhoa man fruoc khI fhuc hIôn I dô cho S duoc fhoa man
sau do.
Thuc fô, nôu Ð

{Il S va form
Ð

I fhI W
Ð

⊆ f
I
−l
(W
S
) = W
Ð
va nhu vay Ð

→ Ð.
Maf khac, nôu f
I
(W
Ð
) = W
S
, S Ia âiãöu kiãûn sau maûnh nháút (Ia µIus forfo
µosfcondIfIon) µhaI duoc fhoa man sau khI fhuc hIôn I nôu Ð Ia dung fruoc.
Thuc fô, nôu Ð {Il S

fhI f
I
(W
Ð
) = W
S
⊆ W
S

, nhu vay S → S

.
Ta ky hIôu haI ham fppre va fppost nhu sau :
− voI môf day Iônh va voI môf dIôu kIôn sau, fppre fra vô dIôu kIôn fruoc yôu
nhaf fuong ung
− voI môf dIôu kIôn fruoc va môf day Iônh, fppost fra vô dIôu kIôn sau sau manh
nhaf fuong ung.
Chu y rang cac ham fppre(P, S) va fppost(E, P) duoc dInh nghïa gan nhu fuong
duong.
Ðay gIo fa so frInh bay cac finh chaf cua cac ham fµµro va fµµosf.
IV.1.1. Haìm fppre
VoI moI dIôu kIôn S va day Iônh I, µfµosf(µfµro(I, S), I) → S
Chæïng minh :
Ðaf Ð ~ µfµro(I, S).
Ta co W
Ð
= f
I
−l
(W
S
), fu do suy ra f
I
(W
Ð
) = f
I
(f
I
−l
(W
S
)) ⊆ W
S
Hay co fhô noI Ð ~ µfµro(I, S), fu do suy ra µfµosf(Ð, I) → S
dµcm
IV.1.2. Haìm fppost
VoI moI dIôu kIôn Ð va day Iônh I, Ð → µfµro(I, µfµosf(Ð, I)).
Chæïng minh :
Ðaf S ~ µfµosf(Ð, I).
Ta co W
S
= f
I
(W
Ð
), fu do suy ra f
I
−l
(W
S
)= f
I
−l
(f
I
(W
Ð
)) ⊇ W
Ð
TS. PHAN HUY KHANH biãn soaûn 83
84 Cäng nghãû Pháön mãöm
Hay co fhô noI S ~ µfµosf(Ð, I), fu do suy ra Ð → µfµro(I, S)
dµcm

Baìi táûp :
l. Cho dIôu kIôn Ð va môf day Iônh I, nhung dIôu kIôn nao Iam fhoa man f
I
sao cho :
Ð ~ µfµro(I, µfµosf(Ð, I)) 7
IV.1.3. Sæí duûng âiãöu kiãûn træåïc yãúu nháút vaì âiãöu kiãûn sau maûnh nháút âãø
chæïng minh tênh âuïng âàõn cuía chæång trçnh
a) Træåìng håüp âiãöu kiãûn træåïc yãúu nháút
Sau khI dInh nghïa ham µfµro, voI moI dIôu kIôn Ð va S, va moI day Iônh I, fa
co :
( Ð {Il S ∧ form
Ð
I ) ~ ( Ð → µfµro(I, S) )
dac bIôf :
form
Ð
I ~ ( Ð → µfµro(I, fruo) )
ÐIôu nay co nghïa rang faµ hoµ cac gIa frI cua µfµro(I, fruo) Ia mIôn xac dInh
cua ham f
I
(nghïa Ia faµ hoµ cac gIa frI sao cho chuong frInh I dua ra môf kôf
qua).
Kha nang bIôu dIôn µfµro(I, S), ∀ I va ∀ S, cho µhoµ chung mInh finh dung
dan (CMTÐÐ) foan cuc cua chuong frInh.
Môf hô fhông CMTÐÐ foan cuc su dung dIôu kIôn fruoc yôu nhaf bao gôm :
(a) VoI môI Iônh so caµ, cac fIôn dô cho dIôu kIôn fruoc yôu nhaf ung voI môf
dIôu kIôn sau da cho. ÐôI voI µhoµ gan, cac fIôn dô da cho o muc I noI chung
so fhay fhô vaI fro nay.
(b) Cac quy fac suy dIôn cho µhoµ xay dung dIôu kIôn fruoc yôu nhaf cua môf
Iônh không so caµ I, xuaf µhaf fu cac dIôu kIôn fruoc yôu nhaf cu a cac Iônh
frong I.
V VI I d du u 1 16 6 : :
GIa su can xac dInh : pfpre(if B then P else Q, S)
Nôu Ð cho môf kôf qua, fa co :
pfpre(if B then P else Q, S)
~ (B ∧ pfpre(P, S) ∨ (¬B ∧ pfpre(Q, S))
Nhung vIôc finh Ð dô cho môf kôf qua nôu va chí nôu pfpre(if B then ,
true) Ia dung.
Nhu vay frong fruong hoµ fông quaf :

Error! Reference source not found. 85
pfpre(if B then P else Q, S)
~if pfpre(if B then , true)
then (B ∧ pfpre(P, S) ∨ (¬B ∧ pfpre(Q, S)) else false
Không co quy fac don gIan cho vong Iaµ vhIIo.
Ðô µhuc faµ cua cac quy fac dua ra dô xac dInh dkf cua môf vong Iaµ vhIIo co
fhô duoc mInh hoa nhu sau :
− Van dô dung cua vong Iaµ vhIIo fruu fuong không Ia quyôf dInh duoc.
VI vay, dIôu kIôn
pfpre(while B do P, true)
không finh duoc cho moI Ð, moI I.
− VIôc gIaI quyôf môf sô baI foan nôI fIông dua vô vIôc chung mInh môf chuong frInh
Ia dung. Vi du, nguoI fa không bIôf nôu :
pfpre(while n<>1 do
n:=if not odd(n) then n div 2 else 3*n+1, true)~(n >= 1)
Ðay Ia su gIa dInh (conjocfuro) cua CoIIafz.
Chu y : Cac fIôn dô va cac quy fac suy dIôn xof o muc I cho µhoµ chung mInh finh
dung dan cua cac µhaf bIôu Ð {Il S, frong do Ð ≠ µfµro(I, S). Vi du, fa da
chung mInh finh dung dan fung µhan rang :
(a ≥ 0) {ÐIvl (a = bq + r) ∧ (q ≥ 0) ∧ (0 ≤ r < b)
b) Træåìng håüp âiãöu kiãûn sau maûnh nháút
Thoo dInh nghïa cua µfµosf, fa co : Ð {Il S ~ (µfµosf(Ð, I) → S)
Nhu vay, môf hô fhông chung mInh finh dung dan dua frôn vIôc finh foan cac
dIôu kIôn sau manh nhaf cho µhoµ chung mInh finh dung dan tæìng pháön.
ÐôI voI Iônh dIôu kIôn, quy fac suy dIôn duoc cho boI finh chaf :
pfpost(E, if B then P else Q)
~ pfpost(E ∧ B, P) ∧ pfpost(E ∧ ¬B,Q)
voI gIa frI rang Ð Iuôn Iuôn cho môf kôf qua.
Trong fruong hoµ fông quaf :
pfpost(E, if B then P else Q)
~ pfpost(E ∧ (if pfpre(if B then, true) then B else false), P)
∨ pfpost(E ∧ (if pfpre(if B then, true) then ¬B else
false), Q)

TS. PHAN HUY KHANH biãn soaûn 85
86 Cäng nghãû Pháön mãöm
IV.2. Caïc tiãn âãö gaïn
IV.2.1. Âiãöu kiãûn træåïc yãúu nháút vaì âiãöu kiãûn sau maûnh nháút cuía lãûnh gaïn
ÐIôu kIôn fruoc Ð duoc finh foan fhoo quy fac da frInh bay o muc I dô fao ra
cac fIôn dô gan Ia dIôu kIôn fruoc yôu nhaf cua môf Iônh gan x := <bf> va cua môf
dIôu kIôn sau S, khI daI Iuong form
Ð
(x := <bf>) co gIa frI fruo. Trong fruong hoµ
nay, fIôn dô duoc ky hIôu boI :
µfµro(x := <bIôu fhuc>, S) { x := <bf> l S
Trong fruong hoµ fông quaf, fa co :
µfµro(x := <bf>, S) ~ If µfµro(x := <bf>, fruo) fhon S(x ⁄ <bf>) oIso faIso.
ÐIôu kIôn µfµro(x := <bf>, fruo) fhô hIôn :
− x va cac foan hang cua <bf> duoc dInh nghïa :
chí sô cua mang nam gIua can duoI va can frôn, cac con fro chí dôn cac bIôn
khac nII, v.v...,
− moI µhoµ foan fhuc fhI dôu cho kôf qua :
co su fuong fhich vô kIôu cua cac foan hang, không co µhoµ chIa cho 0, v.v...
O day fa không fhay su vI µham vô finh hoµ fhuc cua cac fIôn dô da nôu frong
muc I vô finh dung dan fung µhan : nôu form
Ð
(x := <bf>) co gIa frI faIso, µhaf bIôu
Ð { x := <bf> l S Ia fruo. NguoI fa co fhô cung cô dIôu kIôn fruoc cua cac fIôn dô nay
boI cac dIôu kIôn do µfµro(x := <bf>, fruo) dua dôn.
Vi du, nôu m va n Ian Iuof Ia can duoI va can frôn cua mang a, fhay vI :
(y > 0) { x := a|j| l (y > 0) va
(a|j| = y) { x := a|j| l (x = y)
Ta co fhô vIôf : (m ≤ j ≤ n) ∧ (y > 0) { x := a|j| l (y > 0)
If (m ≤ j ≤ n) fhon (a|j| = y) oIso faIso { x := a|j| l (x = y)
Thoo mônh dô III.l.l, nôu Ð (x := <bf>) S Ia môf fIôn dô, S không nhaf fhIôf Ia
dIôu kIôn sau manh nhaf ung voI Ð. Nhu vay cac fIôn dô gan noI chung không fhô
ky hIôu :
Ð (x := <bf>) µfµosf(Ð, x := <bf>)
Chang han fa co fIôn dô : (
l

x
≥ 0) { x := l ⁄ x l (x ≥ 0)
Ta co : (
l

x
≥ 0) ~ (x > 0), nhung µfµosf(x > 0, x := l ⁄ x) ~ (x > 0)
Ðay gIo fa so xof cac quy fac xay dung cac fIôn dô fu dIôu kIôn fruoc vô dIôu
kIôn sau. Cac fIôn dô nay so Iuôn Iuôn duoc ky hIôu boI :
Ð (x := <bf>) µfµosf(Ð, x := <bf>)
nhung không fhô ky hIôu boI : µfµro(x := <bf>, S) { x := <bf> l S

Error! Reference source not found. 87
IV.2.2. Quy tàõc tênh toaïn âiãöu kiãûn sau maûnh nháút cuía mäüt pheïp gaïn
VoI Iônh gan x := <bf>, chí co bIôn x bI fhay dôI. Nhu vay, f
x := <bf>
Ia môf ham fu
faµ hoµ W cac gIa frI cua cac bIôn cua chuong frInh vao chinh no, daf dông nhaf
cac fhanh µhan, fru bIôn x.
Ta ky hIôu π
x
f
x := <bf>
Ia µhoµ chIôu cua f
x := <bf>
vao fhanh µhan nay.
Vi du, voI Iônh q := q+l cua chuong frInh ÐIv o muc I, fa co :
f
q := q+l
(a, b, q, r) = (a, b, q+l, r) va π
q
f
q := q+l
(a, b, q, r) = q+l
Tuong fu, quy fac dIôu kIôn fruoc vô fIôn dô gan da cho o muc I co fhô vIôf :
Ð ~ S(x ⁄ π
x
f
x := <bf>
)
Ðay gIo fa so dInh nghïa haI quy fac finh foan dIôu kIôn sau manh nhaf cua
môf Iônh gan.
a) Træåìng håüp âàûc biãût
Nôu ham fhu hoµ f
x := <bf>
vao W
Ð
Ia foan cuc va don anh, so fôn faI ham nguoc
f
−l
x := <bf>
Trong fruong hoµ nay, co fhô su dung quy fac sau day dô finh µfµosf :
µfµosf(Ð, x := <bf>) ~ Ð(x ⁄ π
x
f
−l
x := <bf>
)
nghïa Il fa nhan duoc dIôu kIôn sau manh nhaf cua môf dIôu kIôn fruoc Ð va môf
µhoµ gan x := <bf> boI vIôc fhay fhô nhung noI x xuaf hIôn frong dIôu kIôn Ð boI
ham nguoc cua f
x := <bf>
.
Tu quy fac finh µfµosf, fa co fIôn dô gan fu dIôu kIôn fruoc va dIôu kIôn sau
nhu sau :
Ð { x := <bf> l Ð(x ⁄ π
x
f
−l
x := <bf>
)
Su fôn faI ham nguoc cua f
−l
x := <bf>
cho µhoµ fIm duoc gIa frI cua x fruoc khI
fhuc hIôn µhoµ gan, fu cac gIa frI cac bIôn sau khI gan.
Chu y : µfµosf(q ≥ 0, q := q+l) ~ (q−l ≥ 0)
µfµosf(q ≥ 0, q := q∗2) ~ (
q

2
≥ 0)
µfµosf(q = 0, q := q+a) ~ (q−a = 0)
Ta nhan duoc cac fIôn dô sau day :
(q ≥ 0) { q := q+l l (q−l ≥ 0)
(q ≥ 0) { q := q∗2 l (
x

2
≥ 0)
(q = 0) { q := q+a l (q−a = 0)
Quy fac frôn không dung duoc cho cac µhoµ gan nhu q := 0, hoac q := q dIv 2.
TS. PHAN HUY KHANH biãn soaûn 87
88 Cäng nghãû Pháön mãöm
Ta co fhô dung quy fac dô chung mInh chuong frInh fhoo chIôu baf dau − kôf
fhuc.
Vi du, dô chung mInh (x > 0) { x := x∗2 l (x > 0) :
• Xof quy fac fu dIôu kIôn sau vô dIôu kIôn fruoc :
(2x > 0) { x := x∗2 l (x > 0)
Su dung quy fac dIôu kIôn fruoc, fa nhan duoc kôf qua vI :
(2x > 0) → (x > 0)
• Xof quy fac fu dIôu kIôn fruoc vô dIôu kIôn sau :
(x > 0) { x := x∗2 l (
x

2
> 0)
Su dung quy fac dIôu kIôn sau, fa nhan duoc kôf qua vI : (
x

2
> 0) → (x > 0)
CBu y : Cac fIôn dô gan da dua ra frong cac vi du frôn co fhô nhan duoc fu dIôu
kIôn sau boI fIôn dô gan o muc I. Trong cac vi du nay, ham f
x := <bf>
: W →
W Ia don anh.
Vi du sau day chí ra rang nôu ham f
x := <bf>
: W → W không Ia don anh,
nguoI fa không con co finh chaf nay.
V VI I d du u 1 1? ? : :
Ham f
x := x dIv 2
Ia foan fhô, nhung không don anh. Thu hoµ cua no vao W
x = 2y
Ia
don anh.
Aµ dung quy fac finh µfµosf, fa co fIôn dô : (x = 2y) { x := x dIv 2 l (2x = 2y)
fuong duong voI : (x = 2y) { x := x dIv 2 l (x = y)
Tuy nhIôn, xuaf µhaf fu dIôu kIôn sau (2x = 2y) va su dung fIôn dô gan o muc I,
fa co fIôn dô :
(2

x

2⎦
= 2y) { x := x dIv 2 l (2x = 2y)
fuong duong voI : (2

x

2⎦
= 2y) { x := x dIv 2 l (x = y)
b) Træåìng håüp täøng quaït
Nôu không fôn faI ham nguoc cua f
x := <bf>
, so không fhô fIm duoc gIa frI ban
dau cua x, xuaf µhaf fu gIa frI cac bIôn sau khI fhuc hIôn µhoµ gan.


Error! Reference source not found. 89
V. Baìi táûp
Baìi 1 : Su dung cac quy fac frôn day, chung mInh cac finh chaf sau :
l. Nôu Ð {Il S va Ð’ {Il S’ Ia cac dInh Iy, fhI Ð ∧ Ð’ {Il S ∧ S’ va Ð ∨ Ð’ {Il S ∨ S’
cung Ia cac dInh Iy.
2. Nôu Ð {Il I va G {Ql S Ia cac dInh Iy va nôu I → G, fhI Ð {I ; Ql S Ia môf dInh
Iy.
3. Su dung quy fac “;”, chung mInh rang : (y = 2) { x := y+l ; z :=x+y l (z = 5)
4. Su dung quy fac dIôu kIôn fruoc, chung mInh rang : (q ≥ 0) { q := q + l l (q ≥ 0)
5. Ihoµ fhô su dung frong quy fac frôn day co fhô duoc vIôf Ð = S (x ⁄ <bf>). Trong
dIôu kIôn dac bIôf cua môf bIôu fhuc dIôu kIôn fruoc, µhoµ fhô nay duoc dInh
nghïa boI :
S (x ⁄ If a fhon o
l
oIso o
2
) (a ∧ S (x ⁄ o =
dn
l
)) ∨ (¬a ∧ S (x ⁄ o
2
))
Su dung quy fac frôn day dô chung mInh :
(z ≥ 0) { z := If b > 0 fhon z + b oIso z − b l (z ≥ 0)
Baìi 2 : Chung mInh ÐIv dung :
Ðang cach su dung ham m’(v) =
A
B






− q, frong do
A
B






Ia µhan nguyôn cua µhoµ
chIa
A
B
.
Chung mInh sau khI ra khoI vong Iaµ, m’(v) = 0.
Baìi 3 : Tu chuong frInh I frong muc II.2.l, hay :
l. Chung mInh hInh fhuc chuong frInh I.
2. Cho bIôf sô Ian fôI da fhuc hIôn vong Iaµ cua I.
3. Su dung chuong frInh ÐIv cua muc fruoc dô suy dIôn fu I môf chuong frInh
finh !SCIN cua haI sô nguyôn duong A va Ð boI vIôc finh sô du IIôn fIôµ.
Baìi 4 : Tu chuong frInh (I
bIs
) frong muc II.2.2, hay :
l. Chung mInh rang chuong frInh (I
bIs
) fhoa man cac rang buôc cua baI foan.
2. Chung mInh rang chuong frInh (I
bIs
) không con fhoa man nôu fhay fhô vong Iaµ
frong cung boI :
while R(r) and (w<=r) do r:=r-1;
if w<r then begin hoaïnvë(r, w); r:=r-1 end;
Chung mInh rang chuong frInh nay co fhô dan dôn finh I(0).

TS. PHAN HUY KHANH biãn soaûn 89


CH!ONG 4
Thæí nghiãûm chæång trçnh
Nhu da frInh bay frong chuong fruoc, nguoI fa fhuong su dung cac kyî thuáût
ténh (sfafIc fochnIquos) va kyî thuáût âäüng (dynamIc fochnIquos) frong qua frInh
V&V dô kIôm fra finh dung dan cua môf san µham µhan môm.
Chuong nay so frInh bay môf µhuong µhaµ fïnh Ia khaío saït (InsµocfIon) chuong
frInh, voI vaI fro nhu Ia môf µhoµ chung mInh µhI hInh fhuc va, môf µhuong µhaµ
dông Ia fhu nghIôm(fosfIng) chuong frInh.
I. Khaío saït
Khao saf (hay fhanh fra) Ia nhung cuôc hoµ nham muc dich xac mInh môf san
µham. Ihan Ion cac µhuong µhaµ san xuaf µhan môm dôu an dInh fruoc nhung
cuôc hoµ nhu vay. Tuy fhoo ban chaf cua san µham can khao saf, nguoI fa noI vô
khao saf thiãút kãú toaìn thãø (gIobaI dosIgn), khao saf thiãút kãú chi tiãút (dofaIIod
dosIgn), va khao saf ma nguôn.
Môf kIch ban mau (fyµIcaI sconarIo) cho môf khao saf ma nguôn nhu sau :
l. Can dôn 4 nguoI gôm môf chu fIch, môf nguoI Iaµ frInh, môf nguoI fhIôf kô va
môf khao saf (dôu Ia nhung chuyôn gIa vô TIn hoc, rIông khao saf µhaI co kIô n
fhuc chuyôn môn vô Iïnh vuc ung dung cua san µham).
2. Cac fhanh vIôn nhan chuong frInh nguôn va cac dac fa fruoc cuôc hoµ if ngay
dô doc va chuan bI.
3. Cuôc hoµ koo daI khoang l gIo 30 dôn khoang 2 gIo.
4. Trong qua frInh hoµ khao saf :
− NguoI Iaµ frInh doc va gIaI fhich chuong frInh cua mInh, co fhô doc fung dong
Iônh môf va fra IoI cac cau hoI duoc daf ra.
− Chuong frInh duoc µhan fich can cu frôn môf danh sach cac IôI saI (orrors)
fhông dung do khao saf cung caµ.
5. Cuôc hoµ không sua IôI fIm fhay ma chí ghI nhan qua bIôn ban ma fhôI. Chinh
nguoI Iaµ frInh so fu sua IôI sau khI hoµ xong.
6. Nôu khI khao sa f fIm fhay frong chuong frInh, nhIôu khIôm khuyôf (faIIuros),
hoac nhIôu IôI fram frong fhI µhaI fIôµ fuc khao saf Ian sau, sau khI sua IôI.
TS. PHAN HUY KHANH biãn soaûn 90
Thæí nghiãûm chæång trçnh 91
Môf sô kIch ban coI frong vIôc fIm IôI saI va khuyôn khich vIôc chay domo fruc
fIôµ ma chuong frInh (hand mado) nguôn : khao saf mang dôn cuôc hoµ cach fIôn
hanh va cac du IIôu IIôn quan dô moI nguoI fIôn hanh fhu nghIôm. NguoI fa con goI
cach fhu nghIôm nhu vay Ia walk throughs (chay suôf).
Môf sô kIch ban IaI coI frong vIôc chung mInh không hInh fhuc : khao saf dô
nghI xac mInh cac finh chaf cho µhoµ fhu nghIôm finh dung dan cua san µham.
NguoI fa noI day Ia vIôc khao saf can cu frôn vIôc xac mInh.
VIôc kIôm IaI (rovIov) khac voI khao saf vI rang vIôc kIôm IaI không doI hoI
µhaI hoµ : Sa n µham duoc gIao cho nhung nguoI không fham gIa vao vIôc Iaµ
frInh, ho co nhung khuynh huong danh gIa dôc Iaµ.
Co fhô noI µhuong µhaµ khao saf co hIôu qua dang kô : nhung sô IIôu fIm fhay
frong cac van ban ghI nhan khoang 50% saI sof duoc µhaf hIôn khI khao saf.
Nhung con sô duoI day (Iay fu faµ chi IÐÐÐ
3
nam l992 cua Ðyor M. fu baI bao
“VorIfIcafIon Ðasod InsµocfIon") cho fhay cac saI sô fIm fhay khI µhaf frIôn du an
5 µhan môm cua hang IÐM :
Dæû aïn
Khaío saït
thiãút kãú toaìn bäü
Khaío saït
thiãút kãú chi tiãút
Khaío saït maî Thæí nghiãûm
âån vë
Thæí nghiãûm
hãû thäúng
l

50 25 25
2 4 l3 49 l7 l7
3 20 27 l0 20 23
4 20 26 22 l8 36
5 l0 l8 24 24 24
Môf µhuong µhaµ khac, goI Ia phæång phaïp phoìng saûch (CIoan-room
MofhodoIogy), fhay vI fhu nghIôm (fosfIng), khuyôn khich vIôc khao saf
(InsµocfIon) bang cach xac mInh (vorIfIcafIon) frong qua frInh san xuaf µhan môm.
Su µhaf frIôn µhan Ia IIôn fIôµ Iam mIn (raffInomonf) san µham. MôI gIaI doan,
nguoI fa fIôn hanh chung mInh finh dung dan (µrouvIng) môf cach chaf cho, dông
fhoI voI cac cuôc khao saf, sao cho san µham µhan môm không chua saI sof.
VIôc fhu nghIôm chí duoc fIôn hanh khI xac mInh hau nghIôm (a µosforIorI)
nho cac µhuong µhaµ fhông kô, nham daf duoc muc dich daf ra Iuc dau. Ihuong
µhaµ µhong sach do H.MIIIs xay dung faI IÐM, da duoc aµ dung dô san xuaf cac
µhan môm co Ion.

3
IÐÐÐ, doc Ia oyo-frIµIo-oo, fôn vIôf faf cua InsfIfufo of ÐIochfrrIc and ÐngInoors.
TS. PHAN HUY KHANH biãn soaûn 91
92 Cäng nghãû Pháön mãöm
II. Caïc phæång phaïp thæí nghiãûm
Ihuong µhaµ fhu nghIôm Ia cho chay chuong frInh fu môf sô du IIôu fhu duoc
chon fruoc. Ihoµ fhu nghIôm dung cho ca haI qua frInh xac mInh va hoµ fhuc hoa
V&V, voI dIôu kIôn rang chuong frInh Ia chay duoc.
VIôc fhu nghIôm µhan bIôf :
l. Cac µhoµ chung mInh finh dung dan hay khao saf ma nguôn ma không chay
chuong frInh, voI quy frInh “vaIkfhroughs” bang cach chay domo (hand-mado).
2. Chay chuong frInh dobuggor dô fIm sua IôI.
Cac fhu nghIôm va chay dobuggor fhuong do cac nhom công fac khac nhau dam
nhIôm.
Ðô nang cao hIôu qua, nguoI fa fhuong µhan công nhu sau : nhom fhu nghIôm
Ia nhom không Iaµ frInh, con nhom chay dobuggor Ia nhom fham gIa Iaµ frInh ra
san µham. Qua frInh dobuggor gôm nhIôu gIaI doan :
l. TIm fhay IôI saI (Iocafo orror)
2. TIm cach khac µhuc IôI saI (ÐosIgn orror roµaIr)
3. Khac µhuc IôI saI (Ðrror roµaIr)
4. Thu nghIôm IaI chuong frInh (Io-foaf µrogram)
Hçnh 4.1. Quaï trçnh debugger
VoI nhung µhuong µhaµ Iaµ frInh fruyôn fhông, qua frInh V & V Ia khao saf va
fhu nghIôm chuong frInh. Thuc fô, vIôc fhu nghIôm chIôm môf µhan dang kô frong
qua frInh san xuaf µhan môm, chIôm khoang fu 30% dôn 50%, fuy fhoo ban chaf
cua du an TIn hoc.
Tlm cach
khac phuc lôi sai
Khac phuc
lôi sai
Thu êm
la
nghi
i chuong
trlnh
Tlm thây
lôi sai
II.1. Âënh nghéa vaì muûc âêch thæí nghiãûm
NguoI fa dua ra nhung dInh nghïa sau day :
· Môf thæí nghiãûm Ia cho chay (run) hay fhuc hIôn (oxocufIon) môf chuong frInh
fu nhung du IIôu duoc Iua chon dac bIôf, nham dô xac mInh kôf qua nhan duoc
sau khI chay Ia dung dan.
· Môf táûp dæî liãûu thæí Ia faµ hoµ huu han cac du IIôu frong do môI du IIôu µhuc
vu cho môf fhu nghIôm.

Thæí nghiãûm chæång trçnh 93
· MôI pheïp thæí nghiãûm chí ra hoaf dông fu vIôc fhIôf kô cac faµ du IIôu fhu, fIôn
hanh fhu nghIôm va danh gIa kôf qua dôn cac gIaI doan khac nhau frong chu ky
sông cua µhan môm.
· Ngæåìi thæí nghiãûm (hay nhoïm thæí nghiãûm) co kIôn fhuc chuyôn môn TIn hoc co
nhIôm vu fIôn hanh µhoµ fhu nghIôm.
· Môf khiãúm khuyãút (faIIuro) xay ra khI chuong frInh fhuc hIôn cho ra kôf qua
không fuong hoµ voI dac fa cua chuong frInh.
· Môf IôI saI (orror) Ia môf µhan chuong frInh (Iônh) da gay ra khIôm khuyôf.
NguoI fhu nghIôm co nhIôm vu :
l. Ta o ra faµ du IIôu fhu.
2. TrIôn khaI cac µhoµ fhu.
3. Iaµ bao cao vô kôf qua fhu nghIôm va Iuu gIu.
Muc dich fhu nghIôm Ia dô :
1. CBung m¡nB rñng cBuong trinB lu dung dñn
Ðô khang dInh finh dung dan cua chuong frInh, can fIôn hanh cac fhu nghIôm
foan bô (oxhausfIvo fosfIng), doI hoI faµ du IIôu fhu µhaI huu han va co kich fhuoc
vua µhaI sao cho du suc fhuyôf µhuc. ÐIôu nay frôn fhuc fô raf kho fhuc hIôn.
Sau day Ia môf fIôu chuan nôI fIông cua ÐIjksfra : “Cac fhu nghIôm cho µhoµ
chung mInh môf chuong frInh Ia không dung, bang cach chí ra môf µhan vi du, fuy
nhIôn, không bao gIo co fhô chu ng mInh duoc chuong frInh do Ia dung dan“.
2. Gûy ru nBung kB¡ém kBuyét cuu cBuong trinB
Myors G. J. frong baI bao “Tho Arf of Soffvaro TosfIng“, WIIoy l979, da dInh
nghïa fhu nghIôm nhu sau :
“Ihoµ fhu nghIôm Ia cho chay chuong frInh nham fIm ra nhung saI sof”.
Tu do, fhuong nguoI fa noI vô “fhu nghIôm µha huy“ (dosfrucfIvo fosfIngs). Muc
dich cua nhung µhoµ fhu nhu vay Ia faµ frung fIm ra cac IôI saI fu nhung khIôm
khuyôf do nguoI Iaµ frInh µham µhaI. NguoI fhu nghIôm fIôn hanh voI muc dich
nghIch (nogafIvo) : µhoµ fhu Ia fhanh công nôu fIm ra duoc khIôm khuyôf, Ia fhaf
baI frong fruong hoµ nguoc IaI. VIôc fhu nghIôm kIôu nay fhuong duoc aµ dung
frong qua frInh vIôf chuong frInh.
3. Ouu ru dunB g¡u t¡nB (sfafIc ovaIuafIon - sfafIc bonchmark)
vé cBût luong cuu cBuong trinB.
NguoI fa su dung µhuong µhaµ “fhu nghIôm fïnh“ (sfafIc fosfIng) cho muc dich
nay. Trong µhuong µhaµ µhong frang, nguoI fa chí fIôn hanh nhung µhoµ fhu fïnh,
TS. PHAN HUY KHANH biãn soaûn 93
94 Cäng nghãû Pháön mãöm
nham muc dich vua dam bao công vIôc cua nguoI Iaµ frInh vua danh gIa su fIn cay
cua san µham van hanh.
II.2. Thæí nghiãûm trong chu kyì säúng cuía pháön mãöm
NguoI fa µhan bIôf nhIôu µhuong µhaµ fhu nghIôm, fuong ung voI cac gIaI doan
san xuaf µhan môm khac nhau.
Thu nghIôm fich hoµ
Thu êm Thu nghiêm
trên xuông
nghi
“big bang”
Thu
nghiêm
Thu
nghiêm
Thu
nghiêm
Thu nghiêm
hê thông
Hçnh 4.2. Nhiãöu phæång phaïp thæí nghiãûm
II.2.1. Thæí nghiãûm âån thãø
Thu nghIôm don fhô (ModuIo fosfIng), hay fhu nghIôm don vI (!nIf fosfIng) do
nguoI Iaµ frInh fu fIôn hanh. Ihuong µhaµ nay hay duoc su dung frong Iaµ frInh
cau fruc (foµ-dovn µrogramIng). Cac µhuong µhaµ fhu nghIôm khac do nguoI fhu
nghIôm fIôn hanh.
GIa su goI M Ia môf don fhô can fhu nghIôm rIông bIôf. KhI do, xay ra haI
fruong hoµ nhu sau :
Truong Bop 1 : nhung don fhô do M goI foI không co maf Iuc fhu nghIôm.
KhI do, nhung don fhô do M goI foI vang maf µhaI duoc fhay fhô boI cac chuong
frInh cung môf gIao dIôn voI M. Cac chuong frInh nay fhuc hIôn dung chuc nang
ma chung daI dIôn cho don fhô vang maf va chung duoc goI Ia cac frInh sfubs
(“cuông“).
Hçnh 4.3. Caïc âån thãø vàõng màû t âæåüc thay båíi caïc trçnh stubs
Vi du, nôu don fhô dang duoc fhu nghIôm goI môf fhu fuc saµ xôµ o dau :
Procedure Sort (T: Array ; n: Integer);
nguoI fa co fhô su dung frInh Sfub :
Procedure Sort (T: Array ; n: Integer) ;
Writeln (‘Daîy cáön sàõp xãúp laì : ‘) ;
for i:= 1 to n do writeln (T[i]) ;
Ðon thê M

Thæí nghiãûm chæång trçnh 95
for i:= 1 to n do readln (T [i]) ;
TIôµ fhoo, nguoI fhu nghIôm so fIôn hanh saµ xôµ day da nhaµ bang fay dô
fhay fhô cho fhu fuc saµ xôµ vang maf.
Truong Bop 2 : nhung don fhô goI foI M không co maf Iuc fhu nghIôm.
KhI do, don fhô goI foI M nhung vang maf µhaI duoc fhay fhô boI môf chuong
frInh, duoc goI Ia frInh drIvor. TrInh drIvor goI M dô M fhuc hIôn frôn cac du IIôu
fhuôc faµ du IIôu fhu, sau do ghI nhan cac kôf qua finh duoc boI M dô so sanh voI
cac kôf qua cho doI.
Hçnh 4.4. Duìng trçnh driver âãø goüi thæûc hiãûn M
Sô Iuong cac frInh sfubs va cac frInh drIvors can fhIôf dô fIôn hanh fhu nghIô m
cac don fhô µhu fhuôc vao fhu fu cac don fhô duoc fhu nghIôm.
Ðon thê M
II.2.2. Thæí nghiãûm têch håüp
Thu nghIôm fich hoµ vua nham fao môI IIôn kôf gIua cac don fhô, vua duoc fIôn
hanh dôI voI nhung don fhô Ion hInh fhanh hô fhông chuong frInh hoan chính. Co
nhIôu µhuong µhaµ fhu nghIôm fich hoµ.
1. PBuong pBup “b¡g bung“
NguoI fa xay dung môI IIôn hô gIua cac don fhô dô fao fhanh môf µhIôn ban hô
fhông hoan chính, sau do fhu nghIôm µhIôn ban nay.
Nhu vay nguoI fa can dôn nhIôu frInh drIvors, môI frInh drIvor cho môf don
fhô, môf frInh sfubs cho faf ca cac don fhô cua hô fhông, fru don fhô chinh µhaI
duoc fhu nghIôm bang µhuong µhaµ fhu nghIôm don vI.
Ihuong µhaµ “bIg bang” nguy hIôm : faf ca cac saI sof co fhô dông fhoI xuaf
hIôn, vIô c xac dInh fung IôI saI so gaµ kho khan. Hon nua µhuong µhaµ nay doI hoI
môf Iuong fôI da cac frInh drIvors va cac frInh sfubs. VI vay fhuong nguoI fa su
dung cac µhuong µhaµ fich hoµ fu frôn xuông, hay fu duoI Iôn.
2. PBuong pBup tBu ngB¡ém tu trén xuông
(Ðoscondanf hay Toµ-dovn TosfIng Mofhod)
Ðaf dau fhu nghIôm don fhô chinh, sau do fhu nghIôm chuong frInh nhan duoc
fu su IIôn kôf gIua don fhô chinh va cac don fhô duoc goI fruc fIôµ fu don fhô
chinh, v.v...
TS. PHAN HUY KHANH biãn soaûn 95
96 Cäng nghãû Pháön mãöm
Ihuong µhaµ nay chí can dung môf frInh drIvor duy nhaf cho don fhô chinh,
nhung can môf frInh sfub cho môI don fhô con IaI.
Level 2
stubs
Level 1 Level 1
Day cac
thu nghiêm
Level 2 Level 2 Level 2 Level 2
Level 3
stubs
Hçnh 4.5. Phæång phaïp thæí nghiãûm tæì trãn xuäúng
3. PBuong pBup tBu ngB¡ém tu duo¡ lén
(Ascondanf hay Ðoffom-!µ TosfIng Mofhod)
Ðaf dau fhu nghIôm cac don fhô không goI dôn cac don fhô khac, sau do cac
chuong frInh nhan duoc boI su IIôn kôf gIua môf don fhô chí goI dôn cac don fhô da
duoc fhu nghIôm voI cac don fhô nay, v.v . . Ihuong µhaµ nay doI hoI môI don fhô
môf frInh drIvor, nhung không can frInh sfub.
Muc N1
Muc N1
Muc N Muc N Muc N
Muc N1
Muc N Muc N
Hçnh 4.6. Thæí nghiãûm tæì dæåïi lãn
Ihuong µhaµ fIôn fo ra uu dIôm hon µhuong µhaµ IuI, do cac frInh drIvorsu
dung dô vIôf hon cac frInh sfubs va co cac công cu dô fa o sInh fu dông cac frInh
drIvors. Maf khac, fhu fu fich hoµ fhuong bI rang buôc boI fhu fu co maf cua cac
don fhô.
II.2.3. Thæí nghiãûm hãû thäúng
Van dô Ia fhu nghIôm µhan môm hoan chính va µhan cung dô danh gIa hIôu
nang, dô an foan, finh fuong hoµ voI cac dac fa, v.v . . .
Nhung fhu nghIôm nay doI hoI nhIôu fhoI gIan. NguoI fa noI dôn fhu nghIôm
chaµ nhan (Accoµfanco fosfIng), Ia nhung fhu nghIôm µhu hoµ voI san µham cuôI
cung qua hoµ dông da ky voI khach hang (nhIôu khI vIôc fhu nghIôm nay do khach
hang fIôn hanh), con duoc goI Ia fhu nghIôm aIµha va cuôI cung Ia fhu nghIôm caI
daf (Sofuµ TosfIng), Ia fhu nghIôm dôI voI san µham cuôI cung, fIôn hanh faI vI fri

Thæí nghiãûm chæång trçnh 97
cua khach hang (voI cac may finh va hô dIôu hanh ho dang su dung). NguoI fa goI
cac fhu nghIôm cho µhIôn ban dau fIôn cua µhan môm do khach hang duoc Iua
chon dac bIôf fIôn hanh Ia fhu nghIôm bofa.
II.2.4. Thæí nghiãûm häöi quy
NguoI fa con goI cac fhu nghIôm fIôn hanh sau khI sua IôI Ia fhu nghIôm hôI
quy, hay fhoaI IuI (rogrosgIon fosfIng) nham dô xac mInh nôu cac saI sof khac
không duoc xu Iy khI sua chua. KIôn fhu nghIôm nay hay duoc dung frong khI bao
frI. Ðô fIôn hanh hIôu qua cac fhu nghIôm nay, can Iuu gIu IaI nhung fhu nghIôm
da Iam frong qua frInh san xuaf µhan môm, dIôu nay gIuµ cho vIôc xac mInh fu
dông cac kôf qua fhu nghIôm fhoaI IuI. Kho khan gaµ µhaI Ia frong sô nhung fhu
nghIôm da daf dan, can µhaI chon nhung fhu nghIôm nao chofhu nghIôm fhoaI IuI.
Ihuong cach nguoI fa hay Ia m Ia kôf hoµ môI Iônh cua chuong frInh voI faµ hoµ
cac fhu nghIôm Iam chay chuong frInh.
II.3. Dáùn dàõt caïc thæí nghiãûm
VIôc dan daf cac fhu nghIôm bao gôm :
- Xac dInh kich fhuoc cua faµ du IIôu fhu (van dô kôf fhuc cac TN).
- Iua chon cac du IIôu can fhu nghIôm.
- Xac dInh finh dung dan hay không dung dan cua cac kôf qua nhan duoc sau
khI fhuc hIôn chuong frInh dôI voI cac du IIôu cua faµ du IIôu fhu (Van dô IoI fIôn
frI - oracIo).
VIôc dan daf cac fhu nghIôm kom fhoo vIôc vIôf cac chuong frInh bô fro nhu Ia
cac sfubs va cac drIvors.
Van dô IoI fIôn frI
Môf µhoµ fhu nghIôm (chock µrogram)
Môf faµ hoµ huu han cac gIa frI dua vao.
Môf faµ hoµ huu ha n cac caµ (GIa frI dua vao, kôf qua fuong ung).
Trong fruong hoµ l, vIôc µhaf hIôn ra cac khIôm khuyôf µhaI duoc Iam bang
fay (by hand), fu do dan dôn môf công vIôc xom xof ky Iuong cac kôf qua maf fhI
gIo va môf moI (Iam han chô kich fhuoc cac faµ du IIôu fhu). Co haI kIôu saI sof
xay ra khI xom xof :
- Môf kôf qua saI IaI duoc xom nhu Ia dung.
- Môf kôf qua dung co fhô duoc hIôu Ia saI.
Ðô franh xac mInh bang fay, can µhaI co nhung dac fa kha fhI, hay môf µhIôn
ban khac cua chuong frInh (dIôu nay co nguy co Iam Ian fruyôn saI sof fu µhIôn
ban nay sang µhIôn ba n khac).
TS. PHAN HUY KHANH biãn soaûn 97
98 Cäng nghãû Pháön mãöm
Trong fruong hoµ fhu haI, chinh chuong frInh dang chay fu µhaf hIôn ra cac
khIôm khuyôf, van dô Ia fIm ra duoc cac gIa frI dua ra kôf qua fuong ung voI gIa
frI dua vao. ÐIôu nay co fhô Iam “ bang fay “ voI môf dac fa kha fhI, voI môf µhIôn
ban cua chuong frInh, voI cung nhung van dô da gaµ frong fruong hoµ dau. NguoI
fa cung co fhô van dung cac µhoµ fhu cu da Iuu gIu.
Chu y rang dung chuong frInh xac mInh finh dung dan cua kôf qua không Iuôn
Iuôn don gIan : nôu xay ra co nhIôu caI ra dung fuong ung voI mof caI vao fhI µhaI
daf kôf qua do chuong frInh finh ra duoI dang quy fac fruoc khI xac mInh finh
nha f quan voI kôf qua du kIôn frong faµ du IIôu fhu. ÐIôu nay không µhaI Iuôn
Iuôn Iam duoc. Chang han Iam sao co fhô xac mInh duoc rang ma sInh ra boI môf
frInh bIôn dIch Ia dung dan, nôu chí fhu nghIôm ma do ma fhôI 7
II.4. Thiãút kãú caïc pheïp thæí phaï huíy (Defect Testing)
II.4.1. Caïc phæång phaïp dæûa trãn chæång trçnh
Cac µhuong µhaµ nay con duoc goI Ia µhuong µhaµ co cau fruc (SfrucfuraI
TosfIng) hay fhu nghIôm hôµ frang (vhIfo-box hay gIass-box).
MôI chuong frInh fuong ung voI môf so dô khôI gôm cac cau fruc Iua chon va
cac cau fruc khôI Ia môf day fôI da cac Iônh fhuc hIôn (gôm cac Iônh gan, Iônh goI
chuong frInh con, cac Iônh vao-ra...) ma không co Iônh ro nhanh. NguoI fa goI cac
khäúi lãûnh Ia cac dau vao so dô khôI va cac quyãút âënh Ia cac cung dI ra fu môf cau
fruc Iua chon.
a) Phuí caïc lãûnh (caïc âènh)
Môf µhoµ fhu Ia µhu (frum) hôf cac Iônh cua môf chuong frInh nôu Iam cho môI
Iônh cua no duoc fhuc hIôn. Ðay Ia môf fIôu chuan fôI fhIôu : NguoI fa không xof
nhung fhu nghIôm ma môI Iônh cua chuong frInh không duoc fhuc hIôn if nhaf
môf Ian.
Chu y rang fIôu chuan nay không µhaI Iuôn Iuôn fhoa man bang môf chuong
frInh co fhô chua cac Iônh ma không fhô duoc fhuc hIôn.
b) Phuí caïc quyãút âënh (caïc cung)
Môf µhoµ fhu µhu cac quyôf dInh nôu frong khI fhuc hIôn, môI cung cua so dô
fô chuc cua chuong frInh duoc duyôf qua if nhaf môf Ian : nghïa Ia nôu môI µhoµ
chon duoc fhuc hIôn if nhaf môf Ian cho môI gIa frI co fhô (fhuô hay faIs o frong
fruong hoµ ghoµ ro nhanh IogIc).
Nhu vay, fIôu chuan nay không µhaI Iuôn can µhaI fhoa man.
Vi du : if A > 0 then if A ≥ 0 then . . . else . . .

Thæí nghiãûm chæång trçnh 99
c) Phuí caïc âiãöu kiãûn
Ta xof môf chuong frInh chua cau fruc ro nhanh IogIc gôm cac Iônh nof, ond va
or. Môf µhoµ fhu µhu cac dIôu kIôn nôu vIôc fhuc hIôn chuong frInh koo fhoo su
finh gIa frI cua bIôu fhuc nay cho moI gIa frI IogIc co fhô. Nhu vay môf bIôu fhuc co
haI foan hang I, Q so duoc finh foan voI :
A Ð
true true
true false
false true
false false
Ihoµ µhu cac dIôu kIôn cho µhoµ cung cô µhoµ µhu cac quyôf dInh. Vi du co fhô
µhu cac quyôf dInh bang cach fhuc hIôn µhoµ Iua chon I va Q voI :
I = true, Q = true va I = false, Q = false,
dIôu nay không cho µhoµ µhan bIôf µhoµ ro nhanh A or Ð.
d) Phuí caïc läü trçnh thæûc hiãûn chæång trçnh (path testing)
Môf µhoµ fhu µhu cac Iô frInh chay chuong frInh nôu gay ra vIôc fhuc fhI môI
Iô frInh fhuc hIôn chuong frInh. Không fôn faI µhoµ fhu nhu vay nôu chuong frInh
co vô han Iô frInh fhuc hIôn frong fruong hoµ fông quaf. Thông fhuong nguoI fa
xay dung µhoµ fhu µhu cac Iô frInh fhuc hIôn co sô Iuong ≤ môf hang da cho.
e) Xaïc âënh dæî liãûu cho pheïp phuí läü trçnh thæûc hiãûn âàûc biãût
GIa fhIôf rang voI moI Iônh I cua chuong frInh va moI quyôf dInh S, co fhô finh
µfµro (I, S), dIôu kIôn dau yôu nhaf ung voI I va S. NguoI fa co fhô voI moI Iô
frInh cua chuong frInh, finh duoc môf công fhuc Ð sao cho cac du IIôu cua chuong
frInh fhoa man Ð nôu va chí nôu vIôc fhuc hIôn cua chuong frInh dI fhoo Iô frInh
da chon.
Ðac bIôf, Ð không Ia saI nôu va chí nôu Iô frInh da chon Ia Iô frInh fhuc fhI.
Nhu vay chí can fIm ra cac du IIôu Iam fhoa man Ð dô co µhoµ fhu µhu Iô frInh da
chon. ÐIôu nay co fhô fhuc hIôn bang fa, hay chung mInh môf cach sang fao công
fhuc xÐ.
Ihuong µhaµ nay duoc du ng dô dInh nghïa µhoµ fhu µhu cac quyôf dInh cua
môf chuong frInh :
• Iua chon môf faµ hoµ cac Iô frInh µhu cac quyôf dInh.
• VoI môI Iô frInh, finh dIôu kIôn dau yôu nhaf fuong ung (hoac môf dIôu kIôn
dau manh hon).
• TIm cac du IIôu fhoa man cac dIôu kIôn dIôu nay.
TS. PHAN HUY KHANH biãn soaûn 99
100 Cäng nghãû Pháön mãöm
f) Phuí caïc luäöng dæî liãûu
VoI môI bIôn cua chuong frInh, nguoI fa goI dInh nghïa Ia môf fruong hoµ cua
bIôn do, môf gIa frI duoc gan cho bIôn (vi du : x:=1, readln(x) ...). NguoI fa goI
su dung Ia môf fruong hoµ ma gIa frI cua bIôn duoc su dung (vi du : y:= x+y dôI
voI bIôn x).
Trong cac su dung, nguoI fa µhan bIôf cac su dung frong cac Iônh không µhaI Ia
Iua chon, goI Ia C- su dung, voI C : caIcuIus, cac su dung frong cac Iônh Iua chon,
goI Ia I- su dung, voI I : IrodIcafo.
Môf µhoµ fhu Ia µhu cac C-su dung nôu voI môI bIôn x, gay ra vIôc fhuc fhI moI
Iô frInh gIua môf dInh nghïa x va môf C-su dung dau fIôn cua x.
Môf µhoµ fhu Ia µhu cac I-su dung nôu, voI môI bIôn x gay ra vIôc fhuc fhI môI
Iô frInh gIua môf dInh nghïa x, va môf gIa frI Iua chon.
II.4.2. Caïc phæång phaïp dæûa trãn âàûc taí
Nhung µhuong µhaµ nay con duoc goI Ia fhu nghIôm chuc nang (funchuong
frInhIonaI fosfIng), ha fhu nghIôm nay, nguoI fa không chu y dôn chuong frInh,
ma chí Iam vIôc voI dac fa chuc nang cua chuong frInh. NguoI fa co fhô fhIôf kô
faµ du IIôu fhu fruoc khI vIôf chuong frInh.
a) Caïc thæí nghiãûm toaìn thãø (Exhaustive Testing)
NguoI fa fhu nghIôm chuong frInh voI faf ca du IIôu co fhô vô maf Iy fhuyôf,
dIôu nay chí Iam duoc nôu faµ hoµ du IIôu fhu Ia huu han. Thuc fô, ngay ca khI
faµ hoµ du IIôu Ia huu han fhI fhoI gIan fhuc hIôn chuong frInh cho cac fhu
nghIôm foan fhô Ia qua Ion frong µhan Ion fruong hoµ.
Vê duû :
l. Tinh √

x , voI x nguyôn gIua 0 va 2
3l
VoI fhoI gIan môf fhu nghIôm Ia ls, khI do maf 2
3l
= 2l47483648 s.
Môf nam co 365 x 24 x 3600s = 3l536000s.
Vay fhoI gIan môf fhuc nghIôm foan fhô Ia ≈ 68 nam.
2. Thu nghIôm µhoµ công cac so nguyôn gIua 0 va 2
3l
ThoI gIan fhu nghIôm môf µhoµ công Ia l µs. Sô Iuong du IIôu Ia :
2
3l
x 2
3l
= 2
62
≈ 9.22 x l0
l8
ThoI gIan fhu nghIôm foan fhô Ia frôn 292 47l nam.
b) Caïc thæí nghiãûm båíi caïc låïp tæång âæång (Equivalence partioning)
Nguyôn Iy : Ihan hoach faµ hoµ du IIôu fhanh môf sô huu han Ioµ va Iua môf
µhan fu (hay môf mau µhan fu) frong môI Ioµ. NguoI fa daf frong cung môf Ioµ cac

Thæí nghiãûm chæång trçnh 101
du IIôu duoc cho Ia µhu hoµ voI chuong frInh fhoo cach dac fa. Nhung du IIôu nay
co fhô cung gay ra khIôm khuyôf frong cung fInh huông.
Chu y can fhu nghIôm cac du IIôu nam o µham vI gIaµ ranh gIua cac Ioµ fuong
duong dô µhaf hIôn cac IôI saI kIôu ≤ fhuong Ian voI <, v.v . . .
c) Thæí nghiãûm âënh hæåïng båíi cuï phaïp (Syntax Controlled Testing)
KhI du IIôu Ia faµ hoµ cac chuôI ky fu (cac ngôn ngu Iaµ frInh), chung duoc dac
fa boI cac ôfomaf huu han, hoac boI cac van µham µhI ngu canh.
Vi du, nôu µhan môm duoc fhu nghIôm co finh fuong fac qua IaI, nhu cac hô
dIôu hanh, fhI faµ hoµ day cac hanh dông co fhô duoc dInh nghïa boI môf ôfômaf
huu han.
NguoI fa co fhô dInh nghïa cac faµ du IIôu fhu µhu cac frang fhaI daf duoc, cac
cung, cac Iô frInh co dô daI bI chan, v.v . . .
KhI faµ hoµ du IIôu duoc dInh nghïa boI môf van µham vI ngu canh, nguoI fa co
fhô xay dung µhoµ fhu µhu ca c quy fac cua van µham (môI quy fac duoc aµ dung if
nhaf môf Ian dô fIôn hanh môf fhu nghIôm).
Chu y rang Iuc nay, nguoI fa chí co fhô nhan duoc du IIôu dung, vIôc nhan duoc
cac du IIôu saI boI cung µhuong µhaµ can fhIôf µhaI vIôf môf van µham san sInh ra
faµ hoµ cac du IIôu saI, dIôu nay IaI Ia môf van dô hoc bua (vI rang bu cua môf
ngôn ngu INC chua chac da Ia INC).
d) Caïc thæí nghiãûm ngáùu nhiãn (Random Testing)
Ðay Ia faµ du IIôu fhu su dung cac du IIôu Iay ngau nhIôn, fuan fhoo Iuaf xac
suaf, chang han Iuaf dông dôu, dô fIôn hanh nhung fhuong Ia kom hIôu qua.
II.4.3. Kãút luáûn
HIôn nay, nguoI fa fhuong xay dung µhoµ fhu nghIôm bang cach µhôI hoµ cac
fhu nghIôm chuc nang va fhu nghIôm cau fruc : nguoI fa baf dau fhu nghIôm chuc
nang fruoc (ngay khI dac fa yôu cau), sau do hoan fhIôn µhoµ fhu nghIôm boI cac
fIôu chuan cau fruc (bao boc cac Iônh, bao boc cac quyôf dInh...) khI co duoc chuong
frInh.
II.4.4. Caïc tiãu chuáøn kãút thuïc thæí nghiãûm
Van dô daf ra Ia khi naìo thç kãút thuïc thæí nghiãûm 7 hay cu fhô hon Ia xaïc âënh
phaûm vi thæí nghiãûm nhæ thãú naìo 7
Nôu kôf fhuc fhu nghIôm som fhI co fhô chua fIm hôf IôI frong chuong frInh.
Con nôu kôf fhuc muôn qua fhI IaI nang cao gIa fhanh san µham. Sau day Ia môf
sô fIôu chuan :
TS. PHAN HUY KHANH biãn soaûn 101
102 Cäng nghãû Pháön mãöm
1. Dæìng khi khäng coìn gáy ra âæåüc khiãúm khuyãút.
Thuong fhI môf chuong frInh Ion bao gIo cung co IôI, fIôu chuan nay fo ra µhI
fhuc fô, hon nua mau fhuan voI muc dich cua cac fhu nghIôm µha huy.
2. Dæìng khi thåìi gian (hay kinh phê) gia haûn cho thæí nghiãûm âaî hãút.
Ðô fIôu chuan nay co hIôu Iuc fhI µhaI dInh Iuong duoc faµ hoµ cac du IIôu fhu
fruoc khI fIôn hanh fhu nghIôm.
3. Càn cæï vaìo kinh nghiãûm cuía caïc dæû aïn tæång tæû âaî hoaìn táút.
Môf µhoµ fhu nghIôm bao boc cac quyôf dInh (hay 80% cua cac cung) không gay
ra khIôm khuyôf. Van dô : Iua chon fuy fIôn cua fIôu chuan.
4. Thæí nghiãûm chæìng 70 sai soït khäng âæåüc phaït hiãû n hay sau mäüt thåìi haûn 3
thaïng khäng xaíy ra.
Van dô : !oc Iuong sô Iuong saI sof frong chuong frInh, uoc Iuong fy Iô % cac
saI sof duoc µhaf hIôn boI fhu nghIôm, uoc Iuong fy Iô % saI sof µham µhaI frong
cac gIaI doan µhaf frIôn µhan môm va faI gIaI doan fhu nghIôm ma nhung saI sof
nay duoc µhaf hIôn.
5. Thæí nghiãûm âãún khi säú læåüng sai soït tçm tháúy khäng coìn giaím theo mäüt caïch coï
yï nghéa næîa.
Van dô : Iam sao uoc Iuong duoc sô saI sof da gIam fhoo cach co y nghïa 7
6. Phæång phaïp caïc âäüt biãún (Mutant method)
NguoI fa fhay dôI chuong frInh bang cach dua vao cac IôI. Cac chuong frInh bI
fhay dô I duoc goI Ia cac “dôf bIôn”. Môf µhoµ fhu Ia “fôf” nôu dIôf duoc l00% (95%,
v.v . . .) cac “dôf bIôn” do.
Van dô : Cac saI sof dua vao co µhaI Ia nhung saI sof fhuc fIôn (co fhuc)7
II.5. Caïc pheïp thæí nghiãûm thäúng kã
¡¡.5.1. Mo Jûu
Cac µhoµ fhu nghIôm fhông kô (SfafIsfIcaI TosfIng) nham dô do dô fIn cay
(roIIabIIIfy) cua µhan môm, nghïa Ia do xac suaf chay ôn dInh va dung dan frong
nhung dIôu kIôn su dung cho fruoc. Cac fhu nghIôm µha huy không cho µhoµ danh
gIa duoc finh fIn cay cua môf chuong frInh vI rang cac fhu nghIôm µha huy không
finh dôn cac dIôu kIôn su dung nhu µhuong µhaµ nay.
NguoI fa goI khiãúm khuyãút (faIIuro) Ia nhung hIôn fuong baf fhuong xay ra Iam
hô fhông dang fhuc fhI dan dôn nhung hIôu qua không µhu hoµ voI dac fa ban
dau. Môf khIôm khuyôf co fhô xay ra do µhan cung hoac do môf saI sof frong
chuong frInh. Sau da y, nguoI fa chí quan fam dôn nhung khIôm khuyôf do IôI
µhan môm gay nôn.

Thæí nghiãûm chæång trçnh 103
Trong nhung dIôu kIôn su dung da cho, su xuaf hIôn fhuong xuyôn cac khIôm
khuyôf do cac saI sof khac nhau gay ra Ia raf bIôn dông : môf sô saI sof gay ra
fhuong xuyôn cac khIôm khuyôf, nhung saI sof khac fhI raf hIôm, co fhô không bao
gIo xay ra frôn fhuc fô.
VIôc fhuc fhI môf µhan môm voI môf du IIôu cô dInh fruoc Ia môf qua frInh co
finh xac dInh gay ra hoac Ia môf kôf qua dung, hoac Ia môf khIôm khuyôf. Nôu
nguoI fa o frong nhung dIôu kIôn su dung chuong frInh, môI du IIôu co fhô duoc
cua chuong frInh so cho môf xac suaf nao do.
Taµ hoµ cac du IIôu cu ng xac suaf su dung nhu vay duoc goI Ia môf mau su
dung (uso µafforn) cua chuong frInh. Tu môf maf caf su dung da cho, nguoI fa
dInh nghïa xac suaf môf Ian chay cho môf kôf qua dung va xac suaf môf khIôm
khuyôf, con duoc goI Ia fy suaf khIôm khuyôf.
VoI môf mô hInh dôc Iaµ voI fhoI gIan, nguoI fa dInh nghïa dô fIn cay
(roIIabIIIfy) cua môf chuong frInh nhu Ia xac suaf cua su kIôn “ Ian chay sau cua
chuong frInh Ia dung “, nghïa Ia l,xac suaf cua môf khIôm khuyôf.
VoI môf mô hInh µhu fhuôc fhoI gIan, nguoI fa dInh nghïa dô fIn cay nhu Ia
môf xac suaf cua su kIôn “chuong frInh chay dung dan frong fho I gIan f”. Iuc nay
dô fIn cay Ia môf ham cua fhoI gIan.
Cac mô hInh µhu fhuôc vao fhoI gIan fhuong duoc su dung cho cac µhan môm
fuong hô (nhu Ia cac hô dIôu hanh). TIôµ fhoo day, nguoI fa so chí khaI frIôn cac
mô hInh dôc Iaµ voI fhoI gIan.
KhI xuaf hIôn môf khIôm khuyôf, nôu Ia môf khIôm khuyôf vô µhan cung, fhI
µhaI sua chua, nôu Ia môf khIôm khuyôf vô µhan môm fhI µhaI chay frInh sua IôI
dobuggor.
Sua chua cac hu hong fhuôc vô µhan cung Ia dô fhay fhô nhung chI fIôf hu
hong, fhIôf Iaµ IaI su van hanh ôn dInh cua fhIôf bI nhu fruoc. Con chay frInh
dobuggor Ia dô sua cac IôI vô fhIôf kô, fang dô fIn cay cua µhan môm.
Thuong nguoI fa su dung daI Iuong IIôn quan dôn dô fIn cay Ia sô Ian su dung
frung bInh cho dôn khI xay ra khIôm khuyôf (dôI voI mô hInh dôc Iaµ voI fhoI
gIan), hoac su dung sau môf fhoI gIan frung bInh nao do dôn khI xay ra khIôm
khuyôf (dôI voI mô hInh µhu fhuôc vao fhoI gIan).
ÐaI Iuong IIôn quan dôn dô fIn cay MTTI (Moan TImo To IaIIuro : fhoI gIan
frung bInh dô xay ra khIôm khuyôf) duoc finh nhu sau :
Trong mô hInh dôc Iaµ voI fhoI gIan :
Ðô ôn dInh = xac suaf môf Ian chay dung.
= l - xac suaf môf khIôm khuyôf.
TS. PHAN HUY KHANH biãn soaûn 103
104 Cäng nghãû Pháön mãöm
MTTI = sô Ian su dung frung bInh cho dôn khI xay ra
khIôm khuyôf.
= l / xac suaf môf khIôm khuyôf.
= l/ (l - Ðô ôn dInh).
Tyí suáút khiãúm khuyãút Ia nghIch dao cua MTTI.
II.5.2. Æåïc læåüng âäü äøn âënh cuía mäüt pháön mãöm
Ðô uoc Iuong dô ôn dInh hay kha nang van hanh fhông suôf (roIIabIIIfy) cua
môf µhan môm, nguoI fa can cu vao kôf qua cua cac µhoµ fhu nghIôm fhông kô,
nghïa Ia cac fhu nghIôm ngau nhIôn fhuy fhoo mau su dung da chon.
a) Phæång phaïp træûc tiãúp
GIa fhIôf rang frong khI fIôn hanh n µhoµ fhu, nguoI fa gaµ d khIôm khuyôf.
Ta co fhô uoc Iuong dô ôn dInh cua µhan môm dang xof boI bIôu fhuc :
l − d / n
Ihuong µhaµ nay chí co fhô dua ra môf uoc Iuong fôf vô dô ôn dInh nôu sô cac
khIôm khuyôf d Ia co nghïa (chang han dô fIn cay Ia l nôu khI fhu nghIôm không
xay ra khIôm khuyôf nao, dIôu nay không co nghïa).
Hon nua, nôu sau khI fhu nghIôm, ma chay frInh dobuggor, fhI chuong frInh so
bI fhay dôI va vIôc uoc Iuong so chí con hoµ fhuc môf cach co dIôu kIôn khI gIa
fhIôf vô chaf Iuong cua qua frInh dobuggor.
b) Phæång phaïp thæí nghiãûm giaí thuyãút (Hypothesis Testing)
Van dô Ia xay dung môf faµ hoµ cac µhoµ fhu nghIôm ma kôf qua duoc an dInh
fruoc cho µhoµ khang dInh hay bac bo dô ôn dInh cua µhan môm dang xof co môf
gIa frI I voI môf dô fIn cay x%. I va x fhoa man :
0 < I < l va 0 < x < l00
Cac fham sô I va x cung nhu quy cach vô kôf qua duoc cô dInh fruoc. NguoI fa
noI chuong frInh Ia duoc kIôm nghIôm nôu co dô ôn dInh I.
Cho c = x/l00, fa co :
l − c = xac suaf cho môf san µham co dô ôn dInh fhaµ hon dô ôn dInh I.




CH!ONG 5
Âàûc taí pháön mãöm
I. Måí âáöu âàûc taí pháön mãöm
I.1. Khaïi niãûm vãö âàûc taí pháön mãöm
I.1.1. Âàûc taí pháön mãöm laì gç ?
Ðac fa (sµocIfIcafIon) duoc dInh nghïa frong fu dIôn fIông VIôf (l997) : “Mä taí
tháût chi tiãút mäüt bäü pháûn âàûc biãût tiãu biãøu âãø laìm näøi báût baín cháút cuía toaìn thãø”.
Thoo Comµufor ÐIcfIonary cua MIcrosoff Iross
®
(l994), dac fa Ia sæû mä taí chi
tiãút : Vãö màût pháön cæïng, âàûc taí cung cáúp thäng tin vãö caïc thaình pháön, khaí nàng vaì
yãúu täú kyî thuáût cuía maïy tênh. Vãö màût pháön mãöm, âàûc taí mä taí mäi træåìng hoaût
âäüng vaì chæïc nàng cuía chæång trçnh.
Thoo IÐM ÐIcfIonary of ComµufIng (l994), dac fa Ia (l) mäüt daûng thæïc vàn baín
chi tiãút cung cáúp caïc mä taí xaïc âënh vãö mäüt hãû thäúng nhàòm âãø phaït triãøn hay håüp
thæïc hoaï. (2) Trong Iïnh vuc µhaf frIôn hô fhông, dac fa Ia mä taí caïch thiãút kãú, caïch
bäú trê thiãút bë vaì caïch xáy dæûng chæång trçnh cho hãû thäúng.
Nhu vay, dac fa Ia su mô fa cac da c frung nham dIôn daf cac yôu cau va cac
chuc nang cua môf san µham µhan môm can fhIôf kô. Ðac fa IIôn quan dôn cac dôI
fuong, cac khaI nIôm va cac fhu fuc nao do can dôn khI µhaf frIôn chuong frInh.
Ðac fa co cac dac frung :
• Tinh chinh xac (Corrocfnoss)
• Tinh fruu fuong (AbsfracfIon)
• Tinh chaf cho vô maf Toan hoc (IIgorousnoss)
I.1.2. Caïc phæång phaïp âàûc taí
NguoI fa fhuong su dung 3 µhuong µhaµ dac fa : dac fa µhI (không) hInh fhuc,
dac fa hInh fhuc va dac fa hôn hoµ.
Ðdc lu phi hình lhuc (InformaI sµocIfIcafIon) duoc dIôn daf bang ngôn ngu fu
nhIôn va foan hoc. Tuy µhuong µhaµ dac fa nay không chaf cho nhung dô hIôu va
dô dIôn daf. Ta fhuong su dung khI can µhaf bIôu cac baI foan, cac yôu cau ban
dau.
TS. PHAN HUY KHANH biãn soaûn 105
106 Cäng nghãû Pháön mãöm
V VI I d du u 1 1 : :
l. TIm nghIôm cua µhuong frInh f(x) = 0 voI f(x) Ia môf da fhuc co bac cho fruoc
sao cho voI gIa frI fhuc x fhI f(x) co gIa frI bang 0.
2. ÐIôn dôI mo môf ma fran vuông A caµ n × n vô dang fam gIac frôn, nghïa Ia
ma fran A co cac µhan fu nam µhia frôn duong choo chinh fhI bang 0.
Ðdc lu hình lhuc (formaI sµocIfIcafIon) duoc dIôn daf bang ngôn ngu daI sô va
IogIc foan, raf chaf cho, chinh xac va không nhaµ nhang (non-ambIguous).
V VI I d du u 2 2
l. TIm nghIôm cua µhuong frInh f(x) = 0 voI f(x) Ia môf da fhuc co bac cho fruoc
sao cho voI gIa frI fhuc x fhI f(x) co gIa frI bang 0.
2. ÐIôn dôI mo môf ma fran vuông A caµ n × n vô dang fam gIac frôn, nghïa Ia
ma fran A co cac µhan fu nam µhia frôn duong choo chinh fhI bang 0.
Cac finh chaf cua dac fa hInh fhuc
• dac fa mô fa nhung caI µhaI Iam nhung không µhaI mô fa Iam nhu fhô
nao.
• Iaµ frInh fhô hIôn fuong mInh vIôc Iua chon cach khaI frIôn : nghIôn cuu
fhuaf gIaI, cach vIôf công fhuc...
• Ðac fa cho µhoµ dIôn fa day du môf van dô, gIam fôI fhIôu finh µhuc faµ
cua hô fhông dang xof.
• Ðac fa µhaI cho µhoµ kIôm fra duoc qua frInh µhaf frIôn µhan môm (chaf
Iuong va finh fIn cay)
Ðac fa hInh fhuc IIôn quan dôn :
- Cau fruc du IIôu va cac ham (kIôu du IIôu)
- ThoI gIan
- Thao fac
- Ðon fhô hay dôI fuong.
Tinh daI sô can cu frôn vIôc dInh nghïa cac kIôu du IIôu, finh hIôu qua daI sô
duoc xac dInh boI cac công cu foan hoc, daI sô va IogIc.
Ðdc lu hón hop (MIxIng SµocIfIcafIon) µhôI hoµ gIua haI µhuong µhaµ : hInh
fhuc va µhI hInh fhuc. Thuong mô fa µhI hInh fhuc nham Iam gIaI fhich ro hon, dô
hIôu hon môf khI mô fa hInh fhuc qua µhuc faµ.
I.1.3. Caïc thê duû minh hoüa
Mô fa cac cau fruc du IIôu :
Cho ma fran vuông A caµ n × n, n ≥ l :

Âàûc taí 107
A = {a
I j
1 I = l..n, j = l..nl gôm cac µhan fu a
I j
o hang I, côf j
Ðôn dính (goc) cua ma fran A Ia a
ll
, a
ln
, a
nn
va a
nl
Ðuong choo chinh Ia vocfor dl = {a
II
1 I = l..nl
Ðuong choo µhu Ia vocfor d2 = {a
I
,
n - I + l
1 I = l, nl
Ihan fu a
I j
dôI xung voI a
j I
qua duong choo chinh dl
Ihan fu a
I j
dôI xung voI a
n - j + l
qua duong choo µhu d2
Ma fran fam gIac frôn :
A
0
= { a
I j
1 a
I j
≠ 0, ∀ I = l..n, j = I..n ∧ a
I j
= 0, ∀ I = 2..n, j = l..I - l l
Ma fran fam gIac duoI :
A
0
= { a
I j
1 a
I j
≠ 0, ∀ I = l..n, j = l..I ∧ a
I j
= 0, ∀ I = j..n - l, j = 2..n l
I.2. Âàûc taí vaì láûp trçnh
Trong nhung fruong hoµ co fhô, nguoI fa huong dac fa vô môf ngôn ngu Iaµ
frInh nao do. Vi du vô dac fa dô quI cho baI foan fhaµ Ha nôI (Tovor of HanoI).
Cho chông n dïa n = 64 xôµ fhanh hInh fhaµ o côf A (Ion nhaf duoI cung va nho
dan Iôn frôn). Hay chuyôn chông n dïa nay qua côf Ð fhoo nguyôn fac sau :
l. MôI Ian chí dI chuyôn môf dïa fu côf nay qua côf kIa
2. Không daf dïa fo Iôn dïa nho
3. Iay vI fri côf C dô daf fam cac dïa frung gIan
Sau day Ia baI foan Thaµ Ha nôI voI n = 3 dïa.
Hçnh 5.1. Chäöng âéa træåïc khi chuyãøn
Hçnh 5.2. Chäöng âéa sau khi chuyãøn (våïi7 láön xãúp)
TS. PHAN HUY KHANH biãn soaûn 107
108 Cäng nghãû Pháön mãöm
a) Caïch giaíi phi hçnh thæïc
Chuyôn n - l dïa fu A qua C Iay Ð Iam côf frung gIan, sau do chuyôn dïa duoI
cung fu A sang Ð. TIôµ fuc chuyôn n - l dïa fu C qua Ð Iay A Iam côf frung gIan
fhoo cach frôn.
b) Caïch giaíi hçnh thæïc bàòng âàûc taí
GoI fhu fuc chuyôn n dïa fu A qua Ð Iay C Iam frung gIan (n > 0) Ia :
Haì_näüi (n, A, B, C)
va fhu fuc chuyôn môf dïa fu A qua Ð Ia :
Chuyãøn_mäüt_âéa(A, B).
KhI do, fa co dac fa :
Haì_näüi (n, A, B, C) = if n > 0 then begin
Haì_näüi (n - 1, A, C, B);
Chuyãøn_mäüt_âéa (A, B);
Haì_näüi (n - 1, C, B, A)
End
fa dô dang vIôf cac fhao fac frôn fhanh fhu fuc nhu sau :
Procedure ChuyãønCäüt(n, A, B, C: TãnCäüt);
Begin
if n>0 then begin
ChuyãønCäüt(n-1, A, C, B);
Chuyãøn_mäüt_âéa_tæì_A_sang_C;
ChuyãønCäüt(n-1, B, A, C);
End
End;
Thao fac Chuyãøn_mäüt_âéa_tæì_A_sang_C; duoc vIôf fhanh Iônh :
Writeln(‘Chuyãøn mäüt âéa tæì ‘, A:1, ‘ -> ‘, C:1);
Thôm bIôn dôm I dô finh sô buoc chuyôn dïa, chuong frInh day du nhu sau :
Program HanoiTower;
Type TãnCäüt = 1 .. 3;
Var i, N: Integer;
Procedure ChuyãønCäüt(n, A, B, C: TãnCäü t);
Begin
if n>0 then begin
ChuyãønCäüt(n-1, A, C, B);
i:=i+1;
Writeln(i:3,‘Chuyãøn mäüt âéa tæì ‘,A:1,‘ -> ‘,C:1);
ChuyãønCäüt(n-1, B, A, C);
End
End;
Begin
Write(‘Säú âéa cáön chuyãøn : ‘);

Âàûc taí 109
Readln(N);
i:=0;
ChuyãønCäüt;
Readln
End.
Chay chuong frInh frôn so cho kôf qua nhu sau :
Säú âéa cáön chuyãøn : 4
1.Chuyãøn mäüt âéa tæì 1 -> 2
2.Chuyãøn mäüt âéa tæì 1 -> 3
3.Chuyãøn mäüt âéa tæì 2 -> 3
4.Chuyãøn mäüt âéa tæì 1 -> 2
5.Chuyãøn mäüt âéa tæì 3 -> 1
6.Chuyãøn mäüt âéa tæì 3 -> 2
7.Chuyãøn mäüt âéa tæì 1 -> 2
8.Chuyãøn mäüt âéa tæì 1 -> 3
9.Chuyãøn mäüt âéa tæì 2 -> 3
10.Chuyãøn mäüt âéa tæì 2 -> 1
11.Chuyãøn mäüt âéa tæì 3 -> 1
12.Chuyãøn mäüt âéa tæì 2 -> 3
13.Chuyãøn mäüt âéa tæì 1 -> 2
14.Chuyãøn mäüt âéa tæì 1 -> 3
15.Chuyãøn mäüt âéa tæì 2 -> 3
Trong fruong hoµ fông quaf n dïa, sô buoc chuyôn dïa so Ia :
2
0
+ 2
l
+ . . . + 2
n
= 2
n
- l Ian.
VoI n=64, gIa su fhoI gIan dô chuyôn môf dïa Ia f gIay, fhI fhoI gIan dô chuyôn
hôf 64 dïa cua baI foan Thaµ Ha nôI so Ia :
(2
64
- l) × f = l.8446744074Ð+l9 × f gIay.
Môf nam co 365 × 24 × 60 × 60 = 3l 536 000 gIay, gIa su f = l0
-2
gIay fhI sô
nam can dô chuyôn 64 dïa Ia :
(l.8446744074Ð+l9 / 3l536000) × l0
-2
= 5.849424l735Ð+ll ≈ 5.8 fy nam !
Bu¡ tûp : l, 2, 3, 4, 5 frang l40-l4l (Nguyôn Xuan Huy).
II. Âàûc taí cáúu truïc dæî liãûu
II.1. Cáúu truïc dæî liãûu cå såí vectå
II.1.1. Dáùn nháûp
Cho môf cuôn fu dIôn. Can fra cuu môf fu o môf frang nao do baf ky :
Ðuyôf Ian Iuof cac fu, fu dau fu dIôn, cho dôn khI gaµ fu can fra cuu, goI Ia fIm
fuan fu (gIông fôµ fuan fu)
TS. PHAN HUY KHANH biãn soaûn 109
110 Cäng nghãû Pháön mãöm
Nôu fu dIôm da duoc saµ xôµ AÐC, co fhô fIm ngau nhIôn môf fu, sau do fuy
fhoo fu da gaµ ma fIm µhia fruoc hay µhia sau fu do fu can fra cuu.
Co fhô xom fu dIôn Ia môf vocfo cho µhoµ fIm kIôm ngau nhIôn môf fu.
Trong fIn hoc, bô nho may finh cung xom Ia môf vocfo gôm cac ô nho Iuu fru du
IIôu
II.1.2. Âàûc taí hçnh thæïc
Cho môf faµ gIa frI Ð va môf sô nguyôn n ∈ N.
Môf vocfo Ia môf anh xa V fu khoang I ⊂ N vao Ð.
V : I → Ð, I = |l..n|, n Ia sô µhan fu cua V, hay kich fhuoc.
V co fhô rông nôu n = 0
Ky hIôu vocfo boI (V|l..n|, Ð) hoac Ð : V|l..n|, hoac V nôu không co su hIôu
nham.
Môf µhan fu cua vocfo Ia caµ (I, V|I|) voI I ∈ |l..n|, dô don gIan fa vIôf V|I|.
Môf vocfo co fhô duoc bIôu dIôn boI faµ cac µhan fu cua no :
(V|l|, V|2|, ..., V|n|) hay (x
l
, x
2
, ..., x
n
) nôu x
I
= V|I|, Ia cac gIa frI (fruc kIôn)
Vocfo con : Ta goI fhu hoµ cua V frôn môf khoang IIôn fIôµ cua |l..n| Ia vocfo
con cua V|l..n| : V| I..j|, j > I, rông nôu I > j
Vi du : V|l..5| = (7, 2l, -33, 6, 8)
Cac vocfo con : V|2..4| = (2l, -33, 6)
V|l..3| = (7, 2l, -33) v.v...
II.2. Truy nháûp mäüt pháön tæí cuía vectå
Cho V|l..n|. VoI ∀ I ∈ |l..n|, µhoµ fruy nhaµ V|I| so cho gIa frI µhan fu co chí sô
I cua V. Kôf qua không xac dInh nôu I ∉ |l..n|
Vi du : V|l..5| = (7, 2l, -33, 6, 8)
V|2| = 2l, V|4| = 6 nhung V|0|, V|7|... không xac dInh.
Vocfo duoc saµ xôµ fhu fu (SXTT)
Ta noI :
- Vocfo rông (n = 0) Ia vocfo duoc SXTT.
- Vocfo chí gôm l µhan fu (n = l) Ia vocfo duoc SXTT.
- Vocfo V|l..n|, n > l Ia vocfo duoc SXTT nôu
∀ I ∈ |l..n - l|, ∀ |I| ≤ ∀ |I + l|
Co fhô dInh nghïa dô quI 3 :

Âàûc taí 111
V|l..I| duoc SXTT, V|I| ≤ V|I + l| ⇒ V|I..I + l| duoc SXTT, voI I ∈ |l..n - l|
Môf sô ky hIôu khac :
a ∈ V|l..n| ⇔ ∃ j ∈ |l..n|, a = V|j|
a ∉ V|l..n| ⇔ ∀ j ∈ |l..n|, a ≠ V|j|
a < V|l..n| ⇔ ∀ j ∈ |l..n|, a < V|j|
Ta cung co cho cac µhoµ so sanh ≤ , >, ≥ , = va ≠ .
Ðô xof cac fhuaf foan xu Iy vocfo, fa su dung mô fa du IIôu :
Const n = 100 ;
Type
Vectå = anay [1..n] of T ;
{T Ia kIôu cua cac µhan fu cua vocfol
II.3. Caïc thuáût toaïn xæí lyï vectå
Ðuyôf vocfo
Cho V|l..n|, fhuaf foan duyôf vocfo duoc vIôf dô quy nhu sau :
Procedure scan (V: vectå; i, n: integer);
Begin
if i < = n then begin
Operation (V[i]);
Scan (V, i + 1, n) {i := i + 1; nôu bo dô quI }
end
end;
II.3.1. Truy tçm tuáön tæû mäüt pháön tæí cuía vectå (sequential search)
a) Vectå khäng âæåüc sàõp xãúp thæï tæû
Iaµ Iuan gIa su da xu Iy I - l (l < I ≤ n + l) µhan fu dau cua V va khang dInh
rang µhan fu ∉ V|l..I - l|
Xay ra haI fruong hoµ :
I = n + l : µhan fu ∉ V|l..n|, kôf fhuc, µhan fu ∉ V
I ≤ n : IaI xay ra haI fruong hoµ :
V|I| = µhan fu : µhan fu ∉ V|l..I|, kôf fhuc, µhan fu ∉ V
V|I| ≠ µhan fu : µhan fu ∉ V|l..I|, fIôµ fuc I := I + l
va cho µhoµ khang dInh IaI µhan fu ∉ V|l..I - l|
Ta vIôf fhuaf foan không dô quI nhu sau :
function check(V: Vectå; n: integer; pháöntæí: T): Boolean;
{(n > 0) ⇒ (check, pháöntæí ∉ V)} ∨ (not check, pháöntæí ∉ V)}
Var i: integer;
TS. PHAN HUY KHANH biãn soaûn 111
112 Cäng nghãû Pháön mãöm
begin
i:= 1; {pháöntæí ∉ V[1..i - 1], i ≤ n}
while (V[i] <> pháöntæí) and (i < 1) do
{pháöntæí ∉ V[1..i], i < n}
i := i + 1; {pháöntæí ∉ V[1..i - 1], i ≤ n}
{((V[i] = pháöntæí) ∨ (i = n), pháöntæí ∉ V[1..i - 1],
i ≤ n) ⇒ (V[i] = pháöntæí, pháöntæí ∉ V)
∨ (V[i] ≠ pháöntæí, pháöntæí ∉ V)}
Check := (V[i] = pháöntæí)
{(check, pháöntæí ∉ V) ∨ (Not check, pháöntæí ∉ V)}
end;
Ta co fhô vIôf IaI fhuaf foan duoI dang dô quy nhu sau :
function check(V:Vectå, i,n:integer; phántæí: T): Boolean;
{n ≥ 0 ⇒ check, phántæí ∈ V[i..n])
∨ (Not check, phántæí ∉ V[i..n])}
begin
if i > n then check := false
else if V[i] = phántæí then check := true
else check := check (V, i + 1, n, phántæí)
end;
KhI goI ham, I co fhô nhan gIa frI baf ky, fu l..n, dac bIôf I = l
Truong hoµ duyôf vocfo fu µhaI qua fraI, fa không can dung bIôn I nua :
function check (V:Vectå; n: integer; phántæí: T): Boolean;
{n ≥ 0 ⇒ (check, phántæí ∈ V) V (Not check, phántæí ∉ V)}
begin
if n = 0 then check := false
else if V[n] = phántæí then check := true
else check := check (V, n - 1, phántæí)
end;
b) Vectå âæåüc sàõp xãúp thæï tæû
Ta can fIm chí sô I ∈ |l..n| sao cho fhoa man :
V|l..I - l| < µhanfu ≤ V|I..n|
l I n
V|l..I - l| < µhanfu µhanfu ≤ V|I..n|
Hçnh 5.3. Vectå âæåüc sàõp xãúp thæï tæû
Van dô Ia kIôm fra dang fhuc µhanfu = V|I| không frong V da duoc saµ xôµ 7
Iaµ Iuan :


Âàûc taí 113
GIa su da xu Iy I - l (l ≤ I ≤ n + l) µhan fu dau cua V va V|l..I - l| < µhan fu da
duoc khang dInh : xay ra haI fruong hoµ :
I = n + l : kôf fhuc V|l..n| < µhan fu, µhan fu ∉ V
I ≤ n : IaI co haI fruong hoµ moI :
V|I| ≥ µhan fu : kôf fhuc, da fIm duoc I sao cho
V|I..I -l| < µhan fu ≤ V|I..n|
chí con µhaI kIôm fra µhan fu = V|I| 7
V|I| <µhan fu : co nghïa V|l..I| < µhan fu, fIôµ fuc fhuc hIôn : I := I + l dô co IaI
khang dInh V|l..I - l| < µhan fu
Ta co fhuaf foan nhu sau :
function checknum(V:vectå; n:nguyãn; phántæí:T): Boolean;
{V âæåüc SXTT, n > 0 ⇒ (checknum, phán tæí ∈ V) ∨
(Not checknum, pháöntæí ∉ V)}
Var i: integer ;
begin
if phán tæí > V[n] then
checknum := false { not checknum, phántæí ∉ V)}
else begin {phántæí ≤ V[n]}
i := 1 ; {V[1..i - 1] < phántæí }
while (V[i] < phántæí) do {V[1..i] < phántæí }
i := i + 1 ; {V[1..i] < phán tæí}
{V[1..i - 1] < phántæí, V[i] ≥ phántæí }
checknum := (V[i] = phántæí)
{(checknum, phántæí∈V) ∨ (¬checknum, phántæí∉V)}
end {(checknum, phántæí∈V) ∨ (¬checknum, phántæí∉V)}
end;
II.3.2. Tçm kiãúm nhë phán (Binary search)
a) Phæång aïn 1
GIa su vocfo V|l..n| (n > l) da duoc saµ xôµ fhu fu :
∀ I ∈ |l..n - l|, V|I| ≤ V|I +l|
Ta chIa V fhanh 3 vocfo con V|l..m - l|, V|m..m| va V|m + l..n| duoc saµ xôµ
fhu fu sao cho :
V|l..m - l| ≤ V|m| ≤ V|m + l..n|
Xay ra 3 fruong hoµ :
∈ V|l..m - l| nôu µhan fu < V|m|
µhan fu = V|m|
∈ V|m + l..n| nôu µhan fu > V|m|
TS. PHAN HUY KHANH biãn soaûn 113
114 Cäng nghãû Pháön mãöm
Iuc nay fa fro IaI baI foan da xof : fIm µhan fu frong vocfo V|l..m - l| hoac V|m
+l..n|. Kôf fhuc nôu µhan fu = V|m|
Môf cach fông quaf, Ian Iuof xac dInh day cac vocfo co V
l
, V
2
, ..., V
k
sao cho môI
V
I
co kich fhuoc nho hon kich fhuoc cua vocfo con fruoc do V
I - l
Ðô y rang nôu chon V
l
= V|l..n|, V
2
= V|2..n|, ..., V
k
= V|k..n|, fa dI dôn µhoµ fIm
kIôm fuan fu da xof o frôn.
Ta so chon m Ia vI fri gIua (nôu n Io) dô cho V|l..m - l| va V|m + l..n| co kich
fhuoc bang nhau, hoac chon m sao cho chung hon kom nhau môf µhan fu.
KhI do kich fhuoc cua cac vocfo fhuôc day V
l
, V
2
, ..., V
k
so Ian Iuof duoc chIa dôI
faI môI buoc : n, n/2, ..., n/2
k - l
.
Nhu vay, so co fôI da | Iog
2
n| vocfo con khac rông.
Vi du : nôu n = 9000, sô vocfo con khac rông fôI da so Ia l3, vI 2
l3
= 8l92
Xay dung fhuaf foan :
Sau môf sô buoc, fa co vocfo con V|Inf.. suµ| sao cho :
V|l..Inf - l| < µhanfu < V|suµ + l..n|
Xay ra haI fruong hoµ :
• Inf > suµ (Inf = suµ + l)
(V|l..Inf-l| < µhanfu < V|suµ+l..n|, Inf = suµ+l) ⇒ (µhan fu ∉ V, kôf fhuc)
• Inf ≤ suµ : m = (Inf + suµ) dIv 2
khI do fa co V|Inf..m - l| ≤ V|m| ≤ V|m + l..suµ|
Tôn faI 3 kha nang nhu sau :
• Ihan fu = V|m| : kôf fhuc, µhan fu ∈ V
• Ihan fu < V|m| : fIôµ fuc fIm kIôm frong V|Inf..m - l|
Iay suµ := m - l dô co IaI khang dInh µhan fu < V|suµ + l..m|
• Ihan fu > V|m| : fIôµ fuc fIm kIôm frong V|m + l..suµ|
Iay Inf := m + l dô co IaI khang dInh V|l..Inf - l| < µhan fu
Nhu vay ca haI fruong hoµ : V|l..Inf - l| < µhan fu < V|suµ + l..n|
KhoI dau, Iau Inf := l va suµ := n
Ta co fhuaf foan nhu sau :
function binary (V:vectå; n:integer; phántæí:T): Boolean;
{V âæåüc SXTT ⇒ (binary, phántæí∈V)∨(not binary, phántæí∉V)}
Var inf, sup, m : integer ;
OK : Boolean ;
begin
OK : false ; {not OK, phán tæí ∉ V}

Âàûc taí 115
inf := 1 ; sup := n ;
{V[1..inf - 1] < phántæí < V[sup+1..n]}
while (inf ≤ sup) and (not OK) do begin
m := (inf + sup) div 2 ;
if V[m] = phántæí then OK := true {OK, phántæí ∈ V}
else {not OK}
if V[m]<phántæí then inf:= m+1 {V[1..inf-1]<phántæí}
else sup := m - 1 ; {V[sup + 1..n] > phántæí}
{(V[1..inf - 1] < phántæí < V[sup + 1..n], not OK)
∨ (tçm tháúy, phántæí ∈ V)}
end;
{(inf = sup + 1) ∨ (tçm tháúy),
(¬ tçm tháúy, V[1..inf - 1] < phántæí < V[sup + 1..n]) ∨
(tçm tháúy, phántæí ∈ V) ⇒
(¬ tçm tháúy, V[1..inf - 1] < phántæí < V[inf..n]) ∨
(tçm tháúy, phántæí ∈ V) ⇒
(¬ tçm tháúy, phántæí ∉ V) ∨ (tçm tháúy, phántæí ∈ V)}
Nhë phán := OK
end ;
VIôf chuong frInh frôn duoI dang dô quy :
function NhëPhán(V:Vectå;inf,sup:integer;phántæ:T):boolean;
{(V âæåüc SXTT ⇒ (NhëPhán, phántæí∈V) ∨ ¬ NhëPhán,phántæí∉V)}
Var m : integer ;
begin
if inf > sup then NhëPhán:= false
else begin
m := (inf + sup) div 2 ;
if V[m] = phántæí then NhëPhán:= true
else if V[m] < phántæí then
NhëPhán:= NhëPhán(V, m+1, sup, phántæí )
else NhëPhán:= NhëPhán(V, inf, m - 1, phántæí)
end
end ;
Ham nay co fhô duoc goI voI cac gIa frI Inf, suµ baf ky, fhông fhuong duoc goI
boI dong Iônh :
NhëPhán (V, 1, n, pháöntæí)
b) Phæång aïn 2
Co fhô fIm ra nhung µhuong an khac cho fhuaf foan fIm kIôm nhI µhan. Chang
han, fhay vI kIôm fra dang fhuc V|m| = µhanfu, fa kIôm fra khang dInh :
V[1..inf - 1] < pháöntæí ≤ V[inf..n]
Ssau do kIôm fra µhanfu = V|Inf| dô co cau fra IoI.
TS. PHAN HUY KHANH biãn soaûn 115
116 Cäng nghãû Pháön mãöm
Maf khac, co fhô fhay dôI gIa frI fra vô cua ham fIm kIôm nhI µhan boI vI fri
cua µhan fu frong vocfo, bang 0 nôu µhan fu ∉ V.
Nôu Inf = l, khang dInh co dang V|l..0| < µhanfu ≤ V|suµ..n| va duoc vIôf gon
µhanfu ≤ V|l..n|.
function NhëPhán(V:vectå;n:integer;phántæí: T): integer ;
{(V âæåüc SXTT, n > 0) ⇒ (m ∈ [1..n]
NhëPhán = m, V[m] = phántæí) V (NhëPhán = 0, phán tæí ∉ V)}
Var m, inf, sup : integer ;
begin
if phán tæí > V[n] then nhë phán := 0
else begin
inf := 1 ; sup := n ;
{V[1..inf - 1] < phántæí ≤ V[sup..n]}
while inf < sup do begin
m := (inf + sup) div 2 ;
if pháöntæî ≤ V[m] do sup := m {phátæí ≤ V[sup..n]}
else inf := m + 1 {V[1..inf - 1] < phán tæí}
{V[1..inf - 1] < phán tæí ≤ V[sup..n]}
end ;
{(inf = sup, V[1..inf - 1] < phán tæí ≤ V[inf..n]
⇒ (V[1..inf - 1] < phántæí ≤ V[inf..n]}
if phántæí = V[inf] then NhëPhán:= inf
else NhëPhán:= 0
end
end ;

Âàûc taí 117
III. Âàûc taí âaûi säú : mä hçnh hoïa phaït triãøn pháön mãöm
(Pháön naìy chè phuûc vuû tham khaío)
III.1. Måí âáöu
Ðac fa daI sô không mô fa cac yôu fô IIôn quan dôn fhoI gIan fhuc fhI cung nhu
frang fhaI.
Ngôn ngu dac fa frang fhaI IIôn quan dôn :
- Ngu nghïa (SomanfIc)
- Cu µhaµ (synfax)
- Cac fhuôc finh (IroµorfIos)
HInh vo
Ngu nghïa cua cac dac fa daI sô IIôn quan dôn :
- Ðau ki (sIgnafuro) cua môf kIôu daI sô fruu fuong
- Hang (form) voI cac bIôn
- Ihuong frInh va cac fIôn dô
- Cac mô hInh dac bIôf ...
Cu µhaµ cua dac fa daI sô
Vi du :
Xay dung kIôu sfrIng cho cac xau ky fu cung cac µhoµ foan fhông dung frôn
xau nhu sau :
- Tao xau rông moI (µhoµ foan nov)
- Ghoµ xau (aµµond)
- Thôm môf ky fu vao xau (add fo)
- Ia y dô daI xau
- KIôm fra xau rông (Is omµfy)
- KIôm fra haI xau bang nhau không (=)
- Trich ky fu dau fIôn cua xau (frIsf)
Ðô dInh nghïa kIôu sfrIng, nguoI fa con su dung cac kIôu sau :
- char : kIôu cua ky fu
- naf : kIôu cua sô nguyôn
- booI : kIôu gIa frI IogIc
TS. PHAN HUY KHANH biãn soaûn 117
118 Cäng nghãû Pháön mãöm
Tôn cac faµ hoµ va cac µhoµ foan frôn faµ hoµ xac dInh môf ky dau (sIgnafuro).
Nhu vay môf dau ki duoc xay dung fu :
- Tôn cac kIôu dac fa
- Tôn cac µhoµ foan voI vIôc chí ro mIôn xac dInh (domaIn) va mIôn frI (rango)
nhu sau :
fôn µhoµ foan : mIôn xac dInh → mIôn frI
Ta xay dung dau ki fu kIôu sfrIng nhu sau
Adt String ;
Use char, Not, Bool ;
Sorts string ;
Operations
new : → string ;
append _ _ : String, string → string ;
add _ to _ : char, string → string ;
# _ : String → not ;
is empty ? _ string → bool ;
_ = _ : string, string → bool ;
frist _ : string → char ;
Tôn xuaf hIôn frong môf dau ki gôm haI IoaI Ia co ich (Infornosf) va bô fro
(auxIIIary) fuy fhoo vaI fro cua chung. Vi du :
- SfrIng Ia co ich
- Char, nof va booI Ia bô fro
Cu µhaµ (cµ)
Cµ dac fa daI sô su dung frong vi du frôn duoc chIa ra fhanh cac khôI : dau,
gIao fIôµ va fhan cua dac fa. MôI khôI gôm môf sô khaI bao ngan cach nhau boI cac
fu khoa (co gach chan)
ÐôI voI khôI gIao fIôµ (Inforfaco), nguoI fa su dung cac khaI nIôm fIôn fô
(µrofIx), frung fô (InfIx) va hau fô (µosffIx) nhu sau :
TIôn fô : fôn cua µhoµ foan duoc daf fruoc day cac fham bIôn
Vi du : aµµonond _ _ : sfrIng, sfrIng → sfrIng ;
Tu do nguoI fa co fhô vIôf cac hang duoI dang :
aµµond x y hay
aµµond (x y) hay
(aµµond x y)
Trung fô : cho µhoµ dInh nghïa foan fu hay vI fu
Vi du _ = _ : sfrIng, sfrIng → booI ;
fu do co fhô vIôf ca c hang duoI dang :

Âàûc taí 119
x = y hay (x = y)
Hôn hoµ : cho µhoµ vIôf cac bIôu fhuc baf ky môf cach môm doo nhu add_fo_ :
char, sfrIng → sfrIng
fu do co fhô vIôf cac hang duoI dang :
add c fo aµµond (x y)
Trong nhIôu fruong hoµ frôn day, cac caµ dau ngoac dau duoc dung dô µhan
cach cac hang voI nhau
III.2. Phán loaûi caïc pheïp toaïn
Cac µhoµ foan duoc chIa ra fhanh 2 IoaI :
IoaI quan saf duoc (oµrafIons)
IoaI µhaf sInh (gonorafor oµorafIons)
IoaI quan saf duoc co cac dang sau :
KIôu co ich |va kIôu bô fro| → KIôu bô fro
Vi du : _ = _ : sfrIng, sfrIng → booI;
# _ : sfrIng → nof ;
Is omµfy 7 : sfrIng → booI ;
fIrsf _ : sfrIng → char ;
IoaI µhaf sInh co dang :
KIôu co ich |va kIôu bô fro| → KIôu co ich
Vi du :
nov : _ → sfrIng ;
add_ fo _ : char, sfrIng → sfrIng ;
O day, µhoµ foan nov fao ra môf xau rông, con µhoµ foan add _ fo _ fhôm môf
ky fu vao xau.
Cac fIôn dô duoc xay dung fu cac µhoµ foan dung cho cac kIôu bô fro gIa su
duoc dInh nghïa nhu sau :
fruo : → booI ;
faIso : → booI ;
nof _ : booI → booI ;
_ and _ : booI, booI → booI ;
_ or _ : booI ; booI → booI ;
0 : → nof ;
TS. PHAN HUY KHANH biãn soaûn 119
120 Cäng nghãû Pháön mãöm
l : → nof ;
succ : nof → nof ;
_ + _ : nof, nof → nof :
_ - _ : nof, nof → nof :
_ ` _ : nof, nof → nof :
_ / _ : nof, nof → nof :
_ = _ : nof, nof → booI;
a : → char ;
b : → char ;
...
_ = _ : char, char → booI ;
III.3.
III.4.
Haûng vaì biãún
Trong dac fa daI sô, cac bIôn duoc dInh kIôu va co fhô nhan gIa frI fuy y fuy
fhoo kIôu da dInh nghïa. Vi du : khaI bao kIôu x : sfrIng ; y : sfrIng ; c : char ; dInh
nghïa cac bIôn x, y, c dô su dung frong cac hang sau day :
add c fo x = aµµond (x y)
aµµond (Is omµfy 7 (nov), add x fo x)
Hang Ia môf bIôu fhuc nhan duoc fu vIôc fô hoµ IIôn fIôµ cac µhoµ foan cua
sIngnafuro (dau ki). Môf hang Ia hoµ fhuc nôu hang do fhoa man cac µhoµ foan da
su dung (kIôu va vI fri). QuI fac quy naµ duoc dung dô xay dung faµ hoµ cac hang
+ co kIôu s duoc vIôf f : s duoc dInh nghïa nhu sau :
+ : s
l
, s
2
, ..., s
n
→ s ∧ f
l
: s
l
, f
2
: s
2
, ..., f
n
: s
n
(f f
l
f
2
... f
n
) : s
frong do su dung quy fac khaI bao kIôu bIôn
x : s
Tu do, hang hoµ fhuc frong haI hang fu vi du vua xof Ia
add c fo x = aµµond (x y)
Pheïp thãú caïc haûng
Ihoµ fhô (subsfIfufIons) Ia môf µhoµ foan frôn cac hang cho µhoµ fhay fhô cac
bIôn (co maf) frong cac hang boI cac hang khac. Taµ hoµ cac bIôn IV xuaf hIôn
frong môf hang duoc dInh nghïa môf cach dô quy nhu sau :
IV (ff
l
f
2
... f
n
) = IV (f
l
) ∪ IV (f
2
) ∪ ... IV (f
2
) ∪ ... ∪ IV (f
n
)

Âàûc taí 121
IV (x) = {xl
Vi du : IV (aµµond (Is omµfy 7 (nov), add c fo x)) = {x, cl
Ihoµ fhô frong môf hang f cho cac fhanh µhan chua bIôn x boI hang u, ky hIôu
f |u /x|, duoc dInh nghïa nhu sau :
VoI x ∈ IV (f) fhI
(f f
l
f
2
... f
n
) |u/ x | = (f f
l
|u/ x| f
2
|u/ x| ... f
n
|u/ x|)
y |u/ x| = u y = x
= y y ≠ x
Vi du : aµµond ( Is omµfy 7 (nov), (add c fo x)) |(add c fo y) / x|
= aµµond (Is omµfy 7 (nov), (nov), ( add c fo ( add c’ fo y)))
Mô fa cac fhuôc finh qua cac µhuong frInh
Cac fIôn dô su dung frong dac fa duoc xay dung fhoo IogIc vI fri bac l dang
µhuong frInh (µf)
Môf µhuong frInh hoµ fhuc co vô fraI va vô µhaI cung kIôu hang :
AX sµoc = {f = f’ 1 f : s ∧ f’ : sl
Trong vi du vô da kIôu sfrIng, µhoµ foan Is omµfy 7 duoc dInh nghïa fhoo
µhuong frInh :
Is omµfy 7 (nov) = fruo ;
Co nghïa môf xau vua moI fao ra Ia rông - sau do, vIôc fhôm môf ky fu moI vao
xau so cho kôf qua Ia faIso :
Is omµfy 7 (add c fo x) = faIso ;
Tinh dô quy cua µhuong frInh :
aµµond (x, add c fo y) = add c fo (aµµond (x, y)) ;
chí ra rang vIôc ghoµ môf xau voI xau duoc fao ra bang cach fhôm môf ky fu
vao xau nay fhI cung co gIa frI nhu ghoµ haI xau fruoc rôI sau do fhôm môf ky fu
va o xau kôf qua. ÐIôu do hoµ Iy vI fa co finh chaf cua µhuong frInh :
aµµond (x, nov) = x ;
nghïa Ia ghoµ môf xau nao do voI xau rông cung cho ra kôf qua chinh xau do
Ta co cac fIôn dô vô xau ky fu nhu sau :
AxIoms
Is omµfy 7 (nov) = fruo ;
Is omµfy 7 (add c fo x) = faIso ;
# nov = 0 ;
# (add c fo x) = x (x) = + l;
TS. PHAN HUY KHANH biãn soaûn 121
122 Cäng nghãû Pháön mãöm
aµµond (x, nov) = x ;
aµµond (x, add c fo y) = add c fo aµµond (x y) ;
(nov = nov) = fruo ;
add c fo x = fruo ;
(add c fo x = nov) = faIso ;
(nov = add c fo x) = faIso ;
(add c fo = add d fo y) = (c = d) and (x = y) ;
vhoro ...
... vhoro
x, y : sfrIng ;
c, d : char ;
ond sfrIng ;
Cac fIôn dô dIôu kIôn
Cac fIôn dô dIôu kIôn fich cuc (µosIfIvo condIfIonaI axIons) Ia mo rông cua cac
µhuong frInh, chung Ia cac mônh dô Horm vô finh bang nhau, co dang :
f
l
= f
l
’ ∧ f
2
= f
2
’ ∧ ... ∧ f
n
= f’
n
⇒ f = f’
Vi du : Is omµfy 7 (x) = fIaso ⇒ fIrsf (add c fo x) = fIrsf (x) ;
Is omµfy 7 (x) = fruo ⇒ fIrsf (add c fo x) = c ;
III.5. Caïc thuäüc tênh cuía âàûc taí
Ðac fa daf ra haI van dô sau day :
- Hoµ fhuc hoa
- Iuong nang chung bac (comµIofudo) cua dac fa
III.5.1. Mä hçnh láûp trçnh (triãøn khai)
Cac mô hInh Iaµ frInh mô fa cach fhuc frIôn khaI cua dac fa. Co nghïa cac
chuong frInh fruu fuong so kIôm chung cac fhuôc finh da frInh bay frong dac fa
(fhIôf Iaµ). Taµ hoµ cac mô hInh dac fa voI cac µhoµ foan kom fhoo duoc ky hIôu
Mod (sµoc).
KhaI nIôm Iaµ frInh dan dôn quan hô fhoa man ky hIôu ! xac dInh finh frIôn
khaI dung dan cua dac fa. Ta co :
M ∈ Mod (sµoc) ⇔ (∀f, f’ : s va f = f’ ∈ Ax sµoc fa co M ! f = f’)
VoI moI fIôn dô : f = f’ cua Ax sµoc
Mod (sµoc) ! f = f’ ⇔ ∀M ∈ Mod (sµoc),

Âàûc taí 123
M ! f = f’
III.5.2. Mä hçnh âàûc biãût
Nhung mô hInh chaµ nhan duoc boI môf dac fa raf µhong µhu. Sau day Ia môf
vi du vô mô hInh cho dac fa kIôu ÐooI :
HInh vo
frong haI mô hInh A va Ð o frôn, dac fa kIôu ÐooI fhoa man voI cac quy uoc co
gIa frI Ia cac dau x, cac µhoµ foan bIôu dIôn boI cac quan hô gIua mIôn xac dInh va
mIôn frI.
Chu y rang A chua cac gIa frI vô ich fuong fu nhu vIôc su dung l byfo cho kIôu
ÐooI, con Ð chua vua du (fôI fhIôu) gIa frI can fhIôf fuong fu nhu su dung l bIf cho
kIôu ÐooI.
III.5.3. Mä hçnh âäöng dæ
Mô hInh nay Ia môf fhuong daI sô cac hang dông du dInh nghïa boI cac quy fac
sau day :
- f = f’ Ia fIôn dô khI do f ~ f’
- Ihan xa : f ~ f
- ÐôI xung : f ~ f’ ⇒ f’ ~ f
- Ðac cau : f = f’ ∧ f’ ~ f’’ ⇒ f ~ f’’
- Kha fhô : (cau fhanh - subsfIfufIvIfo)
f
l
~ f
l
’ ∧ f
2
~ f
2
’ ∧ ... ∧ f
n
~ f
n
’ ⇒ (ff
l
f
2
... f
n
) ~ (ff
l
’f
2
’ ... f
n
’)
- Thay fhô : cho x Ia bIôn, u Ia hang f ~ f’ ⇒ f |u/ x| ~ f’ |u/ x|
Qua frInh khaI frIôn môf dac fa
KhaI frIôn môf dac fa Ia van dô kho khan. Nhung dInh nghïa vô cu µhaµ cac
chuc nang mong doI không Ia kho khan nhung finh dung dan cua chung IaI không
kIôm chung duoc dô dang.
III.6. Pheïp chæïng minh trong âàûc taí âaûi säú
Muc dich µhan nay Ia chí ra cach chung mInh (chung mInh) cac fhuôc finh
frong cac dac fa daI sô. Môf fhuôc finh can chung mInh co dang môf dInh Iy, chang
han dang môf µhuong frInh.
GIa su fa can chung mInh fhuôc finh sau day frong dac fa cac sô nguyôn fu
nhIôn duong Nof :
succ (0) = succ (succ (0)) = succ (succ (0)))
7 succ (0) + succ (0)) = succ (succ (succ (0)))
TS. PHAN HUY KHANH biãn soaûn 123
124 Cäng nghãû Pháön mãöm
TIôn dô : succ (x) + y = succ (x + y)
Quy fac fhay fhô voI s = {x = 0, y = succ (succ(0))l
succ (0) + succ (succ (0)) = succ (0 + succ(succ (0)))
TIôn dô : 0 + x = x va quy fac fhay fhô voI s = { x = succ (succ (0)))l
0 + succ (succ (0)) = succ (succ (0))
Quy fac fhay fhô voI µhoµ succ frôn (2)
succ (0 + succ (succ (0))) = succ (succ (0)))
Quy fac bac cau cho (l) va (3)
5.
ÐInh Iy da duoc chung mInh. Can chu y rang fhuôc finh nay Ia hoµ fhuc cho
moI qua frInh dac fa sô fu nhIôn Nof.
III.6.1. Lyï thuyãúttæång âæång
Iy fhuyôf fuong duong (cua môf dac fa) duoc xay dung fu cac fIôn dô cua dac
fa, Ia faµ hoµ cac dInh Iy hoµ fhuc qua cac quy fac sau day :
- Ihan xa : f = f
- ÐôI xung : f = f’ ⇒ f’ = f
- Ðac cau : f = f’ ∧ f’ = f’’ ⇒ f’ = f’’
- Kha fhô : f = f’ ∧ f
2
= f
2
’ ∧ ... ∧ f
n
= f
n
’ ⇒
(ff
l
, f
2
, ..., f
n
) = (ff
l
’, f
2
’, ..., f
n
’)
- Ihoµ fhô : cho x Ia bIôn va u Ia hang
f
l
= f
l
’ ∧ f
2
= f
2
’ ∧ ... ∧ f
n
= f
n
’ ⇒ f = f’
khI do f
l
|u/ x| = f
l
’ |u/ x| ∧ ... ∧ f
n
|u/ x| = f
n
’ |u/ x|
⇒ f |u/ x| = f’ |u/ x|
- Ihoµ caf : Cond
l
∧ (u = u’) ∧ cond
2
⇒ f = f’
va cond ⇒ x = x’, khI do :
cond
l
∧ cond ∧ cond
2
⇒ f = f’
Cac quI fac cua Iy fhuyôf fuong duong fhô hIôn cac fhuôc finh bang nhau (µhan
xa, dôI xung va bac cau), fhuôc finh ham (kha fhô), cac bIôn (µhoµ fhô) va fhay fhô
cac vô bang nhau (µhoµ caf). Cac quy fac nay xac dInh µhoµ suy dIôn Ð ÐQ, dInh
Iy sau day mInh hoa kich chac chan va finh ro cua µhoµ suy dIôn
ÐInh Iy : Iy fhuyôf fuong duong
voI môf dac fa sµoc, ∀f = f’, Ax sµoc Ð ÐQ f = f’
⇔ Mod (Ax sµoc) ! f = f’

Âàûc taí 125
Công fhuc Mod (Ax sµoc) ! f = f’ chí ra rang µhuong frInh Ia hoµ fhuc frong
moI cach Iaµ fyInh co fhô. Tuy nhIôn co fhô xay ra môf sô fruong hoµ dac bIôf khI
mô hInh không hoµ Iy, Iuc do co fhô fruo = faIso.
Ta co fhô chung mInh rang fhuôc finh
succ (succ (0)) - succ (succ (0)) = 0
Ia hoµ fhuc (vaIId), nhung fhuôc finh
succ (succ (succ (0))) - succ (succ (0)) = 0
Không Ia hoµ fhuc frong dac fa dang xof, vI rang sau khI suy dIôn, fa nhan
duoc succ (0) = 0 Ia không hoµ fhuc.
Ta co fhô fhay rang x - x = 0 không chung mInh duoc frong ngu canh dang xof
mac dau dInh Iy nay fo ra hIôn nhIôn frong dac fa. Tu do, fa co fhô bô sung fhôm
môf sô gIa fhIôf cho mô hInh dô fang kha nang chung mInh co fhô.
III.6.2. Khaïi niãûm vãö lyï thuyãút quy naûp
Nhu da chí ra, fa can fhôm cac dInh Iy fông quan hon dô co kha nang suy dIôn
fu cac fIôn dô cua dac fa, chang han nhu x + y = y + x Ia không co finh suy dan
frong Iy fhuyôf fuong duong.
Ta so fhôm vao cac quI fac su dung frong Iy fhuyôf fuong duong môf quy fac
moI nhu sau :
- QuI naµ : gIa su G Ia công fhuc sao cho x Ia môf bIôn fu do, nôu voI moI f, G |f/
x| Ia suy dIôn duoc fhI G cung suy dIôn duoc cho f. Quy fac nay chí ro rang co fhô
kôf Iuan rangnôu vIôc chung mInh môf dInh Iy Ia hoµ fhuc cho moI fruong hoµ,
dInh nghïa boI môf hang, boI môf bIôn fhI dInh Iy cung hoµ fhuc cho công fhuc
duoc Iuong hoa môf cach µhô dung frôn bIôn na y.
Tuong fu dôI voI dInh Iy fuong duong, dInh Iy sau day cho kôf qua fhuyôf µhuc
cho vIôc suy dIôn quy naµ dôI voI dac fa huu han.
ÐInh Iy 3.2 : Iy fhuyôf quy naµ
VoI môf dac fa daI sô sµoc
∀f = f’, Ax sµoc Ð Ind f = f’
⇔ Mod
Gon
(Ax sµoc) ! f = f’
Ta so mInh hoa nguyôn Iy nay boI môf vi du frôn cac gIa frI IogIc xay dung fu
cac µhoµ foan fruo, faIso va nof. Ta muôn chung mInh rang :
nof (nof (b)) = b
- fruong hoµ co so :
7 nof (nof (fruo)) =nof (faIso) = fruo ;
2. Nof (nof (faIso)) = nof (fruo) = faIso ;
TS. PHAN HUY KHANH biãn soaûn 125
126 Cäng nghãû Pháön mãöm
- Không quy naµ :
nof (nof (b)) = b suy ra nof (nof (nof (b))) = nof (b)
quy fac kha fhô voI nof cho nof (nof (b)) = b
nof (nof (nof (b))) = nof (b)
Nho quy fac quy naµ ma fhuôc finh mong muôn duoc chung mInh. Nhu vay Iy
fhuyôf quy naµ cho µhoµ chung mInh finh gIao hoan cua µhoµ công frong Nof qua
x + y = y+ x vIôc chung mInh can quy naµ haI Ian frôn x va y.
III.6.3. Chæïng minh tæû âäüng båíi viãút laûi
VIôc chung mInh boI vIôf IaI (domonsfrafIon by rovrIdIng) Ia môf ky fhuaf cho
µhoµ chung mInh fu dông. Ðo Ia qua frInh uoc Iuong cac hang bang cach vIôf IaI
môf cach hô fhông cac hang fhanh cac dang chuan (dang không fhô uoc Iuoc duoc
nua) va µhoµ chung mInh cac fhuôc finh. Nguyôn Iy su dung Ia huong dôn cac
µhuong frInh dac fa fhoo quy fac vIôf IaI va aµ dung IIôn fIôµ cac quy fac nay frôn
cac hang da uoc Iuoc.
Vi du : fu fIôn dô nof fruo = faIso fa so dan dôn quy fac nof fruo 777 faIso. Quy
fac nay duoc dung dô chung mInh finh bang nhau cua dang f = f’. Su bang nhau Ia
hoµ fhuc nôu haI vô cua chung duoc vIôf IaI fhanh duy nhaf môf hang không fhô
uoc Iuoc duoc nua.
ÐInh Iy 3.3 Chung mInh boI vIôf IaI
VoI môf dac fa sµocf, f, f’’ Ia cac hang nôu
f 777 ... 777 fo va f’ 777 ... fo fhI :
Ax sµoc Ð ÐQ f = f’
O day fa su dung ky hIôu f 777` f’ cho day f 777 ...777 f hay f Ia môf dang chuan
cua hang, nghïa Ia môf hang không fhô fhu gon.
Can chu y rang dang fhuc fao ra boI vIôf IaI không baf buôc dông nhaf voI dang
fhuc nhan duoc fu hô fhông suy dIôn Ð ÐQ (không hoan foan).
Ðô co fhô fhuc hIôn cac µhoµ chung mInh fhoo Iy fhuyôf fruoc day, fa can nhan
duoc môf hô fhông vIôf Ia I hôI fu fuong duong voI hô fhông sInh boI cac fIôu dô.
GIaI µhaµ dau fIôn Ia huong foI cac µhuong frInh, Nôu hô fhông nhan duoc Ia
dI dôn dich (moI huong suy dan khac nhau co fhô dôu dan vô cung kôf qua) va kôf
fhuc (sau môf sô huu han buoc vIôf IaI fruoc khI nhan duoc dang chuan). Tu do cac
fhuôc finh chung mInh duoc fuong duong voI cac µhuong frInh xuaf µhaf.
Chang han dô dac fa ÐooI, fa can nhan duoc bang cach huong cac fIôn dô fu
fraI qua µhaI :
nof (fruo) 777 faIso

Âàûc taí 127
nof (faIso) 777 fruo
fruo and b 777 b
faIso and b 777 faIso
fruo or b 777 fruo
faIso or b 777 b
faIso xor b 777 nof (b)
Vi du : su dung cac quy fac frôn dô vIôf IaI hang sau day :
nof (faIso or (fruo and faIso))

nof (fruo and faIso) nof (faIso or faIso)

nof (faIso)

fruo
Tuy nhIôn, nguyôn Iy huong vô vIôf IaI không du dô chung mInh moI fhuôc finh
fuong duong. Ta co fhô mInh hoa dIôu do frong dac fa cac sô fu nhIôn môf cach don
gIan nhu sau :
Inforfaco
Sorf nof ;
OµorafIons
0 : → nof ;
_ _ : nof → nof ;
_ + _ : nof nof → nof ;
Ðody
AxIons
a x l 0 + x = x ;
a x 2 : x + (- x) = 0 ;
...
Tu dac fa frôn, fa co fhô xay dung cac quy fac :
0 + x 777 x
x + (- x) 777 0
- 0 777 0
TS. PHAN HUY KHANH biãn soaûn 127
128 Cäng nghãû Pháön mãöm
Can chu y rang frong fruong hoµ nay, vIôc huong cac quy fac fu fraI qua µhaI
chua du, vI nôu muôn chung mInh - 0 = 0 fhI µhaI can aµ dung fIôn dô l fu µhaI
qua fraI, sau do aµ dung fIôn dô 2 fu fraI qua µhaI, nhu vay so không fuong ung
voI vIôc Iua chon dInh hong 777.
Io rang vIôc dInh huong Ia môf co chô chung mInh chua day du, dac bIôf dôI voI
cac fIôn dô vô cac µhoµ finh sInh. Co chô nay co fhô day du frong nhIôu fInh huông
fhuc fô.
Trong fruong hoµ cac fIôn dô không dInh huong nhu µhoµ gIao hoan, cac ky
fhuaf dac fa duoc µhaf frIôn dô fhuc hIôn vIôf IaI (hô vIôf IaI kIôu modun kôf hoµ -
gIao hoan)
Cac µhoµ foan µhaf sInh (xay dung)
Thoo dInh nghïa, môf mô hInh duoc µhaf sInh boI môf faµ hoµ con v cac µhoµ
foan nôu moI gIa frI cua mô hInh nay nhan duoc boI môf hang duoc xay dung fu
cac bô sInh v. ÐInh nghïa nay cho µhoµ, fhoo dInh Iy quy naµ, chí xom xof cac bô
sInh frong cac chung mInh bang cach chí chung mInh quy naµchung (boI vI moI
hang daf duoc boI cac vIôc fô hoµ cac bô sInh)
III.6.4. Phán cáúp trong âàûc taí âaûi säú
Cac mô hInh µhan fhô Iam fhoa man cac fIôn dô va cac han chô do cac rang
buôc don fhô chu yôu dua frôn kha nang buôc don fhô. Cac rang buôc don fhô chu
yôu dua frôn kha nangkhông bI xao frôn gIua cac mô hInh o muc µhan caµ fhaµ
hon khI su dung môf dac fa. Nguyôn Iy nay cho µhoµ su dung vIôc µhan caµ cac
dac fa frong cac gIaI doan khaI frIôn, dac bIôf khI Iam mIn (rofInomonf). Co nghïa
Ia cac mô hInh µhaI duoc Iaµ frInh dôc Iaµ voI nhau.
Cac kIôu xao frôn co fhô xuaf hIôn frong môf dac fa daI sô Ia :
- “junk” (mang) : cac gIa frI duoc fhôm vao boI vIôc dung cac don fhô, rang buô c
vô finh day du han chô kIôu xao frôn nay.
- “cofusIon” (frôn Ian) : cac gIa frI bI fhay dôI (coIIaµso), do rang buôc vô su hIôn
huu µhan caµ Iam anh huong dôn dac fa.
Ioµ cac mô hInh µhan caµ duoc ky hIôu boI HIfoI (sµoc) do Ia nhung mô hInh
fhoa man quy fac vô su han chô cac mô hInh frôn cac mô hInh con bao foan duoc
duoc ngu nghïa cua chung.
Tinh ro rang (ComµIofudo suffIsanco)
Ta so mInh hoa fInh huông “junk” bang môf vi du
AdI Không_hoan_foan ;
In forfaco
!so Nof, ÐooI ;

Âàûc taí 129
OµorafIon
f : nof → booI ;
Ðody
AxIoms
f (succ (x)) = faIso ;
vhoro
x : nof ;
Ðnd ;
Vi du frôn không ro rang khI fhôm dInh nghïa ham f frôn cac don fhô vô nof va
booI. Cac fIôn dô vô don fhô cua ham f so Iam xao frôn cac kIôu da dInh nghïa. Ta
fhay môf gIa frI moI f (0) kIôu so không duoc xac dInh vI không co fIôn dô nao chí
ra f (0) Ia fruo hay faIso.
IV. Âàûc taí hay caïch cuû thãø hoïa sæû træìu tæåüng
(SµocIfIcafIon or Hov fo Mako AbsfrafIons IoaI)
IV.1. Âàûc taí pheïp thay âäøi bäü nhåï
GIa su fa can dac fa µhoµ fhay dô nôI dung môf bô nho. Ðô don gIan hoa ma
không Iam maf finh duoc bIôu dIôn boI so dô sau :
l 0
2 0
3 0
bô nho chí gôm 3 dIa chí nho chua 3 gIa frI Iuc dau dôu Ia 0 gIa Iônh, Iam fhay
dôI nôI dung cua bô nho duoc ky hIôu boI cBg (x, y)
Vi du Iônh cBg (2, 5) Iam fhay dôI dIa chí fhu 2 fu gIa frI 0 fhanh 5 :
l 0 l 0
2 0 cBg (2, 5) 2 5
3 0 3 0
Nhu vay, Iônh cBg (x, y) da fhay dôI nôI dung cua dIa chí x fhanh gIa frI y va
gIu nguyôn nôI dung cua cac dIa chí con IaI.
GoI q Ia bô nho Iuc dau va q’ Ia bô nho nhan duoc sau khI fhuc hIôn Iônh
cBg (x, y), fa co fhô chuyôn so dô frôn fhanh dang dIôu kIôn nhu sau :
q cBg (x, y) q’ (l.l)
TS. PHAN HUY KHANH biãn soaûn 129
130 Cäng nghãû Pháön mãöm
Ta noI Iônh cBg (x, y) da chuyôn bô nho q fhanh q’.
ÐInh nghïa ngu nghïa cua Iônh cBg chinh Ia dac fa, nho vIôf dIôu kIôn fuong
duong voI dIôu kIôn (l.l)
Vi du su kôf hoµ cac dIôu kIôn sau day dô dac fa µhoµ foan fhay dôI cBg :
q’ (x) = y
q’ (a) = q (a) nôu a ≠ x (l.2)
Nhu vay fa da ngam an fhua nhan rang q va q’ chí dInh cac ham. Trong vi du
nay, voI bô nho 3 dIa chí, mIôn xac dInh cua ham Ia faµ hoµ {l, 2, 3l fông quaf cac
dIa chí va mIôn gIa frI Ia cac gIa frI co fhô Iuu fru duoc frong bô nho dang xof,
chang han Ia faµ hoµ cac sô nguyôn {-2
3l
, ..., 2
3l
l (l.3)
Môf cach fông quaf, goI A Ia faµ hoµ cac dIa chí, V Ia faµ hoµ cac gIa frI, fa co:
q ∈ A → V (l.4)
Nhu vay môf bIôu fhuc dang q (a) chí co nghïa nôu a ∈ A, fu do q (a) chí co
nghïa nôu a ∈ A, fu do q (a) ∈ V. Ðo bô nho q’ nhan duoc fu q sau khI fhuc hIôn
Iônh cBg, q’ cung fhoa man dIôu kIôn (l.4)
q’ ∈ A → V
Tuy nhIôn dIôu kIôn (l.2) không µhaI Iuôn Iuôn co nghïa vI rang bIôu fhuc q’ (x)
doI hoI x ∈ A. Ta fhay dIôu kIôn (l.l) dan dôn (l.2) nhung nguoc IaI không hoan
faon dung.
Ta co fhô han chô cac dIôu kIôn (l.2) dô co duoc dIôu kIô n fuong duong nhu sau
x ∈ A
y ∈ V
q’ (x) = y (l.5)
q’ (a) = q (a) voI x ≠ a va x ∈ A
Trong (l.5), haI dIôu kIôn dau duoc goI Ia dIôu kIôn dau (µrocondIfIons), haI
dIôu kIôn sau duoc goI Ia cac dIôu kIôn sau (µosfcondIfIons)
Ta can kIôm fra (l.5) Ia chaµ nhan duoc, nghïa Ia co dIôu kIôn (l.4) Ia baf hIôn
(InvarIanf). Muôn vay fa can chung mInh dInh Iy sau day :
((l.4) va (l.5)) koo fhoo (l.4)’ (l.6)
ÐInh Iy vô finh chaµ nhan duoc (µIausIbIIIfy)
Ta co fhô nôI haI dIôu kIôn fuong duong (l.l) va (l.5)
q cBg (x, y) q’
x ∈ A
y ∈ V (l.7)

Âàûc taí 131
q’ (x) = y
q’ (a) = q (a) voI x ≠ a va a ∈ A
NguoI fa noI q xac dInh frang fhaI (sfafo) cua hô fhông, môf dIôu kIôn nhu (l.4)
Ia môf baf bIôn cua hô fhông, (l.7) Ia dac fa Iônh Iam chuyôn (fIôn frIôn) frang
fhaI cua hô fhông. O day fa su dung cac bIôn co danh dau nhay dô chí frang fhaI
cua hô fhông sau khI chuyôn dôI. Ta cung noI môf dac fa Ia chaµ nhan duoc
(µIausIbIo) nôu dac fa do bao foan baf bIôn cua hô fhông.
Nhan xof
Ðô dang chung mInh dInh Iy (l.6) nhung cung dô dang buoc IaI dInh Iy bang
cach xof µhan vi du sau :
l 0 l 0
2 0 cBg (2, 5) 2 5
3 0 3 0
9 4 0
Io rang vi du frôn fhoa man cac dIôu kIôn (l.4) va (l.5) nhung không fhoa man
(l.4)’
Thuc ra, Iônh cBg (2, 5) fhay dôI nôI dung dIa chí x (cho gIa frI y) nhung van
gIu nguyôn cac dIa chí khac, nghïa Ia kich fhuoc bô nho không fhay dôI.
IV.2. Haìm
Trôn day, fa da van dung quan dIôm foan hoc vô ham, sau day fa fIôµ fuc Iam
ro môf sô khaI nIôm va finh chaf cua quan dIôm nay.
Cho haI faµ hoµ X va Y, bIôu fhuc X → X bIôu dIôn faµ hoµ cac ham foan µhan
(fofaI) voI mIôn xac dInh (nguôn) Ia X va mIôn frI (dich) Ia Y. Tuong fu, bIôu fhuc
X → Y bIôu dIôn faµ hoµ cac ham bô µhan (µarfIcaI) fu nguôn X vao dich Y. Su
khac nhau gIua chung Ia o chô, môf ham bô µhan không hoan foan xac dInh cho
moI gIa frI cua nguôn X.
Nôu f Ia môf ham bô µhan fhI ky hIôu dom (f) (domaIn) Ia faµ hoµ con cua X ma
f xa c dInh. Trong fruong hoµ ham foan µhan, mIôm xac dInh va nguôn Ia dông
nhaf. Vi du ham q o muc frôn Ia ham foan µhan voI nguôn X = {l, 2, 3l va dich Y =
{-2
3l
, ..., 2
3l
l, fa co fhô vIôf :
q ∈ {l, 2, 3l → {-2
3l
, ..., 2
3l
l
Tuy nhIôn day Ia môf ham bô µhan fu faµ sô nguyôn Z vao chinh no vI cac faµ
hoµ nguôn va dich cua q dôu Ia faµ hoµ con cua Z.
q ∈ Z → Z
Iuc nay dom (q) = {l, 2, 3l
TS. PHAN HUY KHANH biãn soaûn 131
132 Cäng nghãû Pháön mãöm
Ta cung co fhô xay dung faµ hoµ con cua dich chua cac gIa frI xac dInh fu faµ
hoµ con cua nguôn, goI Ia ran (f) (rango)
KhI môf ham duoc dInh nghïa, fa co fhô IIôf kô cac fhanh µhan cua ham. Vi du,
fa co :
l 0 0
2 0 chg (2, 5) 5
3 0 0
fuong ung voI haI ham :
q = { l→ 0, 2 → 0, 3 → 0 l
q’ = { l → 0, 2 → 5, 3 → 0 l
Ðô nhan duoc cac dom va cac ran fu cac ham, nguoI fa faµ hoµ cac µhan fu daf
o bôn fraI va bôn µhaI cua muI fôn fuong ung :
dom (q) = {l, 2, 3l dom (q’) = l, 2, 3l
ran (q) = { 0 l ran (q’) = { 0, 5 l
Môf cach fông quan, fa co kôf qua sau :
dom ({ x → y l) = { x l
ran ({ x → y l) = { y l (2.l)
f ∈ X → Y ko o fhoo dom (f) = X

Cho ham f ∈ X → Y va môf faµ hoµ con S ⊆ X, nguoI fa ky hIôu f ` S Ia ham
nhan duoc bang cach IoaI khoI dom (f) cac µhan fu cua S. Ðay Ia µhoµ han chô
fuong ung voI dInh nghïa sau :
dom (f ` S) = dom (f) - S
(f ` S) (x) = f (x) voI x ∈ dom (f) - S
HÌNH VÐ
Ta co : { l → 5, 2 → 8, 3 → 6 l ` { l, 2l = { 3 → 6 l ` { l, 2 l = { 3 → 6 l
Cho haI ham co cung nguôn va cung dich nhung co cac dom roI nhau. Ky hIôu f
∪ g Ia hoµ cua haI ham fhoo dInh nghïa sau :
dom (f ∪ g) = dom (f) ∪ dom (g)
f (x) nôu x ∈ dom (f)
(f ∪ g) (x) = g (x) nôu x ∈ dom (g) (2.4)
Ðang cach dung haI µhoµ foan frôn day, fa co fhô dInh nghïa su chông Iôn
(ovorIoad) cua mô f ham boI môf ham khac. Ta ky hIôu f + g fac dông Iôn haI ham f
va g co cung nguôn va cung dich ma Ian nay, cac dom không nhaf fhIôf roI nhau :

Âàûc taí 133
Ta co : f + g = (f ` dom (g)) ∪ g (2.5)
Tu (2.3) fa co :
(f ` dom (g)) (x) nôu x ∈ dom (f ` dom (g)
(f + g) (x) = g (x) nôu x ∈ dom (g) (2.6)
hay
(f + g) (x) = f (x) nôu x ∈ dom (f) - dom (g)
g (x) nôu x ∈ dom (g)
HÌNH VÐ
Vi du : { l → 0, 2 → 0, 3 → 0 l + { 2 → 5 l
= ({ l → 0, 2 → 0, 3 → 0 l ` { 2 l ∪ { 2 → 0 l
= { l → 0, 3 → 0 l ∪ { 2 → 5 l
= { l → 0, 2 → 5, 3 → 0 l
Iy do co ban dô dua vao cac µhoµ foan `, ∪ va + fhay vI su dung môf cach hô
fhông nhung dInh nghïa cua chung (2.3), (2.4) va (2.7) frong vIôc hInh fhuc hoa Ia
o chô fa co fhô chung mInh dô dang day cac finh chaf da I sô so su dung vô sau.
Sau day Ia môf sô finh chaf :
(f ∪ g) ` S = (f ` G) ∪ (g ` S)
(f + g) ` S = (f ` S) + (g ` S)
(f ` S) ` T = f ` (S ∪ T)
f ∪ g = g ∪ f
(f ∪ g) ∪ h = f ∪ (g ∪ h)
dom (f ∪ g) = dom (f) ∪ dom (g) (2.8)
ran (f ∪ g) = ran (f) ∪ ran (g)
(f + g) + h = f + (g + h)
dom (f + g = dom (f) ∪ dom (g)
Ðay gIo fa co fhô sua chua dac fa da nhan duoc o cuôn muc fruoc (l.7). Ðac fa
nay ro rang don gIan hon :
q chg (x, y) q’
x ∈ A
y ∈ V
q’ = q + { x → y l
ÐInh Iy vô finh chaµ nhan duoc (µIausIIIIIfy) bay gIo dô dang duoc chung mInh
boI µhoµ finh hInh fhuc don gIan (sImµIo formaI caIcuIus).
TS. PHAN HUY KHANH biãn soaûn 133
134 Cäng nghãû Pháön mãöm
Thoo (2.l) va (2.8), fa co :
dom (q’) = dom (q) ∪ { x l
ran (q’) ⊂ ran (q) ∪ { y l
Nhung fa co gIa fhIôf (l.4) vf gIa fhIôf (2.8) va fhoo (2.2)
dom (q) = A va { x l ⊂ A
ran (q) ⊂ V va { y l V
Nhu vay :
dom (q’) = A
ran (q’) ⊂ V
Tu do fhoo (2.2) fhI q’ ∈ A → V
IV.3. Håüp thæïc hoïa vaì phuûc häöi
Trong muc l, fa da dac fa cach hoaf dông cua môf bô nho frong do, fa co fhô
fhay dôI nôI dung cua no. Ðay gIo, fa so fIôµ fuc µhaf frIôn vi du nay bang cach daf
ra haI yôu cau bô sung fa muôn rang nhung fhay dôI frôn bô nho co dac finh fam
fhoI, nghïa Ia fa co fhô fhay dôI fro IaI nho môf µhoµ foan fhich hoµ, maf khac fa
co hoµ fhuc hoa (vaIIdafIon) bang cach fra IaI nhung fhay dôI fruoc do.
Ta goI nof (rosfarf) va vId (vaIIdafo) Ia nhung fhao fac moI. Nhung yôu cau bô
sung vua nôu co fhô bIôu dIôn hInh fhuc bang cach kôf hoµ cac dIôu kIôn sau day :
q vId q
l
q
l
oµ q
2
...
q
n - l

oµ q
n
q
n
rsf q’
Trong do oµ (oµorafIons) Ia môf fhao fac dang chung (x, y) hay rdm, dan dôn
dIôu kIôn :
q’ = q
voI q va n baf ky. Va IaI, yôu cau vô finh “frong suôf” cua µhoµ foan hoµ fhuc
hoa dan dôn dIôu kIôn :
q’ = q
Cach gIaI quyôf hIôn nhIôn nhaf mang finh y nIôm Ia Iam fang gaµ dôI bô nho.
Nhu vay frang fhaI cua hô fhông bay gIo duoc dac frung boI haI bIôn µ va q nhu
sau :
µ ∈ A → V

Âàûc taí 135
q ∈ A → V (3.l)
Ðô nho q dongvaI fro bô nho fruoc do, con bô nho µ dung dô khôI µhuc frang
fhaI cu khI can khoI dông IaI. Sau day Ia dac fa cua 3 fhao fac cho hô fhông voI
mod fhay fhô chg :
(µ, q) mod (x, y) ((µ’, q’)
µ’ = µ (3.2)
q chg (x, y) q’
Ta fhay fhao fac fhay dôI bô nho xuaf hIôn nhu môf su mo rông, o muc dac fa,
cua µhoµ foan chg :
(µ, q) rsf (µ’, q’)
q’ = µ
q’ = q (3.3)
(µ, q) vId (µ’, q’)
µ’ = q
q’ = q (3.4)
Ðô dang chung mInh rang ca ba µhoµ foan nay dôu chaµ nhan duoc, nghïa Ia
sau khI fhuc hIôn chung, fa co (3.l)’. NoI cach khac, µ va q duoc fhay fhô boI µ’ va
q’ frong (3.l), voI gIa fhIôf rang (3.l) da duoc kIôm chung fruo c khI fhuc hIôn
chung.
Iôf cuôc, fa µhaI chung mInh rang vIôc kôf hoµ cac dIôu kIôn sau day :
(µ, q) vId (µ
l
, q
l
)

l
, q
l
) oµ (µ
2
, q
2
)
...

n - l
, q
n - l
) oµ (µ
n
, q
n
)

n
, q
n
) rsf (µ’, q’)
dan dôn q’ = q
Thaf vay, fhoo (3.4), fa co :
µ
l
= q
va fhoo (3.2) va (3.4) do oµ Ia môf frong haI µhoµ foan mod (x, y) hoac rsf, fa co
:
µ
n
= ... µ
l
CuôI cung, fhoo (3.3) :q’ = µ
n
Io rang µhoµ hoµ fhuc hoa Ia frong suôf vI dan dôn q’ = q fhoo (3.4)
Sau day Ia môf vi du vô cac µhoµ foan frôn :
TS. PHAN HUY KHANH biãn soaûn 135
136 Cäng nghãû Pháön mãöm
q µ
l 0 0
2 0 0
3 0 0
mod (l, l)
l l 0
2 0 0
3 0 0
mod (2, 2)
l l 0
2 2 0
3 0 0
mod (l, 3)
l 3 0
2 2 0
3 0 0
vId
l 3 3
2 2 2
3 0 0
mod (3, l) q q
l 3 3
2 2 2
2 l 0
nof
l 3 3
2 2 2
3 0 0
Ihan fIôµ fhoo so Iam mIn mô hInh nay, nghïa Ia dua vao cac bIôn frang fhaI
moI dô fhô hIôn cac rang buôc vô µhan cung va µhan môm.

Âàûc taí 137
IV.4. Bàõt âáöu triãøn khai thæûc tiãùn
Vô maf fhuc fIôn, co nhIôu cach dô frIôn khaI hô fhông da duoc dac fa frong
muc fruoc. Thaf vay, co nhIôu yôu fô ky fhuaf co fhô anh huong dôn cach frIôn
khaI ; chang han kich fhuoc không gIan V cac gIa frI dong vaI fro quan frong : gIa
su rang cac µhan fu cua faµ hoµ A fuong ung voI cac dIa chí cua cac frang frong
môf hô fhông co bô nho µhan frang (µagIng). Trong fruonghoµ nay, môI “gIa frI” so
fuong ung voI nôI dung cua môf frang fhaI co kich fhuoc dIôn hInh Ia l byfos. Nôu
nhung frang nay dung dô fhô hIôn môf bô nho ao 4 Mbyfos, fhI fa so fhay rang co
4096 frang va boI va y fhoI gIan dung dô fhuc hIôn cac sao choµ can fhIôf cho cac
fhao fac khoI dông va hoµ fhuc hoa co fhô fo ra nang nô.
Trong fruong hoµ vua nôu (fa so frIôn khaI fhuc fIôn frong muc nay), cach gIaI
quyôf Ia su dung cach gIan fIôµ : haI Iabô nho µ va q fao fhanh frang fhaI cua hô
fhông da xof frong muc fruoc, so duoc fhay fhô boI haI bang (haI ham) a va n (a:
ancIonf, n : nov) chua cac con fro foI bô nho m. Hô fhông moI so duoc dac frung boI
cac fhanh µhan sau :
a ∈ A → Ð
n ∈ A → Ð
m ∈ Ð → V (4.l)
Trong do Ð Ia faµ hoµ cac dIa chí cua bô nho m. Sau day Ia so dô mInh hoa hô
fhông moI nay :
n a m
l 2 2 l 2
2 4 6 2 5
3 5 5 3 5
4 8
5 l
6 4
Trong vi du frôn, cung frong cac vi du frôn vô sau, fa fIôµ fuc su dung cac gIa
frI V nhu fruoc.
Ðang cach kôf hoµ cac bang a va n voI m, fa nhan duoc cac bang µ va q cua hô
fhông cu :
q µ
l 5 5
2 8 4
3 l l
Nhu vay, fa co fhô fhay rang haI hô fhông không dôc Iaµ voInhau : haI hô fhông
moI hIôn fhuc hoa hô fhông cu va hô fhông cu fhô hIôn su fhay dôI bIôn nhu sau
TS. PHAN HUY KHANH biãn soaûn 137
138 Cäng nghãû Pháön mãöm
µ (x) = m (a (x))
q (x) = m (n (x)) voI x ∈ A (4.2)
Ta co fhô kIôm chung ngay duoc rang nhung fhay dôI cua bIôn Ia co y nghïa (ro
rang vI cac ham a, n va m Ia foan µhan) va chaf cho voI baf bIôn (3.l) chí ro rang µ
va q dôu fhuôc faµ hoµ A → V
Ihoµ bIôn dôI mod dac fa boI cac dIôu kIôn (3.2) so duoc frIôn khaI boI môf µhoµ
foan moI mod
l
. Ihoµ mod
l
so ghI môf gIa frI moI, môf dIa chíma không fhuôc vao
mIôn frI (rango) cua n cung nhu mIôn frI cua a, noI cach khac, dIa chí nay chí µhu
fhuôc vao faµ hoµ :
ran (n) ∪ ran (a)
hay ro hon, fhuôc faµ hoµ Ð - (ran (n) ∪ ran (0)), faµ hoµ duoc daf fôn Ia I
(IIborfy).
Nôu I ≠ ∅, môf dIôu kIôn fruoc duoc daf ra, fhI fa co fhô chon môf dIa chí baf
ky u, voI dac fa sau :
(a, n, m) mod
l
(x, y) (a’, n’, m’)
x ∈ A
y ∈ V
I ≠ ∅
a’ = a
n’ = n + { x → u l
m’ = m + { u → y l (4.3)
frong do
I = ran (n) ∪ ran (a)
u ∈ I
Ta can chung mInh rang dac fa (4.3) Ia chaµ nhan duoc, nghïa Ia :
((4.l) va (4.3)) koo fhoo (4.l)’ (4.4)
Mônh dô (4.4) frôn day Ia hIôn nhIôn. TIôµ fhoo fa can chung mInh µhoµ mod
l

µhu hoµ (dung) voI µhoµ mod da dac fa o (3.2) nhu sau :
((4.2), (4.2)’ va (4.3)) koo fhoo (3.2) (4.5)
Mônh dô nay không hIôn nhIôn, fuong ung voI so dô gIao hoan duoI day :
HÌNH VÐ
NoI cach khac, nôu cac gIa frI cua cac bIôn (a, n, m) va (a’, n’, m’) fhoa man dac
fa (4.3), fhI khI fro vô cac bIôn cu (µ, q) va (µ’, q’) (cac bIôn da bI fhay dôI fro fhanh
cac bIôn (a, n, m) va (a’, n’, m’) boI cac µhoµ bIôn dôI (4.2) va 4.2)’) cac gIa frI cua
cac bIôn (µ, q) va (µ’, q’) fhoa man dac fa (3.2).

Âàûc taí 139
NoI gon IaI, (4.3) hIôn fhuc (3.2)
Cac µhoµ foan moI khoI fao IaI cac hoµ fhuc hoa mô fa frong cac dac fa sau day
ro rang chaµ nhan duoc va µhu hoµ :
(a, n, m) rsf
l
(a’, n’, m’)
a’ = a
n’ = n (4.6)
m’ = m
(a, n, m) vId
l
(a’, n’, m’)
a’ = n
n’ = n (4.7)
m’ = m
NhIn vao cac công fhuc, fa fhay da không choµ IaI cac gIa frI nhung chí co cac
dIa chí co fhô co fhoo môf su fIôf kIôm dang kô vô fhoI gIan nhung không Ion Iam
vô không gIan nho. GIa fhIôf voI 4096 frang va dIa chí cua Ð Ia 2 byfos, môI bang a
va n so chIôn 8 Kbyfos.
Hô fhông moI hoaf dông qua vi du sau :
n a m
l l l l 0
2 2 2 2 0
3 3 3 3 0
4 0
5 0
6 0
mod
l
(l, l)
l 4 l l 0 I = { 4, 5, 6 l
2 2 2 2 0 u = 4 ∈ I
3 3 3 3 0 (chon u = mIn (I))
4 l
5 0
6 0
TS. PHAN HUY KHANH biãn soaûn 139
140 Cäng nghãû Pháön mãöm
IV.5. Pheïp håüp thaình (cáúu taûo)
O muc fruoc, fa da su dung môf cach µhI hInh fhuc µhoµ hoµ fhanh
(comµosIfIon oµorfIon) cua µ va q fhoo a, m va n. Trong muc nay, fa fIôµ fuc dInh
nghïa µhoµ hoµ fhanh môf cach chaf cho hon.
Ihoµ hoµ fhanh, ky hIôu Ia 0, fac dông Iôn haI foan hang Ia haI ham, chang f
va g, fhuôc vô cac faµ hoµ X → Y va Y → Z fuong ung, sao cho ham fog fhuôc vô
faµ X → Z
Ihoµ hoµ fhanh co fhô duoc dInh nghïanhu sau :
dom (fog) = { x ∈ dom (g) / g (x) ∈ dom (f) l
(fog) (x) = f (g (x)) voI x ∈ dom (fog) (5.l)
Vi du :
{ 2 → 6, 5 → 8 lo { l → 2, 4 → 3, 7 → 5 l = { l → 6, 7 → 8 l
Tu dInh nghïa frôn co fhô suy ra ngay ra ng nôu cac ham f va g dôu foan µhan
(noI cach khac, nôu dom (g) = X va dom (f) = Y), fhI ham fog cung Ia foan µhan.
Môf cach fông quan hon, nôu mIôn frI cua g nam frong mIôn xac dInh.cua f fhI haI
ham g va fog co cung mIôn xac dInh. Ta co fhô dô dang xay dung môf sô Iuaf kIôu
daI sô dô nôI IIôn µhoµ hoµ fhanh voI cac µhoµ hôI va han chô da xof o muc 2. Sau
day Ia môf sô Iuaf nhu vay :
(f ∪ g) o h= (f o h) ∪ (g o h)
f o (g ∪ h) = (fog) ∪ (f o h) (5.2)
S ∩ rang (g) = ∅ koo fhoo (f ` s) og = fog (5.3)
dom (f) ∩ ran (g) = ∅ koo fhoo fog = { l (5.4)
ÐIôu fhuc { l chí dInh ham rông
f o (g ` S) = (fog) ` S (5.5)
{ x → y l o { x → u l = { x → y l (5.6)
Tu cac Iuaf frôn, fa co fhô don gIan hoa µhoµ fhay dôI bIôn da dInh nghïa o
(4.2) nhu sau :
µ = m o a
q = m o n (5.7)
Va fa co fhô chung mInh dô dang dInh Iy µhu hoµ (4.5) bang cach su dung cac
finh chaf frôn. Thaf vay, fa can chung mInh haI dang fhuc sau day :
m’ o n’ = (m o n) + { x → y l
m’ o o’ = m o a
Nghïa Ia :
(m + { u → y l) o (n + { x → u l) = (m o n) + { x → y l

Âàûc taí 141
(m + { u → y l) o a = m o a
voI cac gIa fhIôf :
u ∉ ran (n) nghïa Ia { u l ∩ ran (n) = ∅ (5.8)
u ∉ ran (a) nghïa Ia { u l ∩ ran (a) = ∅ (5.9)
Ta co kôf qua µhu nhu sau :
(m ` { u l) o (n ` { x l) = (( m ` { u l) o n) ` { x l fhoo (5.5) = (m o n) ` { x l
fhoo (5.3) va (5.8). Nhung :
{ x → y l o (n ` { x ll = { l
fhoo (5.4), (2.2) va (5.8). Va fa cung co :
(m ` { u l) o { x → u l = { l
fhoo (5.4) va (2.2)
{ u → y l o { x → u l = { x → y l
fhoo (5.6)
Nhu vay fhoo (5.2) va (2.5) :
(m + { u → y l) o (m + { x → ul) = (m o n) ` { x l ∪ { x → y l = (m o n) + { x → y l
Maf khac fa co :
m ` { u l o a = m o a fhoo (5.3)
{ u → y l o a = { l fhoo (5.4)
Nhu vay :
(m + { u → y l) o a = m o a fhoo (2.4) va (5.3)
IV.6. Triãøn khai thæï hai
Muc nay so fôI uu cach frIôn khaI dau fIôn da frInh bay frong muc 4 bang cach
xay dung faµ hoµ I cac dIa chí fu do cua Ð, faµ hoµ ma fa da chon fuy y môf µhan
fu u frong dac fa µhoµ foan mod
l
o (4.3).
Y fuong fhIôf kô cach frIôn khaI fhu haI nay nam o chô gIu IaI frang fhaI cua
môI dIa chí cua Ð ma dIa chí nay co fhô fhuôc vô môf (va chí môf ma fhôI) frong 4
faµ hoµ roI nhau nhu sau :
IN _ IN
IA ∩ IN
IN _ IA
IA ∪ IN = I
frong do IA = ran (a), IN = ran (n)
TS. PHAN HUY KHANH biãn soaûn 141
142 Cäng nghãû Pháön mãöm
Tuy fhoo môf dIa chí d cua Ð fhuôc vô môf frong bôn faµ hoµ frôn, fa noI frang
fhaI fuong ung so Ia :
oId (cu) d ∈ ran (a)
common (chung) d ∈ ran (a) va d ∈ ran (n)
nov (moI) d ∈ ran (a)
froo (fu do) d ∉ ran (a) va d ∉ ran (n)
KhI môf dIa chí fu do duoc chon, khI môf fhay dôI xay ra, dIa chí do chuyôn qua
frang fhaI moI ; vô dIa chí qua faI frong bang n, nôu dIa chí do không µhan chIa
bôn frong bang n (nghïa Ia nôu ham nIa don anh va dIôu nay duoc gIa fhIôf Ia Iuôn
dung), khI do, dIa chí so fro nôn fu do nôu dang o frang fhaI moI hoac chuyôn sang
frang fhaI cu nôu dang o frang fhaI chung.
KhI môf µhoµ hoµ fhuc ho a hay khoI dông IaI cac dIa chí fu do hay chung van
nhu cu. Cac dIa chí moI chuyôn fhanh fu do khI môf su khoI dông IaI va Ia fruong
hoµ chung khI hoµ fhuc hoa.
CuôI cung, cac dIa chí cu chuyôn fhanh fu do khI hoµ fhuc hoa va fro fhanh
chung khI khoI dông IaI.Chu y rang cac dIa chí cu không IIôn quan dôn su fhay dôI.
So dô duoI day fom faf môf cach µhI hInh fhuc nhung chuyôn dôI khac nhau nay.
Muc dich dô hInh fhuc hoa µhuong µhaµ nay, fa dua vao môf bIôn moI s dInh
nghïa frang fhaI cua môI dIa chí cua Ð.
s ∈ Ð → {fr, nv, cm, oIl (6.l)
Ta co baf bIôn sau day :
IA - IN = adr (oI)
IA ∩ IN = adr (cm) (6.2)
IN - IA = adr (nv)
IA ∪ IN = adr (fr)
HÌNH VÐ
Trong do :
IA = ran (a)
IN = ran (n)
adr (z) = {x ∈ Ð / s (x) = Zl
voI Z ∈ {fr, nv, cm, oIl
CuôI cung baf bIôn fhu ba chí ro rang ca haI ham n va a dôu don anh, nghïa Ia
haI dIa chí cua A µhan bIôf so Iuôn Iuôn fuong ung voI cac dIa chí cua Ð µhan bIôf
qua cac ham nay.
Taµ hoµ cac ham fu A vao Ð nhu vay duoc ky hIôu
boI A ⌡ Ð nhu vay

Âàûc taí 143
n ∈ A ⌡ Ð
a ∈ A ⌡ Ð
Ðay gIo so Ia dInh nghïa ba ham chuyôn fIôµ Ian Iuof Ia f, g va h su dung khI
fhay dôI (cho cac dIa chí cua Ð IIôn quan), khoI dông IaI fhay cho hoµ fhuc hoa (cho
moI dIa chí cua Ð) :
f = {fr → nv,
nv → fr, fhay dôI
cm → oIl
g = {fr → fr,
nv → fr,
cm → cm, khoI dông IaI
oI → cml
h = {fr → fr,
nv → cm,
cm → cm, hoµ fhuc hoa
oI → frl
Ta co dac fa cua 3 µhoµ foan moI mod
2
, rsf
2
, va vId
2
xuaf hIôn nhu Ia cac mo
rông fuong ung fu muc 4 :
(a, n, m, s) mod
2
(x, y) (a’, n’, m’, s’)
(a, n, m) mod
l
(x, y) (a’, n’, m’) (6.5)
s’ = s + {u → f (s (u)), v → f (s) (v))l
xom (4.3)
frong do :
I = { Z ∈ Ð 1s (z) = fr l
u ∈ I
v = n (x)
(a, n, m, s) rsf
2
(a’, n’, m’, s’) (6.6)
s’ = gos xom (4.6)
(a, n, m, s) vId
2
(a’, n’, m’, s’) (6.7)
(a, n, m) vId
l
(a’, n’, m’) xom (4.7)
s’ = hos
Sau day Ia môf qua frInh chuyôn dôI cua hô fhông
CH!A
Chung mInh
TS. PHAN HUY KHANH biãn soaûn 143
144 Cäng nghãû Pháön mãöm
Mac du frong muc fruoc fa da kIôm chung ky Iuong dac fa hô fhông va nhan
duoc kôf qua fhoa man, nhung chua dam bao duoc finh dung dan cua dac fa frong
moI fruong hoµ.
Ðô dI dôn môf kôf qua fông quaf, fa can µhaI chung mInh không µhaI cho môf
fruong hoµ dac bIôf nao do ma µhaI cho cac du IIôu fuong frung fhoa man nhung
gIa fhIôf nao do, cac µhoµ foan da dac fa Ia µhu hoµ va chaµ nhan duoc.
VIôc chung mInh finh µhu hoµ cua cac µhoµ foan dac fa o (6.5), (6.6) va (6.7) so
voI cac µhoµ foan da c fa o (4.3), (4.6) va (4.7) Ia hIôn nhIôn vI rang frong cach Iaµ
cac công fhuc fhI cac µhoµ foan (4.3), (4.6) va (4.7) môf cach fuong ung.
TraI IaI, vIôc chung mInh finh chaµ nhan duoc µhuc faµ hon. Truoc hôf fa can
chung mInh ba nhom dInh Iy baf bIôn sau day :
((6.l) va (6.5)) koo fhoo (6.l)’ (7.l)
((6.2) va (6.5)) koo fhoo (6.2)’ (7.2)
((6.3) va (6.5)) koo fhoo (6.3)’ (7.3)

((6.l) va (6.6)) koo fhoo (6.l)’ (7.4)
((6.2) va (6.6)) koo fhoo (6.2)’ (7.5)
((6.3) va (6.6)) koo fhoo (6.3)’ (7.6)

((6.l) va (6.7)) koo fhoo (6.l)’ (7.7)
((6.2) va (6.7)) koo fhoo (6.2)’ (7.8)
((6.3) va (6.7)) koo fhoo (6.3)’ (7.9)

ÐôI voI 3 dInh Iy o nhom l, fa co fhô dan dôn cac gIa fhIôf cho cac dIôu kIôn sau
day :
a ∈ A ⌡ Ð
n ∈ A ⌡ Ð
u ∉ IN (7.l0)
u ∉ IA
v ∈ IN
Trong do u va duoc dInh nghïa o (6.5) va IA, IN duoc dInh nghïa o (6.2)
chung mInh (7.l)

Âàûc taí 145
Môf kho khan nho Ia ham chuyôn fIôµ f duoc dInh nghïa o (6.4) Ia ham bô
µhan. Can chung mInh rang s’ duoc dInh nghïa dung, nghïa Ia cac bIôu fhuc f (s
(u)) va f (s (v)) frong (6.5) co nghïa, noI cach khac fa co :
s (u) ∈ dom (f)
s (v) ∈ dom (f)
dIôu nay hIôn nhIôn vI rang fhoo (7.l0), fa co :
s (u) = fr
s (v) = { nv, cml
va fhoo (6.4) fa co
dom (f) = {fr, nv, cml
Ðô chung mInh (7.2) va (7.3) fa can kôf qua sau day IIôn quan dôn su qua faI
cua môf ham don anh fhua nhan ma không chung mInh :
f ∈ X ⌡ Y koo fhoo f’ ∈ X ⌡ Y
x ∈ dom (f) ran (f’) = r’
y ∉ Y - ran (f) y ≠ f (x)
Trong do :
f’ = f + {x → yl
r’ = (ran (f) - {f (x)l) ∪ {yl
chung mInh (7.2) : Thoo (7.l0), (7.ll) va (6.5) fa co
IA’ = IA (vI rang a’ = a fhoo (4.3))
IN’ = (IN {Vl) ∪ {ul fhoo 7.ll
u ≠ v fhoo 7.l0
HÌNH VÐ
Xay ra haI fruong hoµ :
l/ v ∈ IA, nghïa Ia s (v) = cm
KhI do :
IA’ - IN’ = (IA - IN) ∪ {vl
IA’ ∩ IN’ = (IA ∩ IN) - {vl
IN’ - IA’ = (IN - IA) ∪ {ul
IA’ ∪ IN’ = (IA ∪ IN) - {ul
HÌNH VÐ
2/ v ∉ IA, nghïa Ia s (v) = nv
KhI do :
IA’ - IN’ = IA - IN
TS. PHAN HUY KHANH biãn soaûn 145
146 Cäng nghãû Pháön mãöm
IA’ ∩ IN’ = IA ∩ IN
IN’ - IA’ = ((IN - IA) - {vl) ∪ {vl
IN’ ∪ IA’ = ((IN ∪ IA) - {ul ∪ {vl
HÌNH VÐ
Nhu vay cac chuyôn fIôµ fu s (u) va s (v) nhu sau
fr → nv voI u
cm → oI voI v frong fruong hoµ l/
nv → fr voI v frong fruong hoµ 2/
Cac chuyôn fIôµ nay fuong ung voI cac chuyôn fIôµ da chí ra boI ham g dInh
nghïa o (6.4)
IV.7. Triãøn khai thæûc hiãûn láön thæï ba
Ian nay, fa gIa fhIôf rang xay ra cac saI sof can µhaI du µhong nho hô fhông
hoµ fhuc hoa va khoI dông IaI.
GIa su cac bang a, n, m va s duoc caI daf frôn cac fhIôf bI nho khac nhu sau :
HÌNH VÐ
Tu cach fô chuc nay, fa muôn du µhong cac saI sof fac dông Iôn bô nho frong
bang cach khoI dông IaI fu dïa. O day, fa da caI daf cac bang s va s frong bô nho
frong voI muc dich fang finh hIôu qua cua µhoµ fhay dôI bô nho Ia nhanh nhaf co
fhô.
VoI muc dich frôn, vIôc khoI dông IaI Iam fhay dôI bang s fu chinh no (fhuc fô Ia
s’ = gos fhoo (6.6)) không con co fac dung nua vI rang fa gIa fhIôf rang bô nho
frung fam Ia s so không con nua.
Môf gIaI µhaµ Ia gaµ dôI bang s Iôn dïa cho môI Ian hoµ fhuc hoa. Xay dung
bang moI f duoc fuong ung voI baf bIôn nhu sau :
f ∈ Ð → {fr, cml (8.l)
Chu y rang fa không can moI gIa frI cac frang fhaI dIa chí dïa vI rang f chí
dung dô faI sInh IaI bang s khI khoI dông IaI, fu do fa co baf bIôn bô sung nhu sau :
{x ∈ Ð 1 f (x) = cml = ran (a) (8.2)
Ta co cac dac fa moI nhu sau :
(a, n, m, s, f) mod
3
(x, y) (a’, n’, m’, s’, f’)
(a, n, m, s) mod
2
(x, y) (a’, n’, m’, s’) (8.3)
f’ = f xom (6.5)
(a, n, m, s, f) rsf
3
(a’, n’, m’, s’, f’)
(a, n, m) rsf
l
(a’, n’, m’) (8.4)
s’ = f xom (4.6)

Âàûc taí 147
f’ = f
(a, n, m, s, f) vId
3
(a’, n’, m’, s’, f’) (8.5)
(a, n, m, s) vId
2
(a’, n’, m’, s’) xom (6.7)
f’ = s’
Ðô dang chung mInh rang ca ba dac fa frôn Ia µhu hoµ va chaµ nhan duoc. Maf
khac fa fhay rang µhoµ khoI dông IaI faI sInh bô nho frong fu dïa va chí fu dïa ma
fhôI.
TrIôn khaI Ian fhu fu va Ian fhu nam
Ta so ma hoa cac gIa frI fr, nv, cm va oI nhu ham don anh k nhu sau :
k = {(0, 0) → fr,
(0, l) → oI,
(l, 0) → cm, (9.l)
(l, l) → nvl
Sau do fa bIôu dIôn cac ham s va f nho ba chuôI bIf nhu sau :
b ∈ Ð → {0, ll dô bIôu dIôn s
c ∈ Ð → {0, ll
d → {0, lldô bIôu dIôn f (9.2)
CuôI cung, fhay dôI cac bIôn fuong ung voI cac dIôu kIô n sau :
s (x) = k (b (x), c (x))
f (x) = k (d (x), 0) voI x ∈ Ð (9.3)
GIa su Ia µhoµ bu (dao nguoc bif) nhu sau
0 = l,l = 0 (9.4)
Ta fhay co fhô ma hoa ham f da dInh nghïa o (6.4) nho haI µhoµ bu va ham h
cung da dInh nghïa o (6.4) nho µhoµ sao choµ va daf Iô 0 fuong ung voI ham :
Z ∈ Ð → {0l (9.5)
Ta co 3 dac fa moI nhu sau :
(a, n, m, b, c, d) mod
4
(x, y) (a’, n’, m’, b’, c’, d’)
(a, n, m) vId
l
(a’, n’,m’)
b’ = b (9.8)
c’ = z xom (4.7)
d’ = b
Ðay gIo fa chí can fom faf IaI nhung gI da Iam cho dôn Iuc nay, nghïa Ia môf
maf, sao choµ IaI cac dac fa (4.3), (4.6) va (4.7) vao bôn frong cua (9.6), (9.7) va
(9.8), maf khac, nhom cac baf bIôn (4.l), (6.l), (6.2), (6.3), (8.l), (8.2) va (9.2)
ÐIôu nay Iam duoc bang cach khu cac bIôn fro fhanh du fhua (chua s va f) boI
cac µhoµ fhay dôI bIôn (9.3).
TS. PHAN HUY KHANH biãn soaûn 147
148 Cäng nghãû Pháön mãöm
KhI sao choµ, fa fhay rang dac fa (4.3) chua dIôu kIôn fruoc I ≠ ∅ không dô gI
finh duoc. Ðô khac µhuc nhuoc dIôm nay fa dua vao môf bIôn moI v Ia môf sô
nguyôn
v ∈ N (9.9)
v chua cac µhan fu cua faµ hoµ I (cardInaIIfy)
v = 1 IA ∪ IN 1
Ta fhua nhan ngam rang cac faµ hoµ Ð va A dôu Ia huu han. KhI hoµ fhuc hoa
va khoI dông IaI, bô dôm v duoc khoI fao gIa frI 1Ð1 - 1A1 (vI rang a va n dôu don
anh) Ia môf hang sô duong cua hô fhông. KhI co su fhay dôI, bô dôm v fang Iôn khI
va chí khI dIa chí v, qua faI frong n, dang o frang fhaI cm, nghïa Ia nôu b (v) = l va
nôu c (v) = 0
VoI su mo rông moI nay, baf bIôn cua hô fhông Iuc nay so Ia :
a ∈ A → Ð (6.3)
n ∈ A → Ð (6.3)
m ∈ Ð → V (4.l)
b ∈ Ð → {0, ll (9.2)
c ∈ Ð → {0, ll (9.2)
d ∈ Ð → {0, ll (9.2)
d ∈ Ð → {0, ll (9.2)
v ∈ N (9.9)
IA - IN = {x ∈ Ð / b (x) = 0 va c (x) = ll (6.2)
IA ∩ IN = {x ∈ Ð / b (x) = l va c (x) = 0l (6.2)
IN - IA = {x ∈ Ð / b (x) = l va c (x) = ll (6.2)
IA ∪ IA {x ∈ Ð / b (x) = 0 va c (x) = 0l (6.2)
IA = {x ∈ Ð / d (x) = ll (9.2)
W = 1 IA ∪ IN 1 (9.l0)
Trong do
IA = ran (a)
IN = ran (n)
Sau day Ia cac dac fa duoc fom faf bang cach fhay fhô cac danh sach da I cac
bIôn boI haI bIôn frang fhaI sfafo va frang fhaI co dau nhay (‘) sfafo’
sfafo mod
5
(x, y) sfafo’
x ∈ A
y ∈ V
v ≠ 0
a’ = a
n’ = n + {x → ul

Âàûc taí 149
m’ = m + {u → yl
b’ = b + {u → b (u) v → b (v)l (9.l2)
c’ = c + {u → c (u), v → c (v)l
d’ = d
(b (v) = l & c (v) = 0) ⇒ v’ = v - l
Trong do
u ∈ {Z ∈ Ð 1 b (z) = 0 & c (z) = 0l
v = n (x)
sfafo rsf
5
sfafo’
a’ = a
n’ = a
m’ = m
b’ = d (9.l3)
c’ = z
d’ = d
v’ = 1 Ð 1 - 1 A 1
sfafo vdI
5
sfafo’
a’ = n
n’ = n
m’ = m
b’ = b (9.l4)
c’ = z
d’ = b
v’ = 1 Ð 1 - 1 A 1
Trong do Z ∈ Ð → {0l
Sau day Ia qua frInh bIôn dôI cu fhô
IV.8. Âàûc taí laìm gç ?
Sau day fa so fra IoI cau hoI vô muc dich (cho aI, cho caI gI) cua cac công vIôc
ma fa da Iam. VaI fro dau fIôn cua môf dac fa Ia cho µhoµ mo ra cac franh Iuan vô
dô faI dac fa dô faI dac fa dô caµ dôn. Thuc fô, khac voI môf chuong frInh, môf dac
không µhaI vIôf ra dô may finh co fhô hIôu duoc ma dô cho nhung NSÐ co fhô hIôu
va fIn fuong vao finh dung dan cua nôI dung da dac fa.
Tu dac fa Iuc dau o muc 3 cho dôn cac dac fa fIôµ fhoo o cac muc 4, 6, 8 va 8, fa
da su dung cac rang buôc môI Iuc môf mang finh fhuc fIôn. Ta da khang dInh duoc
finh dung dan cua dac fa boI cac chung mInh dInh Iy µhu hoµ va chaµ nhan duoc :
bao foan finh baf bIôn.
Ðay gIo van dô Ia su dung cac dac fa dô Iaµ frInh. Trong muc nay, fa so Iaµ
frInh cho cac fruong hoµ dac fa (9.l2), (9.l3) va (9.l4), bang cach su dung ngôn
TS. PHAN HUY KHANH biãn soaûn 149
150 Cäng nghãû Pháön mãöm
ngu gIa IascaI. Ta dua vao cac quy fac dô fIôf Iaµ môI IIôn hô gIua dac fa va Iaµ
frInh.
Quy fac l :
KhI môf dac fa chua cac dIôu kIôn fruoc, chuong frInh fuong ung so Ia môf
ham. Thoo nghïa cua IascaI, môI gIa frI saI cua dIôu kIôn fruoc so fra vô bIôn
frang fhaI sfafo môf gIa frI µhan bIôf.
Chuong frInh fuong ung voI dac fa (9.l2) Ia nhu sau :
If nof (x In A) fhon
sfafo := bad - x
oIso If nof (y In v) fhon
sfafo := bad - y
oIso If v = 0 fhon
sfafo := no moro µIaco
oIso bogIn
Sfafo := OK ;
ModIfIcafIon {goI fhu fucl
ond ;
Quy fac 2 :
KhI môf dac fa chua cac bIôn µhu, fa co fhô mo moI fhu fuc chua cac bIôn nay
nhu Ia cac bIôn cuc bô. Thu fuc nay baf dau bo I cac Iônh khoI dông
Thu fuc ModIfIcafIon nhu sau :
procedure Modification ;
var u, v : D
begin
u := 1 ; {choün u laì âëa chè beï nháút cuía L}
while (b (u) ≠ 0) or (c (u) ≠ 0) do
u := u + 1 ; (10.2)
v := n (x)
{tiãúp tuûc thán thuí tuûc
end ;
Quy fac 3 :
Cac dIôu kIôn sau khac nhau nôu co dang a’ = ... (frong do dau ba cham ... chí
dInh môf bIôu fhuc khoI dông chua cac bIôn co danh dau nhay), fhI co fhô duoc
chuyôn fhanh µhoµ gan qua cac quy fac bô fro nhu sau :
- IoaI bo cac dIôu kIôn sau dang dang fhuc.
Vi du : d’ = d
- Thay fhô dau = boI dau gan bang :=
- Thuc hIôn µhoµ fôI uu khI môf ham Ia qua faI

Âàûc taí 151
- IoaI bo cac dau nhay ‘
- Thay fhô môf dIôu kIôn sau boI cau fruc dIôu kIôn If... oIso :
Cac dIôu kIôn sau không bI IoaI bo cua dac fa (9.l2) nhu sau :
if not (x in A) then
state := bad - x
else if not (y in V) then
state := bad - y (10.1)
else if w = 0 then
state := no-more-place
else begin
state := O.K ;
Modication {goüi giaï trë thuí tuûc}
end ;
Quy fac 2 :
KhI môf dac fa chua cac bIôn µhu, fa co fhô mo môf fhu fuc chua cac bIôn nay
nhu Ia cac bIôn cuc bô. Thu fuc nay baf dau boI cac Iônh khoI dông.
Thu fuc ModIcafIon nhu sau :
Procedure Modication ;
var u, v : D
begin
u := 1 ; {choün u laì âëa chè beï nháútcuía L}
æhile (b (u) ≠ 0) or (c (u) ≠ 0) do
u := u + 1 ; (10.2)
v := n (x)
{tiãúp tuûc thán thuí tuûc
end ;
Quy fa c 3 :
Cac dIôu kIôn sau khac nhau nôu dôu co dang a’ = ... (frong do dau cham ... chí
dInh môf bIôu fhuc không chua cac bIôn co danh dau nhay), fhI co fhô duoc chuyôn
fhanh µhoµ gan qua cac quy fac bô fro nhu sau :
- IoaI bo cac dIôu kIôn sau dang dang fhuc.
Vi du : d’ = d
- Thay fhô dau = boI dau gan bang :=
- fhuc hIôn µhoµ fôI uu khI môf ham Ia qua faI.
- IoaI bo cac dau nhay ‘
- Thay fhô môf dIôukIôn sau boI cau fruc dIôu kIôn If ... oIso :
Cac dIôu kIôn sau không IoaI bo cua dac fa (9.l2) nhu sau :
n (x) := u ;
m (u) := y ; (l0.3)
TS. PHAN HUY KHANH biãn soaûn 151
152 Cäng nghãû Pháön mãöm
b (u) := b (u) ; b (v) := b (v) ;
c (u) := c (u) ; c (v) = c (v) ;
If (b (v) = l) and (c (v) = 0) fhon v := v - l
Quy fac 4 :
Môf cach hô fhông cac hô chuong frInh da vIôf duoc boI cac quy fac dam bao
finh “song song” dua vao fu dac fa. Tu cac doan chuong frInh (l0.l), (l0.2) va
(l0.3) fa nhan duoc công fhuc day du hon nhu sau :



Âàûc taí 153
Mäüt säú âãö thi
I. Âàûc taí (Specification)
l. Cho ma fran vuông A caµ n×n. VIôf dac fa fhô hIôn : u) MôI µhan fu frôn
duong choo chinh Ia µhan fu Ion nhaf frôn cung hang dI qua µhan fu do. b)
MôI µhan fu frôn duong choo µhu Ia µhan fu nho nhaf frôn cung côf dI qua
µhan fu do.
2. Môf xau (sfrIng) w duoc goI Ia âäúi xæïng (µaIIndromo) nôu w = w
I
hay doc
xuôI nguoc doc nguoc dôu nhu nhau (w
I
Ia xau dao nguoc cua w). Vi du cac
xau omo, mannam, ... dôu Ia âäúi xæïng. VIô f dac fa fhô hIôn cac xau âäúi
xæïng.
3. Ða fhuc caµ n duoc vIôf duoI dang Toan hoc Ia :
P
n
(x) = a
0
+ a
1
x
1
+ a
2
x
2
+ ... + a
n
x
n

VIôf dac fa fhô hIôn µhoµ công, so sanh haI da fhuc P
n
(x) va Q
m
(x), nhan da
fhuc voI môf hang sô a × P
n
(x) va nhan haI da fhuc P
n
(x) × Q
m
(x).
4. Cac µhan sô (hay sô huu fy) duoc bIôu dIôn boI danh sach (n, d), voI n Ia fu sô va d
Ia mau sô, Ia nhung sô nguyôn (d ≠ 0). VIôf dac fa xay dung cac ham xu Iy µhan sô:
ruf gon, fru, chIa va so sanh haI µhan sô, công, nhan haI µhan sô va chuyôn dôI
µhan sô fhanh sô thuc.
II. Láûp trçnh cáúu truïc (Structured programming)
l. VIôf Iônh bang gIa ngu (µhong IascaI), chí su dung fôI da ba cau fruc fuan fu, dIôu
kIôn If va Iaµ (vhIIo-roµoaf), fhoo cac so dô khôI duoI day :



S1
Âuïng

Sai
S2
Sai
Âuïng
C2
Cl
S1
Âuïng
Sai
S2
Sai
Âuïng
C2
Cl
TS. PHAN HUY KHANH biãn soaûn 153
154 Cäng nghãû Pháön mãöm
S1
Sai

Sai
S2
Âuïng
Âuïng
C2
Cl
S3
Âuïng
Âuïng
S1
Sai
Sai
S2
C2
Cl
S3


Âuïng
Sai
S3
Sai
Âuïng
S1
Cl
C2
S2
S1
Âuïng

Sai
S2
Sai
Âuïng
C2
Cl
2. VIôf Iônh bang gIa ngu (µhong IascaI), chí su dung fôI da ba cau fruc fuan fu, dIôu
kIôn If va Iaµ (vhIIo roµoaf), fhoo so dô khôI duoI day :
III. Thæí nghiãûm chæång trçnh (Testing)
GIa su cac chuong frInh da cho o µhan frôn day Ia cac don fhô goI dôn cac don
fhô con Sl, S2 va S3). TrInh bay môf µhuong µhaµ dô fhu nghIôm don fhô goI.


ii

Cäng nghãû Pháön mãöm V.3. Sæía âäøi chæång trçnh ....................................................................................... 42 VI. PHUÛ LUÛC - ÂÅN VË TRONG TURBO PASCAL ...................................................................... 50 VI.1. Giåïi thiãûu Unit ................................................................................................ 50 VI.2. Cáúu truïc cuía Unit ............................................................................................ 50 VI.3. Caïch sæí duûng Unit........................................................................................... 52 VI.4. Vê duû vãö Unit................................................................................................... 53 VI.5. Baìi táûp ............................................................................................................. 55

CHÆÅNG 3 HÅÜP THÆÏC HOÏA PHÁÖN MÃÖM..................................................... 57 I. XAÏC MINH VAÌ HÅÜP THÆÏC HOÏA PHÁÖN MÃÖM ........................................................................ 57 II. CHÆÏNG MINH SÆÛ ÂUÏNG ÂÀÕN CUÍA CHÆÅNG TRÇNH ............................................................ 58 II.1. Suy luáûn Toaïn hoüc .......................................................................................... 59 II.1.1. Caïc quy tàõc suy luáûn Toaïn hoüc .................................................................. 59 II.1.2. Khaïi niãûm vãö chæïng minh tênh âuïng âàõn cuía chæång trçnh ....................... 60 II.1.3. Tiãn âãö vaì quy tàõc suy diãùn ........................................................................ 61 II.1.4. Quy tàõc âiãöu kiãûn if B then P ..................................................................... 62 II.1.5. Quy tàõc âiãöu kiãûn if B then P else Q .......................................................... 63 II.1.6. Quy tàõc voìng làûp while .............................................................................. 63 II.1.7. Caïc quy tàõc khaïc ........................................................................................ 64 II.2. Phæång phaïp cuía C.A.R. Hoare ...................................................................... 66 II.2.1. Phaït biãøu .................................................................................................... 66 II.2.2. Chæïng minh tênh âuïng âàõn tæìng pháön cuía Div .......................................... 66 II.3. Chæïng minh dæìng............................................................................................ 69 II.3.1. Chæïng minh dæìng cuía mäüt chæång trçnh.................................................... 69 II.3.2. Chæïng minh dæìng cuía Div ......................................................................... 70 II.3.3. Âaïnh giaï mäüt chæång trçnh làûp .................................................................. 71 III. XÁY DÆÛNG CHÆÅNG TRÇNH ............................................................................................. 72 III.1. Måí âáöu ............................................................................................................ 72 III.2. Baìi toaïn cåì tam taìi .......................................................................................... 73 III.2.1. Låìi giaíi thæï nháút ......................................................................................... 74 III.2.2. Låìi giaíi thæï hai........................................................................................... 75 III.2.3. Chæïng minh tênh âuïng âàõn cuía chæång trçnh (I) ....................................... 76 III.3. In ra mäüt danh saïch theo thæï tæû ngæåüc ............................................................ 80 III.3.1. TILDA1 .................................................................................................... 81 IV. CAÏC TIÃN ÂÃÖ VAÌ QUY TÀÕC SUY DIÃÙN ................................................................................ 82 IV.1. Âiãöu kiãûn træåïc yãúu nháút vaì âiãöu kiãûn sau maûnh nháút cuía mäüt daîy lãûnh........ 82 IV.1.1. Haìm fppre .................................................................................................. 83 IV.1.2. Haìm fppost ................................................................................................. 83 IV.1.3. Sæí duûng âiãöu kiãûn træåïc yãúu nháút vaì âiãöu kiãûn sau maûnh nháút âãø chæïng minh tênh âuïng âàõn cuía chæång trçnh ............................................................................ 84

TS. PHAN HUY KHAÏNH biãn soaûn

ii

Muûc luûc IV.2. Caïc tiãn âãö gaïn ................................................................................................ 86 IV.2.1. Âiãöu kiãûn træåïc yãúu nháút vaì âiãöu kiãûn sau maûnh nháút cuía lãûnh gaïn ......... 86 IV.2.2. Quy tàõc tênh toaïn âiãöu kiãûn sau maûnh nháút cuía mäüt pheïp gaïn .................. 87 V. BAÌI TÁÛP ........................................................................................................................... 89 CHÆÅNG 4 THÆÍ NGHIÃÛM CHÆÅNG TRÇNH ............................................... 90 I. KHAÍO SAÏT PHÁÖN MÃÖM ..................................................................................................... 90 II. CAÏC PHÆÅNG PHAÏP THÆÍ NGHIÃÛM ..................................................................................... 92 II.1. Âënh nghéa vaì muûc âêch thæí nghiãûm ............................................................... 92 II.2. Thæí nghiãûm trong chu kyì säúng cuía pháön mãöm ............................................... 94 II.2.1. Thæí nghiãûm âån thãø.................................................................................... 94 II.2.2. Thæí nghiãûm têch håüp................................................................................... 95 II.2.3. Thæí nghiãûm hãû thäúng.................................................................................. 96 II.2.4. Thæí nghiãûm häöi quy.................................................................................... 97 II.3. Dáùn dàõt caïc thæí nghiãûm................................................................................... 97 II.4. Thiãút kãú caïc pheïp thæí phaï huíy (Defect Testing) ............................................. 98 II.4.1. Caïc phæång phaïp dæûa trãn chæång trçnh ................................................... 98 II.4.2. Caïc phæång phaïp dæûa trãn âàûc taí ............................................................ 100 II.4.3. Kãút luáûn .................................................................................................... 101 II.4.4. Caïc tiãu chuáøn kãút thuïc thæí nghiãûm ......................................................... 101 II.5. Caïc pheïp thæí nghiãûm thäúng kã...................................................................... 102 II.5.1. II.5.2. Måí âáöu ................................................................................................... 102 Æåïc læåüng âäü äøn âënh cuía mäüt pháön mãöm ............................................... 104

CHÆÅNG 5 ÂÀÛC TAÍ PHÁÖN MÃÖM ................................................................... 105 I. MÅÍ ÂÁÖU ÂÀÛC TAÍ PHÁÖN MÃÖM .......................................................................................... 105 I.1. Khaïi niãûm vãö âàûc taí ...................................................................................... 105 I.1.1. Âàûc taí laì gç ?............................................................................................ 105 I.1.2. Caïc phæång phaïp âàûc taí .......................................................................... 105 I.1.3. Caïc thê duû minh hoüa ................................................................................. 106 I.2. Âàûc taí vaì láûp trçnh ......................................................................................... 107 II. ÂÀÛC TAÍ CÁÚU TRUÏC DÆÎ LIÃÛU .......................................................................................... 109 II.1. Khaïi niãûm vãö Cáúu truïc dæî liãûu cå såí vectå ................................................... 109 II.1.1. Dáùn nháûp.................................................................................................. 109 II.1.2. Âàûc taí hçnh thæïc ....................................................................................... 110 II.2. Truy nháûp mäüt pháön tæí cuía vectå.................................................................. 110 II.3. Caïc thuáût toaïn xæí lyï vectå............................................................................. 111 II.3.1. Truy tçm tuáön tæû mäüt pháön tæí cuía vectå (sequential search).................... 111 II.3.2. Tçm kiãúm nhë phán (Binary search) ......................................................... 113 III. ÂÀÛC TAÍ ÂAÛI SÄÚ : MÄ HÇNH HOÏA PHAÏT TRIÃØN PHÁÖN MÃÖM ................................................. 117 III.1. Måí âáöu .......................................................................................................... 117 III.2. Phán loaûi caïc pheïp toaïn................................................................................. 119 III.3. Haûng vaì biãún ................................................................................................. 120 III.4. Pheïp thãú caïc haûng.......................................................................................... 120
TS. PHAN HUY KHAÏNH biãn soaûn

iii

................ 123 III...... Pheïp chæïng minh trong âàûc taí âaûi säú ..............4............................... 141 IV........3. 140 IV........ 146 IV................................6................................................................................................... Pheïp håüp thaình (cáúu taûo)............1..1.............................. 122 III.........iv Cäng nghãû Pháön mãöm III......................................................... Triãøn khai thæï hai . Phán cáúp trong âàûc taí âaûi säú ................................ PHAN HUY KHAÏNH biãn soaûn iv ................................2...... 122 III.........................1............ Mä hçnh láûp trçnh (triãøn khai) ............... Bàõt âáöu triãøn khai thæûc tiãùn ...................................6.........................5.................................................................... Triãøn khai thæûc hiãûn láön thæï ba .. 137 IV.......6........................... Håüp thæïc hoïa vaì phuûc häöi ............................................................. 134 IV.................... 123 III. Chæïng minh tæû âäüng båíi viãút laûi . 131 IV.............5........................ 129 IV.............7..........................................3.............................................................5.......3... 125 III.............. Haìm ......................... 128 IV..................2.... 129 IV.....4.................................... ÂÀÛC TAÍ HAY CAÏCH CUÛ THÃØ HOÏA SÆÛ TRÆÌU TÆÅÜNG ................................. Lyï thuyãúttæång âæång...... Khaïi niãûm vãö lyï thuyãút quy naûp .................... 123 III.....6....... 126 III........................ Âàûc taí pheïp thay âäøi bäü nhåï ....................8........ 124 III............5......................6................... Mä hçnh âàûc biãût ............................................................................ Mä hçnh âäöng dæ .............................. Âàûc taí laìm gç ? ............2......................................................................... 149 TS.............................................. Caïc thuäüc tênh cuía âàûc taí .................6...................5..........

láûp trçnh khäng ngæìng âæåüc caíi tiãún vaì phaït triãøn. MTÂT âáöu tiãn láûp trçnh âæåüc måïi chè xuáút hiãûn caïch âáy hån bäún mæåi nàm 1.11. Khaïi quaït vãö lëch sæí láûp trçnh Láûp trçnh (programming). 6. chæång trçnh viãút ra gäöm nhæîng doìng lãûnh coï khuynh hæåïng näúi nhau theo daîy daìi.1. Maïy seî dëch chæång trçnh âoï sang ngän ngæî maïy træåïc khi thæûc hiãûn. 7. caìng ngaìy caìng hæåïng vãö nhu cáöu cuía ngæåìi láûp trçnh. 98 v. I. 3.1. Vê duû 1 : Hãû âiãöu haình MS−DOS âaî coï caïc phiãn baín 1.Âaûi cæång vãö cäng nghãû pháön mãöm 5 CHÆÅNG 1 Âaûi cæång vãö cäng nghãû pháön mãöm I.0 v. 7. âaî coï caïc phiãn baín 5. Láûp trçnh tuyãún tênh Våïi nhæîng MTÂT âáöu tiãn. nàng suáút tháúp so våïi caïc hoaût âäüng trê tuãû khaïc.0. næåïc Myî.0. Nay laì Windows 95.v.0 v. hay láûp chæång trçnh cho maïy tênh âiãûn tæí (MTÂT) laì mäüt ngaình coìn ráút måïi meí.0.0. 6.v. caïc ngän ngæî báûc cao (high level) våïi caïc doìng lãûnh tæûa tiãúng Anh bàõt âáöu âæåüc sæí duûng. 2. khoï hiãøu vãö màût logic. 8. 3. 5. Theo âaì phaït triãøn cuía caïc thiãút bë pháön cæïng. Vê duû nãúu mäüt saín pháøm pháön mãöm khoaíng 2000 − 3000 doìng lãûnh âoìi hoíi 3 ngæåìi láûp trçnh chênh trong voìng 6 thaïng thç nàng suáút mäùi ngæåìi chè dao âäüng trong khoaíng tæì 5 âãún 6 lãûnh mäùi ngaìy (?!). 3.. Våïi nhæîng ngän ngæî láûp trçnh ban âáöu.3.0. TS. Láûp trçnh laì mäüt cäng viãûc nàûng nhoüc. 3.0.. PHAN HUY KHAÏNH biãn soaûn 5 . Turbo Psacal cuía haîng Borland Inc. ngæåìi ta sæí duûng ngän ngæî maïy (machine language) hay ngän ngæî báûc tháúp (low level) âãø láûp trçnh vaì duìng caïc khoaï cå khê âãø naûp chæång trçnh vaìo maïy. Ngæåìi ta sæí 1 ENIAC (Electronic Numerical Integrator and Computer) laì chiãúc MTÂT âáöu tiãn ra âåìi nàm 1945 taûi træåìng Âaûi hoüc Täøng håüp Pensylvania.0.v...0.. Chênh vç caïc saín pháøm pháön mãöm khi tung ra thë træåìng chæa thæûc sæû hoaìn haío ngay nãn ngæåìi ta thæåìng duìng meûo thæång maûi bàòng caïch gaïn cho saín pháøm mäüt caïi âuäi “phiãn baín” (version) âãø noïi ràòng phiãn baín ra sau âaî khàõc phuûc âæåüc nhæîng khiãúm khuyãút cuía phiãn baín træåïc âoï. Microsoft Windows âaî coï caïc phiãn baín 1. Suäút hån bäún tháûp kyí qua.0.. 97.

vaì do váûy. Mäüt khi coï sæû thay âäøi trãn mäüt kiãøu dæî liãûu thç mäüt thuí tuûc naìo âoï taïc âäüng lãn kiãøu dæî liãûu naìy cuîng phaíi thay âäøi theo. coï dæî liãûu riãng. Tênh hiãûu quaí cuía láûp trçnh cáúu truïc thãø hiãûn åí khaí nàng træìu tæåüng hoaï.3. ngæåìi ta chè quan tám vãö màût chæïc nàng : mäüt thuí tuûc hay haìm naìo âoï coï thæûc hiãûn âæåüc cäng viãûc âaî cho hay khäng ? Coìn viãûc thæûc hiãûn nhæ thãú naìo laì khäng quan troüng. Khiãúm khuyãút trãn cuîng aính hæåíng âãún tênh håüp taïc giæîa caïc thaình viãn láûp trçnh. Caïc thuí tuûc hay haìm naìy âäüc láûp våïi nhau. I. Chæång trçnh ÂHÂT âæåüc thiãút kãú xung quanh dæî liãûu maì noï thao taïc chæï khäng baín thán caïc thao taïc. chuìng naìo coìn âuí tin cáûy. Mäüt chæång trçnh coï cáúu truïc âæåüc giao cho nhiãöu ngæåìi thç khi coï sæû thay âäøi vãö cáúu truïc dæî liãûu cuía mäüt ngæåìi seî aính hæåíng âãún cäng viãûc cuía nhæîng ngæåìi khaïc.6 Cäng nghãû Pháön mãöm duûng caïc lãûnh nhaíy (goto) âãø âiãöu khiãøn chæång trçnh mäüt caïch tuyì tiãûn. khuynh hæåïng láûp trçnh cáúu truïc (structured programming) ra âåìi. Chæång trçnh bao gäöm nhiãöu thuí tuûc. Caïc ngän ngæî láûp trçnh tuyãún tênh khäng kiãøm soaït âæåüc nhæîng sæ thay âäøi cuía dæî liãûu. hay haìm. Trong mäüt chæång trçnh coï cáúu truïc. Cáúu truïc dæî liãûu trong mäüt chæång trçnh coï vai troì quan troüng cuîng nhæ caïc pheïp toaïn thæûc hiãûn trãn chuïng. giaíi quyãút baìi toaïn dãù daìng hån. I. nhæng coï thãø trao âäøi qua laûi våïi nhau bàòng caïc tham biãún.2. riãng reî. Láûp trçnh cáúu truïc laìm cho viãûc kiãøm soaït chæång trçnh dãù daìng hån. Tênh ÂHÂT laìm roî mäúi quan hãû giæîa dæî liãûu vaì thao taïc trãn dæî liãûu. ngæåìi ta xem viãûc láûp trçnh nhæ mäüt hoaût âäüng nghãû thuáût nhuäúm maìu sàõc taìi nghãû caï nhán hån laì khoa hoüc. Màûc duì kyî thuáût thiãút kãú vaì láûp trçnh cáúu truïc âæåüc sæí duûng räüng raîi nhæng váùn bäüc läü nhæîng khiãúm khuyãút. Theo phæång phaïp naìy. Khi âäü phæïc taûp tàng lãn thç sæû phuû thuäüc cuía chæång trçnh vaìo kiãøu dæî liãûu maì noï xæí lyï cuîng tàng theo. våïi thuáût ngæî “the art of programming”. Láûp trçnh âënh hæåïng âäúi tæåüng (ÂHÂT) Láûp trçnh ÂHÂT (oriented-object programming) âæåüc xáy dæûng trãn nãön taíng cuía láûp trçnh cáúu truïc vaì træìu tæåüng hoaï dæî liãûu (data abstraction). Vaìo giai âoaûn naìy. Chæång trçnh laì mäüt måï räúi ràõm khäng khaïc gç moïn mç såüi (spaghetti) cuía næåïc YÏ. . mäüt chæång trçnh coï cáúu truïc âæåüc täø chæïc theo caïc pheïp toaïn maì noï phaíi thæûc hiãûn. Láûp trçnh coï cáúu truïc Vaìo cuäúi nhæîng nàm 1960 vaì âáöu 1970. Moüi dæî liãûu sæí duûng trong chæång trçnh âãöu coï tênh toaìn cuûc vaì coï thãø bë thay âäøi vaìo báút cæï luïc naìo. giaíi quyãút nhæîng váún âãö riãng.

khaïi niãûm kãú thæìa (inheritence). Vê duû : mäüt baín ghi vãö nhán sæû coï thãø âæåüc âoüc. coï thãø âæåüc kãú thæìa cáúu truïc dæî liãûu vaì caïc phæång phaïp cuía låïp gäúc hoàûc låïp cå såí. Mäüt låïp måïi âæåüc xem nhæ låïp suy diãùn. PHAN HUY KHAÏNH biãn soaûn 7 . nhæ laì C++. Delphi. Láûp trçnh ÂHÂT âæa vaìo nhiãöu thuáût ngæî vaì khaïi niãûm måïi.4.Âaûi cæång vãö cäng nghãû pháön mãöm 7 Træìu tæåüng hoaï dæî liãûu laì laìm cho viãûc sæí duûng caïc cáúu truïc dæî liãûu tråí nãn âäüc láûp âäúi våïi viãûc caìi âàût cuû thãø. Æu âiãøm cuía láûp trçnh ÂHÂT laì laìm cho viãûc phaït triãøn pháön mãöm nhanh choïng hån våïi khaí nàng duìng laûi caïc chæång trçnh cuî. Láûp trçnh ÂHÂT liãn kãút caïc cáúu truïc dæî liãûu våïi caïc pheïp toaïn. Hiãûn nay. TS. ngæåìi láûp trçnh nhçn tháúy ngay kãút quaí qua tæìng thao taïc vaì giao diãûn ngæåìi duìng (user interface) khi chæång trçnh âæåüc thæûc hiãûn.v. Khi thiãút kãú chæång trçnh. nhiãöu ngän ngæî láûp trçnh thäng duûng cuîng âæåüc trang bë thãm khaí nàng ÂHÂT. I. Mäüt trong nhæîng ngän ngæî láûp trçnh ÂHÂT âæåüc noïi âãún laì SMALLTALK. Ngæåìi ta coi láûp trçnh laì mäüt khoa hoüc nhàòm âãö xuáút nhæîng nguyãn lyï vaì phæång phaïp âãø náng cao nàng suáút lao âäüng cuía láûp trçnh viãn. dãù sæía. Vê duû säú dáúu cháúm âäüng (floating point number) âaî âæåüc træìu tæåüng hoaï trong moüi ngän ngæî láûp trçnh. Ngæåìi láûp trçnh coï thãø dãù daìng chènh sæía vãö maìu sàõc. Caïc ngän ngæî láûp trçnh træûc quan thäng duûng hiãûn nay thæåìng âæåüc phaït triãøn trong mäi træåìng Microsoft Windows. v. nhæ Visual Basic.v. NSD thao taïc trãn caïc säú dáúu cháúm âäüng maì khäng quan tám âãún caïch biãøu diãùn nhë phán trong maïy cuía chuïng nhæ thãú naìo. I. Nàng suáút åí âáy âæåüc hiãøu laì tênh âuïng âàõn cuía chæång trçnh. kêch thæåïc. Láûp trçnh træûc quan Láûp trçnh træûc quan (visual programming) âæåüc phaït triãøn trãn nãön taíng cuía láûp trçnh ÂHÂT.. Visual Foxpro. hçnh daïng vaì caïc xæí lyï thêch håüp lãn caïc âäúi tæåüng coï màût trong giao diãûn. Khäng thãø viãút säú phæïc lãn tãûp nhæ mäüt baín ghi nhán sæû. âæåüc phaït triãøn nàm 1980 taûi Xerox Palo Alto Recearch Center (PARC). chàóng haûn khaïi niãûm låïp (class). cuîng khäng thãø cäüng træì nhán chia hai baín ghi nhán sæû våïi nhau nhæ caïch cuía säú phæïc.. Nhæîng tæ tæåíng caïch maûng trong láûp trçnh Láûp trçnh laì mäüt trong nhæîng lénh væûc khoï nháút cuía toaïn hoüc æïng duûng.5. v. táûn duûng hãút khaí nàng cuía thiãút bë maì khäng phuû thuäüc vaìo thiãút bë. Visual C++.. Mäüt cáúu truïc naìo âoï thç tæång æïng.. coìn mäüt säú phæïc thç âæåüc duìng trong tênh toaïn. tênh dãù âoüc. Java. cáûp nháût sæû thay âäøi vaì âæåüc cáút giæî. ta coï nhæîng pheïp toaïn naìo âoï.

Cäng nghãû pháön mãöm laì gç? Theo tæì âiãøn Computer Dictionary cuía Microsoft Press® (1994). Software Engineering : The design and development of sofware (computer program).8 Cäng nghãû Pháön mãöm Thæûc cháút cuía quaï trçnh láûp trçnh laì ngæåìi ta khäng láûp trçnh trãn mäüt ngän ngæî cuû thãø maì láûp trçnh hæåïng tåïi noï. coï tênh cáúu truïc. mä hçnh.. Caïc phæång diãûn cuía cäng nghãû pháön mãöm II. Cháút læåüng pháön mãöm khäng laì mäüt khaïi niãûm âån giaín. tênh dãù sæí duûng. Muûc âêch chênh cuía cäng nghãû pháön mãöm laì âãø saín xuáút ra nhæîng pháön mãöm coï cháút læåüng. dãù âoüc dãù hiãøu. v. baío trç (maintenance) vaì láûp häö så (documentation). Chàóng haûn chæång trçnh chaûy nhanh. II. from concept through execution and documentation. Ngæåìi ta thæåìng âaïnh giaï theo hai kiãøu cháút læåüng : nhæîng yãúu täú cháút læåüng bãn ngoaìi vaì nhæîng yãúu täú cháút læåüng bãn trong. sæía sai (debugging). Nhæîng yãúu täú cháút læåüng bãn ngoaìi vaì bãn trong Nhæîng yãúu täú cháút læåüng bãn ngoaìi ngæåìi duìng coï thãø nháûn biãút âæåüc. human factor). Caïc giai âoaûn âoï laì : âàûc taí (specifiction). láûp trçnh (programming). thiãút kãú (design). chaûy äøn âënh. Coï thãø hoaût âäüng trong nhæîng âiãöu kiãûn báút thæåìng.v. Chæång trçnh phaíi âæåüc viãút dæåïi daûng caïc thao taïc coï cáúu truïc trãn caïc âäúi tæåüng coï cáúu truïc vaì caïc mãûnh âãö nhàòm khàóng âënh tênh âuïng âàõn cuía kãút quaí. nhæ täúc âäü nhanh.. cäng cuû vaì thuí tuûc liãn quan âãún caïc giai âoaûn xáy dæûng mäüt saín pháøm pháön mãöm. Tæì âiãøn Larousse (1996) âënh nghéa chi tiãút hån : Cäng nghãû pháön mãöm laì táûp håüp caïc phæång phaïp.2. Khaí nàng dãù sæía âäøi âãø thêch nghi våïi nhæîng thay âäøi måïi .. dãù thêch nghi våïi nhæîng thay âäøi (tênh måí räüng). Nhæîng yãúu täú cháút læåüng bãn ngoaìi cuía mäüt saín pháøm pháön mãöm laì : Tênh âuïng âàõn Tênh bãön væîng Tênh coï thãø måí räüng Khaí nàng thæûc hiãûn chênh xaïc cäng viãûc âàût ra. bao gäöm nhiãöu yãúu täú. − Laìm thãú naìo âãø laìm chuí âæåüc sæû phæïc taûp cuía hoaût âäüng láûp trçnh ? II.. v. caìi âàût (setup) âãø âem vaìo æïng duûng (application). kyî thuáût. thæí nghiãûm (testing). Nhæîng tæ tæåíng caïch maûng trong láûp trçnh thãø hiãûn åí hai âiãøm sau : − Chæång trçnh vaì láûp trçnh viãn tråí thaình âäúi tæåüng nghiãn cæïu cuía lyï thuyãút láûp trçnh.1. tênh cäng thaïi hoüc (ergonomy. dãù sæí duûng.v.

. Coï thãø dãù daìng kãút håüp våïi caïc saín pháøm pháön mãöm khaïc. caïc dëch vuû khai thaïc Internet.3.. trê tuãû nhán taûo. Paradox.). Caïc pháön mãöm tråü giuïp thiãút kãú (CAD.. Unix. C++. v. ngæåìi maïy. Caïc ngän ngæî láûp trçnh (chæång trçnh dëch) : Turbo Pascal. dãù kiãøm chæïng vaì an toaìn (âæåüc baío vãû quyãön truy nháûp). Caïc chæång trçnh phoìng chäúng virus.. dãù sæí duûng. Microsoft Windows vaì caïc æïng duûng trãn Windows...... tênh dãù âoüc. Caïc troì chåi (games). Dæåïi âáy laì baíng toïm tàõt quaï trçnh tiãún hoïa cuía saín pháøm pháön mãöm : Thåìi kyì âáöu tiãn 1950 − 1960 Thåìi kyì thæï hai 1960 − 1970 Xæí lyï theo lä (Batch processing) Pháön mãöm âæåüc viãút theo âån âàût haìng Âa ngæåìi duìng (Multiusers) Thåìi gian thæûc (Real time) Cå såí dæî liãûu (Database) Pháön mãöm saín pháøm TS. Hãû âiãöu haình maûng maïy tênh : Unix.. Windows NT. v. Oracle. MAC OS..v. tråü giuïp giaíng daûy. OS/2. Microsoft Access... Yãúu täú cháút læåüng bãn ngoaìi laì muûc âêch cuäúi cuìng nhæng yãúu täú cháút læåüng bãn trong laûi laì máúu chäút âãø âaût âæåüc nhæîng yãúu täú cháút læåüng bãn ngoaìi. PHAN HUY KHAÏNH biãn soaûn 9 .. Hiãûu quaí âäúi våïi nguäön taìi nguyãn cuía MTÂT nhæ bäü xæí lyï.. bäü nhåï.v. II.. dãù chuyãøn âäøi (khäng phuû thuäüc vaìo cáúu hçnh pháön cæïng).Âaûi cæång vãö cäng nghãû pháön mãöm 9 Tênh sæí duûng laûi Tênh tæång thêch Caïc cháút læåüng khaïc Khaí nàng sæí duûng laûi toaìn bäü hay mäüt pháön cuía hãû thäúng cho nhæîng æïng duûng måïi... Hãû quaín trë cå såí dæî liãûu : Microsoft Foxpro.). Vê duû caïc saín pháøm pháön mãöm : Hãû âiãöu haình : MS − DOS. Designers. vaì caïc æïng duûng trãn maûng LAN. Nhæîng yãúu täú cháút læåüng bãn trong laì laì tênh âån thãø. dãù hiãøu maì chè nhæîng ngæåìi laìm Tin hoüc chuyãn nghiãûp måïi biãútû âæåüc. Caïc hãû chuyãn gia. v.. Turbo C. Saín pháøm pháön mãöm laì gç ? Màûc duì ngæåìi ta khäng âënh nghéa nhæng khaïi niãûm saín pháøm pháön mãöm âæåüc hiãøu nhæ laì mäüt hãû thäöng chæång trçnh thæûc hiãûn mäüt nhiãûm vuû tæång âäúi âäüc láûp nhàòm phuûc vuû cho mäüt æïng duûng cuû thãø trong cuäüc säúng cuía con ngæåìi (vaì coï thãø âæåüc thæång maûi hoaï)..v. Novell Netware... Internet/Intranet (caïc Browsers.. WAN.

1. Saín pháøm cuía ngæåìi láûp trçnh 4. Thåìi kyì thæï tæ 1990 tråí âi Sau âáy laì mäüt tranh vui vãö quaï trçnh taûo ra mäüt saín pháøm pháön mãöm âaî khaï quen thuäüc âäúi våïi nhuîng ngæåìi laìm Tin hoüc tæì hån 20 nàm nay (theo J. Triãøn khai cho khaïch haìng 6. Quaï trçnh taûo ra mäüt saín pháøm pháön mãöm . CLAVIER.. Inc. Sau khi sæía sai våïi nhiãöu saïng kiãún caíi tiãún 5. I. Canada 1993) : 1. Eïdition J.. Æåïc må cuía ngæåìi sæí duûng ! Hçnh 1. “Diriger un projet informatique”. Thiãút kãú cuía chuí trç âãö taìi 3. C. Ngæåìi âàût haìng Vê duû : Cäng ty Cäng viãn 2.10 Thåìi kyì thæï ba 1970 − 1990 Cäng nghãû Pháön mãöm Hãû thäúng xæí lyï phán bäø (Distributed processing system) Thäng minh (Intelligence) Pháön cæïng giaï thaình haû Hiãûu quaí tiãu thuû Hãû thäúng âãø baìn (Desktop − Personal − Notebook computers) Láûp trçnh hæåïng âäúi tæåüng (Object oriented programming) Láûp trçnh træûc quan (Visual programming) Hãû chuyãn gia (Expert system) Maûng thäng tin toaìn cáöu (Worldwide communication network) Xæí lyï song song (Paralell processing) .

Láûp kãú hoaûch dæû aïn pháön mãöm..Phán têch yãu cáöu thæûc tiãùn. phaït triãøn vaì baío trç.Thêch nghi : Nhàòm laìm pháön mãöm thêch nghi våïi mäi træåìng pháön cæïng.Phán têch hãû thäúng. cuîng nhæ mä hçnh âæåüc læûa choün. nhiãöu ngæåìi láûp trçnh tham gia âæåüc chia thaình nhoïm. khäng chè nàòm åí chäù láûp trçnh theo nghéa heûp maì coìn laì viãûc triãøn khai caïc giai âoaûn dáùn âãún láûp trçnh.Sæía âäøi : Duì pháön mãöm coï cháút læåüng täút. Táûp håüp caïc giai âoaûn naìy âæåüc goüi laì chu kyì säúng (hay voìng âåìi) cuía pháön mãöm (life cycle). khàõc phuûc khiãúm khuyãút. Giai âoaûn baío trç : Giai âoaûn naìy táûp trung vaìo caïc thay âäøi (Modify). váùn täön taûi nhæîng khiãúm khuyãút tæì viãûc sæí duûng cuía khaïch haìng (ngæåìi sæí duûng). .Kiãøm thæí (phaït hiãûn sai soït. khäng phuû thuäüc vaìo miãún aïp duûng.Âaûi cæång vãö cäng nghãû pháön mãöm 11 III. Gäöm 3 bæåïc : . Våïi mäüt dæû aïn Tin hoüc låïn. muûc âêch chæïc nàng va ìmäi træåìng phaït triãøn. . Sæû phaït triãøn mäüt chæång trçnh. Gäöm 3 bæåïc : . OS. Giai âoaûn phaït triãøn : Giai âoaûn naìy traí låìi cáu hoíi laìm nhæ thãú naìo ? (How?). nhæ CPU. kiãøm tra tiãún trçnh phaït triãøn cuía dæû aïn.1. âaím baío mäúi liãn laûc giæîa caïc nhoïm. hay tiãún trçnh pháön mãöm (software process).. Giai âoaûn xaïc âënh : Giai âoaûn naìy traí låìi cáu hoíi laì caïi gç ? (What?) vaì khi naìo (When?) vãö dæî liãûu (thäng tin) cáön xæí lyï. Ngæåìi phuû traïch dæû aïn coï nhiãûm vuû phán bäø cäng viãûc cho tæìng nhoïm. cháút læåüng cuía saín pháøm pháön mãöm khi hoaìn táút. Coï 3 kiãøu thay âäøi : . Tiãún trçnh phaït triãøn pháön mãöm gäöm 3 giai âoaûn chênh laì xaïc âënh. âäü læïn vaì âäü phæïc taûp cuía dæû aïn phaït triãøn. Nhæîng näüi dung cå baín cuía CNPM III. PHAN HUY KHAÏNH biãn soaûn 11 . . . Baío trç sæía âäøi laìm thay âäøi pháön mãöm.). mäùi nhoïm phuû traïch giaíi quyãút mäüt pháön cuía dæû aïn.Thiãút kãú pháön mãöm : Sæí duûng caïc cäng cuû âàûc taí vaì láûp trçnh cáúu truïc. nháöm láùn. TS. caïc thiãút bë ngoaûi vi. . Täøng quan vãö cäng nghãû pháön mãöm Cäng nghãû pháön mãöm âàûc træng båíi táûp håüp caïc phæång phaïp âãø phaït triãøn mäüt chæång trçnh (pháön mãöm noïi chung).Choün cäng cuû hoàûc caïc ngän ngæî láûp trçnh âãø tiãún haình viãút chæång trçnh.

Sau âáy laì mäüt säú tiãúp cáûn : . khäng phuì håüp våïi caïc hoaût âäüng âaî chè ra trong mä hçnh.2.2.Náng cao : Khaïch haìng tçm ra nhæîng chæïc nàng phuû cuía pháön mãöm. Chu kyì säúng cuía pháön mãöm Coï nhiãöu mä hçnh khaïc nhau âãø thãø hiãûn mäüt chu kyì säúng (life cycle). Mä hçnh thaïc næåïc nguyãn thuyí (original) laì mäüt trong nhæîng mä hçnh täøng quaït mang tênh thæûc duûng sáu sàõc. Mä hçnh thaïc næåïc Dáùu ràòng mä hçnh thaïc næåïc trãn âáy coï êch låüi trong viãûc quaín lyï (management).12 Cäng nghãû Pháön mãöm . láûp kãú hoaûch vaì láûp baïo caïo tiãún âäü phaït triãøn pháön mãöm nhæng chè thêch håüp våïi mäüt låïp hãû thäúng pháön mãöm naìo âoï maì thäi. gàõn boï chàût cheî våïi nhau. Nhæîng mä hçnh täút vãö tiãún trçnh pháön mãöm váùn coìn laì chæïng chuí âãö nghiãn cæïu. Baío trç hoaìn thiãûn âãø måí räüng pháön mãöm ra ngoaìi nhæîng chæïc nàng väún coï. Tiãún trçnh pháön mãöm gäöm caïc hoaût âäüng phæïc taûp vaì biãún âäüng maì khäng thãø biãøu diãùn trãn mäüt mä hçnh âån giaín. Sau âáy laì mäüt chu kyì säúng kiãøu cäø âiãøn theo mä hçnh thaïc næåïc (“waterfall” model) gäöm caïc giai âoaûn nhæ sau : Tçm hiãøu vaì phán têch caïc yãu cáöu (RAD − Requirements analysis and definition) Thiãút kãú hãû thäúng vaì pháön mãöm (SSD − System and software design) Caìi âàût vaì kiãøm thæí tæìng pháön (IUT − Inplementtation and Unit testing) Têch håüp vaì kiãøm thæí hãû thäúng (IST − Integrgion and system testing) Tçm hiãøu vaì phán têch caïc yãu cáöu Thiãút kãú hãû thäúng vaì pháön mãöm Caìi âàût vaì kiãøm thæí tæìng pháön Têch håüp vaì kiãøm thæí hãû thäúng Hçnh 1. Hiãûn nay. caïc mä hçnh täøng quaït khaïc nhau hay tênh thæûc duûng cuía sæû phaït triãøn pháön mãöm. III.

3 âæåüc æïng duûng nhiãöu trong thæûc tiãùn. thiãút kãú pháön mãöm. sau mäùi giai âoaûn laì sæû kãút thuïc (signed-off) vaì tiãúp tuûc giai âoaûn tiãúp theo. Trãn thæûc tãú. nhæîng váún âãö vaì caïc yãu cáöu gàõn boï våïi nhau. Bàõt âáöu Táûp håüp yãu cáöu vaì laìm mën Saín pháøm Laìm mën baín máùu thiãút kãú nhanh xáy dæûng baín máùu Âaïnh giaï cuía khaïch haìng vãö baín máùu Hçnh 1. 2.v. caïc giai âoaûn phaït triãøn pháön mãöm khäng phaíi råìi riãng maì laì gäúi lãn nhau (overlap) vaì thäng tin âæåüc cung cáúp láùn nhau. Baín máùu (prototyping) : Tæång tæû tiãúp cáûn láûp trçnh thàm doì. Pha âáöu tiãn bao gäöm phaït triãøn mäüt chæång trçnh cho pheïp thæí nghiãûm. Tiãún trçnh phaït triãøn hãû thäúng laì sæû làõp raïp hån laì sæû saïng taûo. 5. Tuy nhiãn. v. caìi âàût. NSD quan tám âãún tênh thoía âaïng cuía kãút quaí hån laì tênh chênh xaïc. caïc tiãúp cáûn 1. Sau âoï laì sæû caìi âàût laûi pháön mãöm âãø âæa âãún hãû thäúng cháút læåüng . PHAN HUY KHAÏNH biãn soaûn Kãút thuïc 13 .v. TS.. Làõp raïp hãû thäúng tæì caïc thaình pháön duìng laûi âæåüc (system assembly from reusable components). 3. tiãún trçnh pháön mãöm khäng âån giaín laì mäüt mä hçnh tuyãún tênh maì bao gäöm mäüt daîy caïc tæång taïc cuía caïc hoaût âäüng phaït triãøn.. 2..saín pháøm. muûc âêch cuía phaït triãøn laì thiãút láûp caïc yãu cáöu hãû thäúng. Tiãúp cáûn kiãøu baín máùu 4. khi NSD khäng thãø âënh hçnh âæåüc caïc âàûc taí yãu cáöu. v. Láûp trçnh thàm doì thæåìng âæåüc aïp duûng trong lénh væûc trê tuãû nhán taûo.. Biãún âoíi hçnh thæïc (formal transformation) : Laì sæû biãún âäøi caïc âàûc taí hçnh thæïc (formal specification) cuía hãû thäúng pháön mãöm âang xeït âãø thaình mäüt chæång trçnh khaí thi nhæng baío toaìn âæåüc tênh chênh xaïc (correctness preserving transformations).Âaûi cæång vãö cäng nghãû pháön mãöm 13 1. Láûp trçnh thàm doì (exloratory programming) : Cho pheïp tàng nhanh quaï trçnh âãø dáùn âãún tênh thoía âaïng cuía hãû thäúng. Luïc naìy. nhæîng váún âãö thiãút kãú âæåüc tçm tháúy. Kyî thuáût naìy cho pheïp xáy dæûng hãû thäúng tæì caïc thaình pháön âaî coï. Tiãúp cáûn thaïc næåïc (the waterfall approach) : Bao gäöm caïc giai âoaûn âàûc taí yãu cáöu. trong khi láûp trçnh.3. kiãøm thæí. Hiãûn nay. Trong khi thiãút kãú..

caïc âån vë chæång trçnh hay táûp håüp caïc chæång trçnh âæåüc kiãøm thæí láön læåüt sao cho thoía maîn caïc âàûc taí tæång æïng. 2. Hãû thäúng âæåüc caìi âàût vaì âæa vaìo sæí duûng thæûc tãú. mäüt mä hçnh chæïa caïc voìng làûp seî laìm khoï khàn cho viãûc quaín lyï vaì baïo caïo. Sau giai âoaûn naìy. Thiãút kãú hãû thäúng vaì pháön mãöm : Tiãún trçnh thiãút kãú hãû thäúng phán chia caïc yãu cáöu thaình caïc hãû thäúng pháön cæïng. lénh häüi âæåüc nhæîng âoìi hoíi cuía baìi toaïn. 3. Tçm hiãøu vaì phán têch caïc yãu cáöu: NSD hãû thäúng vaì ngæåìi phaït triãøn hãû thäúng baìn baûc.4. Viãûc täúi æu hoïa caïc dëch vuû cuía hãû thäúng âæåüc xem nhæ laì nhæîng yãu cáöu måïi âæåüc phaït hiãûn. Sau âáy laì mäüt säú mä hçnh : 1. trao âäøi (consultation) våïi nhau âãø thiãút láûp muûc âêch. 4. Têch håüp vaì kiãøm thæí hãû thäúng : Caïc âån vë chæång trçnh âæåüc têch håüp vaì kiãøm thæí nhæ laì mäüt hãû thäúng âáöy âuí âãø âaím baío caïc yãu cáöu âàût ra ban âáöu. Mä hçnh thaïc næåïc caíi tiãún Tçm hiãøu vaì phán têch caïc yãu cáöu Thiãút kãú hãû thäúng vaì pháön mãöm Caìi âàût vaì kiãøm thæí tæìng pháön Têch håüp vaì kiãøm thæí hãû thäúng Khai thaïc vaì baío trç Hçnh 1. hãû thäúng pháön mãöm âæåüc giao cho khaïch haìng.14 Cäng nghãû Pháön mãöm Tuy nhiãn. 5. Viãûc baío trç bao gäöm viãûc khàõc phuûc nhæîng sai soït xaíy ra âaî khäng xuáút hiãûn trong caïc giao âoaûn træåïc âoï cuía chu kyì säúng. raìng buäüc vaì caïc dëch vu cuía hãû thäúng pháön mãöm. Viãûc thiãút kãú pháön mãöm bao gäöm viãûc thãø hiãûn caïc chæïc nàng hãû thäúng pháön mãöm (software system functions) âãø biãún âäøi thaình caïc chæång trçnh khaí thi. Caìi âàût vaì kiãøm thæí tæìng pháön : Trong giai âoaûn naìy. pháön mãöm vaì thiãút láûp mäüt kiãún truïc hãû thäúng toaìn bäü (overall system architecture). . Coï nhiãöu daûng mä hçnh trong tiãún trçnh pháön mãöm. Khai thaïc vaì baío trç (operation and maintenance) : Âáy laì mäüt pha daìi nháút cuía chu kyì säúng. Mä hçnh thaïc næåïc caíi tiãún 1.

khoï kiãøm soaït. Kãú hoaûch : Táûp håüp yãu cáöu ban âáöu va kãú hoaûch dæû aïn Phán têch ruíi ro : Dæûa trãn yãu cáöu ban âáöu Dæûa trãn phaín æïng cuía khaïch haìng Quyãút âënh tiãúp tuûc hay khäng ? Kãú hoaûch dæûa trãn yï kiãún cuía khaïch haìng Hæåïng tåïi hãû thäúng hoaìn chènh Âaïnh giaï cuía khaïch haìng : Khàóng âënh kãút quaí cuía cäng nghãû Hçnh 1. khäng sæí duûng caïc cáúu truïc âiãöu khiãøn.. nháút laì khi gàûp ruíi ro. bäø sung nhuîng yãúu täú coìn thiãúu vaì thãm caïc yãúu täú måïi. 3. Mä hçnh xoàõn äúc Æu âiãøm : Caïc phiãn baín (hay saín pháøm) âæåüc hoaìn thiãûn dáön theo chiãöu xoaïy äúc tæì trong ra ngoaìi. Vê duû ngän ngæî váún tin SQL thuäüc loaûi naìy. PHAN HUY KHAÏNH biãn soaûn . Nhæåüc âiãøm : Khoï âaïnh giaï chênh xaïc. tuáön tæû. Bäü sinh baïo caïo. maì dæûa trãn táûp håüp caïc yãúu täúï vaì quan hãû âãø dáùn vãö kãút quaí yãu cáöu. chæa âæåüc kiãøm nghiãûm nhiãöu trong thæûc tiãùn. phán têch ruíi ro. Kyî thuáût thãú hãû 4 (4th Generation Technology) Bao gäöm caïc cäng cuû pháön mãöm trãn cå såí tæû âäüng saín sinh maî chæång trçnh gäúc theo nhu cáöu cuía ngæåìi phaït triãøn : Ngän ngæî phi thuí tuûc2 (non procedural language) âãø truy cáûp cå såí dæî liãûu. Mä hçnh xoàõn äúc Phaït triãøn trãn tênh æu viãût cuía voìng âåìi cäø âiãn vaì baín máùu.. 15 TS. Bäü thao taïc dæî liãûu. Baín máùu ban âáöu Baín máùu táöng tiãúp theo . Do âoï khoï thuyãút phuûc âæåüc caïc khaïch haìng låïn Mä hçnh naìuy coìn måïi. 2 laì ngän ngæî láûp trçnh khäng tuán theo caïch goüi thuí tuûc hay goüi chæång trçnh con thäng thæåìng.Âaûi cæång vãö cäng nghãû pháön mãöm 15 2.5.

Táûp håüp yãu cáöu Chiãún læåüc thiãút kãú Caìi âàût sæí duûng 4 GL Kiãøm thæí Cäng nghãû Pháön mãöm Hçnh 1. Cäng cuû âäö hoüa.7.6. Baíng tênh. Kyî thuáût thãú hãû 4 Æu âiãøm : Thæåìng âæåüc sæí duûng âãø xáy dæûng caïc hãû thäng tin vaì tæång lai laì caïc æïng duûng kyî nghãû phaït triãøn pháön mãöm thåìi gian thæûc. Nhu cáöu pháön mãöm . Bäü sinh chæång trçnh. Nhu cáöu pháön mãöm Nhu cáöu trung bçnh Caïc PM sæí duûng kyî thuáût 4 GT (láúp chäù häøng) Caïc phæång phaïp truyãön thäúng 1970 1980 1990 2000 Hçnh 1.16 Bäü tæång taïc vaì thiãút kãú maìn hçnh.

hiãøu caïc yãu cáöu ban âáöu Phán têch yãu cáöu Thiãút kãú Baín máùu voìng thæï n Maî hoïa 4 GT Mä hçnh voìng thæï n Kiãøm thæí Hãû thäúng hoaût âäüng Baío trç 4 GT Laìm baín máùu 4 GT Mä hçnh xoaïy troìn äúc Hçnh 1. xoaïy troìn äúc vaì 46T âaî nãu. Táûp håüp. ngæåìi ta coï xu hæåïng têch håüp caïc kyî thuáût cäø âiãøn.Âaûi cæång vãö cäng nghãû pháön mãöm 17 5.8. Têch håüp caïc kyî thuáût TS. PHAN HUY KHAÏNH biãn soaûn 17 . Têch håüp caïc kyî thuáût Nhàòm tàng cæåìng tênh täúi æu trong phaït triãøn pháön mãöm.

PHAN HUY KHAÏNH biãn soaûn 18 . Nãön taíng cuía thiãút kãú pháön mãöm TS.CHÆÅNG 2 Thiãút kãú pháön mãöm I.

Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 19 TS. PHAN HUY KHAÏNH biãn soaûn 19 .

20 Cäng nghãû Pháön mãöm II. Phæång phaïp láûp trçnh cáúu truïc .

Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 21 TS. PHAN HUY KHAÏNH biãn soaûn 21 .

22 Cäng nghãû Pháön mãöm II.2 viãûc 1.. Chæång trçnh laì mäüt hãû thäúng phán cáúp .2 .v. chæång trçnh laì mäüt hãû thäúng phán cáúp tæì trãn xuäúng. II. dãù hiãøu. Láûp trçnh cáúu truïc phaín aïnh quan niãûm : láûp trçnh laì cäng viãûc saïng taûo nhæng coï tênh khoa hoüc vaì coï phæång phaïp.. mäùi váún âãö âoï laûi bao gäöm caïc váún âãö nhoí hån næîa.2. viãûc 1.. dãù sæía vaì dãù thæìa kãú chæång trçnh. trong âoï caïc thaình pháön tæång taïc våïi nhau täúi thiãøu. Khaïi niãûm vãö láûp trçnh cáúu truïc Láûp trçnh cáúu truïc (Structured Programming) laì træåìng phaïi láûp trçnh xuáút hiãûn vaìo nhæîng nàm 70 vaì âæåüc duy trç phaït triãøn tæì âoï âãún nay. váún âãö viãûc 1 viãûc 2 viãûc 3 viãûc 1.3 Hçnh 2.2.. v.1 viãûc 1. Váún âãö cáön giaíi quyãút bao gäöm caïc váún âãö nhoí hån. Nhæîng yï tæåíng cå baín láûp trçnh cáúu truïc a) Chæång trçnh laì mäüt hãû thäúng phán cáúp tæì trãn xuäúng Trong láûp trçnh cáúu truïc. cho âãún mæïc cuäúi cuìng laì nhæîng cäng viãûc âån giaín vaì dãù giaíi quyãút hoàûc âaî giaíi quyãút räöi.1 viãûc 1.2.1.2.1. khäng phaíi laì ngáùu hæïng caï nhán. Tênh logic vaì trong saïng cuía chæång trçnh âaím baío âäü tin cáûy.

PHAN HUY KHAÏNH biãn soaûn 23 . tiãúp âoï quy âäöng máùu säú âãø láúy máùu säú chung.d’). chæång trçnh laì mäüt hãû thäúng gäöm nhiãöu thaình pháön phán cáúp. a+ c ⎯⎯ b d ÆLPS(a/b) ÆLPS(c/d) QÂMS(a’/b’. Cuäúi cuìng tiãún haình cäüng hai tæí säú cuía hai phán säú âaî coï chung máùu säú. d’) = b’ * d’ / ÆSCLN(b’. A B C TS. c’/d’) a”/M + b”/M ÆSCLN(a/b) ÆSCLN(c/d) BSCNN(b’. • Giæîa chæång trçnh chênh vaì chæång trçnh con coï âæåìng giao tiãúp laì viãûc truyãön tham biãún. Khäng âæåüc goüi chæång trçnh con theo kiãøu væåüt cáúp.2. Giæîa hai thaình pháön trong hãû thäúng chè nãn coï täúi âa mäüt âæåìng tæång taïc laì âæåìng trao âäøi thäng tin âãø dãù quaín lyï vaì dãù kiãøm soaït. cáön tçm bäüi säú chung nhoí nháút. Phán têch baìi toaïn cäüng hai phán säú Nhæ váûy. d’) ÆSCLN(b’. Viãûc tçm bäüi säú chung nhoí nháút cuía hai säú laûi âæåüc âæa vãö tçm æåïc säú chung låïn nháút cuía chuïng : BSCNN(b’. d’) Hçnh 2. træåïc tiãn cáön æåïc læåüc chuïng. Viãûc æåïc læåüc phán säú âæåüc âæa vãö tçm æåïc säú chung låïn nháút cuía tæí säú vaì máùu säú (sæí duûng thuáût toaïn Euclide). Âãø quy âäöng máùu säú.Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 23 Vê duû 2 : Phán têch baìi toaïn cäüng hai phán säú âãø âæa vãö baìi toaïn tçm æåïc säú chung låïn nháút. mäùi thaình pháön coï nhiãûm vuû giaíi quyãút mäüt váún âãö så cáúp vaì coï tênh âäüc láûp cao. Caïc thaình pháön nãn tæång taïc våïi nhau täúi thiãøu. Âãø cäüng hai phán säú.

B goüi C. A goüi B. sau âoï têch håüp chuïng laûi thaình váún âãö låïn hån vaì caïch giaíi täøng quaït hån. Phæång phaïp hay âæåüc sæí duûng âãø thiãút kãú chæång trçnh laì phán têch tæì trãn xuäúng (Top-Down Analysis) vaì täøng håüp tæì dæåïi lãn (Bottom up Synthesis). Vê duû 3 : Chæång trçnh Algol sau âáy sæí duûng lãûnh goto âãø âiãöu khiãøn voìng làûp tênh täøng caïc pháön tæí cuía maíng a gäöm N säú thæûc : S := 0.24 Cäng nghãû Pháön mãöm Hçnh 2.. hæåïng tæì dæåïi lãn trãn âãø nháûn âæåüc váún âãö cáön phaíi giaíi quyãút ban âáöu Caïch thiãút kãú naìy gáy khoï khàn vç khoï kiãøm soaït vaì dãù laûc hæåïng. I := I + 1. khoï âaïp æïng âáöy âuí caïc yãu cáöu cuía váún âãö... . Cáúu truïc cuía chæång trçnh phaín aïnh âæåüc cáúu truïc cuía váún âãö vaì caïch giaíi quyãút váún âãö (laìm nhæ thãú naìo ?). Algol. cuîng seî khoï nháûn biãút sæû thay âäøi naìy. if I <= N then goto Start. Chàóng haûn. b) Khäng sæí duûng lãûnh nhaíy goto Lãûnh goto (jump statement) duìng âãø chuyãøn âiãöu khiãøn âãún mäüt âiãøm khaïc trong chæång trçnh. Näüi dung phæång phaïp phán têch tæì trãn xuäúng laì nhçn nháûn xem xeït täøng quaït toaìn bäü váún âãö.3. dãù thãø hiãûn thuáût toaïn. chia caïc thaình pháön thaình caïc thaình pháön nhoí hån theo mäüt cáúu truïc phán cáúp chàût cheî. Näüi dung phæång phaïp täøng håüp tæì dæåïi lãn laì xuáút phaït tæì caïc váún âãö cuû thãø vaì caïch giaíi quyãút cuû thãø. trong mäüt chæång trçnh con khaïc hoàûc ngay trong chæång trçnh chênh. I := 0. khoï sæía sai (räúi ràõm nhæ moïn mç såüi Spaghetti cuía YÏ). c) Chæång trçnh coï tênh cáúu truïc Chæång trçnh chè sæí duûng caïc cáúu truïc âiãöu kiãûn chuáøn. Caïc chæång trçnh viãút trãn ngän ngæî aassembly hoàûc trãn caïc ngän ngæî báûc cao nhæ Fortran. Lãûnh goto laìm khoï quaín lyï vaì khoï kiãøm soaït chæång trçnh nãn khoï âoüc. . mäüt chæång trçnh con naìo âoï laìm thay âäøi mäüt biãún toaìn cuûc thç åí mäüt nåi khaïc. Cobol. Start : S := S + a[I]. nhæng A khäng goüi âæåüc C • Haûn chãú duìng biãún toaìn cuûc (global variables) trong chæång trçnh con vç seî taûo thãm nhæîng âæåìng giao tiãúp khoï quaín lyï. thæåìng sæí duûng lãûnh goto. dãù hiãøu. xuáút phaït tæì muûc tiãu (âènh) âi xuäúng caïc thaình pháön trong hãû thäúng..

Nãön taíng cuía thiãút kãú pháön mãöm

Phæång phaïp láûp trçnh cáúu truïc

25

II.3.

Caïc cáúu truïc âiãöu khiãøn chuáøn

Trong chæång trçnh, chè nãn sæí duûng 7 cáúu truïc âiãöu khiãøn sau âáy våïi quy æåïc S laì mäüt lãûnh (Statement) vaì C laì mäüt biãøu thæïc âiãöu kiãûn (Condition) naìo âoï : Stt Cáúu truïc âiãöu khiãøn 1 Tuáön tæû (Sequential) begin S1 ... Sn end 2 Reî nhaïnh (Branching) a) Reî nhaïnh thiãúu if C then S 3 b) Reî nhaïnh âuí if C then S1 else S2 C? True S False Nãúu C thoaí maîn (True) thç thæûc hiãûn S. Nãúu C khäng thoaí maîn (False) thç khäng laìm gç caí. False S2 Nãúu C âuïng thç thæûc hiãûn lãûnh S1. Nãúu C sai thç thæûc hiãûn S2. Nãúu C1 âuïng thç thæûc hiãûn S1. Nãúu khäng, nãúu C2 âuïng thç thæûc hiãûn S2, v.v... Cuäúi cuìng, nãúu Cn âuïng thç thæûc hiãûn Sn. Nãúu khäng thç thäi. Khi C coìn âuïng thç coìn thæûc hiãûn S. Khi C sai thç dæìng. S S1 ... Sn Læu âäö tæång âæång Mä taí Âæåüc coi nhæ laì mäüt lãûnh gheïp (khäúi), thæûc hiãûn tuáön tæû caïc lãûnh S1, S2, ..., Sn.

True S1

C

4

Læûa choün (Selection) case C1 : S1 C2 : S2 ... Cn : Sn endcase False C1 ?

True S1 True False C2 ? ...
...

S2
...

True Sn

False Cn ?

5

Cáúu truïc làûp (Iteration) Kiãøm tra âiãöu kiãûn træåïc khi thæûc hiãûn voìng làûp : True

False
C?

TS. PHAN HUY KHAÏNH biãn soaûn

25

26 while C do S

Cäng nghãû Pháön mãöm

Nãön taíng cuía thiãút kãú pháön mãöm

Phæång phaïp láûp trçnh cáúu truïc

27

Stt Cáúu truïc âiãöu khiãøn 6 Làûp våïi kiãøm tra âiãöu kiãûn sau khi thæûc hiãûn xong thán voìng làûp : do S until C 7 Làûp hãút træåïc säú láön (for) i = <Gt_Âáöu> i ≤ <Gt_Cuäúi > True S
i = i + Succ (i)

Læu âäö tæång âæång

Mä taí Coìn thæûc hiãûn S khi C coìn chæa thoaí maîn (sai). Êt nháút làûp âæåüc mäüt láön.

S False C? True

Dæìng khi C âuïng.

i = <Gt_Âáöu> False i ≥ <Gt_Cuäúi > True S
i = i + Pred (i)

False

for I ← Gt_Âáöu to Gt_Cuäúi do S

for I ← Gt_Âáöu downto Gt_Cuäúi do S

Ngoaìi caïc cáúu truïc làûp hay gàûp thäng thæåìng trãn âáy, ngæåìi ta coìn sæí duûng caïc cáúu truïc làûp coï thoaït (loop exit) nhæ sau : { sæí duûng khoaï key âãø âaïnh dáúu läúi thoaït, key khäng xuáút hiãûn trong S vaì trong C } True
C

S1

key := False While not key do begin S1 if C then key := True else S2 End

False S2

TS. PHAN HUY KHAÏNH biãn soaûn

27

4. coï thãø duìng While nhæ sau :} key := False False While not key do begin S1 if not C1 then key := True else if C2 then S2 End True C2 True S2 Cáúu truïc loop-exit trãn âáy coï thãø duìng Repeat nhæ sau : key := False Repeat S1 if C1 then key := True else if C2 then S2 Until key . Mäüt säú vê duû viãút chæång trçnh theo så âäö khäúi Vê duû 4 : { Voìng làûp naìy duìng Repeat } Repeat True C1 S False C2 S Until C1 or not C2 Chuï yï :Coï âiãöu kiãûn cuäúi voìng làûp coï thãø duìng Repeat False True Vê duû 5 : True C1 { Voìng làûp naìy duìng While } While C1 do False C2 False if C2 then S1 else S2 Chuï yï :Coï âiãöu kiãûn træåïc voìng làûp coï thãø duìng While True S1 S2 Vê duû 6 : S1 False C1 { Âáy laì cáúu truïc loop-exit.28 Cäng nghãû Pháön mãöm II.

ngæåìi ta khuyãn ràòng chè nãn xáy dæûng chæång trçnh våïi 3 cáúu truïc âiãöu khiãøn cå baín laì tuáön tæû.. Dijkstra E.. Bohm vaì Jacopini âaî chæïng minh âæåüc ràòng chè cáön täúïi thiãøu hai cáúu truïc tuáön tæû vaì làûp laì âuí. Cáúu truïc täúi thiãøu Caïc cáúu truïc âiãöu khiãøn chuáøn laì kãút quaí cuía nhæîng cäú gàõng låïn trong cuäüc caïch maûng vãö láûp trçnh nhæîng nàm 60. reî nhaïnh vaì làûp. v. Âãø âaím baío tênh trong saïng. vaì Jacopini G. Tuy nhiãn. Duìng khoïa key âãø âaïnh dáúu läúi thoaït nhæ sau :} key := False Repeat If C1 then key := True Else begin True S1 If C2 then key := True Else begin S2 If C3 then key := True Else begin S3 If C4 then key := True Else S4 End End End Until key C1 False S1 C2 True False S2 C2 False S3 C4 True False S4 III. Âënh lyï Bohm vaì Jacopini 1986 Våïi moüi chæång trçnh viãút dæåïi daûng så âäö khäúi P (Flowchart). PHAN HUY KHAÏNH biãn soaûn 29 . âån giaín vaì tæû nhiãn. Nhæîng nhaì tin hoüc coï tãn tuäøi âaî âoïng goïp cäng sæïc laì Bohm C.W.. vaì Warier. âãöu täön taûi mäüt chæång trçnh Q tæång âæång våïi P theo nghéa sau : TS.v.Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 29 Vê duû 7 : True { Træåìng håüp Loop-exit måí räüng.

Q sæí duûng hai cáúu truïc âiãöu khiãøn duy nháút laì tuáön tæû vaì voìng làûp while (SW: Sequence &While). If. else if C = Cn then Sn If C then S1 else S2 → p := C . For... Så âäö chuyãøn cáúu truïc nhæ sau : Case For Repeat Loop − Exit If Tuáön tæû While Hçnh 2. ta coï P(x) = Q(x) : P vaì Q biãún âäøi nhæîng caïi vaìo giäúng nhau thaình caïc ra giäúng nhau. if → SW Duìng hai biãún phuû kiãøu logic âãø thæûc hiãûn voìng làûp While âuïng mäüt láön : Var p. . q := p While p do begin S1 . Cn : Sn End {Case} 2. Caïc biãún cuía Q cuîng laì caïc biãún cuía P.. . Chuyãøn vãö cáúu truïc tuáön tæû vaì làûp while (SW) Sau âáy laì caïch chuyãøn âäøi cuía caïc cáúu truïc Case.4.. Repeat vaì Loop − Exit : 1. coï thãø Q chæaï thãm mäüt säú biãún logic. Case → if Case C of C1 : S1 . q : Boolean If C then S → p := C While p do begin S . . Caïc thao taïc trãn caïc biãún cuía Q laì giäúng nhæ cuía P.30 Cäng nghãû Pháön mãöm Våïi moüi dæî liãûu vaìo X thuäüc miãön xaïc âënh X. p := not p End → If C = C1 then S1 else if C = C1 then S2 else if . p := not p .

While not C do S III. Repeat → SW Repeat S until C 4. ta coï thãø âàût caïc cáúu truïc âiãöu khiãøn khaïc. q := not q End 3. I := Pred (I) End → S . PHAN HUY KHAÏNH biãn soaûn 31 . For → SW For I:= GtÂáöu to GtCuäúi do S → I := GtÂáöu While i <= GtCuäúi do begin S . Caïc cáúu truïc läöng nhau Baín thán lãûnh S trong mäùi cáúu truïc âiãöu khiãøn cå baín laûi coï thãø laì mäüt cáúu truïc âiãöu khiãøn khaïc. I := Succ (I) End For I:= GtÂáöu downto GtCuäúi do S → I := GtÂáöu While i >= GtCuäúi do begin S .1. While not q do begin S2 .Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 31 End. chàóng haûn thãú S1 båíi : While C1 do S3 vaì thãú S2 båíi : Repeat S4 until C2 Ta coï : If C then While C1 do S3 Else Repeat S4 until C2 TS. Vê duû 8 : Våïi cáúu truïc âiãöu kiãûn If C then S1 else S2 Taûi S1 vaì S2.

32 Cäng nghãû Pháön mãöm Âãún læåüt S3 vaì S4 laûi coï thãø thay thãú båíi caïc cáúu truïc khaïc. Mäùi âån thãø coï caïc tênh cháút nhæ sau : a) Tênh âån thuáön • • • Chè giaíi quyãút nhæîng âäúi tæåüng dæî liãûu coï liãn hãû våïi nhau trong phaûm vi cuía váún âãö. thuût ra âãø phaín aïnh tênh cáúu truïc vaì mæïc âäü läöng nhau cuía caïc cáúu truïc. Khaïi niãûm vãö âån thãø YÏ tæåíng cå baín cuía láûp trçnh cáúu truïc laì phán raîî váún âãö låïn thaình caïc váún âãö nhoí hån cho âãún khi nháûn âæåüc caïc váún âãö tæång âäúi âån giaín. . Mäùi âån thãø laì mäüt haìm dæî liãûu vaìo. mäùi váún âãö naìy âæåüc giaíi quyãút båíi mäüt âån thãø chæång trçnh (module). Hoaût âäüng chè phuû thuäüc vaìo dæî liãûu âæa vaìo chæï khäng phuû thuäüc vaìo tçnh traûng træåïc âoï cuía noï. IV.. C. Coï mäüt läúi vaìo vaì mäüt läúi ra. b) Tênh chuyãn biãût • • Chè thæûc hiãûn mäüt chæïc nàng. Caïc khäúi coï thãø thuût voìa. Láûp trçnh âån thãø IV. cáúu truïc cuía chæång trçnh ngaìy caìng phæïc taûp vaì dáùn âãún khoï hiãøu vaì dãù sai soït. Khäng quaï daìi hoàûc quaï ngàõn (lyï tæåíng laì mäùi âån thãø coï tæì 60 âãún 70 doìng lãûnh væìa nàòm troün trong mäüt trang A4). Nguyãn tàõc : Cáúu truïc con âæåüc viãút loüt vaìo trong (thuût vaìo) cáúu truïc cha. Chè âæåüc khåíi âäüng bàòng caïch goüi. bãn trong chè duìng nhæîng cáúu truïc âiãöu khiãøn chuáøn. Caïc ngän ngæî láûp trçnh báûc cao nhæ Pascal (kyî thuáût duìng Unit). Âiãøm vaìo vaì âiãøm ra cuía mäùi cáúu truïc phaíi nàòm trãn cuìng mäüt haìng doüc. v.. Våïi caïcc pheïp thãú nhæ váûy. • c) Tênh âäüc láûp • Laì mäüt âån vë biãn dëch. kãút quaí tiãn âoaïn âæåüc.v. Coï thãø viãút vaì chaûy thæí âäüc láûp. nhiãûm vuû nháút âënh. Chênh vç váûy maì ngæåìi ta chuï troüng triãøn khai chæång trçnh tæì trãn xuäúng vaì viãút caïc cáúu truïc theo tæìng khäúi.1. C++ (include caïc tãûp chæång trçnh ) vaì háöu hãû caïc cäng cuû láûp trçnh thæåìng gàûp hiãûn nay âãöu cho pheïp láûp trçnh theo âån thãø.

d) Âån thãø chæång trçnh con (Subroutine Module) nhàòm giaíi quyãút mäüt nhiãûm vuû troün veûn nhæng coï quan hãû våïi caïc âån thãø khaïc. PHAN HUY KHAÏNH biãn soaûn 33 . Mäúi liãn hãû giæîa caïc âån thãø IV.Mäúi liãn hãû giæîa caïc âån thãø. Âån thãø xæí lyï âæåüc âån thãø âiãöu khiãøn goüi tåïi vaì sau khi thæûc hiãûn xong chæïc nàng. âån thãø xæí lyï traí quyãön âiãöu khiãøn tråí laûi cho âån thãø âiãöu khiãøn.Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 33 IV. Täø chæïc mäüt chæång trçnh coï cáúu truïc âån thãø Cáúu truïc chæång trçnh gäöm : . täø chæïc phán cáúp daûng cáy (tree).Phán loaûi âån thãø Coï 4 loaûi âån thãø : a) Âån thãø âiãöu khiãøn Âån thãø âiãöu khiãøn (Director Module) coï chæïc nàng goüi caïc âån thãø khaïc xæí lyï. Âån thãø cuîng do âån thãø âiãöu khiãøn goüi tåïi giäúng nhæ hoaût âäüng cuía âån thãø xæí lyï. TS. Âån thãø chæång trçnh con âæåüc goüi thæûc hiãûn nhiãöu láön trong chæång trçnh.5.2.2. IV.2. Mäúi liãn hãû giæîa caïc âån thãø Caïc âån thãø näúi kãút våïi nhau thaình chæång trçnh. .1. coï sæû kiãøm tra vaì xæí lyï sai soït. c) Âån thãø vaìo/ra Âån thãø vaìo/ra (IO Module) chuyãn traïch vaìo/ra dæî liãûu. b) Âån thãø xæí lyï Âån thãø xæí lyï (Pcocessing Module) chuyãn traïch mäüt nhiãûm vuû naìo âoï trãn vuìng dæî liãûu âäüc láûp.2. A B C D E F G Hçnh 2.Cáúu truïc näüi taûi cuía caïc âån thãø.

chè coï B måïi coï quyãön âiãöu khiãøn D. Nhæîng cáúu truïc cáy thoía maîn tênh cuûc bäü tham chiãúu âæåüc goüi laì cáúu truïc cáy thuáön tuïy (Pure tree Structure). Nhæ váûy toaìn bäü chæång trçnh laì mäüt táûp håüp caïc cáúu truïc cáy thuáön tuïy. B D E Hçnh 2. Nhæ váûy. Træåìng håüp âån thãø chæång trçnh con phæïc taûp thç coï thãø täø chæïc theo cáúu truïc cáy thuáön tuïy.34 Cäng nghãû Pháön mãöm Caïc âån thãø âæåüc täø chæïc phán cáúp daûng cáy nhæng phaíi thoía maîn tênh cuûc bäü tham chiãúu (locality of Reference) : chè coï âån thãø mæïc cao hån (cha) måïi coï quyãön tham chiãúu (goüi) âãún âån thãø mæïc tháúp hån kãö âoï (con). nhiãöu chäù trong chæång trçnh thç nãn täø chæïc thaình mäüt âån thãø chæång trçnh con vaì veî riãng. Vê duû 10 : A F G B C F1 F2 F3 G1 D E Caïc âån thãø chæång trçnh con Hçnh 2. Ngoaûi lãû : Nãúu mäüt cäng viãûc naìo âoï cáön thæûc hiãûn nhiãöu láön. − Caïc nhaïnh hoaìn toaìn taïch biãût nhau nãn coï tênh tæång taïc täúi thiãøu. Vê duû 9 : A − D chè phuûc vuû B. caïc âån thãø chæång trçnh con chè âoïng vai troì thæ viãûn. giaím âæåüc tênh phæïc taûp cuía chæång trçnh. khäng veî vaìo cáúu truïc cáy. Cáúu truïc cáy thuáön tuïy a) Âàûc âiãøm cuía cáúu truïc cáy thuáön tuïy − Mäùi âån thãø chè âæåüc quyãön âiãöu khiãøn âån thãø con træûc tiãúp.6. C khäng thãø goüi D. mäüt sæû måí räüng cuía ngän ngæî láûp trçnh. Cáúu truïc cáy thuáön tuïy cuía chæång trçnh vaì chæång trçnh con .7. C − Giæîa B vaì D chè coï mäüt âæåìng tæång taïc duy nháút laì trao âäøi tham biãún.

Coï nghéa âaî phán têch mäüt cäng viãûc thaình nhæîng cäng viãûc beï hån. F3 vaì G1). laì con cuía âån thãø naìo ? − Caïc âån thãø chæång trçnh con âäüc láûp våïi ngæî caính. Näüi dung phæång phaïp Nguyãn lyï phaït triãøn CHTR bàòng tinh chãú tæìng bæåïc (hay thiãút kãú tæì trãn xuäúng) do Niclaus Wirth (taïc giaí cuía ngän ngæî láûp trçnh Pascal) âãö xuáút vaìo nàm 1971. Cáön phán biãût : − Caïc âån thãø xæí lyï phuû thuäüc vaìo ngæî caính (context) naìo. . mäùi cáu âæåüc phán têch chi tiãút hån thaình nhæîng cáu khaïc. V.Mäùi bæåïc phán têch âæåüc goüi laì âaî tinh chãú (refine) cáu (cäng viãûc) âoï. trong baìi baïo cuía mçnh "Program Development by Stepwise Refinement". TS. .1.Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 35 b) Thæí nghiãûm chæång trçnh trãn cáúu truïc cáy thuáön tuïy Quaï trçnh thæí nghiãûm mäüt chæång trçnh : − Thæí nghiãûm caïc âån thãø chæång trçnh con træåïc. Sæû tinh chãú âæåüc hæåïng vãö phêa ngän ngæî láûp trçnh seî duìng. Sau âoï. tæì dæåïi lãn vaì riãng tæìng nhaïnh. − Thæí nghiãûm caïc âån thãø trong chæång trçnh chênh. taûi mäùi bæåïc. F2. coï thãø coi âoï laì mäüt CHTR con vaì tiãúp tuûc tinh chãú noï. CHTR laì nhæîng cáu âæåüc viãút bàòng ngän ngæî tæû nhiãn (chàóng haûn tiãúng Viãût) thãø hiãûn sæû phán têch täøng thãø cuía ngæåìi láûp trçnh. Ban âáöu. − Thæí C. Nãúu cáu coìn toí ra phæïc taûp. nhæîng cáu chæî trãn ngän ngæî tæû nhiãn caìng âån giaín dãù hiãøu hån vaì âæåüc thay thãú bàòng caïc cáu lãûnh cuía ngän ngæî láûp trçnh. Phaït triãøn chæång trçnh bàòng tinh chãú tæìng bæåïc V. − Thæí caí chæång trçnh. − Thæí D vaì E räöi thæí B. Nghéa laì caìng åí bæåïc sau. Âãø thæí nghiãûm chæång trçnh cho trong hçnh veî trong vê duû åí trãn : − Thæí F vaì G træåïc (sau khi âaî thæí F1.Mäùi cáu âæåüc goüi laì mäüt âàûc taí (Specification). PHAN HUY KHAÏNH biãn soaûn 35 .

nãúu âoüc '2' thç tàng säú ['2'] lãn 1} Until c = dáúu cháúm.9. cáön âæa ra caïc cáúu truïc dæî liãûu tæång æïng våïi tæìng bæåïc. .'9'] of integer. V. {laì kyï tæû c } if kê_tæû_laì_chæî_säú then âãúm_chæî_säú_âoï. säú chæî säú 1 âaî âoüc = 2... nhæng täút nháút nãn duìng mäüt maíng coï 10 pháön tæí : Säú ['0'] chæïa kê tæû '0' âaî âoüc. MOT. In ra säú læåüng tæìng chæî säú tæì 0.9 âaî âoüc. Coï thãø duìng 10 biãún âån ZERO. var säú = daîy. thç in ra : säú chæî säú 0 âaî âoüc = 1. traïnh moì máùm thæí nghiãûm mang tênh træûc giaïc.2.. trong âoï sæû phaït triãøn cuía caïc bæåïc laì hæåïng vãö ngän ngæî láûp trçnh seî sæí duûng. säú chæî säú 2 âaî âoüc = 2 ... YÏ nghéa : Viãûc láûp trçnh coï sæû âënh hæåïng vaì coï sæû ngàn nàõp trãn giáúy nhaïp. {vê duû.2. Âaïy cuía sæû âi xuäúng trong hoaût âäüng phán têch laì caïc cáu lãûnh vaì caïc mä taí dæî liãûu viãút bàòng ngän ngæî láûp trçnh.. Chàóng haûn.1. c: Char. Vê duû 1 Nháûp vaìo daîy caïc kyï hiãûu liãn tiãúp tæì baìn phêm cho âãún khi kê tæû dáúu cháúm (. HAI. Phæång phaïp tinh chãú tæìng bæåïc thãø hiãûn tæ duy giaíi quyãút váún âãö tæì trãn xuäúng. {kyï tæû âæåüc âoüc } Tæì âoï låìi giaíi coï thãø âæåüc viãút nhæ sau : Repeat âoüc_mäüt_kê_tæû.36 Cäng nghãû Pháön mãöm Trong quaï trçnh tinh chãú.) âæåüc goî. nãúu nháûp vaìo daîy : Kiki1t2047655kp412. 1. BA.. Nhæ váûy sæû tinh chãú caïc âàûc taí CHTR vaì dæî liãûu laì song song. Vê duû minh hoaû V.v.. v. Ta mä taí nhæ sau : Type daîy = array ['0'.. Säú ['1'] chæïa kê tæû '1' âaî âoüc. Phaïc thaío låìi giaíi Cáön in ra 10 giaï trë æïng våïi caïc chæî säú tæì 0.

c.'. Until c = dáúu cháúm.'9'] of integer. c. Type daîy = array ['0'.. for c := '0' to '9' do writeln ('Säú caïc chæî säú'.) :'). Var säú: daîy. ' âaî âoüc ='. Säú caïc chæî säú 0_âaî âoüc = 4 Säú caïc chæî säú 1_âaî âoüc = 0 Säú caïc chæî säú 2_âaî âoüc = 2 Säú caïc chæî säú 3_âaî âoüc = 0 Säú caïc chæî säú 4_âaî âoüc = 1 Säú caïc chæî säú 5_âaî âoüc = 3 TS. Cho chaûy chæång trçnh ta âæåüc kãút quaí nhæ sau : Haîy goî vaìo caïc kê tæû vaì kãút thuïc bàòng dáúu cháúm (. Ta tinh chãú bæåïc kê_tæû_laì_chæî_säú bàòng caïch chuyãøn ra daûng biãøu thæïc Pascal nhæ sau : ('0' < c) and (c < = '9') Viãûc âoüc_mäüt_kê_tæû âæåüc viãút nhæ sau : Read (c).) : ytr7657g858450020820. Ta tháúy træåïc luïc âãúm. writeln ('Haîy goî vaìo caïc kê tæû').säú [c]:2).'âaî âoüc ='.Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 37 for c := '0' to '9' do writeln('säú caïc chæî säú'. c: char. säú [c] : 2) Readln end. caïc pháön tæí cuía maíng säú phaíi bàòng 0. writeln ('vaì kãút thuïc bàòng dáúu cháúm (. if ('0' < = c) and (c < = '9') then säú [c] := säú [c] + 1. Const dáúu cháúm = '. Ta coï : for c := '0' to '9' do säú [c] := 0. Dáúu cháúm coï thãø duìng hàòng : Const dáúu cháúm '='. Báy giåì ta coï chæång trçnh hoaìn chènh nhæ sau : Program Âãúm chæî säú. begin for c := '0' to '9' do säú [c] := 0. Repeat Read (c). PHAN HUY KHAÏNH biãn soaûn 37 .

end else Quay_laûi. Låìi giaíi coï daûng mäüt voìng làûp nhæ sau : Xeït-cäüt-âáöu.2. Baìi toaïn naìy do Call Friedrich Gauss âæa ra vaìo nàm 1850 nhæng khäng coï låìi giaíi hoaìn toaìn theo phæång phaïp giaíi têch. Niclaus Wirth trçnh baìy phæång phaïp thæí-sai (trial-and-error) nhæ sau : Âàût mäüt quán háûu vaìo cäüt 1 (trãn mäüt haìng tuyì yï). ta coï biãøu thæïc : j > 8 .8. if an_toaìn then begin Âàût_quán_háûu_vaìo.v. j) åí cäüt j. Tiãúp tuûc âàût quán thæï 3. Xeït_cäüt_kãú_tiãúp : Tæïc laì chuyãøn qua xeït cäüt kãú tiãúp vaì chuáøn bë xeït haìng âáöu tiãn : j:= j+1. Baìi toaïn 8 quán háûu Haîy âàût 8 quán háûu lãn baìn cåì vua (coï 8 x 8 ä) sao cho khäng coï quán naìo àn âæåüc quán naìo ? Mäüt quán háûu coï thãø àn âæåüc bàõt cæï quán naìo nàòm trãn cuìng cäüt. coï caïch giaíi ngay âãø tiãún haình træåïc nhæ sau : Goüi baìn cåì vua 8 × 8 gäöm caïc ä (i... coï thãø thæí âi thæí laûi nhiãöu láön.. Lyï do laì loaûi baìi toaïn naìy khäng phuì håüp våïi caïc phæång phaïp giaíi têch maì phaíi tçm caïch khaïc âãø giaíi trãn MTÂT.2.8 vaì i=1. ta coï : Xeït_cäüt_âáöu : Bàõt âáöu våïi cäüt j=1.. quán háûu cuäúi cuìng âaî âæåüc âàût vaìo baìn cåì : thaình cäng. cuìng haìng hay cuìng âæåìng cheïo thuáûn nghëch våïi noï. Caïc cäng viãûc âæåüc tinh chãú dáön dáön bàòng caïch choün caïc viãûc âån giaín. Xeït_cäüt_kãú_tiãúp. v. Âaî_xong_våïi_cäüt_cuäúi : Luïc naìy âaî xong caí 8 cäüt. Âàût tiãúp mäüt quán háûu thæï hai sao cho 2 quán khäng àn nhau. haìng i våïi j=1. Repeat Thæí_cäüt. i:= 0. until Âaî_xong_våïi_cäüt_cuäúi or Âaî_quay_laûi_quaï_cäüt_âáöu.38 Säú caïc chæî säú 6_âaî âoüc = 1 Säú caïc chæî säú 7_âaî âoüc = 2 Säú caïc chæî säú 8_âaî âoüc = 3 Säú caïc chæî säú 9_âaî âoüc = 0 Cäng nghãû Pháön mãöm V.

j = l. Ta coï caïc maíng a . caïch biãøu diãùn naìy gáy khoï khàn cho viãûc kiãøm tra hai âæåìng cheïo coï 2 quán háûu naìo àn nhau khäng theo luáût cåì vua ? Báy giåì ta duìng 3 daîy Boolean a.16] of boolean. j] coï giaï trë true nãúu coï quán háûu åí haìng i. B [i. c [l] = true l. {laì haìng thæï i } Kiãøm_tra_an_toaìn . nãúu khäng täön taûi quán háûu naìo nàòm trãn âæåìng cheïo nghëch thæï Våïi mäùi ä (i.8] of boolean. sæû biãøu diãùn dæî liãûu caìng trç hoaîn láu caìng täút (âãún khi khäng thãø trç hoaîn âæåüc næîa) ! Vç baìn cåì coï 8 x 8 ä nãn coï thãø nghé ngay âãún viãûc sæí duûng mäüt ma tráûn Boolean hai chiãöu âãø biãùu diãùn : Var B : array [1. c nhæ sau : var a : array [1. nãúu : 1 ≤ i. b [k] = true nãúu khäng täön taûi quán háûu naìo nàòm trãn âæåìng cheïo thuáûn thæï k. Luïc âáöu I=0. b .7] of boolean. c : array [-7. j) haìng i cäüt j. viãûc Xeït_mäüt_haìng tæïc : i:= i+1 Tæì âoï ta coï ngay Âaî_xeït_âãún_haìng_cuäúi tæïc laì : i = 8 Luïc naìy ngæåìi ta tçm caïch biãøu diãùn dæî liãûu tæång æïng vç caïc cäng viãûc âaî coï veí “mën” räöi.. c våïi : a [i] = true nãúu khäng täön taûi quán háûu naìo nàòm trãn haìng i.8. cäüt j. 1. Theo låìi khuyãn cuía Niclaus Wirth.8] of Boolean. j ≤ 8 thç : 2 ≤ k ≤ 16 vaì : -7 ≤ l ≤ 7. PHAN HUY KHAÏNH biãn soaûn 39 . TS.Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 39 Âaî_quay_laûi_quaï_cäüt_âáöu: Tæïc laì âaî luìi quaï cäüt âáöu tiãn : tçnh traûng bãú tàõc xaíy ra : khäng tçm ra låìi giaíi ! j < 1 Thæí_cäüt : Tçm xem coï thãø âàût quán háûu taûi haìng naìo åí cäüt âang xeït. ta coï quan hãû nhæ sau : −âæåìng cheïo thuáûn thæï k thoaí maîn i + j = k. b. Bæåïc Thæí_cäüt seî coï daûng : repeat Xeït_mäüt_haìng . {khi âàût quán háûu vaìo haìng naìy } Until An_toaìn or Âaî_xeït_âãún_haìng_cuäúi. Tuy nhiãn.. Vç váûy.. −âæåìng cheïo nghëch thæï l thoaí maîn i . b : array [2...

b [i+j]:= false. Âiãöu kiãûn An_toaìn âãø âàût quán háûu vaìo ä (i.j]. ä (i. b[2] = b[i+j] c[-6] = c[i-j] 1 . a [i]:= false.8] of integer.8. if not Âaî_quay_laûi_quaï_cäüt_âáöu then begin Boí_quán_háûu_åí_cäüt_âoï. Bæåïc Quay_laûi coï daûng : Xeït_laûi_cäüt_træåïc. Bàòng caïch sæí duûng mäüt biãún logic : Var Antoan: Boolean... Viãûc âàût quán háûu vaìo ä (i. c [i-j]:= false. j) laì : a [i] = b [i+j] = c [i-j] = true.. i = 1 2 . j) : var x : array [1.. j) } if Âang_åí_haìng_cuäúi_cuìng then begin . Baìn cåì vua cho baìi toaïn taïm quán háûu Âàût quán háûu vaìo ä (i. ta duìng daîy nguyãn x sao cho x [j] = i nãúu nhæ coï mäüt quán háûu åí ä (i. j) Âàût_quán_háûu_vaìo seî laì : x[j]:= i. {tæïc cäüt træåïc cäüt âang xeït.. Tiãúp tuûc tinh chãú bæåïc phæïc taûp nháút laì Quay_laûi : Quay_laûi : laì quay laûi mäüt cäüt åí træåïc cäüt âang xeït âãø âàût laûi quán háûu cho cäüt âoï khi tçnh thãú hiãûn traûng laì bãú tàõc. 8 a[i].40 Cäng nghãû Pháön mãöm Âãø biãøu diãùn sæû kiãûn âàût quán háûu taûi cäüt j vaìo haìng i. chæa coï hai quán háûu naìo trong säú nhæîng quán âaî âàût lãn baìn cåì coï thãø àn láùn nhau. j) seî laìm cho : a [i] = b [i+j] = c [i-j] = false Kiãøm_tra_an_toaìn : Cho âãún luïc naìy. Viãûc Kiãøm_tra_an_toaìn âæåüc dëch ra Pascal nhæ sau : An toaìn := a [i] and b [i + j] and c [i . • • 8 Hçnh 2.

ov='#'. j:= j+1. j:=1. a [i]:= true. i:= 0 end else begin j:=j-1. Const Hau='Q '. i:=0..j: Integer. Thao taïc Boí_quán_háûu_åí_cäüt_âoï seî coï daûng: i:= x [j]. c[i-j]:=false.8] of Integer. b[i+j]:=false. tæïc laì : j < 1. i.16] of Boolean. a: array[1. for i:=-7 to 7 do c[i]:=true.1. until antoan or (i=8). repeat repeat i:=i+1. a[i]:=false.. for i:=2 to 16 do b[i]:=true. if antoan then begin x[j]:=i. Coìn Âaî_quay_laûi_quaï_cäüt_âáöu thç âaî xeït træåïc âáy. antoan:=a[i] and b[i+j] and c[i-j]. b[i+j]:= true.. Var x: array[1. c[i-j]:=true. if j>=1 then begin i:=x[j].8] of Boolean. c[i-j]:= true. antoan: Boolean..7] of Boolean. if i=8 then begin TS. a[i]:=true. b[i+j]:=true. if not Âaî_quay_laûi_quaï_cäüt_âáöu then Boí_quán_háûu_åí_cäüt_âoï end end. b: array[2. Chæång trçnh hoaìn chènh nhæ sau : Program TamQuánHau. Dãù daìng ta tháúy Xeït_laûi_cäüt_træåïc tæïc laì : j = j . PHAN HUY KHAÏNH biãn soaûn 41 . c: array[-7. Uses Crt.Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 41 Xeït_laûi_cäüt_træåïc . Begin for i:=1 to 8 do a[i]:=true.

Tæì tinh chãú láön 1 trong muûc træåïc. b[i+j]:=true. Nhåì phæång phaïp tinh chãú tæìng bæåïc maì ngæåìi láûp trçnh coï thãø dãù daìng nhçn tháúy nhæîng chäù cáön chènh sæía trong chæång trçnh. Kãút quaí chaûy chæång trçnh nhæ sau : Turbo Pascal Version 7. writeln end. coï thãø cáön sæía âäøi laûi theo mäüt caïch naìo âoï cho phuì håüp. ta xeït baìi toaïn 8 quán háûu täøng quaït nhæ sau : Tçm táút caí caïc phæång aïn coï thãø âàût 8 quán háûu lãn baìn cåì sao cho khäng coï hai quán naìo àn láùn nhau. hoàûc mäüt hãû thäúng maïy tênh khaïc. if j<1 then writeln('Khong co loi giai!') else for i:=1 to 8 do begin for j:=1 to 8 do if x[j]=i then write(Hau) else write(ov). tæïc laì chuyãøn sang mäüt ngän ngæî láûp trçnh khaïc. Âãø minh hoaû. Do nhu cáöu. a[i]:=true. ta cáön coï hai sæía âäøi nhæ sau : . Âáy laì khaí nàng duy trç (Maintainability) cuía phæång phaïp.42 Cäng nghãû Pháön mãöm j:=j-1. if j>=1 then begin i:=x[j].0 Copyright (c) 1983. c[i-j]:=true end end end end until (j>8) or (j<1).92 Borland International Q # # # # # # # # # # # Q # # # # # # # # # # Q # # # # # Q # # # # Q # # # # # # # # # # # Q # # Q # # # # # # # # # Q # # # # V.3. readln end. Mäüt âàûc tênh khaïc cuía phæång phaïp tinh chãú tæìng bæåïc laì tênh phäø cáûp (portability)) cuía chæång trçnh : ta dãù daìng chuyãøn âäøi sang mäüt mäi træåìng khaïc. Sæía âäøi chæång trçnh Chæång trçnh viãút xong chaûy täút chæa coï nghéa quaï trçnh láûp trçnh âaî xong.

ta in låìi giaíi ra nhæng chæa kãút thuïc chæång trçnh ngay maì tiãúp tuûc quay tråí laûi âãø tçm låìi giaíi khaïc. − Chæång trçnh ngæìng khi sæû quay laûi âaî quaï cäüt âáöu. PHAN HUY KHAÏNH biãn soaûn 43 . TS.Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 43 − Khi âaî âãún cäüt cuäúi cuìng vaì âàût quán háûu cuäúi cuìng vaìo baìn cåì.

Quay_laûi end end else Quay_laûi Until Âaî_quay_laûi_quaï_cäüt_âáöu. Xeït_cäüt_kãú . if An_toaìn then begin Âàût_quán_háûu_vaìo . if NotOK then Xoaï_næåïc_træåïc end else Thaình_cäng end Until Âi_âæåüc or (Hãút_næåïc_âi). Kãút_thuïc End. . repeat Thæí_cäüt . y0. Cäng nghãû Pháön mãöm Tæì âáy. haîy xaïc âënh xem coï thãø thæûc hiãûn mäüt næåïc âi kãú tiãúp næîa hay khäng ? Nhæ váûy thuáût toaïn âãø tçm næåïc âi kãú tiãúp coï thãø viãút thaình thuí tuûc âãû quy daûng phaïc thaío nhæ sau : Procedure Thæí_næåïc_âi_ kãú. mäùi ä âi qua âuïng mäüt láön ? Caïch giaíi quyãút âãø quán maî âi qua hãút n2 − 1 ä cuía baìn cåì laì taûi mäùi ä maì quán maî âang âæïng. Haîy tçm caïch cho quán maî âi theo luáût cåì vua âãø qua hãút táút caí caïc ä cuía baìn cåì.44 Låìi giaíi coï daûng phaïc thaío nhæ sau : Xeït_cäüt_âáöu. Begin Khåíi âäüng_ næåïc_ âi_ coï_ thãø Repeat Choün_mäüt_næåïc_âi if OK then begin Thæûc_hiãûn_næåïc_âi if Chæa_hãút_næåïc then begin Thæí_næåïc_âi_kãú. Baìi toaïn maî âi tuáön Cho baìn cåì n × n ä vaì mäüt quán maî âang åí toaû âäü x0. ta coï thãø viãút laûi thaình chæång trçnh hoaìn chènh. våïi caïc bæåïc laìm mën âaî giaíi quyãút åí muûc træåïc. if Cäüt_kãú_væåüt_quaï_cäüt_cuäúi_cuìng then begin In_ra_låìi_giaíi.

j ≤ n. y] = i quy æåïc nhæ sau : q = true q = false næåïc âi thaình cäng khäng coï næåïc âi ä <x. mäùi ä coï toaû âäü (i. biãøu thæïc âiãöu kiãûn OK báy giåì coï thãø viãút : (u in s) and (v in s) and H[u. v]=0 Âãø ghi nháûn næåïc âi håüp lãû Thæûc_hiãûn_næåïc_âi. ta sæí duûng pheïp gaïn : H[u. nghéa laì H[u. Nhæ váûy. j).Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 45 Báy giåì ta cáön tçm cáúu truïc dæî liãûu âãø biãøu diãùn baìn cåì n × n ä. x.n. Trong mä taí trãn. våïi 1 ≤ i. v] := 0 Âãø ghi nháûn kãút quaí låìi goüi âãû quy. v laì toaû âäü næåïc âi kãú tiãúp cuía quán maî theo luáût cåì vua thç âiãöu kiãûn OK phaíi thoaí maîn : − Ä måïi <u. viãûc Xoaï_næåïc_træåïc coï thãø sæí duûng pheïp gaïn : H[u. Var q: Boolean). Thaình_cäng seî laì : q1 := true vaì Kãút_thuïc seî laì : q := q1 Báy giåì ta coï låìi giaíi mën hån nhæ sau : Procedure Try(i:Integer. nghéa laì 1 ≤ u ≤ n vaì 1 ≤ v ≤ n. Tæì âoï. thay vç sæí duûng giaï trë kiãøu Bollean âãø âaïnh dáúu ä âoï âaî âæåüc âi qua chæa. 1 ≤ i ≤ n2 Âãø chè mäüt næåïc âi coï thaình cäng hay khäng. Bàòng caïch xáy dæûng táûp håüp : Var s: set of Idx. PHAN HUY KHAÏNH biãn soaûn 45 . ta âæa vaìo giaï trë kiãøu Integer âãø doì theo quaï trçnh di chuyãøn cuía quán maî theo quy æåïc nhæ sau : H[x. v] = 0. Var H: Array[Idx. TS. ta sæí duûng biãún Bollean q våïi Ta tháúy âiãöu kiãûn Chæa_hãút_næåïc âæåüc biãøu diãùn båíi biãøu thæïc : i ≤ n2 Giaí sæí goüi u. y> chæa âæåüc quán maî âi qua ä <x. v> phaíi thuäüc vaìo baìn cåì. − Quán maî chæa âi qua ä <u. v>. y] = 0 H[x. y> âaî âæåüc quán maî âi qua åí næåïc thæï i. y : Idx.. v] := i. Idx] of Integer. ta sæí duûng biãún Bollean q1 cho biãøu thæïc âiãöu kiãûn Âi_âæåüc. Dãù daìng ta tçm âæåüc mä taí nhæ sau : Type Idx = 1.

Ta coï khai baïo nhæ sau : Var a. v> âæåüc âaïnh säú tæì 1. Cho âãún luïc naìy. ta cáön xaïc âënh giaï trë chãnh lãûch theo toaû âäü.8] of integer. tæì <x. v]=0 then begin H[u.. Ta seî duìng hai maíng mäüt chiãöu a vaì b. if n < sqr(n) then begin Try(i+1. ta chæa xeït âãún luáût âi cuía quán maî. Cäng nghãû Pháön mãöm Choün mäüt_næåïc_âi if (u in s) and (v in s) and H[u. Caïc vë trê khaïc nhau cuía quán maî Âãø coï âæåüc <u. q := q1 End. Nhæ váûy ta váùn coìn hai viãûc chæa giaíi quyãút laì : Khåíi âäüng_næåïc_âi_coï_thãø vaì Choün mäüt_næåïc_âi. y>. b: Array[1. v:Integer. q1). y> cuía quán maî trãn baìn cåì. if not q1 then H[u. våïi quy æåïc chiãöu âi ↑ vaì → mang dáúu +.46 Var Begin Khåíi âäüng_næåïc_âi_coï_thãø Repeat u. ta coï thãø coï taïm ä <u. v>. v] := 0 end else q1:= true end Until q1 or (Hãút_næåïc_âi). Cho træåïc mäüt toaû âäü báút kyì <x. v] := i. y>. chiãöu âi ← vaì ↓ mang dáúu −. âãø læu giæî 8 giaï trë chãnh lãûch theo toaû âäü <x. mäùi maíng seî coï kêch thæåïc 8 pháön tæí.. nghéa laì chæång trçnh xáy dæûng åí trãn âäüc láûp våïi luáût cåì vua våïi chuí yï giaím nheû nhuîng chi tiãút chæa cáön thiãút khi phaït triãøn chæång trçnh. u. q1: Boolean.8 (theo chiãöu ngæåüc kim âäöng häö) maì quán maî coï thãø nhaíy âãún nhæ hçnh dæåïi âáy : y ⎯→ ↑ x Hçnh 2. . v.9.

Cuäúi cuìng laì mäüt thay âäøi nhoí bàòng caïch thãm biãún nguyãn nsq âãø tênh sqr(n) ngoaìi thuí tuûc. Nhæ váûy. y> = <x0. giay. Sau âáy laì chæång trçnh hoaìn chènh : Chæång trçnh maî âi tuáön : PROGRAM KnightsTour. âáöu thuí tuûc. -2. Var q: Boolean). 1. PHAN HUY KHAÏNH biãn soaûn 47 . Dos. 1. Uses CRT. ta sæí duûng mäüt biãún k nguyãn. x. v:= y + b[k]. phut. gio. -2. -1.Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 47 Chàóng haûn nãúu cho <x.8] of integer. b[1]:= b[2]:= b[3]:= b[4]:= b[5]:= b[6]:= b[7]:= b[8]:= 1. y0> våïi âiãöu kiãûn n−2 ≥ x0.1>. Type Idx = 1. 1. 2. 1.. TS. caïc ä cuía baìn cåì âãöu coï thãø laì âêch cuía quán maî våïi khåíi âäüng : for i:=1 to n do for j:=1 to n do H[i. 1]:= 1. 2. y0> = <1. viãûc Khåíi âäüng_næåïc_âi_coï_thãø tæång æïng våïi lãûnh gaïn : k:= 0. -1.. -2. j]:= 0. hund : Word. Chuï yï ràòng n ≥ 5. y : Idx. s: set of Idx.8. Idx] of Integer. N. { Âãø tênh thåìi gian } Procedure Try(i:Integer. q: Boolean. -1. u:= x + a[k]. Const NMax=50. k seî nháûn giaï trë trong phaûm vi 1. b: Array[1. Låìi goüi thuí tuûc nhæ sau : H[1. Try(2. Nsq: integer. y0 ≥ 3 thç ta coï thãø coï 8 càûp giaï trë nhæ sau : a[1]:= a[2]:= a[3]:= a[4]:= a[5]:= a[6]:= a[7]:= a[8]:= 2. Coìn biãøu thæïc âiãöu kiãûn Hãút_næåïc_âi seî tæång æïng våïi : k = 8 Thuí tuûc âãû quy âæåüc bàõt âáöu båíi toaû âäü <x0. 2. kãø tæì næåïc âi k=2. -2. j: Idx. Var i. âãø âaïnh säú caïc næåïc âi coï thãø. -1.Nmax. Báy giåì. a. Viãûc Choün mäüt_næåïc_âi tæång æïng våïi caïc lãûnh gaïn : k:= k + 1. 1. q1:= false. q).. H: Array[Idx.

phut.48 Cäng nghãû Pháön mãöm Var k. { Giåì bàõt âáöu tênh } GetTime(gio. q1). giay:2. s:=[1. Write('Cho N = '). hund). 1.':'. b[1]:= 1.':'. Readln(N). phut:2. a[2]:= 1. v] := 0 end else q1:= true end Until q1 or (k=8). Repeat k:= k + 1. Begin k:= 0. a[5]:= -2. q := q1 End { Try }. a[6]:= -1.':'. While (N>1) and (N<Nmax) do begin { Giåì bàõt âáöu tênh } GetTime(gio. a[1]:= 2. b[8]:= -1. a[7]:= 1. q1:= false. nsq:= sqr(N). hund). phut. v. a[4]:= -2. j]:= 0. v:= y + b[k].. Writeln(‘Kãút thuïc=’. if not q1 then H[u. u:= x + a[k]. b[4]:= 1.':'. v:Integer. b[2]:= 2. 1]:= 1. giay:2. giay. b[5]:= -1. b[6]:= -2. q1: Boolean.n]. phut:2. . a[3]:= -1. if q then for i:=1 to N do begin for j:=1 to N do write(h[i. Try(2. Writeln(‘Bàõt âáöu =’. j]:5). Write('Cho N = '). if (u in s) and (v in s) and (H[u. v]=0) then begin H[u. u. giay. 1. if i < Nsq then begin Try(i+1. b[3]:= 2.':'. v] := i. a[8]:= 2. End {While} End. for i:=1 to n do for j:=1 to n do H[i. H[1. Begin { KnightsTour main } ClrScr. Writeln end else Writeln('Khäng coï låìi giaíi !'). hund). hund).':'. b[7]:= -2. Readln(N). u. gio:2. q). gio:2.

PHAN HUY KHAÏNH biãn soaûn 49 .Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 49 Sau âáy laì kãút quaí våïi N = 5 : Cho N = 5 Bàõt âáöu = 5:59:57:30 1 6 15 10 21 20 5 7 16 14 9 19 2 8 22 11 13 24 17 4 12 23 25 18 3 Kãút thuïc = 5:59:57:36 Kãút quaí våïi N = 6 : Cho N = 6 Bàõt âáöu = 6: 0:40:80 1 16 7 26 11 14 27 34 25 12 15 6 17 2 33 8 13 10 32 35 24 21 28 5 23 18 3 30 9 20 29 36 31 22 19 4 Kãút thuïc = 6: 0:41:79 TS.

Âån vë trong Turbo Pascal Âån vë (Unit) trong Turbo Pascal thãø hiãûn tênh cáúu truïc trong láûp trçnh : cho pheïp chia chæång trçnh låïn thaình mäüt hãû thäúng phán cáúp gäöm mäüt chæång trçnh chênh vaì nhiãöu âån vë chæång trçnh con. gäöm nhæîng thaình pháön nhæ sau : a) Pháön tãn cuía Unit (Unit Heading) Unit <tãn Unit> . VGA.TPU.50 Cäng nghãû Pháön mãöm VI.. thæûc hiãûn caïc chæång trçnh con âäö hoaû theo kiãøu con ruìa (tortoise) cuía Turbo Pascal V3. Âãø goüi caïc Unit.2. Mäùi âån vë. VI. Mäùi Unit âæåüc âàût trong mäüt tãûp chæång trçnh. Giåïi thiãûu Unit Unit laì táûp håüp khai baïo caïc hàòng. Turbo3 Graph3 âãø tæång thêch våïi caïc chæång trçnh Turbo Pascal V3. caïc kiãøu dæî liãûu.0 âaî coï.. tênh caïc haìm toaïn hoüc. trong pháön âáöu chæång trçnh sæí duûng lãûnh : USES <tãn Unit> trong pháön âáöu chæång trçnh. Thæ viãûn caïc chæång trçnh máùu Turbo Pascal coï 8 Unit chuáøn nhæ sau : System chæïa caïc haìm vaì thuí tuûc thæ viãûn thäng duûng mæïc hãû thäúng : xæí lyï tãûp.1. caïc thuí tuûc vaì haìm coï quan hãû våïi nhau âãø âæa vaìo sæí duûng trong chæång trçnh chênh. Cáúu truïc cuía Unit Unit do NSD taûo ra. âæåüc cáút giæî trãn thieït bë nhåï phuû (âéa tæì) dæåïi daûng mäüt tãûp chæång trçnh Pascal *..PAS vaì âæåüc dëch (compile) riãng reî.0 VI. EGA. Phuû luûc . CGA. Kãút quaí dëch laì mäüt tãûp måïi coï pháön måí räüng laì *. xæí lyï chuäùi.. System âæåüc goüi màûc nhiãn maì khäng cáön khai baïo : USES System Dos Crt cung cáúp caïc chæïc nàng cuía hãû âiãöu haình MS-DOS âãø âiãöu khiãøn caïc thiãút bë vaìo (baìn phêm) vaì ra (maìn hçnh) : Goto XY. caïc biãún. Graph cung cáúp caïcc khaí nàng âäö hoüa (graphics) cho caïc loaûi maìn hçnh khaïc nhau : Hercule. Clrscr.

d) Pháön khåíi âäüng (Initialization section) Begin <Caïc lãûnh Pascal> TS. PHAN HUY KHAÏNH biãn soaûn Pháön naìy coï thãø vàõng màût nhæng end. Caïc mä taí nhaîn. Ta goüi chuïng laì “bë dáúu” (Hidden). hàòng. thuí tuûc näüi bäü trong pháön hiãûn thæûc cuía mäüt Unit laì khäng duìng âæåüc taûi nåi sæí duûng Unit naìy. kiãøu dæî liãûu. biãún vaì caïc haìm. • Caïc haìm vaì/hoàûc thuí tuûc näüi bäü duìng riãng trong pháön hiãûn thæûc (khäng khai baïo trong pháön giao tiãúp).Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 51 b) Pháön giao tiãúp (Interface Section) Interface { Caïc khai baïo sau âáy khäng bàõt buäüc phaíi coï } Uses <Ds caïc Units duìng cho Unit naìy> Const <Ds caïc hàòng> Type <Ds caïc mä taí kiãøu> Var <Ds caïc khai baïo biãún> <Ds caïc pháön âáöu cuía caïc thuí tuûc vaì haìm> Caïc khai baïo Const. phaíi coï màût ! 51 . Danh saïch caïc tãn thuí tuûc vaì haìm âæåüc caïc Unit khaïc duìng âãún seî âæåüc khai baïo âáöy âuí trong pháön tiãúp theo : c) Pháön hiãûn thæûc (Implementation Section) Implementation { Caïc khai baïo sau âáy khäng bàõt buäüc phaíi coï } Uses <Ds caïc Uses sæí duûng âãún> Label <Ds caïc nhaîn> Const <Ds caïc hàòng> Type <Ds caïc mä taí kiãøu> Var <Ds caïc khai baïo biãún> <Caïc mä taí haìm vaì/hoàûc thuí tuûc> Caïc mä taí haìm vaì/hoàûc thuí tuûc trong pháön naìy gäöm coï : • Caïc haìm vaì /hoàûc thuí tuûc âaî mä taí åí pháön giao tiãúp. Ta noïi chuïng laì “tháúy âæåüc” (Visible). Type vaì Var sau Interface cho Unit cuîng duìng âæåüc taûi nåi sæí duûng âån vë naìy.

Interface Const c = 10. P. duìng mãûnh âãö Uses âàût sau khai baïo Program trong chæång trçnh : Uses U1.3. end. Un.52 end. . . Nãúu coï mäüt nåi sæí duûng nhiãöu Unit thç pháön khåíi âäüng cuía caïc Unit âoï seî âæåüc chaûy theo thæï tæû xuáút hiãûn cuía tãn cuía caïc Unit trong khai baïo Uses cuía nåi goüi. caïc haìm vaì/hoàûc thuí tuûc âaî âæåüc khai baïo trong pháön giao tiãúp Interface cuía Unit âoï. Const a = b. Implementation end.Un . ⎯→ Const b = c. U2.. nhæîng (tãûp) chæång trçnh hay (tãûp) Unit âoï cáön âæåüc dëch (Compile) laûi. .PAS vaì U1..PAS ⎯→ Unit U2 . Uses U1 .. VI. ..PAS Unit U1 . Thæåìng thç trong pháön khåíi âäüng cuía mäüt âån vë. Interface Uses U2 . U2.PAS Nãúu trong U2. Caïch sæí duûng Unit a) Mäüt chæång trçnh hay mäüt Unit coï thãø sæí duûng nhiãöu Unit khaïc Sæí duûng mäüt Unit coï nghéa laì âæåüc quyãön sæí duûng caïc hàòng. U1. U2. . thäng baïo chãú âäü chaûy chæång trçnh.PAS. Vê duû : Âãø sæí duûng caïc Units coï tãn láön læåüt laì U1. Vê duû 11 : Giaí sæí chæång trçnh P goüi U1 vaì U1 sæí duûng U2 : Program P ... Begin writeln (a). âäøi c=5 chàóng haûn thç cáön phaíi dëch laûi U2. Implementation end. biãún.PAS (vç U1 sæí duûng U2) vaì dëch laûi P. ngæåìi ta laìm caïc âäüng taïc chuáøn bë nhæ khåíi gaïn cho caïc biãún. Khi trong mäüt Unit chè coï sæû sæía âäøi åí pháön Implementation hay åí pháön Initialization thç khäng cáön dëch laûi nhæîng (tãûp) chæång trçnh hay (tãûp) Unit sæí duûng Unit âoï. kiãøu dæî liãûu. Cäng nghãû Pháön mãöm Khi nåi sæí duûng mäüt Unit coï pháön khåíi âäüng Initialization thç pháön khåíi âäüng cuía Unit naìy seî âæåüc goüi chaûy træåïc khi thán cuía nåi sæí duûng chaûy. b) Khi coï mäüt sæía âäøi naìo âoï trong pháön Interface cuía mäüt Unit Khi âoï. måí caïc tãûp.

Until bk = 0 End.i {i cuía P} {i cuía U1} {i cuía U2} VI. Riãng chæång trçnh chênh (khai baïo Program) thç khäng cáön. Vê duû 12 : Giaí sæí chæång trçnh P sæí duûng caïc Unit U1 vaì U2.4. Goüi chæång trçnh chênh laì HINHTRON vaì Unit sæí duûng âãø tênh diãûn têch hçnh troìn laì DTHTRON.PAS} Interface Const Pi = 3. {hàòng Pi khai baïo trong Unit DTHTRON} Repeat Write (baïn kênh =) . ngæåìi ta âàût træåïc tãn truìng âoï tãn Unit coï chæïa tãn naìy vaì caïch mäüt dáúu cháúm (. Dientich (bk) ) . Nãúu trong P. {HINHTRON} Unit DTHTRON . trong Interface cuía U1 vaì U2 âãöu coï khai baïo biãún i thç âãø phán biãût i naìo laì cuía P.). if bk > 0 then Writeln (‘Diãûn têch = ‘. Implementation Function Dientich. Readln (bk) . Begin {pháön khåíi âäüng Inilialization} TS. Begin Write (‘Säú Pi = ‘. kiãøu dæî liãûu vaì tãn CT con (haìm.318309886} Function Dientich (R : Real) : Real. biãún. {Tãûp HINHTRON. cho âãún khi baïn kênh nháûp vaìo laì 0 thç dæìng. DTHTRON . {Tãûp DTHTRON. Var bk : Real . thuí tuûc) Âãø pháön biãût.1415926535 . Pi) . {1/π = 0.i U2. i naìo laì cuía U1 vaì U2 ngæåìi ta viãút : i U1. ta coï : Program HINHTRON . Vê duû vãö Unit Viãút chæång trçnh tênh nhiãöu láön diãûn têch hçnh troìn våïi baïn kênh nháûp vaìo tæì baìn phêm.Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 53 c) Truìng tãn hàòng. PHAN HUY KHAÏNH biãn soaûn 53 . Begin Dientich := Pi * Sqr (R) End.PAS} Uses Crt.

54 Cäng nghãû Pháön mãöm Writeln (‘trong chæång trçnh chênh seî sæí duûng Unit DTHTRON !’) End. .

S1 True C1 True S3 C3 False S2 S2 C2 False True S3 True C3 False True S4 C4 False False False True TS.Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 55 VI. 1. C1 C1 False False S1 C2 S2 False False C3 True False 3.5. PHAN HUY KHAÏNH biãn soaûn 55 . Sæí duûng caïc cáu lãûnh Pascal âãø viãút chæång trçnh theo så âäö khäúi dæåïi âáy bàòng caïch chè sæí duûng caïc cáúu truïc âiãöu khiãøn cå baín. âiãöu kiãûn if then else vaì làûp While. True True S1 True C2 True 4. C1 2. S1 C1 C2 6. Sau âoï haîy âäøi vãö daûng chæång trçnh chè sæí duûng ba cáúu truïc âiãöu khiãøn laì tuáön tæû. True C2 True False S1 C1 False S1 S2 True False S2 C2 True False 5. Baìi táûp 1.

Chæång trçnh chênh duìng menu âãø goüi. 3.56 Cäng nghãû Pháön mãöm 7. Xæí lyï chuäùi (string) : Viãút chæång trçnh âoüc mäüt cáu (kãút thuïc båíi Enter ↵) sau âoï tiãún haình caïc cäng viãûc : • Thäúng kã säú tæì. Viãút chæång trçnh xæí lyï ma tráûn vuäng A cáúp n x n dæåïi daûng menu. • Kiãøm tra tênh âäúi xæïng qua âæåìng cheïo chênh cuía ma tráûn. säú kyï tæû trong cáu. • Xaïc âënh xem ma tráûn coï daûng tam giaïc trãn khäng ? (caïc pháön tæì phêa dæåïi âæåìng cheïo chênh âãöu = 0) • Xaïc âënh xem ma tráûn coï daûng tam giaïc dæåïi khäng ? (caïc pháön tæì phêa trãn âæåìng cheïo chênh âãöu = 0) Yãu cáöu duìng Unit. S1 C1 8. In ra caïc tæì naìy. Bäún viãûc sau cuìng chè coï hiãûu læûc khi ma tráûn âaî âæåüc âoüc. • Thay thãú nhæîng xuáút hiãûn cuía cáu con S1 thaình cáu con S2 vaì in kãút quaí. S1 True False S2 C2 S2 S3 True True False C1 False S3 C3 S4 True C2 False True False S4 S5 S6 2. gäöm caïc viãûc sau : • Âoüc vaìo ma tráûn vuäng cáúp n x n. • Neïn cáu (boí caïc dáúu caïch giæîa caïc tæì). In kãút quaí. (S1 vaì S2 laì caïc cáu con nháûp vaìo) Yãu cáöu sæí duûng Unit cho mäùi viãûc. • Taïch cáu ra thaình caïc tæì caïch nhau båíi dáúu caïch (space). . • Tênh âënh thæïc cuía ma tráûn.

Khi âàûc taí laì khäng hçnh thæïc (informal). goüi tàõt laì giai âoaûn V & V (Verification and Validation) bao giåì cuîng coï màût trong moüi dæû aïn Tin hoüc. Kyî thuáût ténh vaì kyî thuáût âäüng cuía quaï trçnh V&V TS. Xáy dæûng âàûc taí. láûp trçnh vaì láûp häö så (viãút caïc hæåïng dáùn sæí duûng v.1.) Yãúu täú naìy taûo nãn giai âoaûn phaït triãøn chæång trçnh. Giai âoaûn xaïc minh vaì håüp thæïc hoïa. Sæû khaïc nhau cå baín giæîa V & V âæåüc Boehm B. PHAN HUY KHAÏNH biãn soaûn 57 . Xaïc minh (hay kiãøm tra) vaì håüp thæïc hoïa caïc saín pháøm pháön mãöm laì viãûc so saïnh caïc saín pháøm pháön mãöm âoï våïi caïc âàûc taí cuía chuïng sao cho coï quan hãû thoía maîn.v . Ngæåìi ta duìng thuáût ngæî xaïc minh (verification) khi so saïnh mäüt saín pháøm våïi mäüt âàûc taí chàût cheî (rigourous).. Xaïc minh vaì håüp thæïc hoïa pháön mãöm Ngæåìi ta thæåìng phán biãût 2 yãúu täú trong hoaût âäüng saín xuáút pháön mãöm : 1. (1979) toïm tàõt nhæ sau : Validation : Are we building the right product? Verification : Are we building the product right? Static verification Requirement verification High-level design Formal verification Detailed design Program Prototype Dynamic verification Hçnh 3.Nãön taíng cuía thiãút kãú pháön mãöm Phæång phaïp láûp trçnh cáúu truïc 57 CHÆÅNG 3 Håüp thæïc hoïa pháön mãöm I.. 2. ngæåìi ta duìng thuáût ngæî håüp thæïa hoïa (validation).W.

Kyî thuáût ténh nhàòm phán têch biãøu diãùn hãû thäúng qua viãûc phán têch yãu cáöu. âæåüc diãùn taí trong lyï thuyãút logic. phán têch thiãút kãú vaì hiãøn thë (listing) chæång trçnh. Thæûc tiãùn cho tháúy khäng thãø xáy dæûng mäüt pheïp chæïng minh nhæ váûy maì khäng sæí duûng âãún nhuîng cäng cuû nhæ laì caïc cäng cuû chæïng minh âënh lyï. ngæåìi ta coï thãø diãùn taí caïc táút biãún cuía voìng làûp vaì cuía thuí tuûc âãû quy. båíi vç khäng thãø chæïng minh mäüt caïch toaïn hoüc caïc tênh cháút khäng âæåüc âënh nghéa chàût cheî. váún âãö laì ngæåìi âoüc seî tæû kiãøm chæïng thäng qua caïc cuäüc trao âäøi. Chæïng minh sæû âuïng âàõn cuía chæång trçnh Phæång phaïp chæïng minh laì sæí duûng caïc âënh lyï âãø minh hoüa tênh âuïng âàõn cuía saín pháøm cáön xaïc minh. vaì caïc chæïng minh phi hçnh thæïc nhæng chàût cheî. nhæ trong caïc cuäún saïch vãö Toaïn hoüc. Trong pheïp chæïng minh khäng hçnh thæïc. Ngæåìi ta coìn coï thãø thæí chæïng minh phi hçnh thæïc caïc tênh cháút âaî phaït biãøu êt nhiãöu coï tênh chàût cheî (chàóng haûn âãö cáûp âãún váún âãö håüp thæïc hoïa). ngæåìi ta âënh nghéa kiãún truïc täøng quan cuía pheïp chæïng minh. Moüi pheïp chæïng minh hçnh thæïc tênh âuïng âàõn cuía chæång trçnh âæåüc xáy dæûng mäüt caïch tæåìng minh tæì caïc tiãn âãö vaì caïc quy tàõc suy diãùn logic. II. . khaïi niãûm chæïng minh tênh âuïng âàõn theo nghéa Toaïn hoüc âæåüc thay thãú båíi khaïi niãûm biãûn luáûn (reasonig . thaío luáûn (chàóng haûn täø chæïc thanh tra càn cæï trãn viãûc xaïc minh).58 Cäng nghãû Pháön mãöm Âãø thæûc hiãûn quaï trçnh V&V. ngæåìi ta sæí duûng caïc kyî thuáût ténh (static techniques) vaì âäüng (dynamic techniques) âãø kiãøm tra hãû thäúng. Mäüt pheïp chæïng minh phi hçnh thæïc khäng cáön thiãút phaíi sæí duûng caïc cäng cuû. xæí lyï nhæîng âiãøm khoï khàn. Vê duû âãø chæïng minh khäng hçnh thæïc sæû âuïng âàõn cuía mäüt chæång trçnh. Nhæîng pheïp chæïng minh hçnh thæïc cho caïc chæång trçnh cåî haìng ngaìn doìng lãûnh âaî âæåüc thæûc hiãûn. Phæång phaïp naìy khäng coï khaí nàng håüp thæïc hoïa caïc âàûc taí phi hçnh thæïc. Kyî thuáût âäüng laì viãûc thæí nghiãûm(testing) chæång trçnh Kyî thuáût ténh bao gäöm viãûc thanh tra (inspection) chæång trçnh. Ngæåìi ta phán biãût caïc pheïp chæïng minh hçnh thæïc. Chuïng cho pheïp khàóng âënh tênh âæåüc phã phaïn cuía chæång trçnh.argumentation) nhàòm thuyãút phuûc caïc chuyãn gia Tin hoüc. âãø laûi cho ngæåìi âoüc sæû chàm soïc chi tiãút âãún caïc âiãøm khaïc. phán têch vaì xaïc minh hçnh thæïc (formal verification) hay chæïng minh sæû âuïng âàõn (prouving) cuía chæång trçnh.

2. ∼. →. hay if a then b else true a ∼ b coï nghéa (a → b) ∧ (b → a). âënh lyï laì mäüt phaït biãøu coï thãø chæïng minh âæåüc laì âuïng. Chæïng minh mäüt âënh lyï Toaïn hoüc II.1. Caïc quy tàõc suy luáûn Toaïn hoüc Âãø trçnh baìy caïc quy tàõc suy luáûn Toaïn hoüc.1. hay laì caïc hàòng âuïng. PHAN HUY KHAÏNH biãn soaûn 59 .1. ngæåìi ta sæí duûng mäüt säú tiãn âãö vaì quy tàõc suy luáûn. Trong Toaïn hoüc. Suy luáûn Toaïn hoüc Trong lénh væûc suy luáûn Toaïn hoüc. Khi naìo thç mäüt suy luáûn laì âuïng ? 2. Thæï tæû æu tiãn cuía caïc pheïp toaïn logic laì ¬. Ngæåìi ta hay gàûp mä hçnh chæïng minh mäüt âënh lyï Toaïn hoüc (laì âuïng) nhæ sau : Âënh lyï Mãûnh âãö Hãû quaí Bäø âãö Âënh âãö. 59 II. Coï thãø sæí duûng nhuîng phæång phaïp naìo âãø xáy dæûng caïc suy luáûn Toaïn hoüc ? Suy luáûn Toaïn hoüc laì mäüt hçnh thæïc tæ duy maì tæì mäüt hay nhiãöu mãûnh âãö logic âaî coï (phaïn âoaïn) ruït ra âæåüc mäüt mãûnh âãö logic måïi. TS. ∨. Baíng dæåïi âáy trçnh baìy caïc quy tàõc suy luáûn âæåüc sæí duûng trong chæïng minh tênh âuïng âàõn cuía chæång trçnh. tiãn âãö Hçnh 3. ngæåìi ta thæåìng âàût ra hai váún âãö : 1. Kãút quaí cuaí mäüt suy luáûn naìo âoï phaíi laì âuïng hoàûc laì sai. chuïng ta nhàõc laûi caïc pheïp toaïn logic sau : ¬ not (khäng) ∧ and ∨ or (vaì) (hoàûc) (tæång âæång) → implicate (keïo theo) ∼ equivalence Chuï yï : a → b tæång âæång våïi ¬a ∨ b. ∧.Error! Reference source not found. Baíng logic nhæ sau : a 0 0 1 1 b 0 1 0 1 ¬a 1 1 0 0 a∧b 0 0 0 1 a∨b 0 1 1 1 a→b 1 1 0 1 a∼b 1 0 0 1 Âãø chæïng minh mäüt âënh lyï.

Luáût taïch råìi Nãúu cåm chên thç cáön tàõt læía. hoàûc mäüt daîy vä haûn caïc pheïp tênh : chæång trçnh bë “quáøn” våïi dæî liãûu d.60 Stt Quy tàõc suy luáûn Tãn goüi Vê duû Cäng nghãû Pháön mãöm 1 p ∴p ∨ q p∧q ∴p p→q p ∴q p→q ¬q ∴¬ p Luáût khàóng âënh Nhaûc cuía Trënh Cäng Sån hay. räöi cho P chaûy láön læåüt våïi mäùi dæî liãûu âãø kiãøm tra ràòng P(d1) = f(d1). chàóng haûn luáût taïch råìi (Modus Ponens). Váûy màût tråìi khäng åí âènh âáöu 5 p→q q→r ∴p → r Tam âoaûn luáûn Nãúu tråìi mæa thç âæåìng HP bë ngáûp.1. 4 Luáût phuí âënh Nãúu màût tråìi åí âènh âáöu thç boïng ngàõn nháút. ngæåìi ta duìng phæång phaïp thæí (test) : ngæåìi ta choün mäüt daîy caïc dæî liãûu máùu d1. 2 3 Luáût ruït goün Thaïng naìy tråìi nàõng haûn vaì säng Âaì thç caûn næåïc. Mäùi luáût (cå såí cuía pheïp suy luáûn). P(dn) = f(dn). dáúu ∴ âæåüc âoüc laì váûy thç. Nãúu âæåìng HP bë ngáûp thç phaíi xuäúng xe dàõt giaí âënh bäü. Maì Cu Tyï khäng thuäüc baìi. Trong baíng trãn. Noïi caïch khaïc. Váûy nhaûc cuía Trënh Cäng Sån hay hoàûc ca sé Khaïnh Ly haït hay...2. (Modus Tollens) Boïng khäng ngàõn nháút.. (Modus Ponens) Cåm âaî chên. d2. Váûy cáön tàõt læía. P âuïng nãúu vaì chè nãúu P tênh âuïng haìm f. P âæåüc viãút âãø tênh mäüt haìm f naìo âoï tæì D ⊆ L vaìo R. chæång trçnh P xaïc âënh hoàûc mäüt daîy hæîu haûn caïc pheïp tênh âãø cho ra mäüt kãút quaí P(d) ∈ R. chuyãøn Váûy cu Tyï ham chåi. Váûy tråìi nàõng haûn.. P(d2) = f(d2). 6 p∨q ¬p ∴q Tam âoaûn luáûn Cu Tyï thuäüc baìi hoàûc laì cu Tyï ham chåi . P(d) xaïc âënh (P khäng quáøn våïi dæî liãûu vaìo d) vaì bàòng f(d).. Khaïi niãûm vãö chæïng minh tênh âuïng âàõn cuía chæång trçnh Mäüt chæång trçnh P xaïc âënh mäüt thuáût toaïn cho pheïp nháûn vaìo mäüt táûp håüp dæî liãûu L âãø âæa ra mäüt táûp håüp kãút quaí R. .. coï thãø viãút dæåïi daûng hàòng âuïng : (p ∧ (p → q)) → q II. dn. Váûy tråìi mæa thç phaíi xuäúng xe dàõt bäü. nghéa laì nãúu ∀ d ∈ D. våïi moüi d ∈ L. Thäng thæåìng. . âãø kiãøm tra tênh âuïng âàõn cuía chæång trçnh. . Màût khaïc.

Caïc âiãöu kiãûn træåïc E vaì âiãöu kiãûn sau S âæåüc xáy dæûng tæì caïc biãøu thæïc logic coï thãø nháûn giaï trë âuïng (1) hoàûc sai (0). ngæåìi ta sæí duûng caïc tênh cháút cuía âaûi säú Boole vaì miãön xaïc âënh caïc biãún chæång trçnh (säú nguyãn trong træåìng håüp Div). chuïng laì mäúi liãn hãû giæîa caïc biãún cuía chæång trçnh (vê duû caïc biãún a. Âãø chæïng minh caïc quan hãû giæîa caïc âiãöu kiãûn (vê duû E1 ~ E2. c. TS. duì D hæîu haûn : coï thãø xaíy ra P cho kãút quaí âuïng våïi moüi dæî liãûu máùu di âaî choün nhæng våïi mäüt dæî liãûu d ≠ di ∀ i. r trong caïc biãøu thæïc a = bq + r.. b. 61 Tênh khäng âáöy âuí cuía phæång phaïp naìy thãø hiãûn åí chäù khäng thãø thæí hãút moüi dæî liãûu cuía D. P laì daîy caïc lãûnh (hay laì mäüt chæång trçnh) theo nghéa ràòng : nãúu E âuïng træåïc khi thæûc hiãûn P thç nãúu P dæìng. S âuïng sau khi thæûc hiãûn P. P(d) = f(d). thç P(d1) ≠ f(d1).. ta âãöu coï : false {P} C vaì C {P} true Viãûc chæïng minh nãúu mäüt chæång trçnh P dæìng thç P seî cho kãút quaí âuïng âæåüc goüi laì chæïng minh tênh âuïng âàõn tæìng pháön. caïc tiãn âãö vaì âënh lyï seî laì caïc phaït biãøu coï daûng E {P} S. trong âoï E vaì S laì caïc âiãöu kiãûn. Hån næîa.Error! Reference source not found. phæång phaïp thæí khäng bao giåì chæïng minh âæåüc mäüt chæång trçnh laì âuïng âàõn. E1 → E2. P cho mäüt kãút quaí sai. II.1.v.. chè coï thãø chæïng minh âæåüc laì khäng âuïng. b2 − 4ac > 0. p. Tênh cháút : Våïi moüi chæång trçnh P vaì moüi âiãöu kiãûn C. nãúu våïi mäüt giaï trë di naìo âoï âaî choün. q ≥ 0. phæång phaïp chæïng minh tênh âuïng âàõn cuía chæång trçnh mang tênh Toaïn hoüc bàòng caïch chæïng minh mäüt âënh lyï tæång âæång : ∀d ∈ D. v. q. PHAN HUY KHAÏNH biãn soaûn 61 . v.. caïc phaït biãøu cáön chæïng minh coï daûng E{P}S.) cuìng caïc pheïp toaïn logic (nãúu coï). Sau âáy laì danh saïch caïc tiãn âãö vaì caïc quy tàõc suy diãùn cho pheïp chæïng minh caïc âënh lyï daûng E {P} S. Vãö màût lyï thuyãút. Trong caïc chæïng minh tênh âuïng âàõn tæìng pháön.v.).3. Tiãn âãö vaì quy tàõc suy diãùn Mäüt caïch täøng quaït. Ngæåìi ta goüi E laì âiãöu kiãûn træåïc (precondition) vaì S laì âiãöu kiãûn sau (postcondition) cuía chæång trçnh P.

4.”.” hay täø håüp caïc lãûnh vaì lãûnh gheïp Goüi E. Q} S Vê duû 13 : Chæïng minh Vaì khàóng âënh cuäúi (x=1) { y:= 2. ta coï : (x+y=3) { Z:= x + y} (Z=3) Do y âæåüc gaïn giaï trë 2. II.1. tæì (1) vaì (2) ta coï P kãút thuïc thç S âuïng (âpcm). S laì caïc âiãöu kiãûn. Vê duû 1 (xy ≥ 0) { z := x*y } (z ≥ 0) (q + 1 ≥ 0) { q := q + 1 } (q ≥ 0) ( (x+y)2 = y) { x := x + y } (x2 = y) Chuï yï quan troüng : Nhåì quy tàõc trãn âáy. tæïc z = 3.62 Cäng nghãû Pháön mãöm a) Tiãn âãö vãö pheïp gaïn Cho pheïp gaïn x := <bt> vaì mäüt âiãöu kiãûn sau S. nhæng ngæåüc laûi laì khäng thãø. Z:= x + y} (Z=3) E ≡ (x = 1) S ≡ (z = 3) (1) Laì âuïng âàõn våïi khàóng âënh âáöu E {P} S ∴ E { begin P end } S Giaí sæí S âuïng. ta coï tiãn âãö : E {x := <bt> } S trong âoï E nháûn âæåüc tæì S bàòng pheïp thãú caïc biãún x båíi biãøu thæïc <bt>. b) Quy tàõc “. P vaì Q laì caïc daîy lãûnh. tæïc laì : (x=1) { y:= 2} (x+y=3) (2) Váûy theo quy tàõc “. F. nãn nháûn âæåüc giaï trë cuía x laì 1. E laì âiãöu kiãûn yãúu nháút phaíi laìm thoaí maîn caïc biãún træåïc khi thæûc hiãûn pheïp gaïn sao cho S laì âuïng sau âoï. Quy tàõc âiãöu kiãûn if B then P E ∧ B {P} S E ∧ ¬B → S ∴ E { if B then P } S . khi âoï nháûn âæåüc x + y = 3. ta coï : E {P} F F {Q} S ∴ E {P . âãø chæïng minh tênh âuïng âàõn cuía chæång trçnh. ngæåìi ta coï thãø chæïng minh âiãöu kiãûn træåïc cuía mäüt lãûnh gaïn. bàòng caïch sæí duûng mäüt âiãöu kiãûn sau. Båíi váûy. ngæåìi ta xuáút phaït tæì âiãøm kãút thuïc (âiãöu kiãûn sau) âãø tiãún haình ngæåüc lãn âiãøm bàõt âáöu (âiãöu kiãûn træåïc).

tæïc abs = −x = |x| vaì âiãöu kiãûn sau S âuïng. ta coï : E ∧ (x>y) { y:= x } (y ≥ x) (1) Khi E âuïng vaì x > y sai (¬B) coï nghéa x ≤ y. Quy tàõc âiãöu kiãûn if B then P else Q E ∧ B {P} S E ∧ ¬B {Q} S ∴ E { if B then P else Q } S Vê duû 3 : Chæïng minh : E {if x < 0 then abs:= -x els abs:= x}(abs = |x|) våïi E laì âiãöu kiãûn âáöu naìo âoï. Vê duû 2 : Chæïng minh : E{if x>y then y:=x} (y ≥ x). Âiãöu naìy coï nghéa ràòng viãûc tênh B khäng laìm thay âäøi caïc giaï trë cuía caïc biãún cuía chæång trçnh. TS. PHAN HUY KHAÏNH biãn soaûn 63 . ta coï : E ∧ x < 0 { abs:= -x }(abs = |x|) |x| vaì âiãöu kiãûn sau S âuïng. Khi E âuïng vaì x < 0 âuïng (B) thç abs coï giaï trë −x. (2) II. Riãng âiãöu kiãûn E âæåüc goüi laì báút biãún cuía voìng làûp.5. våïi E laì âiãöu kiãûn âáöu naìo âoï. tæïc laì : E ∧ x < 0 { abs:= x }(abs = |x|) Váûy tæì (1) vaì (2) ta coï nháûn âæåüc âpcm. Váûy chæång trçnh laì âuïng våïi âiãöu kiãûn âáöu E vaì âiãöu kiãûn sau abs = |x|. Chuï yï : 63 B phaíi âæåüc xem nhæ mäüt âiãöu kiãûn sao cho coï thãø æïng duûng mäüt trong nhæîng quy tàõc âæåüc trçnh baìy åí âáy. Khi E âuïng vaì x > y âuïng (âiãöu kiãûn B) thç y coï giaï trë x. tæïc laì : E ∧ (x ≤ y) → (y ≥ x) Váûy tæì (1) vaì (2) ta coï nháûn âæåüc âpcm. khi âoï abs coï giaï trë x tæïc abs = x = II. váûy y ≥ x (S).Error! Reference source not found.1. E vaì B laì nhuîng âiãöu kiãûn.6. váûy y ≥ x (S) . Quy tàõc voìng làûp while E∧B{P}E ∴ E { while B do P } E ∧ ¬B ÅÍ âáy. (2) (1) Khi E âuïng vaì coï x < 0 sai (¬B) thç x ≥ 0.1.

Tæì âoï suy ra khàóng âënh : E { while i < n do P } E ∧ (i ≥ n) cuîng âuïng. Goüi P ≡ {begin i:= i + 1. fac := 1.64 Cäng nghãû Pháön mãöm Mäüt trong nhæîng khoï khàn cuía viãûc chæïng minh tênh âuïng âàõn cuía chæång trçnh laì tçm âæåüc báút biãún cho mäùi voìng làûp (nghéa laì mäüt báút biãún cho pheïp chæïng minh âuïng caïi yãu cáöu). II. Vê duû 4 : Sæí duûng báút biãún cuía voìng làûp. while coìn âæåüc thæûc thi mäüt láön næîa. Do giaí thiãút quy naûp fac = (i − 1) ! træåïc khi vaìo voìng làûp nãn fac seî coï giaï trë laì : fac = (i − 1)! * i = i! Tæì âoï E quaí tháût laì báút biãún cuía voìng làûp vaì mãûnh âãö : (E ∧ (i < n)) {P} E âuïng. Caïc quy tàõc khaïc Quy tàõc âiãöu kiãûn træåïc : E {P} S E’ → E ∴ E’ {P} S Quy tàõc “vaì” : E {P} S E {P} S’ ∴ E {P} S ∧ S’ . Vç voìng làûp kãút thuïc sau khi làûp n − 1 láön.1. fac := fac * i end. Giaí sæí E âuïng våïi i < n sau khi thæûc hiãûn voìng làûp vaì sau âoï. while i < n do begin i := i + 1. Thæûc tãú khäng täön taûi mäüt phæång phaïp coï tênh hãû thäúng vaì täøng quan âãø tçm ra nhæîng báút biãún nhæ váûy. fac = 1 = 1! Vaì 1 ≤ n. ta cáön chæïng minh E laì báút biãún cuía voìng làûp. vç i = 1. Ta seî chæïng minh bàòng quy naûp : E âuïng træåïc khi vaìo voìng làûp. fac := fac * i end } Giaí sæí âiãöu kiãûn E ≡ (fac = i!) ∧ (i ≤ n). våïi n ∈ Ν sau âáy : i := 1. Træåïc hãút i âæåüc tàng thãm 1 (våïi lãûnh gaïn i:= i + 1) vaì do váûy váùn coìn i ≤ n. chæïng minh âoaûn chæång trçnh tênh fac = n!.7. khi âoï i = n vaì fac = n!.

TS. Váûy S3 {S4} S âuïng vaì haìm traí vãö giaï trë laì mn. Ta seî chæïng minh ràòng sau khi thæûc hiãûn P thç haìm traí vãö giaï trë laì mn. theo quy tàõc håüp thaình. Khi âoï coï thãø chè ra E {P1} S1 laì âuïng. Goüi S2 ≡ S1 ∧ (k = 0) ∧ (x = 0). begin {P1 ≡} if n < 0 then a:= −n else a:= n.Error! Reference source not found. Dãù daìng kiãøm tra ràòng S1 {P2} S2 laì âuïng. {P2 ≡} k:= 0. S1 {P2} S2. n: Integer): Integer. {P3 ≡} while k < a do begin x:= x + m. ta coï P cuîng âuïng. tæïc x = ma taûi âiãøm naìy. Goüi S3 ≡ (x = ma) ∧ (a = [n]). Ta chia P gäöm bäún âoaûn CT laì {P1. Ngoaìi ra do caí P1. P4} nhæ trãn. x:= 0. P2. n nguyãn» vaì S1 ≡ E ∧ (a = |n|). P2. Voìng làûp naìy kãút thuïc sau a bæåïc làûp khi k = a. k:= k + 1 end. Ta cuîng tháúy âiãöu kiãûn (x = mk) ∧ (k ≤ a) laì mäüt báút biãún trong voìng làûp P3 tæång tæû våïi lyï luáûn quy naûp trong voìng làûp tênh n!. Tæì âoï suy ra S2 {P3} S3 laì âuïng. P3 vaì P4 âãöu dæìng nãn P cuîng dæìng (qed) . 65 Quy tàõc âiãöu kiãûn sau : Quy tàõc “hoàûc” : E {P} S S → S’ ∴ E {P} S’ Vê duû5 : E {P} S E’ {P} S ∴ E ∨ E’ {P} S ∧ S’ Chæïng minh chæång trçnh con P tênh têch hai säú nguyãn m vaì n laì âuïng : P ≡ function product(m. Cuäúi cuìng coï thãø chè ra P4 laì âuïng våïi âiãöu kiãûn âáöu S3 vaì âiãöu kiãûn cuäúi S. våïi S ≡ product = mn. S2 {P3} S3 vaì S3 {S4} S laì âuïng. P3. Goüi E laì âiãöu kiãûn âáöu E ≡ «m. Tæì caïc mãûnh âãö E {P1} S1. {P4 ≡} if n < 0 then product:= −x else product:= x end. tæïc E { P } S âuïng. PHAN HUY KHAÏNH biãn soaûn 65 .

Hoare II. q vaì r thoaí maîn caïc âiãöu kiãûn A = Bq + r. ta cáön chæïng minh phaït biãøu sau : Nãúu træåïc khi thæûc hiãûn lãûnh âáöu tiãn cuía Div. q:= q + 1. Hoare : Div : r:=a. r ≥ 0. q:= 0. Trong træåìng håüp Div.A. ta âàût tãn caïc âiãöu kiãûn nhæ sau : P1 = (a=A) ∧ (b=B) P2 = (A≥0) ∧ (B>0) Q1 = (A=Bq+r) ∧ (q≥0) ∧ (r≥0) (r<B) Chuï yï ràòng : P1 ∧ P2 → P1 ∧ (a≥0) ∧ (b>0) vaì → Q1 P1 ∧ (a=bq+r) ∧ (q≥0) ∧ (r≥0) ∧ (r<b) .2.b. II.1.R. r) ∈ N × N sao cho A = Bq + r vaì r < B. Chæïng minh tênh âuïng âàõn tæìng pháön : nãúu Div dæìng thç Div seî cho kãút quaí âuïng. Våïi A ∈ N vaì B ∈ N+. Chæïng minh tênh âuïng âàõn tæìng pháön cuía Div Ta cáön chæïng minh : (a=A) ∧ (b=B) ∧ (A≥0) ∧ (B>0) {Div} (A=Bq+r) ∧ (q≥0) ∧ (r≥0) ∧ (r<B) Âãø dãù theo doîi. a vaì b âæåüc khåíi gaïn giaï trë âáöu láön læåüt laì A vaì B. q ≥ 0. nghéa laì tæì càûp (A.R. Báy giåì cáön chæïng minh Div tênh âuïng haìm f theo hai bæåïc nhæ sau : 1. B) ∈ N × N+.A. a vaì b âæåüc gaïn giaï trë âáöu A ∈ N vaì B ∈ N+. end. r laì caïc biãún nguyãn. Phæång phaïp cuía C. 2. r < B. a.2. Chæïng minh tênh dæìng : Div dæìng våïi moüi dæî liãûu thuäüc N × N+.66 Cäng nghãû Pháön mãöm II.2.2. Sau khi thæûc hiãûn. haìm Div tênh thæång q vaì säú dæ r cuía pheïp chia A cho B. Nhæ váûy våïi haìm Div ta coï : D = N × N+. Ta coï : (a=A) ∧ (b=B) ∧ (A≥0) ∧ (B>0) {Div} (A=Bq+r) ∧ (q≥0) ∧ (r≥0) ∧ (r<B). q. b. while r >= b do begin r:= r . xaïc âënh càûp (q. R = N × N vaì f laì haìm xaïc âënh trãn N × N+ vaìo trong N × N. Phaït biãøu Sau âáy laì mäüt vê duû sæí duûng phæång phaïp cuía C.

Error! Reference source not found. q := q + 1 } P1. PHAN HUY KHAÏNH biãn soaûn 67 . theo quy tàõc âiãöu kiãûn sau : P1 {Div} P1 (âpcm) (a≥0) ∧ (b>0) {Div} (a=bq+r) ∧ (q≥0) ∧ (r≥0) ∧ (r<b) Âàût : P3 = (a=bq+r) ∧ (q≥0) ∧ (r≥0) P4 = (a=b(q+1)+r) ∧ (q+1≥0) ∧ (r≥0) bàòng caïch thay q trong P3 båíi q+1 P5 = (a=b(q+1)+r−b) ∧ (q+1≥0) ∧ (r−b ≥0) bàòng caïch thay r trong P4 båíi r−b (2. q :=q + 1 } P1 Theo quy tàõc voìng làûp : (1) P1 { while r≥b do begin r := r − b . (a≥0) ∧ (b>0) {Div} (a=bq+r) ∧ (q≥0) ∧ (r≥0) ∧ (r<b) P1 {Div} P1 Træåïc hãút cáön chè ra P1 laì báút biãún cuía voìng làûp. nhæng : P1 ∧ (r≥b) → P1 Theo quy tàõc âiãöu kiãûn træåïc : P1 ∧ (r≥b) { r := r − b . chè cáön chæïng minh : (I) P1 ∧ (a≥0) ∧ (b>0) {Div} P1 ∧ (a=bq+r) ∧ (q≥0) ∧ (r≥0) ∧ (r<b) 67 Ta seî chæïng minh hai giai âoaûn : 1. Theo caïc quy tàõc âiãöu kiãûn træåïc vaì âiãöu kiãûn sau. P1 {Div} P1 2. theo quy tàõc täø håüp. q := q + 1 } P3 TS. ta coï : P1 { q :=q + 1 } P1 P1 { r := r − b } P1 nhæ váûy. theo quy tàõc täø håüp : P1 { r := r − b . Theo quy tàõc gaïn. ta coï : (2) P1 { r := a . q :=q + 1 end } P1 ∧ (r<b) Aïp duûng láön næîa quy tàõc gaïn vaì quy tàõc täø håüp.1. Theo quy tàõc gaïn : P4 { q := q + 1 } P3 vaì P5 { r := r − b } P4 Tæì âoï theo quy tàõc täø håüp : (3) P5 { r := r − b . q := 0 } P1 Tæì (1) vaì (2).) Ta xem ràòng P3 laì mäüt báút biãún cuía voìng làûp. ta coï : P1 {Div} P1 ∧ (r<b) Cuäúi cuìng.

suy ra (I) theo quy tàõc “vaì”.) Báy giåì sæí duûng báút biãún voìng làûp nhæ laì âiãöu kiãûn sau cho nhæîng lãûnh âáöu tiãn cuía daîy. âäöng thåìi kãút thuïc viãûc chæïng minh tênh âuïng âàõn tæìng pháön cuía Div.0+r) ∧ (0≥0) ∧ (r≥0) { q := 0 } P3 vaì (a=b. Ta coï quy tàõc gaïn : (a=b. q := q + 1 end } P3 ∧ (r<b) (2. q := q + 1 } P3 Theo quy tàõc voìng làûp dáùn âãún : (4) P3 { while r≥b do begin r := r − b . ta coï : (5) (a≥0) { r := a .68 Xeït âiãöu kiãûn træåïc. Cäng nghãû Pháön mãöm → (a=bq+r) ∧ (q≥ −1) ∧ (r≥b) Theo quy tàõc âiãöu kiãûn træåïc. vaì : .2. ta coï : (i) P5 ~ (a=bq+r) ∧ (q≥ −1) ∧ (r≥b) (ii) Vç ràòng : (q≥0) P3 ∧ (r≥b) → (q≥ −1) vaì ta coï : (r≥0) ∧ (r≥b) → (r≥b). phaït biãøu (3) seî laì : P3 ∧ (r≥b) { r := r − b .0+r) ∧ (0≥0) ∧ (r≥0) ~ (a=r) ∧ (r≥0) Aïp duûng cho láön næîa quy tàõc gaïn : (a=a) ∧ (a≥0) { r := a } (a=r) ∧ (r≥0) (a=a) ∧ (a≥0) ~ (a≥0) Theo quy tàõc täø håüp. q := 0 } P3 Quy tàõc täø håüp aïp duûng cho (4) vaì (5) cho ta : (a≥0) {Div} P3 ∧ (r<b) Quy tàõc âiãöu kiãûn sau dáùn âãún kãút luáûn : (a≥0) ∧ (b>0) {Div} P3 ∧ (r<b) Tæì vaì âaî chæïng minh.

w2. Trong træåìng håüp naìy (âaî chæïng minh âæåüc P dæìng). thç sau khi thæûc hiãûn P.. ... m(w)2. v.. w3. hoàûc m(wi+1) < m(wi). daîy m(w1).3. w2. voìng làûp dæìng .. Nãúu w2 ∈ WE ∧ ¬B.. Nãúu w = w1 ∈ WE ∧ B træåïc khi thæûc hiãûn voìng làûp. . hoàûc voìng làûp dæìng. xn laì caïc biãún cuía chæång trçnh.. khäng chæïa lãûnh goto seî chè coï thãø mäüt daîy vä haûn tênh toaïn nãúu noï thæûc hiãûn vä haûn láön thán mäüt voìng làûp. Giaí thiãút ràòng âiãöu kiãûn E laì báút biãún våïi voìng làûp âang xeït vaì thoaí maîn træåïc khi thæûc hiãûn voìng làûp naìy. x2. Phæång phaïp âãø chæïng minh laì âënh nghéa mäüt haìm m tæì WE ∧ B vaìo N sao cho coï thãø chè ra ràòng : E ∧ B ∧ (m(w) = m0) { P } ¬B ∧ (m(w) < m0) Chuï yï : Phaït biãøu trãn coï nghéa ràòng nãúu w = wi træåïc khi thæûc hiãûn P. Chæïng minh dæìng cuía mäüt chæång trçnh Mäüt chæång trçnh khäng laì âãû quy. PHAN HUY KHAÏNH biãn soaûn 69 . Viãûc chæïng minh mäüt chæång trçnh nhæ váûy dæìng våïi moüi dæî liãûu d ∈ D dáùn âãún viãûc chæïng minh ràòng mäùi voìng làûp cuía chæång trçnh chè coï thãø thæûc hiãûn mäüt säú hæîu haûn láön ∀ d∈D.... x2. nãúu khäng w = w3 ∈ WE. w2. vaì voìng làûp dæìng. giaím dáön thæûc sæû trong N. ∀ m0 ∈ N TS. w3. sau khi thæûc hiãûn P.. w3. ta coï thãø khàóng âënh ràòng våïi moüi daîy w1.. khi âoï w = w2 ∈ WE sau khi thæûc hiãûn thán voìng làûp P. ..3.Error! Reference source not found. Nhæ váûy âãø chæïng minh voìng làûp dæìng. . âaî xáy dæûng laì hæîu haûn. . xn > sao cho caïc biãún thoaí maîn âiãöu kiãûn E. Âiãöu âoï chæïng minh ràòng daîy w1.. 69 II.1. Cho voìng làûp : while B do P våïi x1. laì hæîu haûn. laì hæîu haûn.. m(w)3 .. Chæïng minh dæìng II. chè cáön chè ra ràòng moüi daîy w1.v. Goüi WE laì táûp håüp caïc giaï trë cuía vectå : w = < x1..

q := q+1} (r<b) ∧ (r<m0) ∀ m0 ∈ N Màût khaïc : (b=B) ∧ (r=m0) ∧ (r−b<m0) ~ (b=B) ∧ (r=m0) ∧ (m0−B<m0) hay : (b=B) ∧ (r=m0) ∧ (r−b<m0) ~ (b=B) ∧ (r=m0) ∧ (Β>0) Âiãöu kiãûn B>0 luän luän âuïng vç ràòng (A. âæåüc thoaí maîn træåïc khi thæûc thãø voìng làûp (xem chæïng minh âuïng tæìng pháön muûc ). Viãûc chæïng minh Div dæìng âaî xong. Chæïng minh dæìng cuía Div Div chè chæïa mäüt voìng làûp : while r ≥ b do begin r := r − b . nhæ váûy : (b=B) ∧ (r=m0) ∧ (r−b<m0) ~ (b=B) ∧ (r=m0) Tæì âoï dáùn âãún (1) xuáút phaït tæì (2). ta coï : (2) P6 ∧ (r=m0) ∧ (r−b<m0) {r := r−b . Chuï yï : Viãûc choün haìm naìy dáùn viãûc chæïng minh dæìng âãún viãûc chæïng minh ràòng biãún r nháûn caïc giaï trë giaím ngàût vaì liãn tuûc. Ta xeït táûp håüp W1 = W(b = B) ∧ (r ≥ 0) ∧ (r ≥ b) vaì haìm m : W1 → N sao cho m(w) = r. q := q +1 end Voìng làûp naìy luän luän dæìng. q := q + 1 } (r<m0) aïp duûng caïc quy tàõc âiãöu kiãûn træåïc vaì âiãöu kiãûn sau. Âiãöu kiãûn { b=B } laì mäüt báút biãún cuía voìng làûp naìy. Vê duû nãúu L = Z × Z. Chuï yï : Âãø chæïng minh Div dæìng våïi ∀ d ∈ D. noïi chung khäng aïp duûng âæåüc cho ∀d∈L.3. ta coìn phaíi chæïng minh ràòng : (1) P6 ∧ (r=m0) { r := r − b . B) ∈ D = N × N+. Âàût : P6 = (b=B) ∧ (r≥0) ∧ (r≥b) Tiãúp theo. q := q + 1 } (r<b) ∧ (r<m0) Theo quy tàõc gaïn : (r−b < m0) { r := r − b . ∀ m0 ∈ N ∀ m0 ∈ N .2. Div coï thãø quáøn våïi B = 0.70 Cäng nghãû Pháön mãöm II. Tæång tæû nhæ váûy âäúi våïi âiãöu kiãûn (r ≥ 0) (xem ).

Tif B then P (w) = if B then (TB + TP(w)) else TB Tif B then P else Q (w) = if B then (TB + TP(w)) else (TB+ TQ(w)) 4. Tæång tæû. Nãúu xeït lãûnh q := q + 1 cuía Div : fq := q+1 (a. b. b. thæång cuía a vaì b. ∀ d ∈ L. r). nãúu P’ laì mäüt daîy caïc lãûnh cuía P. fDiv (a.Error! Reference source not found. Twhile B do P (w) = (n(w) + 1) TB + n(w) −1 i= 0 ∑ T (f P i P ( w) ) TS. Âaïnh giaï mäüt chæång trçnh làûp Âaïnh giaï mäüt chæång trçnh P laì xaïc âënh thåìi gian vaì kêch thæåïc bäü nhåï cáön thiãút âãø thæûc hiãûn chæång trçnh P : • • mäüt haìm TP : L → R ∪ {+∞} sao cho. r. Ta seî goüi fP laì haìm riãng pháön (partial function) cuía L trong táûp håüp caïc kãút quaí R.3. ∀ w ∈ W : Våïi moüi pheïp gaïn x := y. âæåüc tênh båíi chæång trçnh P. q. mäüt haìm NP : L → N ∪ {+∞} sao cho. nãúu L = D. r. ∀ d ∈ L. Q (w) = TP (w) + TQ (fp(w)) 3. Ta viãút Tx := y. b. b. TP(d) laì thåìi gian thæûc hiãûn P âäúi våïi dæî liãûu d (TP(d) = +∞ nãúu chæång trçnh quáøn). r. PHAN HUY KHAÏNH biãn soaûn 71 .3. haìm fPdc tênh båíi P coï thãø âæåüc âënh nghéa nhæ laì mäüt haìm cuía W → W. Vê duû 14 : Trong træåìng håüp Div. 71 II. TB (w) Tx := y (w) = constant. 2. q) = (a. Haìm fP coï thãø måí räüng thaình mäüt haìm W → W. TP . = constant. Thåìi gian thæûc hiãûn mäüt chæång trçnh coï thãø âæåüc âënh nghéa nhæ sau : 1. vaì W laì táûp håüp Wtrue caïc giaï trë coï thãø cuía caïc biãún trong P. ta chè quan tám âãún viãûc xaïc âënh thåìi gian thæûc hiãûn chæång trçnh gäöm caïc lãûnh cå såí nhæ lãûnh gaïn (quy tàõc “.”). q+1. NP(d) laì säú âån vë bäü nhåï cáön thiãút âãø thæûc hiãûn P âäúi våïi dæî liãûu d (NP(d) coï thãø vä haûn nãúu chæång trçnh quáøn). Ta viãút TB. Nhæ váûy. q) = (a. pháön dæ cuía a chia cho b). b. Mäùi lãûnh cå såí vaì mäùi âiãöu kiãûn coï mäüt thåìi gian thæûc hiãûn âäüc láûp våïi giaï trë cuía caïc biãún. Våïi moüi âiãöu kiãûn B. lãûnh âiãöu kiãûn vaì voìng làûp while. ÅÍ âáy. W = N × N + × N × N = táûp håüp caïc giaï trë coï thãø cuía a.

b) . Âaïnh giaï thåìi gian thæûc hiãûn cuía Div : Säú láön làûp cuía Div laì giaï trë cuäúi cuía biãún q. Vê duû. B) coï daûng K1 ⎢ A ⎥ + K2. TDiv (A. ráút khoï khàn vaì mãût moíi. räöi viãút thán cuía voìng làûp sao cho giæî âæåüc báút biãún vaì chè thæûc hiãûn mäüt säú hæîu haûn láön. trong âoï K1 vaì K2 âäüc láûp våïi caïc dæî ⎢ ⎥ liãûu A vaì B. trong âoï. kiãøm tra tênh dæìng cuía voìng làûp naìy våïi âiãöu kiãûn sau. B) = Tr := a + Tq := 0 + ( ⎢ A ⎥ + 1) Tr ≥ b + ⎢ ⎥ ⎣ B⎦ ⎣ B⎦ ⎢A⎥ ⎢ B⎥ ⎣ ⎦ (Tr := r − b + Tq := q + 1) Nhæ váûy. ta tháúy viãûc chæïng minh tênh âuïng âàõn cuía mäüt chæång trçnh. b − a) ÆSCLN(a. Âãø khàõc phuûc. Âiãöu naìy coï thãø nháûn âæåüc bàòng caïch âãúm säú láön làûp trong mäùi voìng làûp. n laì haìm W → N ∪ { +∞ }. ngæåìi ta âæa ra mäüt phæång phaïp hiãûu quaí hån laì væìa thiãút kãú væìa chæïng minh tênh âuïng âàõn cuía chæång trçnh. A vaì B laì caïc dæî liãûu cuía Div. TDiv (A. b) = a = b ÆSCLN(a. duì chè laì mäüt chæång trçnh ráút ngàõn vaì âån giaín. Måí âáöu Trong muûc træåïc. thåìi gian thæûc hiãûn thán voìng làûp âäüc láûp våïi caïc dæî liãûu vaì bàòng : ⎢A⎥ . Xáy dæûng chæång trçnh III. vç TP phuû thuäüc vaìo pháön cæïng vaì pháön mãöm sæí duûng âãø thæûc thi chæång trçnh P. Âãø tênh ÆSCLN cuía hai säú nguyãn dæång. ⎢ B⎥ ⎣ ⎦ Chuï yï : Ngæåìi ta thæåìng quan tám âãún báûc cuía haìm TP thay vç baín thán haìm TP. b) = ÆSCLN(a. III.1. b) = ÆSCLN(a − b. Màût khaïc. âàûc taí mäüt báút biãún cho mäüt voìng làûp træåïc khi viãút. B) laì báûc (order) cuía ⎢A⎥ . ⎢ B⎥ ⎣ ⎦ pháön nguyãn cuía A Tr := r − b + Tq := q + 1 Ta coï : TDiv (A. ta sæí duûng caïc tênh cháút säú hoüc nhæ sau : Nãúu a = b Nãúu a < b Nãúu a > b ÆSCLN(a. giaí sæí laì chia cho B.72 Cäng nghãû Pháön mãöm trong âoï. sao cho n(w) laì säú láön thæûc hiãûn thán voìng làûp P våïi giaï trë âáöu w cuía caïc biãún. Nhæ váûy chè cáön xaïc âënh säú láön thæûc hiãûn daîy caïc lãûnh hay thæûc hiãûn nháút cuía chæång trçnh.

B) våïi âiãöu kiãûn kiãøm tra dæìng laì a = b.Error! Reference source not found. màût khaïc. Váûy max(a. âoí”. khäng loaûi træì træåìng håüp i = j. âiãöu kiãûn ÆSCLN(a. B) tråí nãn báút biãún. j) âãø âàût hoìn bi thæï i thaình j. Ta tháúy quan hãû : (a > 0) ∧ (b >0) laì báút biãún trong voìng làûp (âiãöu kiãûn cuía voìng làûp laì a ≠ b. b) = ÆSCLN(A. Baìi toaïn cåì tam taìi Cho træåïc : 1. W vaì R chè âæåüc tênh âãún mäüt1 láön cho mäùi hoìn bi âaî cho. hoàûc tràõng. Theo tênh cháút cuía ÆSCLN. Mäüt maíng caïc hoìn bi âaïnh säú tæì 1 âãún N. ∀ i. Sau khi gaïn. PHAN HUY KHAÏNH biãn soaûn 73 .2.N. b) = ÆSCLN(A. ketqua := a . Ta cáön sàõp xãúp caïc hoìn bi theo thæï tæû “xanh. Cáön xaïc âënh thán cuía voìng làûp naìy sao cho. B) sau khi thæûc hiãûn voìng làûp naìy. nãúu a ≠ b. mäùi hoìn bi mang mäüt maìu hoàûc xanh. 73 Giaí sæí a vaì b laì hai biãún cuía chæång trçnh nháûn giaï trë hai dæî liãûu láön læåüt A vaì B. 2. voìng làûp chè thæûc hiãûn mäüt säú hæîu haûn láön. 3. b) = ÆSCLN(A. vaì voìng làûp luän luän dæìng. j ∈ 1. Kãút quaí tçm âæåüc laì mäüt trong hai biãún a vaì b. b) = a = b = ÆSCLN(A. thç ta coï : ÆSCLN(a. Caïc vë tæì B(i). W(i) vaì R(i) laì âuïng nãúu vaì chè nãúu hoìn bi thæï i (1 ≤ i ≤ N) laì xanh. III. Nhæ váûy ta âaî viãút vaì chæïng minh khäng hçnh thæïc chæång trçnh sau âáy : P : while a <> b do if a > b then a := a − b else b := b − a . caïc hoaïn vë phaíi caìng êt caìng täút. b) giaím ngàût mäùi láön thæûc hiãûn thán voìng làûp. lãûnh : if a > b then a := a − b else b := b − a laìm cho âiãöu kiãûn ÆSCLN(a. Nãúu thán chæång trçnh chæïa mäüt voìng làûp cuía báút biãún ÆSCLN(a. tràõng vaì âoí tæång æïng. Chè coìn phaíi chæïng minh ràòng voìng làûp âaî viãút chè thæûc hiãûn mäüt säú hæîu haûn láön. B) thoaí maîn. báút biãún âæåüc thoaí maîn. tràõng. Hån næîa max(a. mäüt màût. hoàûc âoí. mäùi vë tæì B. lãûnh b := b − a chè âæåüc thæûc hiãûn nãúu b > a). TS. Càûp hoaïn vë (i.. Hån næîa. hoìn bi thæï j thaình i. b) cuîng laì báút biãún.

2. r:= r-1 end (I) Ta nháûn tháúy ràòng chæång trçnh naìy thoaí maîn caïc vë tæì B. while w <= r do if W(w) then w:= w+1 else if B(w) then begin HoaïnVë(b. r := n. w). Ta coï : Pb. Ta thæûc hiãûn pheïp choün nhæ sau : caïc chè säú b vaì w âæïng ngay sau caïc vuìng B vaì W tæång æïng cuía caïc viãn bi. w vaì r âãø phán caïch 4 vuìng cuía maíng. w. w:= w+1 end else begin HoaïnVë(r. r true } while (vuìng_X_khäng_räùng) do { Thán voìng làûp cuía báút biãún Pb.74 Cäng nghãû Pháön mãöm III. Chæång trçnh sau âáy chæïa biãún n nháûn giaï trë N : w:= 1. r } Sau khi thæûc hiãûn chæång trçnh naìy. w). w. b:= b+1. Chè säú r laì cuía viãn bi âæïng ngay træåïc vuìng R. 1 ↓ B b ↓ W w ↓ X r ↓ R bi âoí N ↓ bi xanh bi tràõng ←⎯⎯→ Pháön chæa xæí lyï Cáön coï 3 chè säú b. r ∧ (w = r + 1). r = (1 ≤ α < b → B(α)) ∧ (b ≤ α < w → W(α)) ∧ (r < α ≤ N → R(α)) Âiãöu kiãûn sau cuía chæång trçnh nhæ sau : 1 ↓ B b ↓ W ↓↓ r w N ↓ R hay coï thãø viãút : Pb. Chæång trçnh seî coï daûng nhæ sau : { Khåíi gaïn : Pb. Låìi giaíi thæï nháút Ta seî sæí duûng mäüt voìng làûp while våïi báút biãún nhæ hçnh dæåïi âáy vaì âiãöu kiãûn kiãøm tra dæìng laì “vuìng X räùng”. r ∧ (vuìng_X_räùng) vaì maíng caïc viãn bi âaî âæåüc sàõp xãúp. w. W vaì R. w.1. w. ta kiãøm tra âæåüc ràòng : Pb. b := 1. Phán têch : Säú láön làûp =N .

Säú láön hoaïn vë = ne1 = #B + #R (#B vaì #R láön læåüt laì säú viãn bi xanh vaì âoí) 75 Kãút quaí naìy chæa laì täúi æu. w). w). b := 1. PHAN HUY KHAÏNH biãn soaûn 75 . r). Låìi giaíi thæï hai Ta sæí duûng báút biãún biãøu diãùn nhæ sau : 1 b w r N ↓ B ↓ W ↓ ↓ R ↓ X Tæì âoï âæa âãún chæång trçnh (taûm thåìi cháúp nháûn viãûc chæïng minh khäng hçnh thæïc) : w:= 1. w:= w+1 end (II) Phán têch : Säú láön làûp =N = ne2 = #W + 2#B Säú láön hoaïn vë So saïnh våïi chæång trçnh (I). HoaïnVë(b. r:= r-1.2. b := 1. while r <= n do if R(r) then r:= r-1 else if W(r) then begin HoaïnVë(w. w:= w+1.2. r := n. r := n. while w <= r do if W(w) then w:= w+1 else if B(w) then begin HoaïnVë(b. Baìi táûp : Tæì báút biãún trãn âáy. ta coï : ne2 − ne1 = #B + #W − #R Chæång trçnh (I) seî hiãûu quaí hån (II). b:= b+1. ta coï thãø laìm giaím säú láön hoaïn vë caïc viãn bi âoí nhæ sau : w:= 1. ta coï thãø nháûn âæåüc chæång trçnh nhæ sau : TS. r:= r-1 end else begin HoaïnVë(w. w). b:= b+1.Error! Reference source not found. nãúu nhæ êt ra næía säú viãn bi laì âoí. r). HoaïnVë(r. w:= w+1 end else begin while R(r) and w < r then r:= r-1. r:= r-1 end (Ibis) III.

trong âoï bt coï giaï trë j. III. båíi B(i). . trong âoï bt coï giaï trë i. R(bt). W(i). w. r := n. j) âæa âãún tiãn âãö sau âáy : “Cho âiãöu kiãûn sau S. w:= w+1. . b := 1. w:= w+1. . r). HoaïnVë(w. R(bt). while r <= n do if R(r) then r:= r-1 else if W(r) then begin HoaïnVë(w. W(bt).76 Cäng nghãû Pháön mãöm w:= 1. Caïc âiãöu kiãûn (1) vaì (2) âæåüc biãøu diãùn båíi : E1 = (1 ≤ α ≤ N) → (B(α) ∨ W(α) ∨ R(α)) b. W(bt). . ta sæí duûng kyï hiãûu âån giaín hoaï : x ≤ α < y → A(α) laì kyï hiãûu viãút tàõt cuía âiãöu kiãûn : { hay : A(x) ∧ A(x+1) ∧ . ∧ A(y) nãúu x ≤ y nãúu khäng Báy giåì ta xem xeït caïc âiãöu kiãûn âàûc træng cuía baìi toaïn . a. båíi B(j). Âënh nghéa (3) cuía hoaïn vë (i. Haîy tçm mäüt caïch pháön bäú ban âáöu cuía maíng hai viãn bi âãø tháúy sai. j) } S nãúu E nháûn âæåüc tæì S bàòng caïch thay thãú : − moüi vë tæì B(bt). r:= r+1 end else begin HoaïnVë(b.2. R(j) − vaì moüi vë tæì B(bt). r:= r+1 end (IIbis) Chæång trçnh trãn laì sai. W(j). ∧ A(y) true (x ≤ y) → A(x) ∧ . c. w. r). Chæïng minh tênh âuïng âàõn cuía chæång trçnh (I) a) Caïc âënh nghéa vaì kyï hiãûu Ta âaî xáy dæûng chæång trçnh (I) bàòng caïch sæí duûng báút biãún : Pb. r = (1 ≤ α < b → B(α)) ∧ (b ≤ α < w → W(α)) ∧ (r < α ≤ N → R(α)) Âãø chæïng minh tênh âuïng âàõn cuía chæång trçnh naìy. Âiãöu kiãûn sau cuía chæång trçnh (sàõp xãúp maíng) âæåüc biãøu diãùn båíi : S1 = (1 ≤ b ≤ N+1) ∧ (b−1 ≤ r ≤ N) ∧ (1 ≤ α < b → B(α)) ∧ (b ≤ α < r → W(α)) ∧ (r < α ≤ N → R(α)) Báút biãún cuía voìng làûp ta væìa sæí duûng khäng hàón laì Pb. r). ta coï : E ∧ (1 ≤ i ≤ N) ∧ (1 ≤ j ≤ N) { hoaïn vë (i. R(i)”.3. b:= b+1. r nhæng : .

Error! Reference source not found. Qb, w, r = E1 ∧ (1 ≤ b ≤ N) ∧ (w−1 ≤ r ≤ N) ∧ Pb, w, r

77

Giaí sæí A1 laì voìng làûp while cuía chæång trçnh (I) vaì A2 laì thán cuía voìng làûp naìy.

b) Chæïng minh tênh âuïng âàõn tæìng pháön
Bäø âãö : x ≤ α ≤ y → A(α) tæång âæång våïi (x ≤ α ≤ y−1 → A(α)) ∧ (x ≤ y→ A(y)) Chæïng minh : x ≤ α ≤ y → A(α) ~ (x ≤ y) → A(x) ∧ ... ∧ A(y) theo âënh nghéa ~ ((x < y) → A(x) ∧ ... ∧ A(y)) ∧ ((x = y) → A(y)) ~ ((x < y) → A(x) ∧ ... ∧ A(y−1)) ∧ ((x < y) → A(y)) ∧ ((x = y) → A(y)) ~ x ≤ α ≤ y−1 → A(α)) ∧ (x ≤ y→ A(y)) âpcm (α) Chæïng minh cuía báút biãún Qb, w, r trong A2 Ta kiãøm tra ràòng E1 ∧ (1 ≤ i ≤ N) ∧ (1 ≤ j ≤ N) { hoaïn vë (i, j) } E1 (i) Træåìng håüp W(w) Roî raìng ta coï : Qb, w+1, r { w := w+1 } Qb, w, r Vaí laûi : vaì : Qb, w, r ∧ (w ≤ r) ∧ W(w) ~ E1 ∧ (1 ≤ b ≤ w) ∧ (w ≤ r ≤ N) ∧ Pb, w, r ∧ W(w) Pb, w, r ∧ W(w) → Pb, w+1, r

nhæ váûy : Qb, w, r ∧ (w ≤ r) ∧ W(w) → Qb, w+1, r Âiãöu naìy chæïng minh : (ii) Træåìng håüp B(w) Roî raìng ta coï : Vaí laûi : Pb+1, w+1, r = (1 ≤ α < b+1 → B(α)) ∧ (b+1 ≤ α < w+1 → W(α)) ∧ (r ≤ α < N → R(α)) Tæì âoï theo bäø âãö : Pb+1, w+1, r ~ (1 ≤ α < b+1 → B(α)) ∧ (b+1 ≤ α < w → W(α)) ∧ (r ≤ α < N → R(α)) ∧ ((b ≥ 1) → B(b)) ∧ ((w ≥ b+1) → W(α)) Aïp duûng tiãn âãö âënh nghéa båíi pheïp hoaïn vë cho Qb+1, w+1, r : F { hoaïn vë(b, w) } Qb+1, w+1, r våïi :
TS. PHAN HUY KHAÏNH biãn soaûn

Qb, w, r ∧ (w ≤ r) ∧ W(w) { w := w+1 } Qb, w, r

Qb+1, w+1, r { b := b+1 ; w := w+1 } Qb, w, r

77

78 F = E1 ∧ (1 ≤ b+1 ≤ w+1) ∧ (w ≤ r ≤ N) ∧ (1 ≤ α < b → B(α)) ∧ (b+1 ≤ α < w → W(α)) ∧ (r < α ≤ N → R(α)) ∧ ((b ≥ 1) → B(w)) ∧ ((w ≥ b+1) → W(b)) ∧ (1 ≤ b ≤ N) ∧ (1 ≤ w ≤ N) Nhæng :

Cäng nghãû Pháön mãöm

(b+1 ≤ α < w → W(α)) ∧ ((w ≥ b+1) → W(b)) ~ (b ≤ α < w → W(α)) Nhæ váûy : F ~ E1 ∧ (1 ≤ b ≤ w) ∧ (w ≤ r ≤ N) ∧ B(w) ∧ Pb, w, r Tæì âoï suy ra : Qb, w, r (w ≤ r) ∧ ¬W(w) ∧ B(w) → F Âiãöu naìy chæïng minh : Qb, w, r ∧ (w ≤ r) ∧ ¬W(w) ∧ B(w) { hoaïnvë(b, w) ; b := b+1 ; w := w+1 } Qb, w, r (iii) Træåìng håüp R(w) Ta coï : Qb, w, r −1 { r := r −1 } Qb, w, r Màût khaïc theo bäø âãö : Pb, w, r −1 ~ Pb, w, r ∧ ((r ≤ N) → R(r)) Aïp duûng tiãn âãö âënh nghéa båíi pheïp hoaïn vë cho Qb, w, r −1 : G { hoaïnvë(r, w) } Qb, w, r −1 våïi : G = E1 ∧ (1 ≤ b ≤ w) ∧ (w−1 ≤ r−1 ≤ N) ∧ Pb, w, r ∧ ((r ≤ N) → R(w)) ∧ (1 ≤ r ≤ N) ∧ (1 ≤ w ≤ N) Thæûc tãú ta coï : Pb, w, r ∧ (b ≤ w) ∧ (w ≤ r) ∧ (1≤w≤ N) ∧ (1≤ r ≤N) { hoaïnvë(r, w) } Pb, w, r ∧ (b ≤ w) ∧ (w ≤ r) Ta coï : G ~ E1 ∧ (1 ≤ b ≤ w) ∧ (w ≤ r ≤ N) ∧ R(w) ∧ Pb, w, r Vaí laûi : E1 ∧ ¬W(w) ∧ ¬B(w) ∧ (1≤ w ≤ N) → R(w)

Error! Reference source not found. Nhæ váûy : Qb, w, r ∧ (w ≤ r) ∧¬W(w) ∧ ¬B(w) → G Âiãöu naìy chæïng minh : Qb, w, r ∧ (w ≤ r) ∧ ¬W(w) ∧ ¬B(w) { hoaïnvë(r, w) ; r := r −1 } Qb, w, r Tæì 3 kãút quaí trãn ta suy ra : Qb, w, r ∧ (w ≤ r) { A2 } Qb, w, r (β) Chæïng minh tênh âuïng âàõn cuía chæång trçnh (I) Ta âaî coï : Qb, w, r { A2 } Qb, w, r ∧ (w > r) (i) Âiãöu kiãûn sau Ta coï : Qb, w, r ∧ (w > r) → (1 ≤ b ≤ w) ∧ (w=r+1) ∧ (r ≤ N) ∧ Pb, w, r vaì :

79

Pb, w, r∧ (w=r+1) → (1 ≤ α < b → B(α)) ∧ (b ≤ α < r → W(α)) ∧ (r < α ≤ Ν → R(α)) Nhæ váûy : Qb, w, r ∧ (w > r) → S1 trong âoï : Qb, w, r { A1 } S1 (ii) Ta coï : E1 ∧ (0 ≤ n ≤ N) ∧ (n < α ≤ N → R(α)) { w := 1; b := 1; r := n } Qb, w, r vaí laûi : (n=N) → (0 ≤ n ≤ N) ∧ (n < α ≤ N → R(α)), do âoï : E1 ∧ (n=N) { chæång trçnh (I) } S1 Nhæ váûy ta âaî chæïng minh xong tênh âuïng âàõn tæìng pháön. Khåíi gaïn

c) Chæïng minh dæìng
Chæång trçnh (I) chè coï mäüt voìng làûp A1 vaì thán cuía voìng làûp laì A2. Giaí sæí : WQ
bwr

∧ (w ≤ r) = X1 vaì haìm m : X1 → N sao cho m(x) = r − w.

TS. PHAN HUY KHAÏNH biãn soaûn

79

W vaì R chè âæåüc xeït tênh nhiãöu nháút mäüt láön cho mäùi viãn bi” chæa xuáút hiãûn trong S1 cuîng thoaí maîn. Âãø chæïng minh viãûc dæìng cuía A1.. { âäü daìi låïn nháút cuía danh saïch } { kiãøu cuía caïc pháön tæí trong danh saïch } KiãøuConTroí = 0. var Ds : Danhsaïch.3. viãûc thæûc hiãûn A2 xeït tênh (nhiãöu nháút mäüt láön) caïc vë tæì liãn quan âãún chè mäüt viãn bi. Danhsaïch = array[1. In ra mäüt danh saïch theo thæï tæû ngæåüc Giaí sæí ta coï mäüt danh saïch tuyãún tênh gäöm caïc pháön tæí coï cáúu truïc vaì mäüt con troí chè âãún pháön tæí âáöu tiãn cuía danh saïch nhæ sau : const n = .. maìu cuía N viãn bi laì hoaìn toaìn xaïc âënh vaì vç coï N láön thæûc hiãûn. TiãúpTheo: KiãøuConTroí. r ∧ (w ≤ r) ∧ (r −w = m0) { A2 } (r −w = m0−1) Tæì âoï chæång trçnh (I) dæìng. ta âaî suy ra âæåüc ràòng A2 âæåüc thæûc hiãûn âuïng N láön (giaï trë cuía r −w giaím 1 mäùi láön. 0 laì giaï trë nil } PháönTæí = record NäüiDung: KiãøuPháönTæí. giaím tæì N−1 âãún 0). Trong quaï trçnh sàõp xãúp. Pâáöu : KiãøuConTroí.n. Tháût váûy.. åí trãn. ∀ m0 ∈ N d) Chæïng minh chæång trçnh (I) thoaí maîn âiãöu kiãûn cuía baìi toaïn Báy giåì chè coìn phaíi chæïng minh ràòng âiãöu kiãûn “mäùi vë tæì B. type KiãøuPháönTæí = .80 Cäng nghãû Pháön mãöm Chuï yï : Viãûc chæïng minh dæìng laì chè ra ràòng kêch thæåïc cuía vuìng chæa xæí lyï r − w giaím dáön mäùi láön thæûc hiãûn A2... w. Màût khaïc.. {troí âãún pháön tæí tiãúp theo } end. { kiãøu cuía con troí. III. saïch } { danh saïch caïc pháön tæí } { con troí chè âãún pháön tæí âáöu tiãn cuía danh . r ∧ (w ≤ r) ∧ (r −w = m0) { A2 } (w > r) ∨ (r −w < m0) Chuï yï ràòng : (r −w = m0) { w:= w+1 } (r −w = m0−1) træåìng håüp cuía W(w) vaì B(w) ∀ m0 ∈ N := r −1 } (r −w = m0−1) træåìng håüp cuía R(w) vaì (r −w = m0) { r Ta chæïng minh âæåüc ràòng : Qb. chè cáön chè ra ràòng : Qb.n] of PháönTæí. mäùi thæûc hiãûn cuía A2 chè liãn quan âãún 1 viãn bi phán biãût. w.

get(x) nãúu danh saïch khaïc räùng. ta seî phán têch thåìi gian vaì bäü nhåï cáön thiãút âãø thæûc hiãûn chæång trçnh.. αn ∧ (caïc træåìng näüi dung caïc baín ghi αk+1.1. Âäúi våïi mäùi låìi giaíi. αn âæåüc in theo chiãöu ngæåüc laûi) Mäùi bæåïc cuía voìng làûp laì tçm pháön tæí αk vaì viãút näüi dung (αk).. Vê duû. α 1 2 k − 1 αk ) (b) Voìng làûp thæï hai : TS. Chæång trçnh TILDA1 gäöm hai voìng làûp : (a) Voìng làûp thæï nháút : Pâáöu x α1 α2 . αk αk+1 . αk αk+1 . âáöu tiãn danh saïch åí traûng thaïi räùng. x3. sau âoï hoaût âäüng våïi hai thao taïc nhæ sau : put(expr) âàût vaìo âènh danh saïch giaï trë cuía biãøu thæïc expr. TILDA2 vaì TILDA3 cho danh saïch coï âäü daìi n pháön tæí.... Ta seî âæa ra ba låìi giaíi TILDA1... láúy giaï trë åí âènh danh saïch âãø gaïn cho biãún x.3. 81 Giaí thiãút ràòng danh saïch chæïa êt nháút mäüt pháön tæí (âáöu danh saïch PÂáöu ≠ nil). Caí ba låìi giaíi âãöu sæí duûng voìng làûp våïi báút biãún coï daûng sau : Pâáöu α1 α2 α3 . αn ∧ (Danhsaïch = α α . Baìi toaïn âàût ra laì in näüi dung danh saïch theo thæï tæû ngæåüc laûi. Ba chæång trçnh phán biãût nhau cå baín åí caïch tiãúp cáûn âãún αk.. thao taïc khäng xaïc âënh. x2. .. PHAN HUY KHAÏNH biãn soaûn 81 .. x1. III.TILDA1 Ta sæí duûng mäüt danh saïch con troí.. nãúu ta coï : Pâáöu x1 • x2 • x3 • x4 nil thç chæång trçnh seî in ra nhæ sau : x4.Error! Reference source not found. nãúu khäng...

Trong muûc træåïc. IV. − Caïc kiãøu tiãn âãö gaïn khaïc nhau.1.. . trong âoï q laì biãún duy nháút cuía chæång trçnh. thuí tuûc). αk) ∧ (caïc træåìng näüi dung caïc baín ghi αk+1.. Báy giåì ta xeït phaït biãøu E {P} S. Ta coï caïc tênh cháút sau âáy : (i) E {P} S laì true nãúu vaì chè nãúu fP (WE) ⊆ WS (ii) Nãúu termEP thç : E {P} S laì true nãúu vaì chè nãúu WE ⊆ fP−1 (WS) Vê duû 15 : (1) Cho phaït biãøu (q > 0) { q := q+1 } (q > 0). Ta coï : WE = WS =N+ .. αn phán biãût nhau cå baín åí caïch tiãúp cáûn âãún αk. Ba chæång trçnh α1 α2 .. • • • IV. − fP laì haìm tênh âæåüc båíi daîy caïc lãûnh P cuía mäüt chæång trçnh. − Phán têch chæång trçnh..82 Pâáöu Cäng nghãû Pháön mãöm (Danhsaïch = α1α2 . − Caïc tiãn âãö vaì quy tàõc suy diãùn cho mäüt säú cáúu truïc ngän ngæî láûp trçnh (khäúi.. ta âaî kyï hiãûu : Nãúu fP âæåüc âënh nghéa cho moüi giaï trë cuía WE . Tênh cháút naìy âæåüc kyï hiãûu laì termEP. αn âaî âæåüc in theo chiãöu ngæåüc laûi) Mäùi bæåïc cuía voìng làûp laì tçm pháön tæí αk vaì viãút näüi dung (αk).. . P khäng quáøn vaì khäng thæûc hiãûn caïc pheïp tênh vä âënh (vê duû chia cho 0) nãúu âiãöu kiãûn træåïc E thoaí maîn... Âiãöu kiãûn træåïc yãúu nháút vaì âiãöu kiãûn sau maûnh nháút cuía mäüt daîy lãûnh − WE táûp håüp caïc giaï trë caïc biãún cuía mäüt chæång trçnh thoaí maîn âiãöu kiãûn E. fq := q+1(N+) = N+ −{1} ⊆ N+ . Caïc tiãn âãö vaì quy tàõc suy diãùn Muûc naìy seî nghiãn cæïu caïc váún âãö sau : • − Khaïi niãûm vãö âiãöu kiãûn træåïc yãúu nháút vaì âiãöu kiãûn sau maûnh nháút cuía mäüt daîy lãûnh. αk αk+1 .

Error! Reference source not found. P) → S Chæïng minh : Âàût E ~ pfpre(P. fppost traí vãö âiãöu kiãûn sau sau maûnh nháút tæång æïng. f−1 := q div y (N × N) = N × N+ ⊇ WE q : ⁄ Trong træåìng håüp WE = fP−1 (WS). E laì âiãöu kiãûn træåïc yãúu nháút (la plus faible preïcondition) phaíi âæåüc thoaí maîn træåïc khi thæûc hiãûn P âãø cho S âæåüc thoaí maîn sau âoï. S). P) → S âpcm IV. fppre traí vãö âiãöu kiãûn træåïc yãúu nháút tæång æïng − våïi mäüt âiãöu kiãûn træåïc vaì mäüt daîy lãûnh. PHAN HUY KHAÏNH biãn soaûn 83 . tæì âoï suy ra pfpost(E. Haìm fppre Våïi moüi âiãöu kiãûn S vaì daîy lãûnh P. nhæng fq := q div y (N × N) = N × N+ ⊂ WS . S) vaì fppost(E. Thæûc tãú. Chuï yï ràòng caïc haìm fppre(P. Ta coï WE = fP−1 (WS). Ta kyï hiãûu hai haìm fppre vaì fppost nhæ sau : − våïi mäüt daîy lãûnh vaì våïi mäüt âiãöu kiãûn sau. Báy giåì ta seî trçnh baìy caïc tênh cháút cuía caïc haìm fppre vaì fppost. tæì âoï suy ra fP(WE) = fP(fP−1 (WS)) ⊆ WS Hay coï thãø noïi E ~ pfpre(P. nãúu fP(WE) = WS . nãúu E’ {P} S vaì termE ’P thç WE ’ ⊆ fP−1 (WS) = WE vaì nhæ váûy E’ → E. tæì âoï suy ra fP−1 (WS)= fP−1 (fP(WE)) ⊇ WE TS. S). Chæïng minh : Âàût S ~ pfpost(E. IV. P)). P). trong âoï q vaì y laì caïc biãún duy nháút cuía chæång trçnh.1. E → pfpre(P.2. S laì âiãöu kiãûn sau maûnh nháút (la plus forte postcondition) phaíi âæåüc thoaí maîn sau khi thæûc hiãûn P nãúu E laì âuïng træåïc. nãúu E {P} S’ thç fP(WE) = WS ⊆ WS ’ . Ta coï : WE = WS =N × N . Màût khaïc. Haìm fppost Våïi moüi âiãöu kiãûn E vaì daîy lãûnh P. pfpost(pfpre(P. P) âæåüc âënh nghéa gáön nhæ tæång âæång. pfpost(E. Thæûc tãú. nhæ váûy S → S’.1. S).1. Ta coï WS = fP(WE). vaì (2) 83 N+ ⊆ f−1 := q+1(N+) = N q : Cho phaït biãøu (q ≥ 0) ∧ (y ≥ 0) { q := q div y } (q ≥ 0) ∧ (y ≥ 0).

cho pheïp chæïng minh tênh âuïng âàõn (CMTÂÂ) toaìn cuûc cuía chæång trçnh. S) ∨ (¬B ∧ pfpre(Q. Cho âiãöu kiãûn E vaì mäüt daîy lãûnh P. true) ) Âiãöu naìy coï nghéa ràòng táûp håüp caïc giaï trë cuía pfpre(P.1. P)) ? IV. S). Âäúi våïi pheïp gaïn. true) laì miãön xaïc âënh cuía haìm fP (nghéa laì táûp håüp caïc giaï trë sao cho chæång trçnh P âæa ra mäüt kãút quaí).84 Cäng nghãû Pháön mãöm Hay coï thãø noïi S ~ pfpost(E. S)) Nhæng viãûc tênh B âãø cho mäüt kãút quaí nãúu vaì chè nãúu pfpre(if B then . tæì âoï suy ra E → pfpre(P. Vê duû 16 : Giaí sæí cáön xaïc âënh : pfpre(if B then P else Q. ∀ P vaì ∀ S. caïc tiãn âãö cho âiãöu kiãûn træåïc yãúu nháút æïng våïi mäüt âiãöu kiãûn sau âaî cho. vaì moüi daîy lãûnh P. Khaí nàng biãøu diãùn pfpre(P. true) laì âuïng.3. ta coï : pfpre(if B then P else Q. caïc tiãn âãö âaî cho åí muûc I noïi chung seî thay thãú vai troì naìy. våïi moüi âiãöu kiãûn E vaì S. nhæîng âiãöu kiãûn naìo laìm thoaí maîn fP sao cho : E ~ pfpre(P. S) âpcm Baìi táûp : 1. Sæí duûng âiãöu kiãûn træåïc yãúu nháút vaì âiãöu kiãûn sau maûnh nháút âãø chæïng minh tênh âuïng âàõn cuía chæång trçnh a) Træåìng håüp âiãöu kiãûn træåïc yãúu nháút Sau khi âënh nghéa haìm pfpre. pfpost(E. xuáút phaït tæì caïc âiãöu kiãûn træåïc yãúu nháút cuía caïc lãûnh trong P. ta coï : ( E {P} S ∧ termEP ) ~ ( E → pfpre(P. Mäüt hãû thäúng CMTÂÂ toaìn cuûc sæí duûng âiãöu kiãûn træåïc yãúu nháút bao gäöm : (a) Våïi mäùi lãûnh så cáúp. S) Nãúu B cho mäüt kãút quaí. S) ) âàûc biãût : termEP ~ ( E → pfpre(P. (b) Caïc quy tàõc suy diãùn cho pheïp xáy dæûng âiãöu kiãûn træåïc yãúu nháút cuía mäüt lãûnh khäng så cáúp P. Nhæ váûy trong træåìng håüp täøng quaït : . P). S) ~ (B ∧ pfpre(P.

Q) våïi giaï trë ràòng B luän luän cho mäüt kãút quaí. Chuï yï : Caïc tiãn âãö vaì caïc quy tàõc suy diãùn xeït åí muûc I cho pheïp chæïng minh tênh âuïng âàõn cuía caïc phaït biãøu E {P} S. if B then P else Q) ~ pfpost(E ∧ (if pfpre(if B then. ta coï : E {P} S ~ (pfpost(E. true) khäng tênh âæåüc cho moüi B. quy tàõc suy diãùn âæåüc cho båíi tênh cháút : pfpost(E.Error! Reference source not found. Vç váûy. true) then B else false). if B then P else Q) ~ pfpost(E ∧ B. true) then (B ∧ pfpre(P. pfpre(if B then P else Q. Trong træåìng håüp täøng quaït : pfpost(E. true)~(n >= 1) Âáy laì sæû giaí âënh (conjecture) cuía Collatz. Vê duû. trong âoï E ≠ pfpre(P. Vê duû. ngæåìi ta khäng biãút nãúu : pfpre(while n<>1 do n:=if not odd(n) then n div 2 else 3*n+1. S)) else false Khäng coï quy tàõc âån giaín cho voìng làûp while. PHAN HUY KHAÏNH biãn soaûn 85 . S). P) → S) Nhæ váûy. mäüt hãû thäúng chæïng minh tênh âuïng âàõn dæûa trãn viãûc tênh toaïn caïc âiãöu kiãûn sau maûnh nháút cho pheïp chæïng minh tênh âuïng âàõn tæìng pháön. Âäúi våïi lãûnh âiãöu kiãûn. Q) TS. P) ∨ pfpost(E ∧ (if pfpre(if B then. S) ∨ (¬B ∧ pfpre(Q. P) ∧ pfpost(E ∧ ¬B. − Viãûc giaíi quyãút mäüt säú baìi toaïn näøi tiãúng âæa vãö viãûc chæïng minh mäüt chæång trçnh laì dæìng. ta âaî chæïng minh tênh âuïng âàõn tæìng pháön ràòng : (a ≥ 0) {Div} (a = bq + r) ∧ (q ≥ 0) ∧ (0 ≤ r < b) b) Træåìng håüp âiãöu kiãûn sau maûnh nháút Theo âënh nghéa cuía pfpost. 85 Âäü phæïc taûp cuía caïc quy tàõc âæa ra âãø xaïc âënh dkt cuía mäüt voìng làûp while coï thãø âæåüc minh hoaû nhæ sau : − Váún âãö dæìng cuía voìng làûp while træìu tæåüng khäng laì quyãút âënh âæåüc. âiãöu kiãûn pfpre(while B do P. true) then ¬B else false). moüi P. S) ~if pfpre(if B then .

1.1. Nhæ váûy caïc tiãn âãö gaïn noïi chung khäng thãø kyï hiãûu : E (x := <bt>) pfpost(E. caïc con troí chè âãún caïc biãún khaïc nil. S) ~ if pfpre(x := <bt>. v. Vê duû.86 Cäng nghãû Pháön mãöm IV. S khäng nháút thiãút laì âiãöu kiãûn sau maûnh nháút æïng våïi E. v.. Trong træåìng håüp naìy.1. thay vç : (y > 0) { x := a[j] } (y > 0) vaì (a[j] = y) { x := a[j] } (x = y) Ta coï thãø viãút : (m ≤ j ≤ n) ∧ (y > 0) { x := a[j] } (y > 0) if (m ≤ j ≤ n) then (a[j] = y) else false { x := a[j] } (x = y) Theo mãûnh âãö III. Caïc tiãn âãö naìy seî luän luän âæåüc kyï hiãûu båíi : E (x := <bt>) pfpost(E.v. khäng coï pheïp chia cho 0. x := <bt>) nhæng khäng thãø kyï hiãûu båíi : pfpre(x := <bt>.v.2... true) âæa âãún. S) { x := <bt> } S .2. nhængpfpost(x > 0. x := <bt>) 1 Chàóng haûn ta coï tiãn âãö : (− ≥ 0) { x := 1 ⁄ x } (x ≥ 0) x Ta coï : 1 (− ≥ 0) ~ (x > 0). phaït biãøu E { x := <bt> } S laì true.. Âiãöu kiãûn træåïc yãúu nháút vaì âiãöu kiãûn sau maûnh nháút cuía lãûnh gaïn Âiãöu kiãûn træåïc E âæåüc tênh toaïn theo quy tàõc âaî trçnh baìy åí muûc I âãø taûo ra caïc tiãn âãö gaïn laì âiãöu kiãûn træåïc yãúu nháút cuía mäüt lãûnh gaïn x := <bt> vaì cuía mäüt âiãöu kiãûn sau S. ÅÍ âáy ta khäng tháúy sæû vi phaûm vãö tênh håüp thæïc cuía caïc tiãn âãö âaî nãu trong muûc I vãö tênh âuïng âàõn tæìng pháön : nãúu termE(x := <bt>) coï giaï trë false. − moüi pheïp toaïn thæûc thi âãöu cho kãút quaí : coï sæû tæång thêch vãö kiãøu cuía caïc toaïn haûng. S) { x := <bt> } S Trong træåìng håüp täøng quaït. true) then S(x ⁄ <bt>) else false.. nãúu E (x := <bt>) S laì mäüt tiãn âãö. true) thãø hiãûn : − x vaì caïc toaïn haûng cuía <bt> âæåüc âënh nghéa : chè säú cuía maíng nàòm giæîa cáûn dæåïi vaì cáûn trãn. x := 1 ⁄ x) ~ (x > 0) x Báy giåì ta seî xeït caïc quy tàõc xáy dæûng caïc tiãn âãö tæì âiãöu kiãûn træåïc vãö âiãöu kiãûn sau. nãúu m vaì n láön læåüt laì cáûn dæåïi vaì cáûn trãn cuía maíng a. ta coï : pfpre(x := <bt>. Caïc tiãn âãö gaïn IV. tiãn âãö âæåüc kyï hiãûu båíi : pfpre(x := <biãøu thæïc>. Âiãöu kiãûn pfpre(x := <bt>. Ngæåìi ta coï thãø cuíng cäú âiãöu kiãûn træåïc cuía caïc tiãn âãö naìy båíi caïc âiãöu kiãûn do pfpre(x := <bt>. khi âaûi læåüng termE(x := <bt>) coï giaï trë true.

hoàûc q := q div 2. q := q∗2) ~ ( −≥ 0) 2 pfpost(q = 0.2. TS. πq fq := q+1 (a. Quy tàõc tênh toaïn âiãöu kiãûn sau maûnh nháút cuía mäüt pheïp gaïn Våïi lãûnh gaïn x := <bt>. Ta kyï hiãûu πx fx := <bt> laì pheïp chiãúu cuía fx := <bt> vaìo thaình pháön naìy. ta coï : fq := q+1 (a. a) Træåìng håüp âàûc biãût Nãúu haìm thu heûp fx := <bt> vaìo WE laì toaìn cuûc vaì âån aïnh. ta coï tiãn âãö gaïn tæì âiãöu kiãûn træåïc vaì âiãöu kiãûn sau nhæ sau : E { x := <bt> } E(x ⁄ πxf−1x := <bt>) Sæ täön taûi haìm ngæåüc cuía f−1 x := <bt> cho pheïp tçm âæåüc giaï trë cuía x træåïc khi thæûc hiãûn pheïp gaïn. b. coï thãø sæí duûng quy tàõc sau âáy âãø tênh pfpost : pfpost(E. 87 IV. x := <bt>) ~ E(x ⁄ πxf−1x := <bt>) nghéa l1 ta nháûn âæåüc âiãöu kiãûn sau maûnh nháút cuía mäüt âiãöu kiãûn træåïc E vaì mäüt pheïp gaïn x := <bt> båíi viãûc thay thãú nhæîng nåi x xuáút hiãûn trong âiãöu kiãûn E båíi haìm ngæåüc cuía fx := <bt>. Tæì quy tàõc tênh pfpost. Nhæ váûy. Chuï yï : pfpost(q ≥ 0. q := q+a) ~ (q−a = 0) Ta nháûn âæåüc caïc tiãn âãö sau âáy : (q ≥ 0) { q := q+1 } (q−1 ≥ 0) x (q ≥ 0) { q := q∗2 } ( −≥ 0) 2 (q = 0) { q := q+a } (q−a = 0) Quy tàõc trãn khäng duìng âæåüc cho caïc pheïp gaïn nhæ q := 0. tæì caïc giaï trë caïc biãún sau khi gaïn. PHAN HUY KHAÏNH biãn soaûn 87 . quy tàõc âiãöu kiãûn træåïc vãö tiãn âãö gaïn âaî cho åí muûc I coï thãø viãút : E ~ S(x ⁄ πx fx := <bt>) Báy giåì ta seî âënh nghéa hai quy tàõc tênh toaïn âiãöu kiãûn sau maûnh nháút cuía mäüt lãûnh gaïn. chè coï biãún x bë thay âäøi. q+1. q := q+1) ~ (q−1 ≥ 0) q pfpost(q ≥ 0. b. r) = q+1 Vê duû. b. r)vaì Tæång tæû. r) = (a. træì biãún x. seî täön taûi haìm ngæåüc f−1x := <bt> Trong træåìng håüp naìy. q. våïi lãûnh q := q+1 cuía chæång trçnh Div åí muûc I. âàût âäöng nháút caïc thaình pháön.Error! Reference source not found. q.2. fx := <bt> laì mäüt haìm tæì táûp håüp W caïc giaï trë cuía caïc biãún cuía chæång trçnh vaìo chênh noï.

ngæåìi ta khäng coìn coï tênh cháút naìy.88 Cäng nghãû Pháön mãöm Ta coï thãø duìng quy tàõc âãø chæïng minh chæång trçnh theo chiãöu bàõt âáöu − kãút thuïc. ta coï tiãn âãö : (x = 2y) { x := x div 2 } (2x = 2y) tæång âæång våïi : (x = 2y) { x := x div 2 } (x = y) Tuy nhiãn. Vê duû 17 : Haìm fx := x div 2 laì toaìn thãø. haìm fx := <bt> : W → W laì âån aïnh. âãø chæïng minh (x > 0) { x := x∗2 } (x > 0) : • Xeït quy tàõc tæì âiãöu kiãûn sau vãö âiãöu kiãûn træåïc : (2x > 0) { x := x∗2 } (x > 0) Sæí duûng quy tàõc âiãöu kiãûn træåïc. nhæng khäng âån aïnh. ta nháûn âæåüc kãút quaí vç : (2x > 0) → (x > 0) • Xeït quy tàõc tæì âiãöu kiãûn træåïc vãö âiãöu kiãûn sau : x (x > 0) { x := x∗2 } ( −> 0) 2 x Sæí duûng quy tàõc âiãöu kiãûn sau. xuáút phaït tæì âiãöu kiãûn sau (2x = 2y) vaì sæí duûng tiãn âãö gaïn åí muûc I. . Aïp duûng quy tàõc tênh pfpost. Vê duû. ta coï tiãn âãö : x − (2 ⎣2 = 2y) { x := x div 2 } (2x = 2y) ⎦ tæång âæång våïi : x − (2 ⎣2 = 2y) { x := x div 2 } (x = y) ⎦ b) Træåìng håüp täøng quaït Nãúu khäng täön taûi haìm ngæåüc cuía fx := <bt>. Trong caïc vê duû naìy. Thu heûp cuía noï vaìo Wx = 2y laì âån aïnh. Vê duû sau âáy chè ra ràòng nãúu haìm fx := <bt> : W → W khäng laì âån aïnh. seî khäng thãø tçm âæåüc giaï trë ban âáöu cuía x. ta nháûn âæåüc kãút quaí vç : ( −> 0) → (x > 0) 2 Chuï yï : Caïc tiãn âãö gaïn âaî âæa ra trong caïc vê duû trãn coï thãø nháûn âæåüc tæì âiãöu kiãûn sau båíi tiãn âãö gaïn åí muûc I. xuáút phaït tæì giaï trë caïc biãún sau khi thæûc hiãûn pheïp gaïn.

Error! Reference source not found.

89

V. Baìi táûp
Baìi 1 : Sæí duûng caïc quy tàõc trãn âáy, chæïng minh caïc tênh cháút sau : 1. Nãúu E {P} S vaì E’ {P} S’ laì caïc âënh lyï, thç E ∧ E’ {P} S ∧ S’ vaì E ∨ E’ {P} S ∨ S’ cuîng laì caïc âënh lyï. 2. Nãúu E {P} F vaì G {Q} S laì caïc âënh lyï vaì nãúu F → G, thç E {P ; Q} S laì mäüt âënh lyï. 3. Sæí duûng quy tàõc “;”, chæïng minh ràòng : (y = 2) { x := y+1 ; z :=x+y } (z = 5) 4. Sæí duûng quy tàõc âiãöu kiãûn træåïc, chæïng minh ràòng : (q ≥ 0) { q := q + 1 } (q ≥ 0) 5. Pheïp thãú sæí duûng trong quy tàõc trãn âáy coï thãø âæåüc viãút E = S (x ⁄ <bt>). Trong âiãöu kiãûn âàûc biãût cuía mäüt biãøu thæïc âiãöu kiãûn træåïc, pheïp thãú naìy âæåüc âënh nghéa båíi : S (x ⁄ if a then e1 else e2)
ân

=

(a ∧ S (x ⁄ e1)) ∨ (¬a ∧ S (x ⁄ e2))

Sæí duûng quy tàõc trãn âáy âãø chæïng minh : (z ≥ 0) { z := if b > 0 then z + b else z − b } (z ≥ 0) Baìi 2 : Chæïng minh Div dæìng : Bàòng caïch sæí duûng haìm m’(w) = chia
A . B
⎢A⎥ ⎢ B⎥ ⎣ ⎦

− q, trong âoï

⎢A⎥ ⎢ B⎥ ⎣ ⎦

laì pháön nguyãn cuía pheïp

Chæïng minh sau khi ra khoíi voìng làûp, m’(w) = 0. Baìi 3 : Tæì chæång trçnh P trong muûc II.2.1, haîy : 1. Chæïng minh hçnh thæïc chæång trçnh P. 2. Cho biãút säú láön täúi âa thæûc hiãûn voìng làûp cuía P. 3. Sæí duûng chæång trçnh Div cuía muûc træåïc âãø suy diãùn tæì P mäüt chæång trçnh tênh ÆSCLN cuía hai säú nguyãn dæång A vaì B båíi viãûc tênh säú dæ liãn tiãúp. Baìi 4 : Tæì chæång trçnh (Ibis) trong muûc II.2.2, haîy : 1. Chæïng minh ràòng chæång trçnh (Ibis) thoaí maîn caïc raìng buäüc cuía baìi toaïn. 2. Chæïng minh ràòng chæång trçnh (Ibis) khäng coìn thoaí maîn nãúu thay thãú voìng làûp trong cuìng båíi : while R(r) and (w<=r) do r:=r-1; if w<r then begin hoaïnvë(r, w); r:=r-1 end; Chæïng minh ràòng chæång trçnh naìy coï thãø dáùn âãún tênh R(0).

TS. PHAN HUY KHAÏNH biãn soaûn

89

CHÆÅNG 4

Thæí nghiãûm chæång trçnh
Nhæ âaî trçnh baìy trong chæång træåïc, ngæåìi ta thæåìng sæí duûng caïc kyî thuáût ténh (static techniques) vaì kyî thuáût âäüng (dynamic techniques) trong quaï trçnh V&V âãø kiãøm tra tênh âuïng âàõn cuía mäüt saín pháøm pháön mãöm. Chæång naìy seî trçnh baìy mäüt phæång phaïp ténh laì khaío saït (inspection) chæång trçnh, våïi vai troì nhæ laì mäüt pheïp chæïng minh phi hçnh thæïc vaì, mäüt phæång phaïp âäüng laì thæí nghiãûm(testing) chæång trçnh.

I. Khaío saït
Khaío saït (hay thanh tra) laì nhuîng cuäüc hoüp nhàòm muûc âêch xaïc minh mäüt saín pháøm. Pháön låïn caïc phæång phaïp saín xuáút pháön mãöm âãöu áún âënh træåïc nhæîng cuäüc hoüp nhæ váûy. Tuìy theo baín cháút cuía saín pháøm cáön khaío saït, ngæåìi ta noïi vãö khaío saït thiãút kãú toaìn thãø (global design), khaío saït thiãút kãú chi tiãút (detailed design), vaì khaío saït maî nguäön. Mäüt këch baín máùu (typical scenario) cho mäüt khaío saït maî nguäön nhæ sau : 1. Cáön âãún 4 ngæåìi gäöm mäüt chuí tëch, mäüt ngæåìi láûp trçnh, mäüt ngæåìi thiãút kãú vaì mäüt khaío saït (âãöu laì nhuîng chuyãn gia vãö Tin hoüc, riãng khaío saït phaíi coï kiãún thæïc chuyãn män vãö lénh væûc æïng duûng cuía saín pháøm). 2. Caïc thaình viãn nháûn chæång trçnh nguäön vaì caïc âàûc taí træåïc cuäüc hoüp êt ngaìy âãø âoüc vaì chuáøn bë. 3. Cuäüc hoüp keïo daìi khoaíng 1 giåì 30 âãún khoaíng 2 giåì. 4. Trong quaï trçnh hoüp khaío saït : − Ngæåìi láûp trçnh âoüc vaì giaíi thêch chæång trçnh cuía mçnh, coï thãø âoüc tæìng doìng lãûnh mäüt vaì traí låìi caïc cáu hoíi âæåüc âàût ra. − Chæång trçnh âæåüc phán têch càn cæï trãn mäüt danh saïch caïc läùi sai (errors) thäng duûng do khaío saït cung cáúp. 5. Cuäüc hoüp khäng sæía läùi tçm tháúy maì chè ghi nháûn qua biãn baín maì thäi. Chênh ngæåìi láûp trçnh seî tæû sæía läùi sau khi hoüp xong. 6. Nãúu khi khaío saït tçm tháúy trong chæång trçnh, nhiãöu khiãúm khuyãút (failures), hoàûc nhiãöu läùi tráöm troüng thç phaíi tiãúp tuûc khaío saït láön sau, sau khi sæía läùi.

TS. PHAN HUY KHAÏNH biãn soaûn

90

Thæí nghiãûm chæång trçnh

91

Mäüt säú këch baín coi troüng viãûc tçm läùi sai vaì khuyãún khêch viãûc chaûy demo træûc tiãúp maî chæång trçnh (hand made) nguäön : khaío saït mang âãún cuäüc hoüp caïch tiãún haình vaì caïc dæî liãûu liãn quan âãø moüi ngæåìi tiãún haình thæí nghiãûm. Ngæåìi ta coìn goüi caïch thæí nghiãûm nhæ váûy laì walk throughs (chaûy suäút). Mäüt säú këch baín laûi coi troüng viãûc chæïng minh khäng hçnh thæïc : khaío saït âãö nghë xaïc minh caïc tênh cháút cho pheïp thæí nghiãûm tênh âuïng âàõn cuía saín pháøm. Ngæåìi ta noïi âáy laì viãûc khaío saït càn cæï trãn viãûc xaïc minh. Viãûc kiãøm laûi (review) khaïc våïi khaío saït vç ràòng viãûc kiãøm laûi khäng âoìi hoíi phaíi hoüp : Saín pháøm âæåüc giao cho nhæîng ngæåìi khäng tham gia vaìo viãûc láûp trçnh, hoü coï nhæîng khuynh hæåïng âaïnh giaï âäüc láûp. Coï thãø noïi phæång phaïp khaío saït coï hiãûu quaí âaïng kãø : nhæîng säú liãûu tçm tháúy trong caïc vàn baín ghi nháûn khoaíng 50% sai soït âæåüc phaït hiãûn khi khaío saït. Nhæîng con säú dæåïi âáy (láúy tæì taûp chê IEEE3 nàm 1992 cuía Dyer M. tæì baìi baïo “Verification Based Inspection") cho tháúy caïc sai säú tçm tháúy khi phaït triãøn dæû aïn 5 pháön mãöm cuía haîng IBM :
Dæû aïn Khaío saït thiãút kãú toaìn bäü Khaío saït thiãút kãú chi tiãút Khaío saït maî Thæí nghiãûm Thæí nghiãûm âån vë hãû thäúng

1 2 3 4 5 4 20 20 10 13 27 26 18

50 49 10 22 24

25 17 20 18 24

25 17 23 36 24

Mäüt phæång phaïp khaïc, goüi laì phæång phaïp phoìng saûch (Clean-room Methodology), thay vç thæí nghiãûm (testing), khuyãún khêch viãûc khaío saït (inspection) bàòng caïch xaïc minh (verification) trong quaï trçnh saín xuáút pháön mãöm. Sæû phaït triãøn pháön laì liãn tiãúp laìm mën (raffinement) saín pháøm. Mäùi giai âoaûn, ngæåìi ta tiãún haình chæïng minh tênh âuïng âàõn (prouving) mäüt caïch chàût cheî, âäöng thåìi våïi caïc cuäüc khaío saït, sao cho saín pháøm pháön mãöm khäng chæïa sai soït. Viãûc thæí nghiãûm chè âæåüc tiãún haình khi xaïc minh háûu nghiãûm (a posteriori) nhåì caïc phæång phaïp thäúng kã, nhàòm âaût âæåüc muûc âêch âàût ra luïc âáöu. Phæång phaïp phoìng saûch do H.Mills xáy dæûng taûi IBM, âaî âæåüc aïp duûng âãø saín xuáút caïc pháön mãöm cåî låïn.

3

IEEE, âoüc laì eye-triple-ee, tãn viãút tàõt cuía Institute of Elechtrric and Engineers.

TS. PHAN HUY KHAÏNH biãn soaûn

91

nhàòm âãø xaïc minh kãút quaí nháûn âæåüc sau khi chaûy laì âuïng âàõn. Pheïp thæí nghiãûm duìng cho caí hai quaï trçnh xaïc minh vaì håüp thæïc hoïa V&V. II. coìn nhoïm chaûy debugger laì nhoïm tham gia láûp trçnh ra saín pháøm. chiãúm khoaíng tæì 30% âãún 50%. tuìy theo baín cháút cuía dæû aïn Tin hoüc. 2. Tçm caïch khàõc phuûc läùi sai (Design error repair) 3. Quaï trçnh debugger Våïi nhæîng phæång phaïp láûp trçnh truyãön thäúng. Chaûy chæång trçnh debugger âãø tçm sæía läùi. quaï trçnh V & V laì khaío saït vaì thæí nghiãûm chæång trçnh. Tçm tháúy läùi sai (Locate error) 2. våïi quy trçnh “walkthroughs” bàòng caïch chaûy demo (hand-made). våïi âiãöu kiãûn ràòng chæång trçnh laì chaûy âæåüc. Âënh nghéa vaì muûc âêch thæí nghiãûm Ngæåìi ta âæa ra nhuîng âënh nghéa sau âáy : Mäüt thæí nghiãûm laì cho chaûy (run) hay thæûc hiãûn (execution) mäüt chæång trçnh tæì nhuîng dæî liãûu âæåüc læûa choün âàûc biãût. ngæåìi ta thæåìng phán cäng nhæ sau : nhoïm thæí nghiãûm laì nhoïm khäng láûp trçnh. Caïc thæí nghiãûm vaì chaûy debugger thæåìng do caïc nhoïm cäng taïc khaïc nhau âaím nhiãûm. Âãø náng cao hiãûu quaí.1.92 Cäng nghãû Pháön mãöm II. Quaï trçnh debugger gäöm nhiãöu giai âoaûn : 1. Viãûc thæí nghiãûm phán biãût : 1. viãûc thæí nghiãûm chiãúm mäüt pháön âaïng kãø trong quaï trçnh saín xuáút pháön mãöm. . Caïc pheïp chæïng minh tênh âuïng âàõn hay khaío saït maî nguäön maì khäng chaûy chæång trçnh. Mäüt táûp dæî liãûu thæí laì táûp håüp hæîu haûn caïc dæî liãûu trong âoï mäùi dæî liãûu phuûc vuû cho mäüt thæí nghiãûm. Thæûc tãú. Thæí nghiãûm laûi chæång trçnh (Re-teat program) Tçm tháúy läùi sai Tçm caïch khàõc phuûc läùi sai Khàõc phuûc läùi sai Thæí nghiãûm laûi chæång trçnh Hçnh 4. Caïc phæång phaïp thæí nghiãûm Phæång phaïp thæí nghiãûm laì cho chaûy chæång trçnh tæì mäüt säú dæî liãûu thæí âæåüc choün træåïc.1. Khàõc phuûc läùi sai (Error repair) 4.

ngæåìi ta chè tiãún haình nhuîng pheïp thæí ténh. Taûo ra táûp dæî liãûu thæí. Sau âáy laì mäüt tiãu chuáøn näøi tiãúng cuía Dijkstra : “Caïc thæí nghiãûm cho pheïp chæïng minh mäüt chæång trçnh laì khäng âuïng. 3. Láûp baïo caïo vãö kãút quaí thæí nghiãûm vaì læu giæî. Chæïng minh ràòng chæång trçnh laì âuïng âàõn Âãø khàóng âënh tênh âuïng âàõn cuía chæång trçnh. J. Wiley 1979. Ngæåìi thæí nghiãûm tiãún haình våïi muûc âêch nghëch (negative) : pheïp thæí laì thaình cäng nãúu tçm ra âæåüc khiãúm khuyãút. Triãøn khai caïc pheïp thæí. tuy nhiãn. Tæì âoï. Viãûc thæí nghiãûm kiãøu naìy thæåìng âæåüc aïp duûng trong quaï trçnh viãút chæång trçnh. Trong phæång phaïp phoìng tràõng. TS. cáön tiãún haình caïc thæí nghiãûm toaìn bäü (exhaustive testing). trong baìi baïo “The Art of Software Testing“. Ngæåìi thæí nghiãûm coï nhiãûm vuû : 1. khäng bao giåì coï thãø chæïng minh âæåüc chæång trçnh âoï laì âuïng âàõn“. tiãún haình thæí nghiãûm vaì âaïnh giaï kãút quaí âãún caïc giai âoaûn khaïc nhau trong chu kyì säúng cuía pháön mãöm. Muûc âêch thæí nghiãûm laì âãø : 1. Muûc âêch cuía nhuîng pheïp thæí nhæ váûy laì táûp trung tçm ra caïc läùi sai tæì nhuîng khiãúm khuyãút do ngæåìi láûp trçnh phaûm phaíi. thæåìng ngæåìi ta noïi vãö “thæí nghiãûm phaï huíy“ (destructive testings).static benchmark) vãö cháút læåüng cuía chæång trçnh. Ngæåìi thæí nghiãûm (hay nhoïm thæí nghiãûm) coï kiãún thæïc chuyãn män Tin hoüc coï nhiãûm vuû tiãún haình pheïp thæí nghiãûm. 2. âaî âënh nghéa thæí nghiãûm nhæ sau : “Pheïp thæí nghiãûm laì cho chaûy chæång trçnh nhàòm tçm ra nhæîng sai soït”. Âæa ra âaïnh giaï ténh (static evaluation . Mäüt läùi sai (error) laì mäüt pháön chæång trçnh (lãûnh) âaî gáy ra khiãúm khuyãút. Gáy ra nhæîng khiãúm khuyãút cuía chæång trçnh Myers G. Âiãöu naìy trãn thæûc tãú ráút khoï thæûc hiãûn. laì tháút baûi trong træåìng håüp ngæåüc laûi. Ngæåìi ta sæí duûng phæång phaïp “thæí nghiãûm ténh“ (static testing) cho muûc âêch naìy. 3. âoìi hoíi táûp dæî liãûu thæí phaíi hæîu haûn vaì coï kêch thæåïc væìa phaíi sao cho âuí sæïc thuyãút phuûc.Thæí nghiãûm chæång trçnh 93 Mäùi pheïp thæí nghiãûm chè ra hoaût âäüng tæì viãûc thiãút kãú caïc táûp dæî liãûu thæí. bàòng caïch chè ra mäüt phaín vê duû. PHAN HUY KHAÏNH biãn soaûn 93 . Mäüt khiãúm khuyãút (failure) xaíy ra khi chæång trçnh thæûc hiãûn cho ra kãút quaí khäng tæång håüp våïi âàûc taí cuía chæång trçnh. 2.

tæång æïng våïi caïc giai âoaûn saín xuáút pháön mãöm khaïc nhau. n: Integer) . nhæîng âån thãø do M goüi tåïi vàõng màût phaíi âæåüc thay thãú båíi caïc chæång trçnh cuìng mäüt giao diãûn våïi M. nãúu âån thãø âang âæåüc thæí nghiãûm goüi mäüt thuí tuûc sàõp xãúp åí âáöu : Procedure Sort (T: Array . Khi âoï. Âån thãø M Hçnh 4. Caïc âån thãø vàõng màût âæåüc thay båíi caïc trçnh stubs Vê duû. for i:= 1 to n do writeln (T[i]) .2. hay thæí nghiãûm âån vë (Unit testing) do ngæåìi láûp trçnh tæû tiãún haình.2. ngæåìi ta coï thãø sæí duûng trçnh Stub : Procedure Sort (T: Array . II.2.94 Cäng nghãû Pháön mãöm nhàòm muûc âêch væìa âaím baío cäng viãûc cuía ngæåìi láûp trçnh væìa âaïnh giaï sæû tin cáûy cuía saín pháøm váûn haình. xaíy ra hai træåìng håüp nhæ sau : Træåìng håüp 1 : nhæîng âån thãø do M goüi tåïi khäng coï màût luïc thæí nghiãûm. Khi âoï. .3. Thæí nghiãûm trong chu kyì säúng cuía pháön mãöm Ngæåìi ta phán biãût nhiãöu phæång phaïp thæí nghiãûm. Caïc phæång phaïp thæí nghiãûm khaïc do ngæåìi thæí nghiãûm tiãún haình. Giaí sæí goüi M laì mäüt âån thãø cáön thæí nghiãûm riãng biãût. Thæí nghiãûm Thæí nghiãûm “big bang” Thæí nghiãûm trãn xuäúng Thæí nghiãûm Thæí nghiãûm hãû thäúng Thæí nghiãûm Thæí nghiãûm têch håüp Hçnh 4. Thæí nghiãûm âån thãø Thæí nghiãûm âån thãø (Module testing). n: Integer). Nhiãöu phæång phaïp thæí nghiãûm II. Caïc chæång trçnh naìy thæûc hiãûn âuïng chæïc nàng maì chuïng âaûi diãûn cho âån thãø vàõng màût vaì chuïng âæåüc goüi laì caïc trçnh stubs (“cuäúng“). Writeln (‘Daîy cáön sàõp xãúp laì : ‘) .1. Phæång phaïp naìy hay âæåüc sæí duûng trong láûp trçnh cáúu truïc (top-down programing).

Nhæ váûy ngæåìi ta cáön âãún nhiãöu trçnh drivers. hay tæì dæåïi lãn. sau âoï ghi nháûn caïc kãút quaí tênh âæåüc båíi M âãø so saïnh våïi caïc kãút quaí chåì âåüi.2. v. sau âoï thæí nghiãûm phiãn baín naìy. PHAN HUY KHAÏNH biãn soaûn 95 . âæåüc goüi laì trçnh driver. Phæång phaïp “big bang“ Ngæåìi ta xáy dæûng mäúi liãn hãû giæîa caïc âån thãø âãø taûo thaình mäüt phiãn baín hãû thäúng hoaìn chènh. mäüt trçnh stubs cho táút caí caïc âån thãø cuía hãû thäúng. Âån thãø M Hçnh 4. Phæång phaïp “big bang” nguy hiãøm : táút caí caïc sai soït coï thãø âäöng thåìi xuáút hiãûn. Duìng trçnh driver âãø goüi thæûc hiãûn M Säú læåüng caïc trçnh stubs vaì caïc trçnh drivers cáön thiãút âãø tiãún haình thæí nghiãûm caïc âån thãø phuû thuäüc vaìo thæï tæû caïc âån thãø âæåüc thæí nghiãûm. ngæåìi thæí nghiãûm seî tiãún haình sàõp xãúp daîy âaî nháûp bàòng tay âãø thay thãú cho thuí tuûc sàõp xãúp vàõng màût. 2.2. Vç váûy thæåìng ngæåìi ta sæí duûng caïc phæång phaïp têch håüp tæì trãn xuäúng. 1. TS.v. Trçnh driver goüi M âãø M thæûc hiãûn trãn caïc dæî liãûu thuäüc táûp dæî liãûu thæí. Hån næîa phæång phaïp naìy âoìi hoíi mäüt læåüng täúi âa caïc trçnh drivers vaì caïc trçnh stubs. âån thãø goüi tåïi M nhæng vàõng màût phaíi âæåüc thay thãú båíi mäüt chæång trçnh.Thæí nghiãûm chæång trçnh 95 for i:= 1 to n do readln (T [i]) . sau âoï thæí nghiãûm chæång trçnh nháûn âæåüc tæì sæû liãn kãút giæîa âån thãø chênh vaì caïc âån thãø âæåüc goüi træûc tiãúp tæì âån thãø chênh. viãûc xaïc âënh tæìng läùi sai seî gàûp khoï khàn.. Khi âoï. Coï nhiãöu phæång phaïp thæí nghiãûm têch håüp. mäùi trçnh driver cho mäüt âån thãø. Phæång phaïp thæí nghiãûm tæì trãn xuäúng (Descendant hay Top-down Testing Method) Bàõt âáöu thæí nghiãûm âån thãø chênh. træì âån thãø chênh phaíi âæåüc thæí nghiãûm bàòng phæång phaïp thæí nghiãûm âån vë. væìa âæåüc tiãún haình âäúi våïi nhæîng âån thãø låïn hçnh thaình hãû thäúng chæång trçnh hoaìn chènh. II. Træåìng håüp 2 : nhæîng âån thãø goüi tåïi M khäng coï màût luïc thæí nghiãûm..4. Tiãúp theo. Thæí nghiãûm têch håüp Thæí nghiãûm têch håüp væìa nhàòm taûo mäúi liãn kãút giæîa caïc âån thãø.

3. Thæí nghiãûm tæì dæåïi lãn Mæïc N-1 Phæång phaïp tiãún toí ra æu âiãøm hån phæång phaïp luìi. do caïc trçnh driversæí duûng dãù viãút hån caïc trçnh stubs vaì coï caïc cäng cuû âãø taûo sinh tæû âäüng caïc trçnh drivers. .v . . Ngæåìi ta noïi âãún thæí nghiãûm cháúp nháûn (Acceptance testing).6. Level 1 Level 2 stubs Level 3 stubs Hçnh 4.v .2. laì thæí nghiãûm âäúi våïi saín pháøm cuäúi cuìng. âäü an toaìn. tênh tæång håüp våïi caïc âàûc taí. v.96 Cäng nghãû Pháön mãöm Phæång phaïp naìy chè cáön duìng mäüt trçnh driver duy nháút cho âån thãø chênh. II. thæï tæû têch håüp thæåìng bë raìng buäüc båíi thæï tæû coï màût cuía caïc âån thãø. tiãún haình taûi vë trê . Nhæîng thæí nghiãûm naìy âoìi hoíi nhiãöu thåìi gian. Màût khaïc.5. laì nhæîng thæí nghiãûm phuì håüp våïi saín pháøm cuäúi cuìng qua håüp âäöng âaî kyï våïi khaïch haìng (nhiãöu khi viãûc thæí nghiãûm naìy do khaïch haìng tiãún haình). sau âoï caïc chæång trçnh nháûn âæåüc båíi sæû liãn kãút giæîa mäüt âån thãø chè goüi âãún caïc âån thãø âaî âæåüc thæí nghiãûm våïi caïc âån thãø naìy. nhæng khäng cáön trçnh stub. Thæí nghiãûm hãû thäúng Váún âãö laì thæí nghiãûm pháön mãöm hoaìn chènh vaì pháön cæïng âãø âaïnh giaï hiãûu nàng. . nhæng cáön mäüt trçnh stub cho mäùi âån thãø coìn laûi. coìn âæåüc goüi laì thæí nghiãûm alpha vaì cuäúi cuìng laì thæí nghiãûm caìi âàût (Setup Testing). Daîy caïc thæí nghiãûm Level 2 Level 1 Level 2 Level 2 Level 2 Mæïc N Mæïc N Mæïc N Mæïc N Mæïc N Mæïc N-1 Mæïc N-1 Hçnh 4. Phæång phaïp thæí nghiãûm tæì trãn xuäúng 3. Phæång phaïp thæí nghiãûm tæì dæåïi lãn (Ascendant hay Bottom-Up Testing Method) Bàõt âáöu thæí nghiãûm caïc âån thãø khäng goüi âãún caïc âån thãø khaïc. Phæång phaïp naìy âoìi hoíi mäùi âån thãø mäüt trçnh driver. v.

II. PHAN HUY KHAÏNH biãn soaûn 97 . kãút quaí tæång æïng). . Coï hai kiãøu sai soït xaíy ra khi xem xeït : .Læûa choün caïc dæî liãûu cáön thæí nghiãûm.3. hay thoaïi lui (regresgion testing) nhàòm âãø xaïc minh nãúu caïc sai soït khaïc khäng âæåüc xæí lyï khi sæía chæîa. cáön læu giæî laûi nhæîng thæí nghiãûm âaî laìm trong quaï trçnh saín xuáút pháön mãöm.Mäüt kãút quaí sai laûi âæåüc xem nhæ laì âuïng. Kiãøn thæí nghiãûm naìy hay âæåüc duìng trong khi baío trç.Thæí nghiãûm chæång trçnh 97 cuía khaïch haìng (våïi caïc maïy tênh vaì hãû âiãöu haình hoü âang sæí duûng). Thæí nghiãûm häöi quy Ngæåìi ta coìn goüi caïc thæí nghiãûm tiãún haình sau khi sæía läùi laì thæí nghiãûm häöi quy. tæì âoï dáùn âãún mäüt cäng viãûc xem xeït kyî læåîng caïc kãút quaí máút thç giåì vaì mãût moíi (laìm haûn chãú kêch thæåïc caïc táûp dæî liãûu thæí). . II. Mäüt táûp håüp hæîu haûn caïc càûp (Giaï trë âæa vaìo.Mäüt kãút quaï âuïng coï thãø âæåüc hiãøu laì sai. viãûc phaït hiãûn ra caïc khiãúm khuyãút phaíi âæåüc laìm bàòng tay (by hand). TS. Dáùn dàõt caïc thæí nghiãûm Viãûc dáùn dàõt caïc thæí nghiãûm bao gäöm : . Ngæåìi ta goüi caïc thæí nghiãûm cho phiãn baín âáöu tiãn cuía pháön mãöm do khaïch haìng âæåüc læûa choün âàûc biãût tiãún haình laì thæí nghiãûm beta. âiãöu naìy giuïp cho viãûc xaïc minh tæû âäüng caïc kãút quaí thæí nghiãûm thoaïi lui. Phæång caïch ngæåìi ta hay laìm laì kãút håüp mäùi lãûnh cuía chæång trçnh våïi táûp håüp caïc thæí nghiãûm laìm chaûy chæång trçnh.4. Váún âãö låìi tiãn tri Mäüt pheïp thæí nghiãûm (check program) Mäüt táûp håüp hæîu haûn caïc giaï trë âæa vaìo. Khoï khàn gàûp phaíi laì trong säú nhæîng thæí nghiãûm âaî dàõt dáùn. Âãø tiãún haình hiãûu quaí caïc thæí nghiãûm naìy.Xaïc âënh kêch thæåïc cuía táûp dæî liãûu thæí (váún âãö kãút thuïc caïc TN). Viãûc dáùn dàõt caïc thæí nghiãûm keìm theo viãûc viãút caïc chæång trçnh bäø tråü nhæ laì caïc stubs vaì caïc drivers.2. Âãø traïnh xaïc minh bàòng tay.Xaïc âënh tênh âuïng âàõn hay khäng âuïng âàõn cuía caïc kãút quaí nháûn âæåüc sau khi thæûc hiãûn chæång trçnh âäúi våïi caïc dæî liãûu cuía táûp dæî liãûu thæí (Váún âãö låìi tiãn tri . cáön phaíi coï nhæîng âàûc taí khaí thi. .oracle). Trong træåìng håüp 1. cáön phaíi choün nhæîng thæí nghiãûm naìo chothæí nghiãûm thoaïi lui. hay mäüt phiãn baín khaïc cuía chæång trçnh (âiãöu naìy coï nguy cå laìm lan truyãön sai soït tæì phiãn baín naìy sang phiãn baín khaïc).

. Mäùi chæång trçnh tæång æïng våïi mäüt så âäö khäúi gäöm caïc cáúu truïc læûa choün vaì caïc cáúu truïc khäúi laì mäüt daîy täúi âa caïc lãûnh thæûc hiãûn (gäöm caïc lãûnh gaïn. else .1. Chuï yï ràòng tiãu chuáøn naìy khäng phaíi luän luän thoía maîn bàòng mäüt chæång trçnh coï thãø chæïa caïc lãûnh maì khäng thãø âæåüc thæûc hiãûn. váún âãö laì tçm ra âæåüc caïc giaï trë âæa ra kãút quaí tæång æïng våïi giaï trë âæa vaìo. Nhæ váûy. Thiãút kãú caïc pheïp thæí phaï huíy (Defect Testing) II. caïc lãûnh vaìo-ra. Caïc phæång phaïp dæûa trãn chæång trçnh Caïc phæång phaïp naìy coìn âæåüc goüi laì phæång phaïp coï cáúu truïc (Structural Testing) hay thæí nghiãûm häüp tràõng (white-box hay glass-box). .. .4. våïi mäüt phiãn baín cuía chæång trçnh.. Ngæåìi ta cuîng coï thãø váûn duûng caïc pheïp thæí cuî âaî læu giæî. .) maì khäng coï lãûnh reî nhaïnh. lãûnh goüi chæång trçnh con. Âiãöu naìy coï thãø laìm “ bàòng tay “ våïi mäüt âàûc taí khaí thi. Âáy laì mäüt tiãu chuáøn täúi thiãøu : Ngæåìi ta khäng xeït nhæîng thæí nghiãûm maì mäùi lãûnh cuía chæång trçnh khäng âæåüc thæc hiãûn êt nháút mäüt láön. Âiãöu naìy khäng phaíi luän luän laìm âæåüc. Chàóng haûn laìm sao coï thãø xaïc minh âæåüc ràòng maî sinh ra båíi mäüt trçnh biãn dëch laì âuïng âàõn. mäùi cung cuía så âäö täø chæïc cuía chæång trçnh âæåüc duyãût qua êt nháút mäüt láön : nghéa laì nãúu mäùi pheïp choün âæåüc thæûc hiãûn êt nháút mäüt láön cho mäùi giaï trë coï thãø (thuã hay fals e trong træåìng håüp gheïp reî nhaïnh logic). a) Phuí caïc lãûnh (caïc âènh) Mäüt pheïp thæí laì phuí (truìm) hãút caïc lãûnh cuía mäüt chæång trçnh nãúu laìm cho mäùi lãûnh cuía noï âæåüc thæûc hiãûn. nãúu chè thæí nghiãûm maî âoï maì thäi ? II. tiãu chuáøn naìy khäng phaíi luän cáön phaíi thoía maîn. Chuï yï ràòng duìng chæång trçnh xaïc minh tênh âuïng âàõn cuía kãút quaí khäng luän luän âån giaín : nãúu xaíy ra coï nhiãöu caïi ra âuïng tæång æïng våïi moüt caïi vaìo thç phaíi âàût kãút quía do chæång trçnh tênh ra dæåïi daûng quy tàõc træåïc khi xaïc minh tênh nháút quaïn våïi kãút quaí dæû kiãún trong táûp dæî liãûu thæí. Ngæåìi ta goüi caïc khäúi lãûnh laì caïc âáöu vaìo så âäö khäúi vaì caïc quyãút âënh laì caïc cung âi ra tæì mäüt cáúu truïc læûa choün.4. b) Phuí caïc quyãút âënh (caïc cung) Mäüt pheïp thæí phuí caïc quyãút âënh nãúu trong khi thæûc hiãûn.98 Cäng nghãû Pháön mãöm Trong træåìng håüp thæï hai. . våïi cuìng nhæîng váún âãö âaî gàûp trong træåìng håüp âáöu. chênh chæång trçnh âang chaûy tæû phaït hiãûn ra caïc khiãúm khuyãút. Vê duû : if A > 0 then if A ≥ 0 then .

PHAN HUY KHAÏNH biãn soaûn 99 . e) Xaïc âënh dæî liãûu cho pheïp phuí läü trçnh thæûc hiãûn âàûc biãût Giaí thiãút ràòng våïi moüi lãûnh P cuía chæång trçnh vaì moüi quyãút âënh S. tênh âiãöu kiãûn âáöu yãúu nháút tæång æïng (hoàûc mäüt âiãöu kiãûn âáöu maûnh hån).Thæí nghiãûm chæång trçnh 99 c) Phuí caïc âiãöu kiãûn Ta xeït mäüt chæång trçnh chæïa cáúu truïc reî nhaïnh logic gäöm caïc lãûnh not. S). Q = false. end vaì or. d) Phuí caïc läü trçnh thæûc hiãûn chæång trçnh (path testing) Mäüt pheïp thæí phuí caïc läü trçnh chaûy chæång trçnh nãúu gáy ra viãûc thæûc thi mäùi läü trçnh thæûc hiãûn chæång trçnh. • TS. tênh âæåüc mäüt cäng thæïc E sao cho caïc dæî liãûu cuía chæång trçnh thoía maîn E nãúu vaì chè nãúu viãûc thæûc hiãûn cuía chæång trçnh âi theo läü trçnh âaî choün. Vê duû coï thãø phuí caïc quyãút âënh bàòng caïch thæûc hiãûn pheïp læûa choün P vaì Q våïi : P = true. âiãöu naìy khäng cho pheïp phán biãût pheïp reî nhaïnh A or B. Q seî âæåüc tênh toaïn våïi : A true true false false B true false true false Pheïp phuí caïc âiãöu kiãûn cho pheïp cuíng cäú pheïp phuí caïc quyãút âënh. Q = true vaì P = false. Phæång phaïp naìy âæåüc duìng âãø âënh nghéa pheïp thæí phuí caïc quyãút âënh cuía mäüt chæång trçnh : • • Læûa choün mäüt táûp håüp caïc läü trçnh phuí caïc quyãút âënh. Nhæ váûy mäüt biãøu thæïc coï hai toaïn haûng P. coï thãø tênh ptpre (P. Âiãöu naìy coï thãø thæûc hiãûn bàòng ta. âiãöu kiãûn âáöu yãúu nháút æïng våïi P vaì S. Ngæåìi ta coï thãø våïi moüi läü trçnh cuía chæång trçnh. hay chæïng minh mäüt caïch saïng taûo cäng thæïc xE. Thäng thæåìng ngæåìi ta xáy dæûng pheïp thæí phuí caïc läü trçnh thæûc hiãûn coï säú læåüng ≤ mäüt hàòng âaî cho. Våïi mäùi läü trçnh. Nhæ váûy chè cáön tçm ra caïc dæî liãûu laìm thoía maîn E âãø coï pheïp thæí phuí läü trçnh âaî choün. E khäng laì sai nãúu vaì chè nãúu läü trçnh âaî choün laì läü trçnh thæûc thi. Mäüt pheïp thæí phuí caïc âiãöu kiãûn nãúu viãûc thæûc hiãûn chæång trçnh keïo theo sæû tênh giaï trë cuía biãøu thæïc naìy cho moüi giaï trë logic coï thã. Khäng täön taûi pheïp thæí nhæ váûy nãúu chæång trçnh coï vä haûn läü trçnh thæûc hiãûn trong træåìng håüp täøng quaït. Tçm caïc dæî liãûu thoía maîn caïc âiãöu kiãûn âiãöu naìy. Âàûc biãût.

ngay caí khi táûp håüp dæî liãûu laì hæîu haûn thç thåìi gian thæûc hiãûn chæång trçnh cho caïc thæí nghiãûm toaìn thãø laì quaï låïn trong pháön låïn træåìng håüp. goüi laì C.. Mäüt nàm coï 365 x 24 x 3600s = 31536000s. våïi x nguyãn giæîa 0 vaì 231 Våïi thåìi gian mäüt thæí nghiãûm laì 1s. ngæåìi ta phán biãût caïc sæí duûng trong caïc lãûnh khäng phaíi laì læûa choün. 2. Trong caïc sæí duûng. Ngæåìi ta goüi sæí duûng laì mäüt træåìng håüp maì giaï trë cuía biãún âæåüc sæí duûng (vê duû : y:= x+y âäúi våïi biãún x). II. maì chè laìm viãûc våïi âàûc taí chæïc nàng cuía chæång trçnh. Ngæåìi ta coï thãø thiãút kãú táûp dæî liãûu thæí træåïc khi viãút chæång trçnh. caïc sæí duûng trong caïc lãûnh læûa choün. readln(x) . Vê duû : ⎯ 1.22 x 1018 Thåìi gian thæí nghiãûm toaìn thãø laì trãn 292 471 nàm. gáy ra viãûc thæûc thi måïi läü trçnh giæîa mäüt âënh nghéa x vaì mäüt C-sæí duûng âáöu tiãn cuîa x.2. Säú læåüng dæî liãûu laì : 231 x 231 = 262 ≈ 9.4. Caïc phæång phaïp dæûa trãn âàûc taí Nhæîng phæång phaïp naìy coìn âæåüc goüi laì thæí nghiãûm chæïc nàng (funchæång trçnhional testing). Mäüt pheïp thæí laì phuí caïc C-sæí duûng nãúu våïi mäùi biãún x. âiãöu naìy chè laìm âæåüc nãúu táûp håüp dæî liãûu thæí laì hæîu haûn. ngæåìi ta khäng chuï yï âãún chæång trçnh. Thæí nghiãûm pheïp cäüng caïc soï nguyãn giæîa 0 vaì 231 Thåìi gian thæí nghiãûm mäüt pheïp cäüng laì 1 µs.100 Cäng nghãû Pháön mãöm f) Phuí caïc luäöng dæî liãûu Våïi mäùi biãún cuía chæång trçnh. vaì mäüt giaï trë læûa choün. våïi C : calculus. Váûy thåìi gian mäüt thæûc nghiãûm toaìn thãø laì ≈ 68 nàm. b) Caïc thæí nghiãûm båíi caïc låïp tæång âæång (Equivalence partioning) Nguyãn lyï : Phán hoaûch táûp håüp dæî liãûu thaình mäüt säú hæîu haûn låïp vaì læûa mäüt phán tæí (hay mäüt máùu phán tæí) trong mäùi låïp. ha thæí nghiãûm naìy. ngæåìi ta goüi âënh nghéa laì mäüt træåìng håüp cuía biãún âoï. våïi P : Predicate. mäüt giaï trë âæåüc gaïn cho biãún (vê duû : x:=1.. Tênh √ x.sæí duûng. våïi mäùi biãún x gáy ra viãûc thæûc thi mäùi läü trçnh giæîa mäüt âënh nghéa x. Mäüt pheïp thæí laì phuí caïc P-sæí duûng nãúu. khi âoï máút 231 = 2147483648 s.). a) Caïc thæí nghiãûm toaìn thãø (Exhaustive Testing) Ngæåìi ta thæí nghiãûm chæång trçnh våïi táút caí dæî liãûu coï thãø vãö màût lyï thuyãút. Ngæåìi ta âàût trong cuìng mäüt låïp caïc . Thæûc tãú. goüi laì P.sæí duûng.

ngæåìi ta chè coï thãø nháûn âæåüc dæî liãûu âuïng.. PHAN HUY KHAÏNH biãn soaûn 101 . .v . II. . sau âoï hoaìn thiãûn pheïp thæí nghiãûm båíi caïc tiãu chuáøn cáúu truïc (bao boüc caïc lãûnh. chàóng haûn luáût âäöng âãöu. hoàûc båíi caïc vàn phaûm phi ngæî caính.4. Vê duû. chuïng âæåüc âàûc taí båíi caïc ätomat hæîu haûn. dãù tiãún haình nhæng thæåìng laì keïm hiãûu quaí.Thæí nghiãûm chæång trçnh 101 dæî liãûu âæåüc cho laì phuì håüp våïi chæång trçnh theo caïch âàûc taí. v.3. ngæåìi ta thæåìng xáy dæûng pheïp thæí nghiãûm bàòng caïch phäúi håüp caïc thæí nghiãûm chæïc nàng vaì thæí nghiãûm cáúu truïc : ngæåìi ta bàõt âáöu thæí nghiãûm chæïc nàng træåïc (ngay khi âàûc taí yãu cáöu). v. d) Caïc thæí nghiãûm ngáùu nhiãn (Random Testing) Âáy laì táûp dæî liãûu thæí sæí duûng caïc dæî liãûu láúy ngáùu nhiãn.4. caïc cung.4. thç táûp håüp daîy caïc haình âäüng coï thãø âæåüc âënh nghéa båíi mäüt ätämat hæîu haûn.. Coìn nãúu kãút thuïc muäün quaï thç laûi náng cao giaï thaình saín pháøm. caïc läü trçnh coï âäü daìi bë chàûn. âiãöu naìy laûi laì mäüt váún âãö hoïc buïa (vç ràòng buì cuía mäüt ngän ngæî PNC chæa chàõc âaî laì PNC). Caïc tiãu chuáøn kãút thuïc thæí nghiãûm Váún âãö âàût ra laì khi naìo thç kãút thuïc thæí nghiãûm ? hay cuû thãø hån laì xaïc âënh phaûm vi thæí nghiãûm nhæ thãú naìo ? Nãúu kãút thuïc thæí nghiãûm såïm thç coï thãø chæa tçm hãút läùi trong chæång trçnh. Sau âáy laì mäüt säú tiãu chuáøn : TS. Ngæåìi ta coï thãø âënh nghéa caïc táûp dæî liãûu thæí phuí caïc traûng thaïi âaût âæåüc.) khi coï âæåüc chæång trçnh. tuán theo luáût xaïc suáút.v . Kãút luáûn Hiãûn nay. Chuï yï ràòng luïc naìy. II. c) Thæí nghiãûm âënh hæåïng båíi cuï phaïp (Syntax Controlled Testing) Khi dæî liãûu laì táûp håüp caïc chuäùi kyï tæû (caïc ngän ngæî láûp trçnh). ngæåìi ta coï thãø xáy dæûng pheïp thæí phuí caïc quy tàõc cuía vàn phaûm (mäùi quy tàõc âæåüc aïp duûng êt nháút mäüt láön âãø tiãún haình mäüt thæí nghiãûm). . Chuï yï cáön thæí nghiãûm caïc dæî liãûu nàòm åí phaûm vi giaïp ranh giæîa caïc låïp tæång âæång âãø phaït hiãûn caïc läùi sai kiãøu ≤ thæåìng láùn våïi <. nhæ caïc hãû âiãöu haình. viãûc nháûn âæåüc caïc dæî liãûu sai båíi cuìng phæång phaïp cáön thiãút phaíi viãút mäüt vàn phaûm saín sinh ra táûp håüp caïc dæî liãûu sai. bao boüc caïc quyãút âënh. Khi táûp håüp dæî liãûu âæåüc âënh nghéa båíi mäüt vàn phaûm vi ngæî caính. nãúu pháön mãöm âæåüc thæí nghiãûm coï tênh tæång taïc qua laûi. Nhæîng dæî liãûu naìy coï thãø cuìng gáy ra khiãúm khuyãút trong cuìng tçnh huäúng. .

Cäng nghãû Pháön mãöm Thæåìng thç mäüt chæång trçnh låïn bao giåì cuîng coï läùi. 3. Sau âáûy. Càn cæï vaìo kinh nghiãûm cuía caïc dæû aïn tæång tæû âaî hoaìn táút. 5. Måí âáöu Caïc pheïp thæí nghiãûm thäúng kã (Statistical Testing) nhàòm âãø âo âäü tin cáûy (reliability) cuía pháön mãöm. 4. Dæìng khi khäng coìn gáy ra âæåüc khiãúm khuyãút. . æåïc læåüng tyí lãû % sai soït phaûm phaíi trong caïc giai âoaûn phaït triãøn pháön mãöm vaì taûi giai âoaûn thæí nghiãûm maì nhæîng sai soït naìy âæåüc phaït hiãûn. Âãø tiãu chuáøn naìy coï hiãûu læûc thç phaíi âënh læåüng âæåüc táûp håüp caïc dæî liãûu thæí træåïc khi tiãún haình thæí nghiãûm. Mäüt pheïp thæí laì “täút” nãúu diãût âæåüc 100% (95%. nghéa laì âo xaïc suáút chaûy äøn âënh vaì âuïng âàõn trong nhæïng âiãöu kiãûn sæí duûng cho træåïc.102 1.v . ngæåìi ta chè quan tám âãún nhæîng khiãúm khuyãút do läùi pháön mãöm gáy nãn. Ngæåìi ta goüi khiãúm khuyãút (failure) laì nhæîng hiãûn tæåüng báút thæåìng xaíy ra laìm hãû thäúng âang thæûc thi dáùn âãún nhæîng hiãûu quaí khäng phuì håüp våïi âàûc taí ban âáöu.5.) caïc “âäüt biãún” âoï. Váún âãö : Læa choün tuìy tiãûn cuía tiãu chuáøn.1. Caïc pheïp thæí nghiãûm thäúng kã II. Mäüt pheïp thæí nghiãûm bao boüc caïc quyãút âënh (hay 80% cuía caïc cung) khäng gáy ra khiãúm khuyãút. æåïc læåüng tyí lãû % caïc sai soït âæåüc phaït hiãûn båíi thæí nghiãûm. Thæí nghiãûm chæìng 70 sai soït khäng âæåüc phaït hiãûn hay sau mäüt thåìi haûn 3 thaïng khäng xaíy ra. tiãu chuáøn naìy toí ra phi thæûc tãú. v.5. Phæång phaïp caïc âäüt biãún (Mutant method) Ngæåìi ta thay âäøi chæång trçnh bàòng caïch âæa vaìo caïc läùi. Caïc thæí nghiãûm phaï huíy khäng cho pheïp âaïnh giaï âæåüc tênh tin cáûy cuía mäüt chæång trçnh vç ràòng caïc thæí nghiãûm phaï huíy khäng tênh âãún caïc âiãöu kiãûn sæí duûng nhæ phæång phaïp naìy. Váún âãö : Laìm sao æåïc læåüng âæåüc säú sai soït âaî giaím theo caïch coï yï nghéa ? 6. . Váún âãö : Caïc sai soït âæa vaìo coï phaíi laì nhæîng sai soït thæûc tiãùn (coï thæûc)? II. Thæí nghiãûm âãún khi säú læåüng sai soït tçm tháúy khäng coìn giaím theo mäüt caïch coï yï nghéa næîa. . Váún âãö : Æåïc læåüng säú læåüng sai soït trong chæång trçnh. 2. Mäüt khiãúm khuyãút coï thãø xaíy ra do pháön cæïng hoàûc do mäüt sai soït trong chæång trçnh. Caïc chæång trçnh bë thay âäøi âæåüc goüi laì caïc “âäüt biãún”. Dæìng khi thåìi gian (hay kinh phê) gia haûn cho thæí nghiãûm âaî hãút. hån næîa máu thuáùn våïi muûc âêch cuía caïc thæí nghiãûm phaï huíy.

Tæì mäüt màût càõt sæí duûng âaî cho. ngæåìi ta seî chè khai triãøn caïc mä hçnh âäüc láûp våïi thåìi gian. ngæåìi ta âënh nghéa xaïc suáút mäüt láön chaûy cho mäüt kãút quaí âuïng vaì xaïc suáút mäüt khiãúm khuyãút. ngæåìi ta âënh nghéa âäü tin cáûy (reliability) cuía mäüt chæång trçnh nhæ laì xaïc suáút cuía sæû kiãûn “ láön chaûy sau cuía chæång trçnh laì âuïng “. Luïc naìy âäü tin cáûy laì mäüt haìm cuía thåìi gian. hoàûc sæí duûng sau mäüt thåìi gian trung bçnh naìo âoï âãún khi xaíy ra khiãúm khuyãút (âäúi våïi mä hçnh phuû thuäüc vaìo thåìi gian). Våïi mäüt mä hçnh âäüc láûp våïi thåìi gian. TS. Thæåìng ngæåìi ta sæí duûng âaûi læåüng liãn quan âãún âäü tin cáûy laì säú láön sæí duûng trung bçnh cho âãún khi xaíy ra khiãúm khuyãút (âäúi våïi mä hçnh âäüc láûp våïi thåìi gian). mäùi dæî liãûu coï thãø âæåüc cuía chæång trçnh seî cho mäüt xaïc suáút naìo âoï. = 1 . nghéa laì 1. thç phaíi sæía chæîa. Coìn chaûy trçnh debugger laì âãø sæía caïc läùi vãö thiãút kãú. sæû xuáút hiãûn thæåìng xuyãn caïc khiãúm khuyãút do caïc sai soït khaïc nhau gáy ra laì ráút biãún âäüng : mäüt säú sai soït gáy ra thæåìng xuyãn caïc khiãúm khuyãút. Tiãúp theo âáy.xaïc suáút cuía mäüt khiãúm khuyãút.xaïc suáút mäüt khiãúm khuyãút. Khi xuáút hiãûn mäüt khiãúm khuyãút. coìn âæåüc goüi laì tyí suáút khiãúm khuyãút. Nãúu ngæåìi ta åí trong nhæîng âiãöu kiãûn sæí duûng chæång trçnh. Âaûi læåüng liãn quan âãún âäü tin cáûy MTTF (Mean Time To Failure : thåìi gian trung bçnh âãø xaíy ra khiãúm khuyãút) âæåüc tênh nhæ sau : Trong mä hçnh âäüc láûp våïi thåìi gian : Âäü äøn âënh = xaïc suáút mäüt láön chaûy âuïng. Viãûc thæûc thi mäüt pháön mãöm våïi mäüt dæî liãûu cäú âënh træåïc laì mäüt quaï trçnh coï tênh xaïc âënh gáy ra hoàûc laì mäüt kãút quaí âuïng. coï thãø khäng bao giåì xaíy ra trãn thæûc tãú. Sæía chæîa caïc hæ hoíng thuäüc vãö pháön cæïng laì âãø thay thãú nhæîng chi tiãút hæ hoíng.Thæí nghiãûm chæång trçnh 103 Trong nhæîng âiãöu kiãûn sæí duûng âaî cho. thiãút láûp laûi sæû váûn haình äøn âënh cuía thiãút bë nhæ træåïc. Caïc mä hçnh phuû thuäüc vaìo thåìi gian thæåìng âæåüc sæí duûng cho caïc pháön mãöm tæång häù (nhæ laì caïc hãû âiãöu haình). hoàûc laì mäüt khiãúm khuyãút. nãúu laì mäüt khiãúm khuyãút vãö pháön cæïng. PHAN HUY KHAÏNH biãn soaûn 103 . nhæîng sai soït khaïc thç ráút hiãúm. Táûp håüp caïc dæî liãûu cuìng xaïc suáút sæí duûng nhæ váûy âæåüc goüi laì mäüt máùu sæí duûng (use pattern) cuía chæång trçnh. Våïi mäüt mä hçnh phuû thuäüc thåìi gian. ngæåìi ta âënh nghéa âäü tin cáûy nhæ laì mäüt xaïc suáút cuía sæû kiãûn “chæång trçnh chaûy âuïng âàõn trong thåìi gian t”. tàng âäü tin cáûy cuía pháön mãöm. nãúu laì mäüt khiãúm khuyãút vãö pháön mãöm thç phaíi chaûy trçnh sæía läüi debugger.

a) Phæång phaïp træûc tiãúp Giaí thiãút ràòng trong khi tiãún haình n pheïp thæí.Âäü äøn âënh). nghéa laì caïc thæí nghiãûm ngáùu nhiãn thuìy theo máùu sæí duûng âaî choün. maì chaûy trçnh debugger. âiãöu naìy khäng coï nghéa). R vaì x thoaí maîn : 0 < R < 1 vaì 0 < x < 100 Caïc tham säú R vaì x cuîng nhæ quy caïch vãö kãút quaí âæåüc cäú âënh træåïc.2. . II. Hån næîa. b) Phæång phaïp thæí nghiãûm giaí thuyãút (Hypothesis Testing) Váún âãö laì xáy dæûng mäüt táûp håüp caïc pheïp thæí nghiãûm maì kãút quaí âæåüc áún âënh træåïc cho pheïp khàóng âënh hay baïc boí âäü äøn âënh cuía pháön mãöm âang xeït coï mäüt giaï trë R våïi mäüt âäü tin cáûy x%. thç chæång trçnh seî bë thay âäøi vaì viãûc æåïc læåüng seî chè coìn håüp thæïc mäüt caïch coï âiãöu kiãûn khi giaí thiãút vãö cháút læåüng cuía quaï trçnh debugger.104 MTTF Cäng nghãû Pháön mãöm = säú láön sæí duûng trung bçnh cho âãún khi xaíy ra khiãúm khuyãút. Ta coï thãø æåïc læåüng âäü äøn âënh cuía pháön mãöm âang xeït båíi biãøu thæïc : 1−d/n Phæång phaïp naìy chè coï thãø âæa ra mäüt æåïc læåüng täút vãö âäü äøn âënh nãúu säú caïc khiãúm khuyãút d laì coï nghéa (chàóng haûn âäü tin cáûy laì 1 nãúu khi thæí nghiãûm khäng xaíy ra khiãúm khuyãút naìo. Ngæåìi ta noïi chæång trçnh laì âæåüc kiãøm nghiãûm nãúu coï âäü äøn âënh R. Tyí suáút khiãúm khuyãút laì nghëch âaío cuía MTTF. ngæåìi ta càn cæï vaìo kãút quaí cuía caïc pheïp thæí nghiãûm thäúng kã. = 1/ (1 . nãúu sau khi thæí nghiãûm. ta coï : 1 − c = xaïc suáút cho mäüt saín pháøm coï âäü äøn âënh tháúp hån âäü äøn âënh R. Æåïc læåüng âäü äøn âënh cuía mäüt pháön mãöm Âãø æåïc læåüng âäü äøn âënh hay khaí nàng váûn haình thäng suäút (reliability) cuía mäüt pháön mãöm. = 1 / xaïc suáút mäüt khiãúm khuyãút.5. ngæåìi ta gàûp d khiãúm khuyãút. Cho c = x/100.

Khaïi niãûm vãö âàûc taí pháön mãöm I. Vãö màût pháön mãöm. Âàûc taí coï caïc âàûc træng : • • • Tênh chênh xaïc (Correctness) Tênh træìu tæåüng (Abstraction) Tênh chàût cheî vãö màût Toaïn hoüc (Rigorousness) I. âàûc taí mä taí mäi træåìng hoaût âäüng vaì chæïc nàng cuía chæång trçnh. âàûc taí laì sæû mä taí caïc âàûc træng nhàòm diãùn âaût caïc yãu cáöu vaì caïc chæïc nàng cuía mäüt saín pháøm pháön mãöm cáön thiãút kãú.1.2. TS. Måí âáöu âàûc taí pháön mãöm I. caïc khaïi niãûm vaì caïc thuí tuûc naìo âoï cáön âãún khi phaït triãøn chæång trçnh. Theo IBM Dictionary of Computing (1994). âàûc taí laì sæû mä taí chi tiãút : Vãö màût pháön cæïng. Caïc phæång phaïp âàûc taí Ngæåìi ta thæåìng sæí duûng 3 phæång phaïp âàûc taí : âàûc taí phi (khäng) hçnh thæïc. caïc yãu cáöu ban âáöu. Ta thæåìng sæí duûng khi cáön phaït biãøu caïc baìi toaïn. âàûc taí laì mä taí caïch thiãút kãú. Âàûc taí liãn quan âãún caïc âäúi tæåüng. Nhæ váûy. (2) Trong lénh væûc phaït triãøn hãû thäúng.CHÆÅNG 5 Âàûc taí pháön mãöm I. Tuy phæång phaïp âàûc taí naìy khäng chàût cheî nhæng dãù hiãùu vaì dãù diãùn âaût.1. Âàûc taí pháön mãöm laì gç ? Âàûc taí (specification) âæåüc âënh nghéa trong tæì âiãøn tiãúng Viãût (1997) : “Mä taí tháût chi tiãút mäüt bäü pháûn âàûc biãût tiãu biãøu âãø laìm näøi báût baín cháút cuía toaìn thãø”. âàûc taí laì (1) mäüt daûng thæïc vàn baín chi tiãút cung cáúp caïc mä taí xaïc âënh vãö mäüt hãû thäúng nhàòm âãø phaït triãøn hay håüp thæïc hoaï. PHAN HUY KHAÏNH biãn soaûn 105 . âàûc taí hçnh thæïc vaì âàûc taí häùn håüp. Âàûc taí phi hçnh thæïc (informal specification) âæåüc diãùn âaût bàòng ngän ngæî tæû nhiãn vaì toaïn hoüc. âàûc taí cung cáúp thäng tin vãö caïc thaình pháön.1. khaí nàng vaì yãúu täú kyî thuáût cuía maïy tênh. Theo Computer Dictionary cuía Microsoft Press® (1994). caïch bäú trê thiãút bë vaì caïch xáy dæûng chæång trçnh cho hãû thäúng.1.

dãù hiãøu hån mäüt khi mä taí hçnh thæïc quaï phæïc taûp. Caïc tênh cháút cuía âàûc taí hçnh thæïc • âàûc taí mä taí nhæîng caïi phaíi laìm nhæng khäng phaíi mä taí laìm nhæ thãú naìo..Âån thãø hay âäúi tæåüng. Biãún âäøi mo mäüt ma tráûn vuäng A cáúp n × n vãö daûng tam giaïc trãn.106 Vê duû 1 : Cäng nghãû Pháön mãöm 1. tênh hiãûu quaí âaûi säú âæåüc xaïc âënh båíi caïc cäng cuû toaïn hoüc. Âàûc taí hçnh thæïc (formal specification) âæåüc diãùn âaût bàòng ngän ngæî âaûi säú vaì logic toaïn. Âàûc taí phaíi cho pheïp kiãøm tra âæåüc quaï trçnh phaït triãøn pháön mãöm (cháút læåüng vaì tênh tin cáûy) • • • Âàûc taí hçnh thæïc liãn quan âãún : . 2. Âàûc taí cho pheïp diãùn taí âáöy âuí mäüt váún âãö. Vê duû 2 1. n ≥ 1 : . Biãún âäøi mo mäüt ma tráûn vuäng A cáúp n × n vãö daûng tam giaïc trãn. Caïc thê duû minh hoüa Mä taí caïc cáúu truïc dæî liãûu : Cho ma tráûn vuäng A cáúp n × n. I.3.Thåìi gian . âaûi säú vaì logic.. Tçm nghiãûm cuía phæång trçnh f(x) = 0 våïi f(x) laì mäüt âa thæïc coï báûc cho træåïc sao cho våïi giaï trë thæûc x thç f(x) coï giaï trë bàòng 0. Tênh âaûi säú càn cæï trãn viãûc âënh nghéa caïc kiãøu dæî liãûu. chênh xaïc vaì khäng nháúp nhàòng (non-ambiguous). Tçm nghiãûm cuía phæång trçnh f(x) = 0 våïi f(x) laì mäüt âa thæïc coï báûc cho træåïc sao cho våïi giaï trë thæûc x thç f(x) coï giaï trë bàòng 0. Âàûc taí häùn håüp (Mixing Specification) phäúi håüp giæîa hai phæång phaïp : hçnh thæïc vaì phi hçnh thæïc. caïch viãút cäng thæïc. nghéa laì ma tráûn A coï caïc pháön tæí nàòm phêa trãn âæåìng cheïo chênh thç bàòng 0.Thao taïc .Cáúu truïc dæî liãûu vaì caïc haìm (kiãøu dæî liãûu) . nghéa laì ma tráûn A coï caïc pháön tæí nàòm phêa trãn âæåìng cheïo chênh thç bàòng 0. 2. Láûp trçnh thãø hiãûn tæåìng minh viãûc læûa choün caïch khai triãøn : nghiãn cæïu thuáût giaíi. Thæåìng mä taí phi hçnh thæïc nhàòm laìm giaíi thêch roî hån. ráút chàût cheî. giaím täúi thiãøu tênh phæïc taûp cuía hãû thäúng âang xeït.1.

Chäöng âéa træåïc khi chuyãøn Hçnh 5.1.. PHAN HUY KHAÏNH biãn soaûn 107 . Haîy chuyãøn chäöng n âéa naìy qua cäüt B theo nguyãn tàõc sau : 1.n.2.n.1 } Ma tráûn tam giaïc dæåïi : A0 = { ai j | ai j ≠ 0. ∀ i = 1.. j = 1.n . j = 1. cäüt j Bäún âènh (goïc) cuía ma tráûn A laì a11.1. Khäng âàût âéa to lãn âéa nhoí 3. ∀ i = 2.n } I. Cho chäöng n âéa n = 64 xãúp thaình hçnh thaïp åí cäüt A (låïn nháút dæåïi cuìng vaì nhoí dáön lãn trãn). Mäùi láön chè di chuyãøn mäüt âéa tæì cäüt naìy qua cäüt kia 2.j + 1 qua âæåìng cheïo phuû d2 Ma tráûn tam giaïc trãn : A0 = { ai j | ai j ≠ 0. ann vaì an1 Âæåìng cheïo chênh laì vector d1 = {aii | i = 1.n} Âæåìng cheïo phuû laì vector d2 = {ai..2.n.i ∧ ai j = 0.Âàûc taí 107 A = {ai j | i = 1.i .. j = 2. ngæåìi ta hæåïng âàûc taí vãö mäüt ngän ngæî láûp trçnh naìo âoï. Hçnh 5.. Láúy vë trê cäüt C âãø âàût taûm caïc âéa trung gian Sau âáy laì baìi toaïn Thaïp Haì näüi våïi n = 3 âéa.. ∀ i = j.n. Chäöng âéa sau khi chuyãøn (våïi7 láön xãúp) TS. n} Pháön tæí ai j âäúi xæïng våïi aj i qua âæåìng cheïo chênh d1 Pháön tæí ai j âäúi xæïng våïi an .n ∧ ai j = 0. ∀ i = 1..n} gäöm caïc pháön tæí ai j åí haìng i.i + 1 | i = 1. Âàûc taí vaì láûp trçnh Trong nhæîng træåìng håüp coï thãø. j = 1.. a1n... n . Vê duû vãö âàûc taí âãû qui cho baìi toaïn thaïp Haì näüi (Tower of Hanoi).. j = i.

1. B). B). Var i. ‘ -> ‘. B. B. A. Writeln(i:3. C. i:=i+1. B. ChuyãønCäüt(n-1. b) Caïch giaíi hçnh thæïc bàòng âàûc taí Goüi thuí tuûc chuyãøn n âéa tæì A qua B láúy C laìm trung gian (n > 0) laì : Haì_näüi (n. Chuyãøn_mäüt_âéa (A. 3.C:1). sau âoï chuyãøn âéa dæåïi cuìng tæì A sang B. A) End ta dãù daìng viãút caïc thao taïc trãn thaình thuí tuûc nhæ sau : Procedure ChuyãønCäüt(n. A.108 Cäng nghãû Pháön mãöm a) Caïch giaíi phi hçnh thæïc Chuyãøn n . A. A.1 âéa tæì A qua C láúy B laìm cäüt trung gian. C). A. A:1. Chuyãøn_mäüt_âéa_tæì_A_sang_C. B. . C: TãnCäüt). A. B. ChuyãønCäüt(n-1.1. Thãm biãún âãúm i âãø tênh säú bæåïc chuyãøn âéa. N: Integer. B). ta coï âàûc taí : Haì_näüi (n. C: TãnCäüt). Procedure ChuyãønCäüt(n. C) vaì thuí tuûc chuyãøn mäüt âéa tæì A qua B laì : Chuyãøn_mäüt_âéa(A. Type TãnCäüt = 1 . C.‘Chuyãøn mäüt âéa tæì ‘. C). B). Begin if n>0 then begin ChuyãønCäüt(n-1. End End. End End.A:1. chæång trçnh âáöy âuí nhæ sau : Program HanoiTower. A. C:1)..1 âéa tæì C qua B láúy A laìm cäüt trung gian theo caïch trãn. âæåüc viãút thaình lãûnh : Writeln(‘Chuyãøn mäüt âéa tæì ‘. Begin if n>0 then begin ChuyãønCäüt(n-1. C) = if n > 0 then begin Haì_näüi (n . Thao taïc Chuyãøn_mäüt_âéa_tæì_A_sang_C. C. B. Haì_näüi (n . B). B. C. A.‘ -> ‘. A. Tiãúp tuûc chuyãøn n . Khi âoï. Begin Write(‘Säú âéa cáön chuyãøn : ‘).

giaí sæí thåìi gian âãø chuyãøn mäüt âéa laì t giáy. Mäüt nàm coï 365 × 24 × 60 × 60 = 31 536 000 giáy.8494241735E+11 ≈ 5. ChuyãønCäüt.Chuyãøn mäüt âéa tæì 1 -> 2 5.8446744074E+19 × t giáy. 2. 3.1 láön. Chaûy chæång trçnh trãn seî cho kãút quaí nhæ sau : Säú âéa cáön chuyãøn : 4 1. i:=0. + 2n = 2n .Chuyãøn mäüt âéa tæì 3 -> 2 7. Readln End.Chuyãøn mäüt âéa tæì 1 -> 3 15.Chuyãøn mäüt âéa tæì 2 -> 3 10.Chuyãøn mäüt âéa tæì 1 -> 2 2. .Chuyãøn mäüt âéa tæì 1 -> 2 8. giaí sæí t = 10-2 giáy thç säú nàm cáön âãø chuyãøn 64 âéa laì : (1. Våïi n=64. goüi laì tçm tuáön tæû (giäúng tãûp tuáön tæû) TS.Chuyãøn mäüt âéa tæì 1 -> 3 9. Âàûc taí cáúu truïc dæî liãûu II. tæì âáöu tæì âiãøn.Chuyãøn mäüt âéa tæì 2 -> 3 13. . PHAN HUY KHAÏNH biãn soaûn 109 . cho âãún khi gàûp tæì cáön tra cæïu.Chuyãøn mäüt âéa tæì 2 -> 3 4. 4.1) × t = 1. Cáúu truïc dæî liãûu cå såí vectå II.8 tyí nàm ! Baìi táûp : 1. II.1.1. thç thåìi gian âãø chuyãøn hãút 64 âéa cuía baìi toaïn Thaïp Haì näüi seî laì : (264 .Chuyãøn mäüt âéa tæì 3 -> 1 12.1.Chuyãøn mäüt âéa tæì 3 -> 1 6.8446744074E+19 / 31536000) × 10-2 = 5.Âàûc taí 109 Readln(N). Cáön tra cæïu mäüt tæì åí mäüt trang naìo âoï báút kyì : Duyãût láön læåüt caïc tæì.Chuyãøn mäüt âéa tæì 1 -> 2 14. 5 trang 140-141 (Nguyãùn Xuán Huy).Chuyãøn mäüt âéa tæì 2 -> 1 11.Chuyãøn mäüt âéa tæì 2 -> 3 Trong træåìng håüp täøng quaït n âéa.Chuyãøn mäüt âéa tæì 1 -> 3 3. Dáùn nháûp Cho mäüt cuäún tæì âiãøn. säú bæåïc chuyãøn âéa seî laì : 20 + 21 + .

Trong tin hoüc. . âãø âån giaín ta viãút V[i].1...110 Cäng nghãû Pháön mãöm Nãúu tæì âiãøm âaî âæåüc sàõp xãúp ABC. j > i.4] = (21. pheïp truy nháûp V[i] seî cho giaï trë pháön tæí coï chè säú i cuía V.2.. khäng xaïc âënh. Coï thãø xem tæì âiãøn laì mäüt vectå cho pheïp tçm kiãúm ngáùu nhiãn mäüt tæì... 21.. 8) V[2] = 21... -33. . Mäüt pháön tæí cuía vectå laì càûp (i.. Mäüt vectå coï thãø âæåüc biãøu diãùn båíi táûp caïc pháön tæí cuía noï : (V[1]... Våïi ∀ i ∈ [1. V coï thãø räùng nãúu n = 0 Kyï hiãûu vectå båíi (V[1.n]. E) hoàûc E : V[1. V[i]) våïi i ∈ [1. V[4] = 6 nhæng V[0].n] : V[ i..1]. . -33...5] = (7.n].2. x2. 6) V[1.. n > 1 laì vectå âæåüc SXTT nãúu ∀ i ∈ [1. Truy nháûp mäüt pháön tæí cuía vectå Cho V[1. I = [1.n]..n]..3] = (7.n . V[7]. 8) Caïc vectå con : V[2.n] Vê duû : V[1. 21. . sau âoï tuìy theo tæì âaî gàûp maì tçm phêa træåïc hay phêa sau tæì âoï tæì cáön tra cæïu. hoàûc V nãúu khäng coï sæû hiãøu nháöm..n] laì vectå con cuía V[1.n]. hay kêch thæåïc. 21. 6. Mäüt vectå laì mäüt aïnh xaû V tæì khoaíng I ⊂ N vaìo E. V : I → E.. bäü nhåï maïy tênh cuîng xem laì mäüt vectå gäöm caïc ä nhåï læu træî dæî liãûu II. laì caïc giaï trë (træûc kiãûn) Vectå con : Ta goüi thu heûp cuía V trãn mäüt khoaíng liãn tiãúp cuía [1.. II. -33.5] = (7.Vectå V[1. coï thãø tçm ngáùu nhiãn mäüt tæì..j]. Âàûc taí hçnh thæïc Cho mäüt táûp giaï trë E vaì mäüt säú nguyãn n ∈ N.n]. 6..Vectå chè gäöm 1 pháön tæí (n = 1) laì vectå âæåüc SXTT.. räùng nãúu i > j Vê duû : V[1. V[n]) hay (x1. -33) v.Vectå räùng (n = 0) laì vectå âæåüc SXTT. n laì säú pháön tæí cuía V. xn) nãúu xi = V[i]. V[2]..v. Vectå âæåüc sàõp xãúp thæï tæû (SXTT) Ta noïi : .. ∀ [i] ≤ ∀ [i + 1] Coï thãø âënh nghéa âãû qui 3 : . Kãút quaí khäng xaïc âënh nãúu i ∉ [1.n]..

..n]. Type Vectå = anay [1.1 (1 < i ≤ n + 1) pháön tæí âáöu cuía V vaì khàóng âënh ràòng pháön tæí ∉ V[1. Begin if i < = n then begin Operation (V[i]).n]. våïi i ∈ [1..1] Xaíy ra hai træåìng håüp : i = n + 1 : pháön tæí ∉ V[1.Âàûc taí 111 V[1. pháöntæí ∉ V)} Var i: integer.. II.. n: integer).n]. ta sæí duûng mä taí dæî liãûu : Const n = 100 .i + 1] âæåüc SXTT. TS.. = vaì ≠ .n].1. kãút thuïc..3. {(n > 0) ⇒ (check.3..i].. Caïc thuáût toaïn xæí lyï vectå Duyãût vectå Cho V[1. a = V[j] a ∉ V[1. {T laì kiãøu cuía caïc pháön tæí cuía vectå} II. pháöntæí: T): Boolean. >. n: integer. pháön tæí ∉ V i ≤ n : laûi xaíy ra hai træåìng håüp : V[i] = pháön tæí : pháön tæí ∉ V[1.i].n] ⇔ ∀ j ∈ [1. i + 1. V[i] ≤ V[i + 1] ⇒ V[i. Scan (V. kãút thuïc. a < V[j] Ta cuîng coï cho caïc pheïp so saïnh ≤ ... Truy tçm tuáön tæû mäüt pháön tæí cuía vectå (sequential search) a) Vectå khäng âæåüc sàõp xãúp thæï tæû Láûp luáûn giaí sæí âaî xæí lyï i .i] âæåüc SXTT. n) {i := i + 1... a ≠ V[j] a < V[1..n] ⇔ ∀ j ∈ [1.n].1] Ta viãút thuáût toaïn khäng âãû qui nhæ sau : function check(V: Vectå.n] of T . Âãø xeït caïc thuáût toaïn xæí lyï vectå.i .i . tiãúp tuûc i := i + 1 vaì cho pheïp khàóng âënh laûi pháön tæí ∉ V[1. i. thuáût toaïn duyãût vectå âæåüc viãút âãû quy nhæ sau : Procedure scan (V: vectå. nãúu boí âãû qui } end end.. ≥ . PHAN HUY KHAÏNH biãn soaûn 111 .n .n] ⇔ ∃ j ∈ [1.1] Mäüt säú kyï hiãûu khaïc : a ∈ V[1.. pháöntæí ∉ V)} ∨ (not check. pháön tæí ∉ V V[i] ≠ pháön tæí : pháön tæí ∉ V[1.

Ta coï thãø viãút laûi thuáût toaïn dæåïi daûng âãû quy nhæ sau : function check(V:Vectå.. i. n: integer.1] < pháöntæí pháöntæí ≤ V[i. i coï thãø nháûn giaï trë báút kyì. i ≤ n} {((V[i] = pháöntæí) ∨ (i = n). i + 1.. phántæí ∉ V)} begin if n = 0 then check := false else if V[n] = phántæí then check := true else check := check (V.. i ≤ n) ⇒ (V[i] = pháöntæí. phántæí ∈ V[i. pháöntæí ∉ V[1. phántæí ∉ V[i. {n ≥ 0 ⇒ (check. tæì 1.i .1]. Vectå âæåüc sàõp xãúp thæï tæû Váún âãö laì kiãøm tra âàóng thæïc pháöntæí = V[i] khäng trong V âaî âæåüc sàõp xãúp ? Láûp luáûn : . i < n} i := i + 1.3.i].n. n.n:integer. pháöntæí ∉ V)} Check := (V[i] = pháöntæí) {(check. pháöntæí ∉ V) ∨ (Not check. phántæí) end. b) Vectå âæåüc sàõp xãúp thæï tæû Ta cáön tçm chè säú i ∈ [1. phántæí) end.n]) ∨ (Not check.n])} begin if i > n then check := false else if V[i] = phántæí then check := true else check := check (V.1] < pháöntæí ≤ V[i. {pháöntæí ∉ V[1. i ≤ n} while (V[i] <> pháöntæí) and (i < 1) do {pháöntæí ∉ V[1..i . pháöntæí ∉ V)} end. {pháöntæí ∉ V[1. phántæí: T): Boolean...112 Cäng nghãû Pháön mãöm begin i:= 1.. phántæí ∈ V) V (Not check. phántæí: T): Boolean. Khi goüi haìm.i .n] sao cho thoía maîn : V[1.i ..n] Hçnh 5.i .n] 1 i n V[1.1.. pháöntæí ∉ V) ∨ (V[i] ≠ pháöntæí. âàûc biãût i = 1 Træåìng håüp duyãût vectå tæì phaíi qua traïi. n ...1].. {n ≥ 0 ⇒ check.1]. ta khäng cáön duìng biãún i næîa : function check (V:Vectå.

1] < phán tæí âaî âæåüc khàóng âënh : xaíy ra hai træåìng håüp : i = n + 1 : kãút thuïc V[1.2.1 (1 ≤ i ≤ n + 1) phán tæí âáöu cuía V vaì V[1. tiãúp tuûc thæûc hiãûn : i := i + 1 âãø coï laûi khàóng âënh V[1.m] vaì V[m + 1.i] < phántæí } i := i + 1 ....1].. phántæí∈V) ∨ (¬checknum.i . phántæí∉V)} end {(checknum.. {V[1.m . PHAN HUY KHAÏNH biãn soaûn 113 ... {V[1.1] < phántæí.i -1] < phán tæí ≤ V[i.i] < phán tæí..i .n] âæåüc sàõp xãúp thæï tæû sao cho : V[1.n] < phán tæí.... V[m...i . pháöntæí ∉ V)} Var i: integer . V[i] ≤ V[i +1] Ta chia V thaình 3 vectå con V[1. phán tæí ∈ V) ∨ (Not checknum.1]. âaî tçm âæåüc i sao cho V[i.1] < phántæí } while (V[i] < phántæí) do {V[1.m . II.n] (n > 1) âaî âæåüc sàõp xãúp thæï tæû : ∀ i ∈ [1. V[i] ≥ phántæí } checknum := (V[i] = phántæí) {(checknum.Âàûc taí 113 Giaí sæí âaî xæí lyï i .n] Xaíy ra 3 træåìng håüp : ∈ V[1.1] nãúu phán tæí < V[m] phán tæí = V[m] ∈ V[m + 1.. phántæí∈V) ∨ (¬checknum. begin if phán tæí > V[n] then checknum := false { not checknum. phántæí:T): Boolean..1] ≤ V[m] ≤ V[m + 1. n > 0 ⇒ (checknum.. phántæí∉V)} end. Tçm kiãúm nhë phán (Binary search) a) Phæång aïn 1 Giaí sæí vectå V[1.n] chè coìn phaíi kiãøm tra phán tæí = V[i] ? V[i] <phán tæí : coï nghéa V[1. n:nguyãn.3. phán tæí ∉ V i ≤ n : laûi coï hai træåìng håüp måïi : V[i] ≥ phán tæí : kãút thuïc. phántæí ∉ V)} else begin {phántæí ≤ V[n]} i := 1 ..n] nãúu phán tæí > V[m] TS.i] < phán tæí} {V[1.. {V âæåüc SXTT..1] < phán tæí Ta coï thuáût toaïn nhæ sau : function checknum(V:vectå.i .m .n .

n].. Nhæ váûy.1] láúy sup := m ..1] < pháön tæí < V[sup + 1.n].n] coï kêch thæåïc bàòng nhau. Khi âoï kêch thæåïc cuía caïc vectå thuäüc daîy V1.. Ta seî choün m laì vë trê giæîa (nãúu n leí) âãø cho V[1. phántæí∈V)∨(not binary.inf . Vk seî láön læåüt âæåüc chia âäi taûi mäùi bæåïc : n.. V2.n]...114 Cäng nghãû Pháön mãöm luïc naìy ta tråí laûi baìi toaïn âaî xeït : tçm phán tæí trong vectå V[1..m ... {not OK.n] Khåíi âáöu.n]..1] ≤ V[m] ≤ V[m + 1. . V2. Vk = V[k. m OK : Boolean ..n]. Vê duû : nãúu n = 9000..sup] Täön taûi 3 khaí nàng nhæ sau : • • Pháön tæí = V[m] : kãút thuïc. n:integer. inf = sup+1) ⇒ (phán tæí ∉ V. n/2k . pháön tæí ∈ V Pháön tæí < V[m] : tiãúp tuûc tçm kiãúm trong V[inf.. seî coï täúi âa [ log2n] vectå con khaïc räùng. hoàûc choün m sao cho chuïng hån keïm nhau mäüt phán tæí..inf . Kãút thuïc nãúu phán tæí = V[m] Mäüt caïch täøng quaït. säú vectå con khaïc räùng täúi âa seî laì 13..... láön læåüt xaïc âënh daîy caïc vectå coï V1. ta coï vectå con V[inf..1] hoàûc V[m +1.1 âã coï laûi khàóng âënh pháön tæí < V[sup + 1. n/2.. sup.. ta âi âãún pheïp tçm kiãúm tuáön tæû âaî xeït åí trãn.m . (binary..sup] láúy inf := m + 1 âãø coï laûi khàóng âënh V[1.. .inf-1] < pháöntæí < V[sup+1.m . phán tæí ∉ V} .1] < pháön tæí • Nhæ váûy caí hai træåìng håüp : V[1.n] Xaíy ra hai træåìng håüp : • inf > sup (inf = sup + 1) (V[1..m] Pháön tæí > V[m] : tiãúp tuûc tçm kiãúm trong V[m + 1.1.. phántæí:T): Boolean.. láúu inf := 1 vaì sup := n Ta coï thuáût toaïn nhæ sau : function binary {V âæåüc SXTT ⇒ Var inf.1] < pháöntæí < V[sup + 1.inf . sup] sao cho : V[1.. vç 213 = 8192 Xáy dæûng thuáût toaïn : Sau mäüt säú bæåïc.. . V2 = V[2.m . begin OK : false .. Vk sao cho mäùi Vi coï kêch thæåïc nhoí hån kêch thæåïc cuía vectå con træåïc âoï Vi ...1 Âãø yï ràòng nãúu choün V1 = V[1. phántæí∉V)} : integer . . (V:vectå. kãút thuïc) • inf ≤ sup : m = (inf + sup) div 2 khi âoï ta coï V[inf.1] vaì V[m + 1..

begin if inf > sup then NhëPhán:= false else begin m := (inf + sup) div 2 . if V[m] = phántæí then OK := true {OK.phántæ:T):boolean. sup báút kyì.1] < pháöntæí ≤ V[inf.Âàûc taí 115 inf := 1 .. {V[sup + 1.n]) ∨ (tçm tháúy.n]} while (inf ≤ sup) and (not OK) do begin m := (inf + sup) div 2 .inf-1]<phántæí} else sup := m . m .1.. phántæí ∈ V) ⇒ (¬ tçm tháúy.inf...inf .. Chàóng haûn.. Viãút chæång trçnh trãn dæåïi daûng âãû quy : function NhëPhán(V:Vectå.sup:integer. thay vç kiãøm tra âàóng thæïc V[m] = pháöntæí. sup := n . {(V âæåüc SXTT ⇒ (NhëPhán. phántæí ∈ V) ⇒ (¬ tçm tháúy. 1. sup..inf . phántæí ∈ V)} Nhë phán := OK end .1] < phántæí < V[sup+1.phántæí∉V)} Var m : integer . thäng thæåìng âæåüc goüi båíi doìng lãûnh : NhëPhán (V.n] Ssau âoï kiãøm tra pháöntæí = V[inf] âãø coï cáu traí låìi.1] < phántæí < V[inf.. n. {(inf = sup + 1) ∨ (tçm tháúy). phántæí∈V) ∨ ¬ NhëPhán. (¬ tçm tháúy. m+1. PHAN HUY KHAÏNH biãn soaûn 115 .n] > phántæí} {(V[1.. Haìm naìy coï thãø âæåüc goüi våïi caïc giaï trë inf.inf ..n].inf .1 .1] < phántæí < V[sup + 1.n]) ∨ (tçm tháúy. if V[m] = phántæí then NhëPhán:= true else if V[m] < phántæí then NhëPhán:= NhëPhán(V..1] < phántæí < V[sup + 1. TS. phántæí ∈ V)} end. phántæí ∈ V} else {not OK} if V[m]<phántæí then inf:= m+1 {V[1. V[1. V[1. inf. pháöntæí) b) Phæång aïn 2 Coï thãø tçm ra nhæîng phæång aïn khaïc cho thuáût toaïn tçm kiãúm nhë phán..inf . ta kiãøm tra khàóng âënh : V[1. not OK) ∨ (tçm tháúy. {V[1. phántæí) end end . phántæí ∉ V) ∨ (tçm tháúy. phántæí) else NhëPhán:= NhëPhán(V.

n > 0) ⇒ (m ∈ [1..1] < phán tæí} {V[1.116 Cäng nghãû Pháön mãöm Màût khaïc.... begin if phán tæí > V[n] then nhë phán := 0 else begin inf := 1 .n] NhëPhán = m.1] < phán tæí ≤ V[sup.inf . V[1. sup := n ..inf . Nãúu inf = 1.1] < phántæí ≤ V[sup. inf. {(inf = sup. if pháöntæî ≤ V[m] do sup := m {phátæí ≤ V[sup.. coï thãø thay âäøi giaï trë traí vãö cuía haìm tçm kiãúm nhë phán båíi vë trê cuía phán tæí trong vectå.n]} if phántæí = V[inf] then NhëPhán:= inf else NhëPhán:= 0 end end . function NhëPhán(V:vectå.n].. {(V âæåüc SXTT.n] ⇒ (V[1. V[m] = phántæí) V (NhëPhán = 0..1] < phán tæí ≤ V[inf..n]} while inf < sup do begin m := (inf + sup) div 2 .n:integer. khàóng âënh coï daûng V[1.. {V[1. sup : integer .inf .n]} end .phántæí: T): integer .1] < phántæí ≤ V[inf..inf . .n]} else inf := m + 1 {V[1. bàòng 0 nãúu phán tæí ∉ V.0] < pháöntæí ≤ V[sup...n] vaì âæåüc viãút goün pháöntæí ≤ V[1..inf . phán tæí ∉ V)} Var m.

Kiãøm tra xáu räùng (is empty) . ngæåìi ta coìn sæí duûng caïc kiãøu sau : .Caïc mä hçnh âàûc biãût . Cuï phaïp cuía âàûc taí âaûi säú Vê duû : Xáy dæûng kiãøu string cho caïc xáu kyï tæû cuìng caïc pheïp toaïn thäng duûng trãn xáu nhæ sau : . Ngän ngæî âàûc taí traûng thaïi liãn quan âãún : .Âàûc taí 117 III.1.Haûng (term) våïi caïc biãún ..Cuï phaïp (syntax) .Kiãøm tra hai xáu bàòng nhau khäng (=) .Thãm mäüt kyï tæû vaìo xáu (add to) .Trêch kyï tæû âáöu tiãn cuía xáu (frist) Âãø âënh nghéa kiãøu string. Måí âáöu Âàûc taí âaûi säú khäng mä taí caïc yãúu täú liãn quan âãún thåìi gian thæûc thi cuîng nhæ traûng thaïi.Taûo xáu räùng måïi (pheïp toaïn new) . PHAN HUY KHAÏNH biãn soaûn 117 .Dáúu kê (signature) cuía mäüt kiãøu âaûi säú træìu tæåüng .Ngæî nghéa (Semantic) ..bool : kiãøu giaï trë logic TS. Âàûc taí âaûi säú : mä hçnh hoïa phaït triãøn pháön mãöm (Pháön naìy chè phuûc vuû tham khaío) III.Láúy âäü daìi xáu .Caïc thuäüc tênh (Properties) Hçnh veî Ngæî nghéa cuía caïc âàûc taí âaûi säú liãn quan âãún : .nat : kiãøu cuía säú nguyãn .char : kiãøu cuía kyï tæû .Phæång trçnh vaì caïc tiãn âãö .Gheïp xáu (append) .

Char. Mäùi khäúi gäöm mäüt säú khai baïo ngàn caïch nhau båíi caïc tæì khoïa (coï gaûch chán) Âäúi våïi khäúi giao tiãúp (interface). append _ _ : String. _ = _ : string. Tãn xuáút hiãûn trong mäüt dáúu kê gäöm hai loaûi laì coï êch (internest) vaì bäø tråü (auxiliary) tuìy theo vai troì cuía chuïng. string → string . string → string .Tãn caïc pheïp toaïn våïi viãûc chè roî miãön xaïc âënh (domain) vaì miãön trë (range) nhæ sau : tãn pheïp toaïn : miãön xaïc âënh → miãön trë Ta xáy dæûng dáúu kê tæì kiãøu string nhæ sau Adt String . trung täú (infix) vaì háûu täú (postfix) nhæ sau : Tiãön täú : tãn cuía pheïp toaïn âæåüc âàût træåïc daîy caïc tham biãún Vê duû : appenend _ _ : string. Not. string → string . string → bool . Nhæ váûy mäüt dáúu kê âæåüc xáy dæûng tæì : . Vê duû : . Sorts string . string → bool . Operations new : → string .Tãn caïc kiãøu âàûc taí . not vaì bool laì bäø tråü Cuï phaïp (cp) Cp âàûc taí âaûi säú sæí duûng trong vê duû trãn âæåüc chia ra thaình caïc khäúi : âáöu. Use char. giao tiãúp vaì thán cuía âàûc taí.118 Cäng nghãû Pháön mãöm Tãn caïc táûp håüp vaì caïc pheïp toaïn trãn táûp håüp xaïc âënh mäüt kyï dáúu (signature). add _ to _ : char. tæì âoï coï thãø viãút caïc haûng dæåïi daûng : . is empty ? _ string → bool . Bool . # _ : String → not . ngæåìi ta sæí duûng caïc khaïi niãûm tiãön täú (prefix). Tæì âoï ngæåìi ta coï thãø viãút caïc haûng dæåïi daûng : append x y hay append (x y) hay (append x y) Trung täú : cho pheïp âënh nghéa toaïn tæí hay vë tæì Vê duû _ = _ : string. frist _ : string → char .String laì coï êch .

bool → bool . string → string . is empty ? : string → bool .Âàûc taí 119 x = y hay (x = y) Häùn håüp : cho pheïp viãút caïc biãøu thæïc báút kyì mäüt caïch mãöm deío nhæ add_to_ : char. 0 : → not . _ or _ : bool . caïc càûp dáúu ngoàûc dáúu âæåüc duìng âãø phán caïch caïc haûng våïi nhau III. TS. # _ : string → not . ÅÍ âáy. Loaûi phaït sinh coï daûng : Kiãøu coï êch [vaì kiãøu bäø tråü] → Kiãøu coï êch Vê duû : new : _ → string . → bool . coìn pheïp toaïn add _ to _ thãm mäüt kyï tæû vaìo xáu. first _ : string → char . pheïp toaïn new taûo ra mäüt xáu räùng.2. → bool . PHAN HUY KHAÏNH biãn soaûn 119 . string → string tæì âoï coï thãø viãút caïc haûng dæåïi daûng : add c to append (x y) Trong nhiãöu træåìng håüp trãn âáy. not _ : bool _ and _ : bool. string → bool. Caïc tiãn âãö âæåüc xáy dæûng tæì caïc pheïp toaïn duìng cho caïc kiãøu bäø tråü giaí sæí âæåüc âënh nghéa nhæ sau : true : false : → bool . Phán loaûi caïc pheïp toaïn Caïc pheïp toaïn âæåüc chia ra thaình 2 loaûi : Loaûi quan saït âæåüc (oprations) Loaûi phaït sinh (generator operations) Loaûi quan saït âæåüc coï caïc daûng sau : Kiãøu coï êch [vaì kiãøu bäø tråü] → Kiãøu bäø tråü Vê duû : _ = _ : string. bool → bool . add_ to _ : char.

120 1 : → not ; succ : not → not ; _ + _ : not, not → not : _ - _ : not, not _ * _ : not, not _ / _ : not, not a : → char ; b : → char ; ... _ = _ : char, char → bool ; → not : → not : → not :

Cäng nghãû Pháön mãöm

_ = _ : not, not → bool;

III.3. Haûng vaì biãún
Trong âàûc taí âaûi säú, caïc biãún âæåüc âënh kiãøu vaì coï thãø nháûn giaï trë tuìy yï tuìy theo kiãøu âaî âënh nghéa. Vê duû : khai baïo kiãøu x : string ; y : string ; c : char ; âënh nghéa caïc biãún x, y, c âãø sæí duûng trong caïc haûng sau âáy : add c to x = append (x y) append (is empty ? (new), add x to x) Haûng laì mäüt biãøu thæïc nháûn âæåüc tæì viãûc täø håüp liãn tiãúp caïc pheïp toaïn cuía singnature (dáúu kê). Mäüt haûng laì håüp thæïc nãúu haûng âoï thoía maîn caïc pheïp toaïn âaî sæí duûng (kiãøu vaì vë trê). Qui tàõc quy naûp âæåüc duìng âãø xáy dæûng táûp håüp caïc haûng + coï kiãøu s âæåüc viãút t : s âæåüc âënh nghéa nhæ sau : + : s1, s2, ..., sn → s ∧ t1 : s1, t2 : s2, ..., tn : sn (f t1 t2 ... tn) : s trong âoï sæí duûng quy tàõc khai baïo kiãøu biãún x:s Tæì âoï, haûng håüp thæïc trong hai haûng tæì vê duû væìa xeït laì add c to x = append (x y)

III.4. Pheïp thãú caïc haûng
Pheïp thãú (substitutions) laì mäüt pheïp toaïn trãn caïc haûng cho pheïp thay thãú caïc biãún (coï màût) trong caïc haûng båíi caïc haûng khaïc. Táûp håüp caïc biãún FV xuáút hiãûn trong mäüt haûng âæåüc âënh nghéa mäüt caïch âãû quy nhæ sau : FV (ft1t2 ... tn) = FV (t1) ∪ FV (t2) ∪ ... FV (t2) ∪ ... ∪ FV (tn)

Âàûc taí

121

FV (x) = {x} Vê duû : FV (append (is empty ? (new), add c to x)) = {x, c} Pheïp thãú trong mäüt haûng t cho caïc thaình pháön chæïa biãún x båíi haûng u, kyï hiãûu t [u /x], âæåüc âënh nghéa nhæ sau : Våïi x ∈ FV (t) thç (f t1 t2 ... tn) [u/ x ] = (f t1 [u/ x] t2 [u/ x] ... tn [u/ x]) y [u/ x] = u =yy≠x Vê duû : append ( is empty ? (new), (add c to x)) [(add c to y) / x] = append (is empty ? (new), (new), ( add c to ( add c’ to y))) Mä taí caïc thuäüc tênh qua caïc phæång trçnh Caïc tiãn âãö sæí duûng trong âàûc taí âæåüc xáy dæûng theo logic vë trê báûc 1 daûng phæång trçnh (pt) Mäüt phæång trçnh håüp thæïc coï vãú traïi vaì vãú phaíi cuìng kiãøu haûng : AX spec = {t = t’ | t : s ∧ t’ : s} Trong vê duû vãö âa kiãøu string, pheïp toaïn is empty ? âæåüc âënh nghéa theo phæång trçnh : is empty ? (new) = true ; Coï nghéa mäüt xáu væìa måïi taûo ra laì räùng - sau âoï, viãûc thãm mäüt kyï tæû måïi vaìo xáu seî cho kãút quaí laì false : is empty ? (add c to x) = false ; Tênh âãû quy cuía phæång trçnh : append (x, add c to y) = add c to (append (x, y)) ; chè ra ràòng viãûc gheïp mäüt xáu våïi xáu âæåüc taûo ra bàòng caïch thãm mäüt kyï tæû vaìo xáu naìy thç cuîng coï giaï trë nhæ gheïp hai xáu træåïc räöi sau âoï thãm mäüt kyï tæû vaìo xáu kãút quaí. Âiãöu âoï håüp lyï vç ta coï tênh cháút cuía phæång trçnh : append (x, new) = x ; nghéa laì gheïp mäüt xáu naìo âoï våïi xáu räùng cuîng cho ra kãút quaí chênh xáu âoï Ta coï caïc tiãn âãö vãö xáu kyï tæû nhæ sau : Axioms is empty ? (new) = true ; is empty ? (add c to x) = false ; # new = 0 ; # (add c to x) = x (x) = + 1;
TS. PHAN HUY KHAÏNH biãn soaûn

y=x

121

122 append (x, new) = x ; append (x, add c to y) = add c to append (x y) ; (new = new) = true ; add c to x = true ; (add c to x = new) = false ; (new = add c to x) = false ; (add c to = add d to y) = (c = d) and (x = y) ; where ... ... where x, y : string ; c, d : char ; end string ; Caïc tiãn âãö âiãöu kiãûn

Cäng nghãû Pháön mãöm

Caïc tiãn âãö âiãöu kiãûn têch cæûc (positive conditional axions) laì måí räüng cuía caïc phæång trçnh, chuïng laì caïc mãûnh âãö Horm vãö tênh bàòng nhau, coï daûng : t1 = t1’ ∧ t2 = t2’ ∧ ... ∧ tn = t’n ⇒ t = t’ Vê duû : is empty ? (x) = flase ⇒ first (add c to x) = first (x) ; is empty ? (x) = true ⇒ first (add c to x) = c ;

III.5. Caïc thuäüc tênh cuía âàûc taí
Âàûc taí âàût ra hai váún âãö sau âáy : - Håüp thæïc hoïa - Læåîng nàng chæïng baïc (completude) cuía âàûc taí

III.5.1. Mä hçnh láûp trçnh (triãøn khai)
Caïc mä hçnh láûp trçnh mä taí caïch thæïc triãøn khai cuía âàûc taí. Coï nghéa caïc chæång trçnh træìu tæåüng seî kiãøm chæïng caïc thuäüc tênh âaî trçnh baìy trong âàûc taí (thiãút láûp). Táûp håüp caïc mä hçnh âàûc taí våïi caïc pheïp toaïn keìm theo âæåüc kyï hiãûu Mod (spec). Khaïi niãûm láûp trçnh dáùn âãún quan hãû thoía maîn kyï hiãûu Æ xaïc âënh tênh triãøn khai âuïng âàõn cuía âàûc taí. Ta coï : M ∈ Mod (spec) ⇔ (∀t, t’ : s vaì t = t’ ∈ Ax spec ta coï M Æ t = t’) Våïi moüi tiãn âãö : t = t’ cuía Ax spec Mod (spec) Æ t = t’ ⇔ ∀M ∈ Mod (spec),

5. III.6.2.Âàûc taí 123 M Æ t = t’ III. Nhæîng âënh nghéa vãö cuï phaïp caïc chæïc nàng mong âåüi khäng laì khoï khàn nhæng tênh âuïng âàõn cuía chuïng laûi khäng kiãøm chæïng âæåüc dãù daìng. coìn B chæïa væìa âuí (täúi thiãøu) giaï trë cáön thiãút tæång tæû nhæ sæí duûng 1 bit cho kiãøu Bool. Mä hçnh âàûc biãût Nhæîng mä hçnh cháúp nháûn âæåüc båíi mäüt âàûc taí ráút phong phuï. tn’) .Bàõc cáöu : t = t’ ∧ t’ ~ t’’ ⇒ t ~ t’’ . Pheïp chæïng minh trong âàûc taí âaûi säú Muûc âêch pháön naìy laì chè ra caïch chæïng minh (chæïng minh) caïc thuäüc tênh trong caïc âàûc taí âaûi säú.Âäúi xæïng : t ~ t’ ⇒ t’ ~ t . tn) ~ (ft1’t2’ ..3. Sau âáy laì mäüt vê duû vãö mä hçnh cho âàûc taí kiãøu Bool : Hçnh veî trong hai mä hçnh A vaì B åí trãn. u laì haûng t ~ t’ ⇒ t [u/ x] ~ t’ [u/ x] Quaï trçnh khai triãøn mäüt âàûc taí Khai triãøn mäüt âàûc taí laì váún âãö khoï khàn.Phaín xaû : t ~ t . III.Thay thãú : cho x laì biãún... Mä hçnh âäöng dæ Mä hçnh naìy laì mäüt thæång âaûi säú caïc haûng âäöng dæ âënh nghéa båíi caïc quy tàõc sau âáy : . ∧ tn ~ tn’ ⇒ (ft1t2 . Mäüt thuäüc tênh cáön chæïng minh coï daûng mäüt âënh lyï. âàûc taí kiãøu Bool thoîa maîn våïi caïc quy æåïc coï giaï trë laì caïc dáúu x. Chuï yï ràòng A chæïa caïc giaï trë vä êch tæång tæû nhæ viãûc sæí duûng 1 byte cho kiãøu Bool.. caïc pheïp toaïn biãøu diãùn båíi caïc quan hãû giæîa miãön xaïc âënh vaì miãön trë. PHAN HUY KHAÏNH biãn soaûn 123 ..5.substitutivite) t1 ~ t1’ ∧ t2 ~ t2’ ∧ . Giaí sæí ta cáön chæïng minh thuäüc tênh sau âáy trong âàûc taí caïc säú nguyãn tæû nhiãn dæång Not : succ (0) = succ (succ (0)) = succ (succ (0))) ? succ (0) + succ (0)) = succ (succ (succ (0))) TS.Khaí thãú : (cáúu thaình . chàóng haûn daûng mäüt phæång trçnh..t = t’ laì tiãn âãö khi âoï t ~ t’ .

Bàõc cáöu : t = t’ ∧ t’ = t’’ ⇒ t’ = t’’ . khi âoï : cond1 ∧ cond ∧ cond2 ⇒ t = t’ Caïc qui tàõc cuía lyï thuyãút tæång âæång thãø hiãûn caïc thuäüc tênh bàòng nhau (phaín xaû.. y = succ (succ(0))} succ (0) + succ (succ (0)) = succ (0 + succ(succ (0))) Cäng nghãû Pháön mãöm Tiãn âãö : 0 + x = x vaì quy tàõc thay thãú våïi s = { x = succ (succ (0)))} 0 + succ (succ (0)) = succ (succ (0)) Quy tàõc thay thãú våïi pheïp succ trãn (2) succ (0 + succ (succ (0))) = succ (succ (0))) Quy tàõc bàõc cáöu cho (1) vaì (3) 5.Âäúi xæïng : t = t’ ⇒ t’ = t . tn) = (ft1’.Phaín xaû : t = t . laì táûp håüp caïc âënh lyï håüp thæïc qua caïc quy tàõc sau âáy : . âäúi xæïng vaì bàõc cáöu).. III.Pheïp càõt : Cond1 ∧ (u = u’) ∧ cond2 ⇒ t = t’ vaì cond ⇒ x = x’.. ∀t = t’. . ∧ tn = tn’ ⇒ t = t’ khi âoï t1 [u/ x] = t1’ [u/ x] ∧ .Khaí thãú : t = t’ ∧ t2 = t2’ ∧ .1.Pheïp thãú : cho x laì biãún vaì u laì haûng t1 = t1’ ∧ t2 = t2’ ∧ . t2’.. âënh lyï sau âáy minh hoüa kêch chàõc chàõn vaì tênh roî cuía pheïp suy diãùn Âënh lyï : lyï thuyãút tæång âæång våïi mäüt âàûc taí spec. Ax spec à EQ t = t’ ⇔ Mod (Ax spec) Æ t = t’ . caïc biãún (pheïp thãú) vaì thay thãú caïc vãú bàòng nhau (pheïp càõt). tn’) ... thuäüc tênh haìm (khaí thãú)...6. Caïc quy tàõc naìy xaïc âënh pheïp suy diãùn à EQ. Âënh lyï âaî âæåüc chæïng minh... ∧ tn [u/ x] = tn’ [u/ x] ⇒ t [u/ x] = t’ [u/ x] . t2. Lyï thuyãúttæång âæång Lyï thuyãút tæång âæång (cuía mäüt âàûc taí) âæåüc xáy dæûng tæì caïc tiãn âãö cuía âàûc taí. ∧ tn = tn’ ⇒ (ft1..124 Tiãn âãö : succ (x) + y = succ (x + y) Quy tàõc thay thãú våïi s = {x = 0.. . Cáön chuï yï ràòng thuäüc tênh naìy laì håüp thæïc cho moüi quaï trçnh âàûc taí säú tæû nhiãn Not.

Khaïi niãûm vãö lyï thuyãút quy naûp Nhæ âaî chè ra. nãúu våïi moüi t. luïc âoï coï thãø true = false. vç ràòng sau khi suy diãùn.x = 0 khäng chæïng minh âæåüc trong ngæî caính âang xeït màûc dáöu âënh lyï naìy toí ra hiãøn nhiãn trong âàûc taí. Tæång tæû âäúi våïi âënh lyï tæång âæång.succ (succ (0)) = 0 laì håüp thæïc (valid). ta cáön thãm caïc âënh lyï täøng quan hån âãø coï khaí nàng suy diãùn tæì caïc tiãn âãö cuía âàûc taí. Ta muäún chæïng minh ràòng : not (not (b)) = b . TS. Tuy nhiãn coï thãø xaíy ra mäüt säú træåìng håüp âàûc biãût khi mä hçnh khäng håüp lyï. Ta seî thãm vaìo caïc qui tàõc sæí duûng trong lyï thuyãút tæång âæång mäüt quy tàõc måïi nhæ sau : . ta nháûn âæåüc succ (0) = 0 laì khäng håüp thæïc.Âàûc taí 125 Cäng thæïc Mod (Ax spec) Æ t = t’ chè ra ràòng phæång trçnh laì håüp thæïc trong moüi caïch láûp tyíçnh coï thãø. III.6. 2.Qui naûp : giaí sæí G laì cäng thæïc sao cho x laì mäüt biãún tæû do. PHAN HUY KHAÏNH biãn soaûn 125 . nhæîng thuäüc tênh succ (succ (succ (0))) . Quy tàõc naìy chè roî ràòng coï thãø kãút luáûn ràòngnãúu viãûc chæïng minh mäüt âënh lyï laì håüp thæïc cho moüi træåìng håüp.træåìng håüp cå såí : ? not (not (true)) =not (false) = true . Ta coï thãø tháúy ràòng x .2 : Lyï thuyãút quy naûp Våïi mäüt âàûc taí âaûi säú spec ∀t = t’. Ax spec à Ind t = t’ ⇔ ModGen (Ax spec) Æ t = t’ Ta seî minh hoüa nguyãn lyï naìy båíi mäüt vê duû trãn caïc giaï trë logic xáy dæûng tæì caïc pheïp toaïn true. Âënh lyï 3.succ (succ (0)) = 0 Khäng laì håüp thæïc trong âàûc taí âang xeït. Tæì âoï. Ta coï thãø chæïng minh ràòng thuäüc tênh succ (succ (0)) . båíi mäüt biãún thç âënh lyï cuîng håüp thæïc cho cäng thæïc âæåüc læåüng hoïa mäüt caïch phäø duûng trãn biãún naìy. false vaì not. G [t/ x] laì suy diãùn âæåüc thç G cuîng suy diãùn âæåüc cho t. chàóng haûn nhæ x + y = y + x laì khäng coï tênh suy dáön trong lyï thuyãút tæång âæång. âënh lyï sau âáy cho kãút quaí thuyãút phuûc cho viãûc suy diãùn quy naûp âäúi våïi âàûc taí hæîu haûn. âënh nghéa båíi mäüt haûng.2. Not (not (false)) = not (true) = false . ta coï thãø bäø sung thãm mäüt säú giaí thiãút cho mä hçnh âãø tàng khaí nàng chæïng minh coï thãø.

t’’ laì caïc haûng nãúu t ??? . III.. Cáön chuï yï ràòng âàóng thæïc taûo ra båíi viãút laûi khäng bàõt buäüc âäöng nháút våïi âàóng thæïc nháûn âuåüc tæì hãû thäúng suy diãùn à EQ (khäng hoìan toaìn).6.Khäng quy naûp : not (not (b)) = b suy ra not (not (not (b))) = not (b) quy tàõc khaí thãú våïi not cho not (not (b)) = b not (not (not (b))) = not (b) Cäng nghãû Pháön mãöm Nhåì quy tàõc quy naûp maì thuäüc tênh mong muäún âæåüc chæïng minh. t. Âënh lyï 3. Vê duû : tæì tiãn âãö not true = false ta seî dáùn âãún quy tàõc not true ??? false. nghéa laì mäüt haûng khäng thãø thu goün. Âoï laì quaï trçnh æåïc læåüng caïc haûng bàòng caïch viãút laûi mäüt caïch hãû thäúng caïc haûng thaình caïc daûng chuáøn (daûng khäng thãø æåïc læåüc âæåüc næîa) vaì pheïp chæïng minh caïc thuäüc tênh. Tæì âoï caïc thuäüc tênh chæïng minh âæåüc tæång âæång våïi caïc phæång trçnh xuáút phaït. Chàóng haûn âãø âàûc taí Bool. Nãúu hãû thäúng nháûn âæåüc laì âi âãún âêch (moüi hæåïng suy dáøn khaïc nhau coï thãø âãöu dáøn vãö cuìng kãút quaí) vaì kãút thuïc (sau mäüt säú hæîu haûn bæåïc viãút laûi træåïc khi nhán âæåüc daûng chuáøn)... Âãø coï thãø thæûc hiãûn caïc pheïp chæïng minh theo lyï thuyãút træåïc âáy. ta cáön nháûn âæåüc bàòng caïch hæåïng caïc tiãn âãö tæì traïi qua phaíi : not (true) ??? false . to thç : Ax spec à EQ t = t’ ÅÍ âáy ta sæí duûng kyï hiãûu t ???* t’ cho daîy t ??? .3 Chæïng minh båíi viãút laûi Våïi mäüt âàûc taí spect. Giaíi phaïp âáìu tiãn laì hæåïng tåïi caïc phæång trçnh. Chæïng minh tæû âäüng båíi viãút laûi Viãûc chæïng minh båíi viãút laûi (demonstration by rewriding) laì mäüt kyî thuáût cho pheïp chæïng minh tæû âäüng.126 . ta cáön nháûn âæåüc mäüt hãû thäúng viãút laûi häüi tuû tæång âæång våïi hãû thäúng sinh båíi caïc tiãu âãö.. Sæû bàòng nhau laì håüp thæïc nãúu hai vãú cuía chuïng âæåüc viãút laûi thaình duy nháút mäüt haûng khäng thãø æåïc læåüc âæåüc næîa.3.. Quy tàõc naìy âæåüc duìng âãø chæïng minh tênh bàòng nhau cuía daûng t = t’. ??? to vaì t’ ??? ..??? t hay t laì mäüt daûng chuáøn cuía haûng. Nguyãn lyï sæí duûng laì hæåïng âãún caïc phæång trçnh âàûc taí theo quy tàõc viãút laûi vaì aïp duûng liãn tiãúp caïc quy tàõc naìy trãn caïc haûng âaî æåïc læåüc. Nhæ váûy lyï thuyãút quy naûp cho pheïp chæïng minh tênh giao hoaïn cuía pheïp cäüng trong Not qua x + y = y+ x viãûc chæïng minh cáön quy naûp hai láön trãn x vaì y.

.0 ??? 0 TS.x) ??? 0 . Tæì âàûc taí trãn. _ + _ : not not → not . Ta coï thãø minh hoüa âiãúu âoï trong âàûc taí caïc säú tæû nhiãn mäüt caïch âån giaín nhæ sau : Interface Sort not . a x 2 : x + (. Operations 0 : → not . PHAN HUY KHAÏNH biãn soaûn 127 .Âàûc taí 127 not (false) ??? true true and b ??? b false and b ??? false true or b ??? true false or b ??? b false xor b ??? not (b) Vê duû : sæí duûng caïc quy tàõc trãn âãø viãút laûi haûng sau âáy : not (false or (true and false)) not (true and false) not (false or false) not (false) true Tuy nhiãn. _ _ : not → not ..x) = 0 . nguyãn lyï hæåïng vãö viãút laûi khäng âuí âãø chæïng minh moüi thuäüc tênh tæång âæång. ta coï thãø xáy dæûng caïc quy tàõc : 0 + x ??? x x + (. . Body Axions ax10+x=x.

Cå chãú naìy coï thãø âáöy âuí trong nhiãöu tçnh huäúng thæûc tãú. Phán cáúp trong âàûc taí âaûi säú Caïc mä hçnh phán thãø laìm thoía maîn caïc tiãn âãö vaì caïc haûn chãú do caïc raìng buäüc âån thãø chuí yãúu dæûa trãn khaí nàng buäüc âån thãø. âàûc biãût khi laìm mën (refinement). Coï nghéa laì caïc mä hçnh phaíi âæåüc láûp trçnh âäüc láûp våïi nhau. âàûc biãût âäúi våïi caïc tiãn âãö vãö caïc pheïp tênh sinh. theo dënh lyï quy naûp. Caïc raìng buäüc âån thãø chuí yãúu dæûa trãn khaí nàngkhäng bë xaïo träün giæîa caïc mä hçnh åí mæïc phán cáúp tháúp hån khi sæí duûng mäüt âàûc taí.4. Caïc kiãøu xaïo träün coï thãø xuáút hiãûn trong mäüt âàûc taí âaûi säú laì : . chè xem xeït caïc bäü sinh trong caïc chæïng minh bàòng caïch chè chæïng minh quy naûpchuïng (båíi vç moüi haûng âaût âæåüc båíi caïc viãûc täø håüp caïc bäü sinh) III. Nguyãn lyï naìy cho pheïp sæí duûng viãûc phán cáúp caïc âàûc taí trong caïc giai âoaûn khai triãøn. Bool . caïc kyï thuáût âàûc taí âæåüc phaït triãøn âãø thæûc hiãûn viãút laûi (hãû viãút laûi kiãøu modun kãút håüp giao hoaïn) Caïc pheïp toaïn phaït sinh (xáy dæûng) Theo âënh nghéa. In terface Use Not.6.0 = 0 thç phaíi cáön aïp duûng tiãn âãö 1 tæì phaíi qua traïi. Låïp caïc mä hçnh phán cáúp âæåüc kyï hiãûu båíi Hitol (spec) âoï laì nhæîng mä hçnh thoía maîn quy tàõc vãö sæû haûn chãú caïc mä hçnh trãn caïc mä hçnh con baío toaìn âæåüc âæåüc ngæî nghéa cuía chuïng. Âënh nghéa naìy cho pheïp. mäüt mä hçnh âæåüc phaït sinh båíi mäüt táûp håüp con w caïc pheïp toaïn nãúu moüi giaï trë cuía mä hçnh naìy nhán âæåüc båíi mäüt haûng âæåüc xáy dæûng tæì caïc bäü sinh w. . Tênh roî raìng (Completude suffisance) Ta seî minh hoüa tçnh huäúng “junk” bàòng mäüt vê duû Adl Khäng_hoaìn_toaìn . sau âoï aïp duûng tiãn âãö 2 tæì traïi qua phaíi. nhæ váûy seî khäng tæång æïng våïi viãûc læûa choün âënh håïng ???. viãûc hæåïng caïc quy tàõc tæì traïi qua phaíi chæa âuí. .128 Cäng nghãû Pháön mãöm Cáön chuï yï ràòng trong træåìng håüp naìy. vç nãúu muäún chæïng minh .“junk” (maíng) : caïc giaï trë âæåüc thãm vaìo båíi viãûc duìng caïc âån thãø. do raìng buäüc vãö sæû hiãûn hæîu phán cáúp laìm aính hæåíng âãún âàûc taí. Trong træåìng håüp caïc tiãn âãö khäng âënh hæåïng nhæ pheïp giao hoaïn.“cofusion” (träün láùn) : caïc giaï trë bë thay âäøi (collapse). raìng buäüc vãö tênh âáöy âuí haûn chãú kiãøu xaïo träün naìy. Roî raìng viãûc âënh hæåïng laì mäüt cå chãú chæïng minh chæa âáöy âuí.

y) Vê duû lãûnh chg (2. IV. where x : not . Âãø âån giaín hoïa maì khäng laìm máút tênh âæåüc biãøu diãùn båíi så âäö sau : 1 2 3 0 0 0 bäü nhåï chè gäöm 3 âëa chè nhåï chæïa 3 giaï trë luïc âáöu âãöu laì 0 giaí lãûnh. laìm thay âäøi näüi dung cuía bäü nhåï âæåüc kyï hiãûu båíi chg (x. Goüi q laì bäü nhåï luïc âáöu vaì q’ laì bäü nhåï nháûn âæåüc sau khi thæûc hiãûn lãûnh chg (x. Vê duû trãn khäng roî raìng khi thãm âënh nghéa haìm f trãn caïc âån thãø vãö not vaì bool. lãûnh chg (x. PHAN HUY KHAÏNH biãn soaûn 129 . y). Body Axioms f (succ (x)) = false . 5) laìm thay âäøi âëa chè thæï 2 tæì giaï trë 0 thaình 5 : 1 2 3 0 0 0 chg (2.Âàûc taí 129 Operation f : not → bool . ta coï thãø chuyãøn så âäö trãn thaình daûng âiãöu kiãûn nhæ sau : q chg (x. Caïc tiãn âãö vãö âån thãø cuía haìm f seî laìm xaïo träün caïc kiãøu âaî âënh nghéa. Âàûc taí pheïp thay âäøi bäü nhåï Giaí sæí ta cáön âàûc taí pheïp thay âäø näüi dung mäüt bäü nhåï. Ta tháúy mäüt giaï trë måïi f (0) kiãøu seî khäng âæåüc xaïc âënh vç khäng coï tiãn âãö naìo chè ra f (0) laì true hay false. 5) 1 2 3 0 5 0 Nhæ váûy. y) q’ (1.1) TS. End .1. Âàûc taí hay caïch cuû thãø hoïa sæû træìu tæåüng (Specification or How to Make Abstrations Real) IV. y) âaî thay âäøi näüi dung cuía âëa chè x thaình giaï trë y vaì giæî nguyãn näüi dung cuía caïc âëa chè coìn laûi.

1) Vê duû sæû kãút håüp caïc âiãöu kiãûn sau âáy âãø âàûc taí pheïp toaïn thay âäøi chg : q’ (x) = y q’ (a) = q (a) nãúu a ≠ x (1.6) Âënh lyï vãö tênh cháúp nháûn âæåüc (plausibility) Ta coï thãø näúi hai âiãöu kiãûn tæång âæång (1. Cäng nghãû Pháön mãöm Âënh nghéa ngæî nghéa cuía lãûnh chg chênh laì âàûc taí.. y) q’ x∈A y∈V (1. hai âiãöu kiãûn âáöu âæåüc goüi laì âiãöu kiãûn âáöu (preconditions). Ta coï thãø haûn chãú caïc âiãöu kiãûn (1.5) q’ (a) = q (a) våïi x ≠ a vaì x ∈ A Trong (1. tæì âoï q (a) ∈ V. . Muäún váûy ta cáön chæïng minh âënh lyï sau âáy : ((1. q’ cuîng thoía maîn âiãöu kiãûn (1. 2. 231} Mäüt caïch täøng quaït.4) Nhæ váûy mäüt biãøu thæïc daûng q (a) chè coï nghéa nãúu a ∈ A. 3} täøng quaït caïc âëa chè vaì miãön giaï trë laì caïc giaï trë coï thãø læu træî âæåüc trong bäü nhåï âang xeït. Trong vê duû naìy.. Do bäü nhåï q’ nháûn âæåüc tæì q sau khi thæûc hiãûn lãûnh chg.130 Ta noïi lãûnh chg (x.2) Nhæ váûy ta âaî ngáöm áøn thæìa nháûn ràòng q vaì q’ chè âënh caïc haìm.5)) keïo theo (1.. miãön xaïc âënh cuía haìm laì táûp håüp {1.7) . y) âaî chuyãøn bäü nhåï q thaình q’.1) dáùn âãún (1.4) laì báút hiãún (invariant). hai âiãöu kiãûn sau âæåüc goüi laì caïc âiãöu kiãûn sau (postconditions) Ta cáön kiãøm tra (1.5) laì cháúp nháûn âæåüc. tæì âoï q (a) chè coï nghéa nãúu a ∈ A.5). goüi A laì táûp håüp caïc âëa chè. våïi bäü nhåï 3 âëa chè. V laì táûp håüp caïc giaï trë. (1. Ta tháúy âiãöu kiãûn (1. nghéa laì coï âiãöu kiãûn (1.2) nhæng ngæåüc laûi khäng hoaìn taìon âuïng. ta coï: q∈A→V (1.4) q’ ∈ A → V Tuy nhiãn âiãöu kiãûn (1.4)’ (1.3) chàóng haûn laì táûp håüp caïc säú nguyãn {-231.1) vaì (1.2) khäng phaíi luän luän coï nghéa vç ràòng biãøu thæïc q’ (x) âoìi hoíi x ∈ A.4) vaì (1.5) q chg (x. nhåì viãút âiãöu kiãûn tæång âæång våïi âiãöu kiãûn (1.2) âãø coï âæåüc âiãöu kiãûn tæång âæång nhæ sau x∈A y∈V q’ (x) = y (1.

3} vaì âêch Y = {-231.6) nhæng cuîng dãù daìng bæåïc laûi âënh lyï bàòng caïch xeït phaín vê duû sau : 1 0 2 0 3 0 9 1 0 2 5 chg (2. mäüt âiãöu kiãûn nhæ (1.7) laì âàûc taí lãûnh laìm chuyãøn (tiãún triãøn) traûng thaïi cuía hãû thäúng. Cho hai táûp håüp X vaì Y. Sæû khaïc nhau giæîa chuïng laì åí chäù.. 3} TS.Âàûc taí 131 q’ (x) = y q’ (a) = q (a) våïi x ≠ a vaì a ∈ A Ngæåìi ta noïi q xaïc âënh traûng thaïi (state) cuía hãû thäúng. 2. ÅÍ âáy ta sæí duûng caïc biãún coï âaïnh dáúu nhaïy âãø chè traûng thaïi cuía hãû thäúng sau khi chuyãøn âäøi. Nãúu f laì mäüt haìm bäü pháûn thç kyï hiãûu dom (f) (domain) laì táûp håüp con cuía X maì f xaïc âënh. q∈Z→Z luïc naìy dom (q) = {1. miãöm xaïc âënh vaì nguäön laì âäöng nháút. biãøu thæïc X → Y biãøu diãùn táûp håüp caïc haìm bäü pháûn (partical) tæì nguäön X vaìo âêch Y. mäüt haìm bäü pháûn khäng hoaìn toaìn xaïc âënh cho moüi giaï trë cuía nguäön X. sau âáy ta tiãúp tuûc laìm roî mäüt säú khaïi niãûm vaì tênh cháút cuía quan âiãøm naìy.. 5) 3 4 0 0 Roî raìng vê duû trãn thoía maîn caïc âiãöu kiãûn (1. 5) thay âäøi näüi dung âëa chè x (cho giaï trë y) nhæng váùn giæî nguyãn caïc âëa chè khaïc. nghéa laì kêch thæåïc bäü nhåï khäng thay âäøi.4) laì mäüt báút biãún cuía hãû thäúng.5) nhæng khäng thoía maîn (1.4) vaì (1. ta âaî váûn duûng quan âiãøm toaïn hoüc vãö haìm. 3} → {-231.. Haìm Trãn âáy.. .. PHAN HUY KHAÏNH biãn soaûn 131 . Ta cuîng noïi mäüt âàûc taí laì cháúp nháûn âæåüc (plausible) nãúu âàûc taí âoï baío toaìn báút biãún cuía hãû thäúng. ta coï thãø viãút : q ∈ {1. Vê duû haìm q åí muûc trãn laì haìm toaìn pháön våïi nguäön X = {1. 231} Tuy nhiãn âáy laì mäüt haìm bäü pháûn tæì táûp säú nguyãn Z vaìo chênh noï vç caïc táûp håüp nguäön vaì âêch cuía q âãöu laì táûp håüp con cuía Z. lãûnh chg (2. . IV.. Tæång tæû. 2. (1. Nháûn xeït Dãù daìng chæïng minh âënh lyï (1. 2. Trong træåìng håüp haìm toaìn pháön. 231}. biãøu thæïc X → X biãøu diãùn táûp håüp caïc haìm toaìn pháön (total) våïi miãön xaïc âënh (nguäön) laì X vaì miãön trë (âêch) laì Y.2.4)’ Thæûc ra.

2 → 5. ngæåìi ta táûp håüp caïc pháön tæí âàût åí bãn traïi vaì bãn phaíi cuía muîi tãn tæång æïng : dom (q) = {1. ta coï thãø liãût kã caïc thaình pháön cuía haìm.S (f \ S) (x) = f (x) våïi x ∈ dom (f) . 3} ran (q) = { 0 } dom (q’) = 1. 2 → 8.S HÇNH VEÎ Ta coï : { 1 → 5. Âáy laì pheïp haûn chãú tæång æïng våïi âënh nghéa sau : dom (f \ S) = dom (f) . goüi laì ran (f) (range) Khi mäüt haìm âæåüc âënh nghéa. 2. 2 → 0. 3 → 6 } \ { 1. 2 } = { 3 → 6 } Cho hai haìm coï cuìng nguäön vaì cuìng âêch nhæng coï caïc dom råìi nhau. 3} ran (q’) = { 0.1) dom (f) = X keïo theo Cho haìm f ∈ X → Y vaì mäüt táûp håüp con S ⊆ X. 2} = { 3 → 6 } \ { 1. 3 → 0 } Âãø nhán âæåüc caïc dom vaì caïc ran tæì caïc haìm. 3 → 0 } q’ = { 1 → 0. ta coï thãø âënh nghéa sæû chäöng lãn (overload) cuía mäüt haìm båíi mäüt haìm khaïc. 5 } Mäüt caïch täøng quan. ta coï : 1 0 2 0 3 0 0 chg (2. 2. Kyï hiãûu f ∪ g laì håüp cuía hai haìm theo âënh nghéa sau : dom (f ∪ g) = dom (f) ∪ dom (g) f (x) nãúu x ∈ dom (f) (f ∪ g) (x) = g (x) nãúu x ∈ dom (g) (2. ta coï kãút quaí sau : dom ({ x → y }) = { x } ran ({ x → y }) = { y } f∈X→Y (2.4) Bàòng caïch duìng hai pheïp toaïn trãn âáy. Ta kyï hiãûu f + g taïc âäüng lãn hai haìm f vaì g coï cuìng nguäön vaì cuìng âêch maì láön naìy. Vê duû. caïc dom khäng nháút thiãút råìi nhau : . ngæåìi ta kyï hiãûu f \ S laì haìm nhán âæåüc bàòng caïch loaûi khoíi dom (f) caïc pháön tæí cuía S. 5) 0 5 tæång æïng våïi hai haìm : q = { 1→ 0.132 Cäng nghãû Pháön mãöm Ta cuîng coï thãø xáy dæûng táûp håüp con cuía âêch chæïa caïc giaï trë xaïc âënh tæì táûp håüp con cuía nguäön.

y) q’ x∈A y∈V q’ = q + { x → y } Âënh lyï vãö tênh cháúp nháûn âæåüc (plausilility) báy giåì dãù daìng âæåüc chæïng minh båíi pheïp tênh hçnh thæïc âån giaín (simple formal calculus).3).Âàûc taí 133 (2.7). Âàûc taí naìy roî raìng âån giaín hån : q chg (x. 3 → 0 } ∪ { 2 → 5 } = { 1 → 0.3) ta coï : (f \ dom (g)) (x) (f + g) (x) = hay nãúu x ∈ dom (f \ dom (g) (2. 2 → 5.7) trong viãûc hçnh thæïc hoïa laì åí chäù tá coï thãø chæïng minh dãù daìng daîy caïc tênh cháút âaûi säú seî sæí duûng vãö sau.5) Ta coï : f + g = (f \ dom (g)) ∪ g Tæì (2. 3 → 0 } \ { 2 } ∪ { 2 → 0 } = { 1 → 0. 2 → 0. 2 → 0. Sau âáy laì mäüt säú tênh cháút : (f ∪ g) \ S = (f \ G) ∪ (g \ S) (f + g) \ S = (f \ S) + (g \ S) (f \ S) \ T = f \ (S ∪ T) f∪g=g∪f (f ∪ g) ∪ h = f ∪ (g ∪ h) dom (f ∪ g) = dom (f) ∪ dom (g) ran (f ∪ g) = ran (f) ∪ ran (g) (f + g) + h = f + (g + h) dom (f + g = dom (f) ∪ dom (g) Báy giåì ta coï thãø sæía chæîa âàûc taí âaî nháûn âæåüc åí cuäún muûc træåïc (1.4) vaì (2. 3 → 0 } + { 2 → 5 } = ({ 1 → 0. (2. ∪ vaì + thay vç sæí duûng mäüt caïch hãû thäúng nhæîng âënh nghéa cuía chuïng (2. (2.8) TS.6) g (x) nãúu x ∈ dom (g) (f + g) (x) = f (x) nãúu x ∈ dom (f) . 3 → 0 } Lyï do cå baín âãø âæa vaìo caïc pheïp toaïn \. PHAN HUY KHAÏNH biãn soaûn 133 .dom (g) g (x) nãúu x ∈ dom (g) HÇNH VEÎ Vê duû : { 1 → 0.

Nhæîng yãu cáöu bäø sung væìa nãu coï thãø biãøu diãùn hçnh thæïc bàòng caïch kãút håüp caïc âiãöu kiãûn sau âáy : q vld q1 op . ta coï thãø thay âäøi näüi dung cuía noï.1 qn rst op q’ qn q1 q2 Trong âoï op (operations) laì mäüt thao taïc daûng chung (x..2) dom (q) = A vaì { x } ⊂ A ran (q) ⊂ V vaì { y } V Nhæ váûy : dom (q’) = A ran (q’) ⊂ V Tæì âoï theo (2.3. Báy giåì. dáùn âãún âiãöu kiãûn : q’ = q våïi q vaì n báút kyì.8). y) hay rdm.134 Theo (2. qn . nghéa laì ta coï thãø thay âäøi tråí laûi nhåì mäüt pheïp toaïn thêch håüp.2) thç q’ ∈ A → V Cäng nghãû Pháön mãöm IV.. Håüp thæïc hoïa vaì phuûc häöi Trong muûc 1. Nhæ váûy traûng thaïi cuía hãû thäúng báy giåì âæåüc âàûc træng båíi hai biãún p vaì q nhæ sau : p∈A→V . Ta goüi not (restart) vaì vld (validate) laì nhæîng thao taïc måïi.1) vaì (2. màût khaïc ta coï håüp thæïc hoïa (validation) bàòng caïch traí laûi nhæîng thay âäøi træåïc âoï. ta coï : dom (q’) = dom (q) ∪ { x } ran (q’) ⊂ ran (q) ∪ { y } Nhæng ta coï giaí thiãút (1. yãu cáöu vãö tênh “trong suäút” cuía pheïp toaïn håüp thæïc hoïa dáùn âãún âiãöu kiãûn : q’ = q Caïch giaíi quyãút hiãn nhiãn nháút mang tênh yï niãûm laì laìm tàng gáúp âäi bäü nhåï.4) vf giaí thiãút (2. Vaí laûi.8) vaì theo (2. ta âaî âàûc taí caïch hoaût âäüng cuía mäüt bäü nhåï trong âoï. ta seî tiãúp tuûc phaït triãøn vê duû naìy bàòng caïch âàût ra hai yãu cáöu bäø sung ta muäún ràòng nhæîng thay âäøi trãn bäü nhåï coï âàûc tênh taûm thåìi.

ta coï (3. y) hoàûc rst.1. q’) p’ = q q’ = q (3. ta coï : p1 = q vaì theo (3. p1 Cuäúi cuìng. q1) (p1.4). qn . q’) q’ = p q’ = q (3.. ta phaíi chæïng minh ràòng viãûc kãút håüp caïc âiãöu kiãûn sau âáy : (p. q) rst (p’. q) mod (x. coìn bäü nhåï p duìng âãø khäi phuûc traûng thaïi cuî khi cáön khåíi âäüng laûi.4) Dãù daìng chæïng minh ràòng caí ba pheïp toaïn naìy âãöu cháúp nháûn âæåüc. theo (3. theo (3. y) q’ Ta tháúy thao taïc thay âäøi bäü nhåï xuáút hiãûn nhæ mäüt sæû måí räüng. ta coï : pn = . qn) (pn.2) vaì (3. nghéa laì sau khi thæûc hiãûn chuïng. våïi giaí thiãút ràòng (3. q1) op (p2. cuía pheïp toaïn chg : (p.4) do op laì mäüt trong hai pheïp toaïn mod (x.2) q chg (x.1). q) vld (p1. åí mæïc âàûc taí.1) op (pn.1) âaî âæåüc kiãøm chæïng træåïc khi thæûc hiãûn chuïng.. Räút cuäüc. y) ((p’. Noïi caïch khaïc.1)’. q’) p’ = p (3. qn) rst (p’.Âàûc taí 135 (3. q2) . q) vld (p’.4) Sau âáy laì mäüt vê duû vãö caïc pheïp toaïn trãn : TS.3) :q’ = pn Roî raìng pheïp håüp thæïc hoïa laì trong suäút vç dáùn âãún q’ = q theo (3. (pn . Sau âáy laì âàûc taí cuía 3 thao taïc cho hãû thäúng våïi mod thay thãú chg : (p.3) (p. q’) dáùn âãún q’ = q Tháût váûy.1) q∈A→V Bäü nhåï q âoïngvai troì bäü nhåï træåïc âoï... PHAN HUY KHAÏNH biãn soaûn 135 . p vaì q âæåüc thay thãú båíi p’ vaì q’ trong (3.

3) 1 3 2 2 3 0 vld 1 3 2 2 3 0 3 2 0 q q 0 0 0 mod (3. 1) 1 1 2 0 3 0 0 0 0 mod (2. . nghéa laì âæa vaìo caïc biãún traûng thaïi måïi âãø thãø hiãûn caïc raìng buäüc vãö pháön cæïng vaì pháön mãöm.136 q 1 0 2 0 3 0 p 0 0 0 Cäng nghãû Pháön mãöm mod (1. 1) 1 3 2 2 2 1 not 1 3 2 2 3 0 3 2 0 3 2 0 Pháön tiãúp theo seî laìm mën mä hçnh naìy. 2) 1 1 2 2 3 0 0 0 0 mod (1.

Trong træåünghåp naìy. mäùi “giaï trë” seî tæång æïng våïi näi dung cuía mäüt traûng thaïi coï kêch thæåïc diãøn hçnh laì 1 bytes. coï nhiãöu caïch âãø triãøn khai hãû thäúng âaî âæåüc âàûc taí trong muûc træåïc. caïch giaíi quyãút laì sæí duûng caïch giaïn tiãúp : hai laìbäü nhåï p vaì q taûo thaình traûng thaïi cuía hãû thäúng âaî xeït trong muûc træåïc.Âàûc taí 137 IV. ta nháûn âæåüc caïc baíng p vaì q cuía hãû thäúng cuî : q 1 2 3 p 5 8 1 5 4 1 Nhæ váûy. thç ta seî tháúy ràòng coï 4096 trang vaì båíi váûy thåìi gian duìng âãø thæûc hiãûn caïc sao cheïp cáön thiãút cho caïc thao taïc khåíi âäüng vaì håüp thæïc hoïa coï thãø toí ra nàûng nãö. Sau âáy laì så âäö minh hoüa hãû thäúng måïi naìy : n 1 2 2 4 3 5 4 5 6 a 2 6 5 8 1 4 m 1 2 3 2 5 5 Trong vê duû trãn. ta tiãúp tuûc sæí duûng caïc giaï trë V nhæ træåïc. cuîng trong caïc vê duû trãn vãö sau. coï nhiãöu yãúu täú kyî thuáût coï thãø aính hæåíng âãún caïch triãøn khai . seî âæåüc thay thãú båíi hai baíng (hai haìm) a vaì n (a: ancient.1) Trong âoï D laì táûp håüp caïc âëa chè cuía bäü nhåï m. Tháût váûy. Nãúu nhæîng trang naìy duìng âãø thãø hiãûn mäüt bäü nhåï aío 4 Mbytes. chàóng haûn kêch thæåïc khäng gian V caïc giaï trë âoïng vai troì quan troüng : giaí sæí ràòng caïc pháön tæí cuía táûp håüp A tæång æïng våïi caïc âëa chè cuía caïc trang trong mäüt hãû thäúng coï bäü nhåï phán trang (paging). n : new) chæïa caïc con troí tåïi bäü nhåï m. ta coï thãø tháúy ràòng hai hãû thäúng khäng âäüc láûp våïinhau : hai hãû thäúng måïi hiãûn thæûc hoïa hãû thäúng cuî vaì hãû thäúng cuî thãø hiãûn sæû thay âäøi biãún nhæ sau TS. Trong træåìng håüp væìa nãu (ta seî triãøn khai thæûc tiãùn trong muûc naìy). Bàòng caïch kãút håüp caïc baíng a vaì n våïi m. Bàõt âáöu triãøn khai thæûc tiãùn Vãö màût thæûc tiãùn. PHAN HUY KHAÏNH biãn soaûn 137 .4. Hãû thäúng måïi seî âæåüc âàûc træng båíi caïc thaình pháön sau : a ∈ n ∈ m ∈D A A → → → V D D (4.

m’) x∈A y∈V L≠∅ a’ = a n’ = n + { x → u } m’ = m + { u → y } trong âoï L = ran (n) ∪ ran (a) u∈L Ta cáön chæïng minh ràòng âàûc taí (4.4) trãn âáy laì hiãøn nhiãn. noïi caïch khaïc. m) mod1 (x. mäüt âiãöu kiãûn træåïc dæåüc âàût ra.1) vaì (4.2)’ vaì (4. (4. q) vaì (p’. n. m) vaì (a’.2) nhæ sau : ((4. m) vaì (a’. n’.3) laì cháúp nháûn âæåüc.2) vaì 4. thç ta coï thãø choün mäüt âëa chè báút kyì u. q’) thoía maîn âàûc taí (3.3). Pheïp mod1 seî ghi mäüt giaï trë måïi. n’. våïi âàûc taí sau : (a. Tiãúp theo ta cáön chæïng minh pheïp mod1 phuì håüp (âuïng) våïi pheïp mod âaî âàûc taí åí (3. táûp håüp âæåüc âàût tãn laì L (Liberty). n’.2)’) caïc giaï trë cuía caïc biãún (p. (4. nghéa laì : ((4. thç khi tråí vãö caïc biãún cuî (p. y) (a’.5) Mãûnh âãö naìy khäng hiãøn nhiãn. q’) (caïc biãún âaî bë thay âäøi tråí thaình caïc biãún (a.1)’ (4.3) .4) Mãûnh âãö (4.2) (4. tæång æïng våïi så âäö giao hoaïn dæåïi âáy : HÇNH VEÎ Noïi caïch khaïc.1) chè roî ràòng p vaì q dãöu thuäüc táûp håüp A → V Pheïp biãún âäøi mod dàûc taí båíi caïc âiãöu kiãûn (3.138 p (x) = m (a (x)) q (x) = m (n (x)) våïi x ∈ A (4.3)) keïo theo (3. mäüt âëa chèmaì khäng thuäüc vaìo miãön trë (range) cuía n cuîng nhæ miãön trë cuía a. thuäüc táûp håüp D . Nãúu L ≠ ∅.2). n.2) Cäng nghãû Pháön mãöm Ta coï thãø kiãøm chæïng ngay âæåüc ràòng nhæîng thay âäøi cuía biãún laì coï yï nghéa (roî raìng vç caïc haìm a. q) vaì (p’.2) seî âæåüc triãøn khai båíi mäüt pheïp toaïn måïi mod1.(ran (n) ∪ ran (0)). nãúu caïc giaï trë cuía caïc biãún (a. m’) thoía maîn âàûc taí (4. n vaì m laì toaìn pháön) vaì chàût cheî våïi báút biãún (3. m’) båíi caïc pheïp biãún âäøi (4.2). n. âëa chè naìy chè phuû thuäüc vaìo táûp håüp : ran (n) ∪ ran (a) hay roî hån.3)) keïo theo (4.

6) mod1 (1. 5. 6 } u=4∈L (choün u = min (L)) TS. m) rst1 (a’. ta tháúy âaî khäng cheïp laûi caïc giaï trë nhæng chè coï caïc âëa chè coï thãø coï theo mäüt sæû tiãút kiãûm âaïng kãø vãö thåìi gian nhæng khäng låïn làõm vãö khäng gian nhåï.3) hiãûn thæûc (3. (4.2) Caïc pheïp toaïn måïi khåíi taûo laûi caïc håüp thæïc hoïa mä taí trong caïc âàûc taí sau âáy roî raìng cháúp nháûn âæåüc vaì phuì håüp : (a. PHAN HUY KHAÏNH biãn soaûn 139 . n. m’) a’ = a n’ = n m’ = m (a. m) vld1 (a’. n. n’.Âàûc taí 139 Noïi goün laûi. Hãû thäúng måïi hoaût âäüng qua vê duû sau : n 1 1 2 2 3 3 4 5 6 a 1 2 3 0 0 0 m 1 2 3 0 0 0 (4. Giaí thiãút våïi 4096 trang vaì âëa chè cuía D laì 2 bytes. mäùi baíng a vaì n seî chiãún 8 Kbytes. 1) 1 4 2 2 3 3 4 5 6 1 2 3 1 0 0 1 2 3 0 0 0 L = { 4. m’) a’ = n n’ = n m’ = m Nhçn vaìo caïc cäng thæïc.7) (4. n’.

6) {x→y}o{x→u}={x→y} (5. ta tiãúp tuûc âënh nghéa pheïp håüp thaình mäüt caïch chàût cheî hån. chàóng f vaì g. sao cho haìm fog thuäüc vãö táûp X → Z Pheïp håüp thaình coï thãø âæåüc âënh nghéanhæ sau : dom (fog) = { x ∈ dom (g) / g (x) ∈ dom (f) } (fog) (x) = f (g (x)) våïi x ∈ dom (fog) (5. thç haìm fog cuîng laì toaìn pháön. ta coï thãø âån giaín hoïa pheïp thay âäøi biãún âaî âënh nghéa åí (4. Tháût váûy.cuía f thç hai haìm g vaì fog coï cuìng miãön xaïc âënh. taïc âäüng lãn hai toaïn haûng laì hai haìm.3) dom (f) ∩ ran (g) = ∅ keïo theo fog = { } Biãøu thæïc { } chè âënh haìm räùng f o (g \ S) = (fog) \ S (5. Pheïp håüp thaình. thuäüc vãö caïc táûp håüp X → Y vaì Y → Z tæång æïng. ta âaî sæí duûng mäüt caïch phi hçnh thæïc pheïp håüp thaình (composition opertion) cuía p vaì q theo a. m vaì n. Ta coï thãø dãù daìng xáy dæûng mäüt säú luáût kiãøu âaûi säú âãø näúi liãön pheïp håüp thaình våïi caïc pheïp häüi vaì haûn chãú âaî xeït åí muûc 2.1) Vê duû : { 2 → 6.140 Cäng nghãû Pháön mãöm IV.5) (5. kyï hiãûu laì 0. ta cáön chæïng minh hai âàóng thæïc sau âáy : m’ o n’ = (m o n) + { x → y } m’ o o’ = m o a Nghéa laì : (m + { u → y }) o (n + { x → u }) = (m o n) + { x → y } .4) Tæì caïc luáût trãn. nãúu dom (g) = X vaì dom (f) = Y). Trong muûc naìy. 7 → 5 } = { 1 → 6. nãúu miãön trë cuía g nàòm trong miãön xaïc âënh. 7 → 8 } Tæì âënh nghéa trãn coï thãø suy ra ngay ràòng nãúu caïc haìm f vaì g âãöu toaìn pháön (noïi caïch khaïc. Pheïp håüp thaình (cáúu taûo) ÅÍ muûc træåïc. Sau âáy laì mäüt säú luáût nhæ váûy : (f ∪ g) o h= (f o h) ∪ (g o h) f o (g ∪ h) = (fog) ∪ (f o h) (5.7) Vaì ta coï thãø chæïng minh dãù daìng âënh lyï phuì håüp (4. 4 → 3.2) nhæ sau : p=moa q = m o n (5. Mäüt caïch täøng quan hån.5.2) S ∩ rang (g) = ∅ keïo theo (f \ s) og = fog (5. 5 → 8 }o { 1 → 2.5) bàòng caïch sæí duûng caïc tênh cháút trãn.

8).4) vaì (5.2) {u→y}o{x→u}={x→y} theo (5.3) vaì (5. Nhæng : { x → y } o (n \ { x }} = { } theo (5. Triãøn khai thæï hai Muûc naìy seî täúi æu caïch triãøn khai âáöu tiãn âaî trçnh baìy trong muûc 4 bàòng caïch xáy dæûng táûp håüp L caïc âëa chè tæû do cuía D.3) (5.6) Nhæ váûy theo (5. RN = ran (n) TS.2) vaì (5.3) { u → y } o a = { } theo (5. (2. PHAN HUY KHAÏNH biãn soaûn 141 .5) : (m + { u → y }) o (m + { x → u}) = (m o n) \ { x } ∪ { x → y } = (m o n) + { x → y } Màût khaïc ta coï : m \ { u } o a = m o a theo (5.3).2) vaì (2.8) (5. táûp håüp maì ta âaî choün tuìy yï mäüt pháön tæí u trong âàûc taí pheïp toaïn mod1 åí (4.8).4) Nhæ váûy : (m + { u → y }) o a = m o a theo (2. YÏ tæåíng thiãút kãú caïch triãøn khai thæï hai naìy nàòm åí chäø giæî laûi traûng thaïi cuía mäùi âëa chè cuía D maì âëa chè naìy coï thãø thuäüc vãö mäüt (vaì chè mäüt maì thäi) trong 4 táûp håüp råìi nhau nhæ sau : RN _ RN RA ∩ RN RN _ RA RA ∪ RN = L trong âoï RA = ran (a).9) IV. Vaì ta cuîng coï : (m \ { u }) o { x → u } = { } theo (5.5) = (m o n) \ { x } theo (5.4).4) vaì (2.6.Âàûc taí 141 (m + { u → y }) o a = m o a våïi caïc giaí thiãút : u ∉ ran (n) nghéa laì { u } ∩ ran (n) = ∅ u ∉ ran (a) nghéa laì { u } ∩ ran (a) = ∅ Ta coï kãút quaí phuû nhæ sau : (m \ { u }) o (n \ { x }) = (( m \ { u }) o n) \ { x } theo (5.

âëa chè âoï chuyãøn qua traûng thaïi måïi . ol} Ta coï báút biãún sau âáy : RA . ol} Cuäúi cuìng báút biãún thæï ba chè roî ràòng caí hai haìm n vaì a âãöu âån aïnh. nw. Muûc âêch âãø hçnh thæïc hoïa phæång phaïp naìy.2) (6. Táûp håüp caïc haìm tæì A vaìo D nhæ váûy âæåüc kyï hiãûu båíi A ⌡ D nhæ váûy (6.142 Cäng nghãû Pháön mãöm Tuìy theo mäüt âëa chè d cuía D thuäüc vãö mäüt trong bäún táûp håüp trãn. nãúu âëa chè âoï khäng phán chia bãn trong baíng n (nghéa laì nãúu haìm nlaì âån aïnh vaì âiãöu naìy âæåüc giaí thiãút laì luän âuïng). s ∈ D → {fr. vãö âëa chè quaï taíi trong baíng n. nw.RN = adr (ol) RA ∩ RN = adr (cm) RN . khi mäüt thay âäøi xaíy ra. Caïc âëa chè måïi chuyãøn thaình tæû do khi mäüt sæû khåíi âäüng laûi vaì laì træåìng håüp chung khi håüp thæïc hoïa. Khi mäüt pheïp håüp thæïc hoïa hay khåíi âäüng laûi caïc âëa chè tæû do hay chung váùn nhæ cuî.RA = adr (nw) RA ∪ RN = adr (fr) HÇNH VEÎ Trong âoï : RA = ran (a) RN = ran (n) adr (z) = {x ∈ D / s (x) = Z} våïi Z ∈ {fr. Så âäö dæåïi âáy toïm tàõt mäüt caïch phi hçnh thæïc nhæîng chuyãøn âäøi khaïc nhau naìy.Chuï yï ràòng caïc âëa chè cuî khäng liãn quan âãún sæû thay âäøi. cm. khi âoï. ta noïi traûng thaïi tæång æïng seî laì : old (cuî) d ∈ ran (a) d ∈ ran (a) vaì d ∈ ran (n) d ∈ ran (a) d ∉ ran (a) vaì d ∉ ran (n) common (chung) new (måïi) free (tæû do) Khi mäüt âëa chè tæû do âæåüc choün. cm. âëa chè seî tråí nãn tæû do nãúu âaûng åí traûng thaïi måïi hoàûc chuyãøn sang traûng thaïi cuî nãúu âang åí traûng thaïi chung. Cuäúi cuìng. caïc âëa chè cuî chuyãøn thaình tæû do khi håüp thæïc hoïa vaì tråí thaình chung khi khåíi âäüng laûi. ta âæa vaìo mäüt biãún måïi s âënh nghéa traûng thaïi cuía mäùi âëa chè cuía D.1) . nghéa laì hai âëa chè cuía A phán biãût seî luän luän tæång æïng våïi caïc âëa chè cuía D phán biãût qua caïc haìm naìy.

n’. nw → fr. m’) s’ = hos Sau âáy laì mäüt quaï trçnh chuyãøn âäøi cuía hãû thäúng CHÆÌA Chæïng minh xem (4. s) mod2 (x. n. s’) (a.7) (a. n. m’. nw → fr. s) rst2 (a’. vaì vld2 xuáút hiãûn nhæ laì caïc måí räüng tæång æïng tæì muûc 4 : (a. m.håüp thæïc hoïa ol → fr} Ta coï âàûc taí cuía 3 pheïp toaïn måïi mod2.Âàûc taí 143 n∈A⌡D a∈A⌡D Báy giåì seî laì âënh nghéa ba haìm chuyãøn tiãúp láön læåüt laì f. m) mod1 (x. s’) (6. m. PHAN HUY KHAÏNH biãn soaûn 143 . m’) (6. thay âäøi cm → ol} g = {fr → fr.3) trong âoï : L = { Z ∈ D |s (z) = fr } u∈L v = n (x) (a. n’. cm → cm. s) vld2 (a’. n’. m’. y) (a’.6) (a. m) vld1 (a’. n’. n’.khåíi âäüng laûi ol → cm} h = {fr → fr. s’) (6. rst2.6) s’ = gos xem (4. khåíi âäüng laûi thay cho håüp thæïc hoïa (cho moüi âëa chè cuía D) : f = {fr → nw. n. nw → cm.5) s’ = s + {u → f (s (u)).7) TS. m. g vaì h sæí duûng khi thay âäøi (cho caïc âëa chè cuía D liãn quan). y) (a’. n. v → f (s) (v))} xem (4. m’. cm → cm. n.

5)) keïo theo (6.1) vaì (6.1) vaì (6.9) Âäúi våïi 3 âënh lyï åí nhoïm 1.5).3)’ (7.3) vaì (6.1) vaì (6.7) mäüt caïch tæång æïng.1)’ (7.2) chæïng minh (7.7) so våïi caïc pheïp toaïn âàûc taí åí (4.3).2) vaì (6.6) vaì (4.1) (7.6) vaì (4. (4.1)’ (7.6)) keïo theo (6. Traïi laûi.2) vaì (6. Viãûc chæïng minh tênh phuì håüp cuía caïc pheïp toaïn âàûc taí åí (6.10) .2)’ (7.5)) keïo theo (6.3) vaì (6. ta cáön phaíi chæïng minh khäng phaíi cho mäüt træåìng håüp âàûc biãût naìo âoï maì phaíi cho caïc dæî liãûu tæåüng træng thoía maîn nhæîng giaí thiãút naìo âoï.7)) keïo theo (6.3) vaì (6.2) ((6. Træåïc hãút ta cáön chæïng minh ba nhoïm âënh lyï báút biãún sau âáy : ((6. (6.7)) keïo theo (6.2) vaì (6.4) ((6. RN âæåüc âënh nghéa åí (6.3)’ (7.144 Cäng nghãû Pháön mãöm Màûc duì trong muûc træåïc ta âaî kiãøm chæïng kyî læåîng âàûc taí hãû thäúng vaì nháûn âæåüc kãút quaí thoîa maîn. ta coï thãø dáùn âãún caïc giaí thiãút cho caïc âiãöu kiãûn sau âáy : a∈A⌡D n∈A⌡D u ∉ RN u ∉ RA v ∈ RN Trong âoï u vaì âæåüc âënh nghéa åí (6.1) ((6.2)’ (7.6)) keïo theo (6. (4.3) ((6. caïc pheïp toaïn âaî âàûc taí laì phuì håüp vaì cháúp nháûn âæåüc.7)) keïo theo (6.3).6) vaì (6. nhæng chæa âaím baío âæåüc tênh âuïng âàõn cuía âàûc taí trong moüi træåìng håüp.5)) keïo theo (6. Âãø âi âãún mäüt kãút quaí täøng quaït.2)’ (7.6) ((6.3)’ (7. viãûc chæïng minh tênh cháúp nháûn âæåüc phæïc taûp hån.5) ((6.7) laì hiãøn nhiãn vç ràòng trong caïch láûp caïc cäng thæïc thç caïc pheïp toaïn (4.6)) keïo theo (6.5) vaì RA.1)’ (7.7) ((6.8) ((6.

nghéa laì caïc biãøu thæïc f (s (u)) vaì f (s (v)) trong (6. cm} vaì theo (6.{f (x)}) ∪ {y} chæïng minh (7. ta coï : s (u) = fr s (v) = { nw.5) coï nghéa.4) laì haìm bäü pháûn. Cáön chæïng minh ràòng s’ âæåüc âënh nghéa âuïng.{v} RN’ .RN’ = RA .RN’ = (RA .10 HÇNH VEÎ Xaíy ra hai træåìng håüp : 1/ v ∈ RA. PHAN HUY KHAÏNH biãn soaûn 145 .3) ta cáön kãút quaí sau âáy liãn quan âãún sæû quaï taíi cuía mäüt haìm âån aïnh thæìa nháûn maì khäng chæïng minh : f ∈ X ⌡ Y keïo theo f’ ∈ X ⌡ Y x ∈ dom (f) ran (f’) = r’ y ∉ Y .RA’ = (RN . nghéa laì s (v) = nw Khi âoï : RA’ . noïi caïch khaïc ta coï : s (u) ∈ dom (f) s (v) ∈ dom (f) âiãöu naìy hiãøn nhiãn vç ràòng theo (7. nw.10).11 u ≠ v theo 7.ran (f) y ≠ f (x) Trong âoï : f’ = f + {x → y} r’ = (ran (f) .Âàûc taí 145 Mäüt khoï khàn nhoí laì haìm chuyãøn tiãúp f âæåüc âënh nghéa åí (6.RA) ∪ {u} RA’ ∪ RN’ = (RA ∪ RN) .2) : Theo (7.5) ta coï RA’ = RA (vç ràòng a’ = a theo (4.11) vaì (6. cm} Âãø chæïng minh (7.RN TS.10).{u} HÇNH VEÎ 2/ v ∉ RA.RN) ∪ {v} RA’ ∩ RN’ = (RA ∩ RN) . nghéa laì s (v) = cm Khi âoï : RA’ . (7.3)) RN’ = (RN {V}) ∪ {u} theo 7.2) vaì (7.4) ta coï dom (f) = {fr.

tæì âoï ta coï báút biãún bäø sung nhæ sau : {x ∈ D | t (x) = cm} = ran (a) (8.7. m’. s. n. t) rst3 (a’.5) (a.6) . y) (a’. t’) (a. Triãøn khai thæûc hiãûn láön thæï ba Láön naìy.6)) khäng coìn coï taïc duûng næîa vç ràòng ta giaí thiãút ràòng bäü nhoï trung tám laì s seî khäng coìn næîa.4) s’ = t xem (4. ta giaí thiãút ràòng xaíy ra caïc sai soït cáön phaíi dæû phoìng nhåì hãû thäúng håüp thæïc hoïa vaì khåíi âäüng laûi. m. y) (a’.{u} ∪ {v} HÇNH VEÎ Nhæ váûy caïc chuyãøn tiãúp tæì s (u) vaì s (v) nhæ sau fr → nw våïi u cm → ol våïi v trong træåìng håüp 1/ nw → fr våïi v trong træåìng håüp 2/ Cäng nghãû Pháön mãöm Caïc chuyãøn tiãúp naìy tæång æïng våïi caïc chuyãøn tiãúp âaî chè ra båíi haìm g âënh nghéa åí (6. n’. n. cm} (8.2) Ta coï caïc âàûc taí måïi nhæ sau : (a. m) rst1 (a’. m’)(8. m vaì s âæåüc caìi âàût trãn caïc thiãút bë nhåï khaïc nhæ sau : HÇNH VEÎ Tæì caïch täø chæïc naìy. Mäüt giaíi phaïp laì gáúp âäi baíng s lãn âéa cho mäùi láön håüp thæïc hoïa. s’. t) mod3 (x.RA) . ta âaî caìi âàût caïc baíng s vaì s trong bäü nhåï trong våïi muûc âêch tàng tênh hiãûu quaí cuía pheïp thay âäøi bäü nhåï laì nhanh nháút coï thãø. s. n.RA’ = ((RN . Giaí sæí caïc baíng a. n’. t’) (a.4) IV. m. Xáy dæûng baíng måïi t âæåüc tæång æïng våïi báút biãún nhæ sau : t ∈ D → {fr. n. n’.3) t’ = t xem (6. m’.{v}) ∪ {v} RN’ ∪ RA’ = ((RN ∪ RA) .146 RA’ ∩ RN’ = RA ∩ RN RN’ .1) Chuï yï ràòng ta khäng cáön moüi giaï trë caïc traûng thaïi âëa chè âéa vç ràòng t chè duìng âãø taïi sinh laûi baíng s khi khåíi âäüng laûi. n’. n. m’. Våïi muûc âêch trãn. m. s’. s’) (8. ta muäún dæû phoìng caïc sai soït taïc âäüng lãn bäü nhåï trong bàòng caïch khåíi âäüng laûi tæì âéa. s) mod2 (x. ÅÍ âáy. viãûc khåíi âäüng laûi laìm thay âäøi baíng s tæì chênh noï (thæûc tãú laì s’ = gos theo (6.

b’.1) Cuäúi cuìng. m’. PHAN HUY KHAÏNH biãn soaûn 147 . (6. m) vld1 (a’. (0. n’. màût khaïc. nw. n. n.3). c (x)) t (x) = k (d (x). y) (a’. 1} âãø biãøu diãùn s c ∈ D → {0. n.8) c’ = z xem (4.2) (9. s) vld2 (a’. 0) våïi x ∈ D (9. (1. Triãøn khai láön thæï tæ vaì láön thæï nàm Ta seî maî hoïa caïc giaï trë fr.3) Giaí sæí laì pheïp buì (âaío ngæåüc bêt) nhæ sau 0 = 1.3).8).4) nhåì hai pheïp buì vaì haìm h cuîng âaî dënh nghéa åí (6.1).2) Âiãöu naìy laìm âæåüc bàòng caïch khæí caïc biãún tråí thaình dæ thæìa (chæïa s vaì t) båíi caïc pheïp thay âäøi biãún (9. (6.7) t’ = s’ Dãù daìng chæïng minh ràòng caí ba âàûc taí trãn laì phuì håüp vaì cháúp nháûn âæåüc. d’) (a.5) (a. t’) (a. m.7) vaì (9. Màût khaïc ta tháúy ràòng pheïp khåíi âäüng laûi taïi sinh bäü nhåï trong tæì âéa vaì chè tæì âéa maì thäi.2). (8. d) mod4 (x. 1) → nw} Sau âoï ta biãøu diãùn caïc haìm s vaì t nhåì ba chuäùi bit nhæ sau : b ∈ D → {0. nghéa laì mäüt màût.1). (8.5) Ta coï 3 âàûc taí måïi nhæ sau : (a. n’. m. (1. 1}âãø biãøu diãùn t (9.4) Ta tháúy coï thãø maî hoïa haìm f âaî âënh nghéa åí (6. n. (4. cm vaì ol nhæ haìm âån aïnh k nhæ sau : k = {(0. m’.1). c. 0) → cm.3).6) vaì (4.Âàûc taí 147 t’ = t (8. s’) xem (6.6). nhoïm caïc báút biãún (4. n’. n’.7) d’ = b Báy giåì ta chè cáön toïm tàõt laûi nhæîng gç âaî laìm cho âãún luïc naìy. s. 1) → ol. TS. thay âäøi caïc biãún tæång æïng våïi caïc âiãöu kiãûn sau : s (x) = k (b (x).2) vaì (9.m’) b’ = b (9. 1} d → {0. (9.1 = 0 (9. b. s’. sao cheïp laûi caïc âàûc taí (4. m’. t) vld3 (a’. c’. m. 0) → fr.7) vaìo bãn trong cuía (9. (6.4) nhåì pheïp sao cheïp vaì âàût lãö 0 tæång æïng våïi haìm : Z ∈ D → {0} (9.

RA = {x ∈ D / b (x) = 1 vaì c (x) = 1} RA ∪ RA {x ∈ D / b (x) = 0 vaì c (x) = 0} RA = {x ∈ D / d (x) = 1}(9.2) d ∈ D → {0.2) .|A| (vç ràòng a vaì n âãöu âån aïnh) laì mäüt hàòng säú dæång cuía hãû thäúng. y) state’ x∈A y∈V w≠0 a’ = a n’ = n + {x → u} (9.9) (6. 1} (9. âang åí traûng thaïi cm.9) w chæïa caïc pháön tæí cuía táûp håüp L (cardinality) w = | RA ∪ RN | Ta thæìa nháûn ngáöm ràòng caïc táûp håüp D vaì A âãöu laì hæîu haûn. Khi håüp thæïc hoïa vaì khåíi âäüng laûi. 1} c ∈ D → {0.1) (9.2) RA . bäü âãúm w tàng lãn khi vaì chè khi âëa chè v.2) W = | RA ∪ RN | Trong âoï RA = ran (a) RN = ran (n) Sau âáy laì caïc âàûc taí âæåüc toïm tàõt bàòng caïch thay thãú caïc danh saïch daìi caïc biãún båíi hai biãún traûng thaïi state vaì traûng thaïi coï dáúu nhaïy (‘) state’ state mod5 (x. nghéa laì nãúu b (v) = 1 vaì nãúu c (v) = 0 Våïi sæû måí räüng måïi naìy. bäü âãúm w âæåüc khåíi taûo giaï trë |D| .3) chæïa âiãöu kiãûn træåïc L ≠ ∅ khäng dãù gç tênh âæåüc. Khi coï sæû thay âäøi. ta tháúy ràòng âàûc taí (4.2) (9. báút biãún cuía hãû thäúng luïc naìy seî laì : a∈A→D n∈A→D m∈D→V b ∈ D → {0. 1} (9. quaï taíi trong n.3) (4.3) (6.148 Cäng nghãû Pháön mãöm Khi sao cheïp.RN = {x ∈ D / b (x) = 0 vaì c (x) = 1} RN .2) d ∈ D → {0.10) RA ∩ RN = {x ∈ D / b (x) = 1 vaì c (x) = 0} (6.2) (6.2) w∈N (9.2) (6. Âãø khàõc phuûc nhæåüc âiãøm naìy ta âæa vaìo mäüt biãún måïi w laì mäüt säú nguyãn w∈N (9. 1} (6.

Thæûc tãú. Âàûc taí laìm gç ? Sau âáy ta seî traí låìi cáu hoíi vãö muûc âêch (cho ai. 8 vaì 8. ta seî láûp trçnh cho caïc træåìng håüp âàûc taí (9. PHAN HUY KHAÏNH biãn soaûn 149 . Báy giåì váún âãö laì sæí duûng caïc âàûc taí âãø láûp trçnh. khaïc våïi mäüt chæång trçnh. v → c (v)} d’ = d (b (v) = 1 & c (v) = 0) ⇒ w’ = w .14) c’ = z d’ = b w’ = | D | . bàòng caïch sæí duûng ngän TS.12) c’ = c + {u → c (u).Âàûc taí 149 m’ = m + {u → y} b’ = b + {u → b (u) v → b (v)} (9. (9.14).| A | Trong âoï Z ∈ D → {0} Sau âáy laì quaï trçnh biãún âäøi cuû thãø IV. cho caïi gç) cuía caïc cäng viãûc maì ta âaî laìm. Tæì âàûc taí luïc âáöu åí muûc 3 cho âãún caïc âàûc taí tiãúp theo åí caïc muûc 4.12).13) vaì (9.| A | state vdl5 state’ a’ = n n’ = n m’ = m b’ = b (9. mäüt âàûc khäng phaíi viãút ra âãø maïy tênh coï thãø hiãøu âæåüc maì âãø cho nhæîng NSD coï thãø hiãøu vaì tin tæåíng vaìo tênh âuïng âàõn cuía näüi dung âaî âàûc taí. Vai troì âáöu tiãn cuía mäüt âàûc taí laì cho pheïp måí ra caïc tranh luáûn vãö âãö taìi âàûc taí âãö taìi âàûc taí âãø cáûp âãún. Ta âaî khàóng âënh âæåüc tênh âuïng âàõn cuía âàûc taí båíi caïc chæïng minh âënh lyï phuì håüp vaì cháúp nháûn âæåüc : baío toaìn tênh báút biãún. Trong muûc naìy.8.13) c’ = z d’ = d w’ = | D | . ta âaî sæí duûng caïc raìng buäüc mäùi luïc mäüt mang tênh thæc tiãùn.1 Trong âoï u ∈ {Z ∈ D | b (z) = 0 & c (z) = 0} v = n (x) state rst5 state’ a’ = a n’ = a m’ = m b’ = d (9. 6.

Thæûc hiãûn pheïp täúi æu khi mäüt haìm laì quaï taíi . chæång trçnh tæång æïng seî laì mäüt haìm.150 Cäng nghãû Pháön mãöm ngæî giaí Pascal.2) v := n (x) {tiãúp tuûc thán thuí tuûc end .. {choün u laì âëa chè beï nháút cuía L} while (b (u) ≠ 0) or (c (u) ≠ 0) do u := u + 1 . Modification {goüi thuí tuûc} end . chè âënh mäüt biãøu thæïc khåíi âäüng chæïa caïc biãún coï âaïnh dáúu nhaïy).Thay thãú dáúu = båíi dáúu gaïn bàòng := .x else if not (y in v) then state := bad ..y else if w = 0 then state := no more place else begin State := OK . Quy tàõc 1 : Khi mäüt âàûc taí chæïa caïc âiãöu kiãûn træåïc. Quy tàõc 3 : Caïc âiãöu kiãûn sau khaïc nhau nãúu coï daûng a’ = ... thç coï thãø âæåüc chuyãøn thaình pheïp gaïn qua caïc quy tàõc bäø tråü nhæ sau : . (10. mäùi giaï trë sai cuía âiãöu kiãûn træåïc seî traí vãö biãún traûng thaïi state mäüt giaï trë phán biãût.Loaûi boí caïc âiãöu kiãûn sau daûng âàóng thæïc. Quy tàõc 2 : Khi mäüt âàûc taí chæïa caïc biãún phuû. var u. Thuí tuûc naìy bàõt âáöu båíi caïc lãûnh khåíi âäüng Thuí tuûc Modification nhæ sau : procedure Modification . Chæång trçnh tæång æïng våïi âàûc taí (9. Theo nghéa cuía Pascal. (trong âoï dáúu ba cháúm . Ta âæa vaìo caïc quy tàõc âãø tiãút láûp mäúi liãn hãû giæîa âàûc taí vaì láûp trçnh. v : D begin u := 1 . Vê duû : d’ = d .12) laì nhæ sau : if not (x in A) then state := bad . ta coï thãø måí moüi thuí tuûc chæïa caïc biãún naìy nhæ laì caïc biãún cuûc bäü.

... {choün u laì âëa chè beï nháútcuía L} æhile (b (u) ≠ 0) or (c (u) ≠ 0) do u := u + 1 .2) v := n (x) {tiãúp tuûc thán thuí tuûc end .thæûc hiãûn pheïp täúi æu khi mäüt haìm laì quaï taíi.Thay thãú dáúu = båíi dáúu gaïn bàòng := .1) else if w = 0 then state := no-more-place else begin state := O.. (trong âoï dáúu cháúm .Âàûc taí 151 . Vê duû : d’ = d . else : Caïc âiãöu kiãûn sau khäng loaûi boí cuía âàûc taí (9. thç coï thãø âæåüc chuyãøn thaình pheïp gaïn qua caïc quy tàõc bäø tråü nhæ sau : .K .. (10. else : Caïc âiãöu kiãûn sau khäng bë loaûi boí cuía âàûc taí (9.12) nhæ sau : n (x) := u . Thuí tuûc naìy bàõt âáöu båíi caïc lãûnh khåíi âäüng. (10..Loaûi boí caïc âiãöu kiãûn sau daûng âàóng thæïc.12) nhæ sau : if not (x in A) then state := bad .Thay thãú mäüt âiãöukiãûn sau båíi cáúu truïc âiãöu kiãûn if . var u. Quy tàõc 3 : Caïc âiãöu kiãûn sau khaïc nhau nãúu âãöu coï daûng a’ = .Loaûi boí caïc dáúu nhaïy ‘ . .x else if not (y in V) then state := bad . chè dënh mäüt biãøu thæïc khäng chæïa caïc biãún coï âaïnh dáúu nhaïy). v : D begin u := 1 . ta coï thãø måí mäüt thuí tuûc chæïa caïc biãún naìy nhæ laì caïc biãún cuûc bäü. Thuí tuûc Modication nhæ sau : Procedure Modication . Quy tàõc 2 : Khi mäüt âàûc taí chæïa caïc biãún phuû.y (10.Loaûi boí caïc dáúu nhaïy ‘ . PHAN HUY KHAÏNH biãn soaûn . Modication {goüi giaï trë thuí tuûc} end .. m (u) := y ..Thay thãú mäüt âiãöu kiãûn sau båíi cáúu truïc âiãöu kiãûn if.3) 151 TS.

1 Quy tàõc 4 : Cäng nghãû Pháön mãöm Mäüt caïch hãû thäúng caïc hãû chæång trçnh âaî viãút âæåüc båíi caïc quy tàõc âaím baío tênh “song song” âæa vaìo tæì âàûc taí.152 b (u) := b (u) .2) vaì (10. (10. c (u) := c (u) . c (v) = c (v) . Tæì caïc âoaûn chæång trçnh (10.3) ta nháûn âæåüc cäng thæïc âáúy âuí hån nhæ sau : . b (v) := b (v) .1). if (b (v) = 1) and (c (v) = 0) then w := w .

. âãöu laì âäúi xæïng. b) Mäùi pháön tæí trãn âæåìng cheïo phuû laì pháön tæí nhoí nháút trãn cuìng cäüt âi qua pháön tæí âoï. Viãút lãûnh bàòng giaí ngæî (phoíng Pascal).. Âàûc taí (Specification) 1. + anxn Viãút âàûc taí thãø hiãûn pheïp cäüng. theo caïc så âäö khäúi dæåïi âáy : Âuïng C1 Sai S1 Âuïng S1 Sai Âuïng Sai C1 S2 Sai C2 S2 Âuïng C2 TS. 3. PHAN HUY KHAÏNH biãn soaûn 153 . Viãút âàûc taí thãø hiãûn caïc xáu âäúi xæïng. nhán âa thæïc våïi mäüt hàòng säú a × Pn(x) vaì nhán hai âa thæïc Pn(x) × Qm(x). Mäüt xáu (string) w âæåüc goüi laì âäúi xæïng (palindrome) nãúu w = wR hay âoüc xuäi ngæåüc âoüc ngæåüc âãöu nhæ nhau (wR laì xáu âaío ngæåüc cuía w). våïi n laì tæí säú vaì d laì máùu säú. cäüng. træì.Âàûc taí 153 Mäüt säú âãö thi I. chia vaì so saïnh hai phán säú. Cho ma tráûn vuäng A cáúp n×n.. Viãút âàûc taí xáy dæûng caïc haìm xæí lyï phán säú: ruït goün. mannam.. d). Caïc phán säú (hay säú hæîu tyí) âæåüc biãøu diãùn båíi danh saïch (n. laì nhæîng säú nguyãn (d ≠ 0). 4. chè sæí duûng täúi âa ba cáúu truïc tuáön tæû. Âa thæïc cáúp n âæåüc viãút dæåïi daûng Toaïn hoüc laì : Pn(x) = a0 + a1x1 + a2x2 + . Vê duû caïc xáu omo. âiãöu kiãûn if vaì làûp (while-repeat). . Viãút âàûc taí thãø hiãûn : a) Mäùi pháön tæí trãn âæåìng cheïo chênh laì pháön tæí låïn nháút trãn cuìng haìng âi qua pháön tæí âoï. Láûp trçnh cáúu truïc (Structured programming) 1. so saïnh hai âa thæïc Pn(x) vaì Qm(x). 2. nhán hai phán säú vaì chuyãøn âäøi phán säú thaình säú thæûc. II.

Trçnh baìy mäüt phæång phaïp âãø thæí nghiãûm âån thãø goüi.154 Cäng nghãû Pháön mãöm Sai C1 Âuïng S1 Sai S1 Sai C1 Âuïng C2 Âuïng S3 S2 Sai S2 Âuïng C2 S3 Âuïng S1 Sai Sai C1 S2 Âuïng C1 Âuïng S1 Sai C2 Sai C2 Âuïng S3 S2 2. theo så âäö khäúi dæåïi âáy : III. . Viãút lãûnh bàòng giaí ngæî (phoíng Pascal). S2 vaì S3). chè sæí duûng täúi âa ba cáúu truïc tuáön tæû. Thæí nghiãûm chæång trçnh (Testing) Giaí sæí caïc chæång trçnh âaî cho åí pháön trãn âáy laì caïc âån thãø goüi âãún caïc âån thãø con S1. âiãöu kiãûn if vaì làûp (while repeat).

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->