0
K
K
THU
THU
T L
T L
P TRÌNH
P TRÌNH
KTHUT PHÁT TRIN CHƯƠNG TRÌNH
NI DUNG
Hàm và Thtc
Phát trin chương trình bng phương pháp tinh
chnh dn tng bước.
Định nghĩa và sdng hàm trong ngôn ngC
Hàm/thtc đệ quy
1
H
HÀ
ÀM V
M VÀ
ÀTH
TH
T
T
C
C
Thtc (Procedures) và Hàm (functions) thhin
hai dng ca chương tình con (subprograms)
Cho phép lp đi lp li mt đon code hoc mt tính
toán nht định.
Hàm/thtc có th được gi tnhiu chkhác nhau
trong chương trình.
Bng cách thay thếmt dãy các chthbi mt lnh duy nht
(lnh gi hàm/thtc) sgiúp mã ngun d đọc và dduyt li
hơn.
Hàm có kết qutrvcòn thtc thì không.
2
Đối s Tham biến (Arguments and Parameters)
d
{ Cng num1 và num2 ri ghi kết quvào biến sum}
Procedure Adder(num1 : real; num2 : real; var sum : real);
begin
sum := num1 + num2;
end;
Phm vi ca các biến:
biến cc b trong chương trình con
biến toàn cc
3
Vài đim quan trng v đối và tham biến ca chương trình con:
S lượng đối shay tham sthc s(arguments) nht thiết phi
bng stham biến (parameters)
Tht quan trng. Đối s đầu tiên tương ng vi tham biến đầu
tiên, đối sth k tương ng vi tham biến thk, …
Kiu dliu ca mi đối sphi tương thích vi kiu dliu ca
tham biến tương ng.
Tên không quan trng. Tên ca đối skhông nht thiết phi ging
vi tên tham biến tương ng ca nó.
Phân bit hai cách truyn dliu cho hàm/thtc: truyn theo
tham chiếu ( by reference ) hay truyn theo tr(by value)
4
Truyn theo tham chiếu: vtrí trong bnh (đa ch)
ca đi s đưc truyn cho chương trình con, cho phép
chương trình con truy nhp ti biến thc svà thay đi
ni dung ca nó.
Truyn theo tr: giá trca đi s đưc truyn cho
chương trình con, cho phép chương trình con truy nhp
đến “bn sao” ca biến. Truyn theo trbo toàn ni
dung ca biến ban đu.
5
Ưu đim ca các hàm/thtc
Chia tách và kim soát (“Chia để tr”)
Kh năng qun lý chương trình và phát trin
Kh năng sdng li các hàm/thtc
Sdng các hàm/thtc đã có sn, chy n định để xây
dng các khi chương trình mi
Tính tru tượng: che du các chi tiết bên trong hàm
Tránh phi lp li mt đon chương trình (code)
6
C
Cá
ác bư
c bư
c th
c th
c hi
c hi
n ph
n phá
át tri
t tri
n chương tr
n chương trì
ình
nh
Hiu rõ yêu cu bài toán: có thdin đạt li bài toán
bng ngôn ng đặc t, các kí hiu toán hc hay các
công thc.
Mc tiêu chung ca chương trình là gì?
Chương trình cn dliu vào là gì?
Dliu ra ca chương trình là gì? s như thếnào? kết xut ra
đâu? (màn hình, máy in, đĩa?)
Công thc tính hay cách xlý thếnào để kết qu(dliu)
ra?
Dliu vào và ra nên định dng nào?
7
C
Cá
ác bư
c bư
c th
c th
c hi
c hi
n ph
n phá
át tri
t tri
n chương tr
n chương trì
ình
nh
Hình thành ý tưởng vcách gii bài toán
Chương trình có th được phân tách thành các quá trình ri
rc (các mô đun) như thếnào?
Chương trình chính ssdng các mô đun này như thếnào?
Các mô đun giao tiếp vi nhau như thếnào?
Nhng mô đun này có cn tách thành các phn chc năng nh
hơn?
8
Thiết kếthut toán bng phương pháp tinh chnh dn
tng bước.
Cài đặt chương trình theo thut toán
Viết chương trình chính (vic viết các mô đun như thếnào s
hoàn thin sau. Thay vào đó, có thtm đưa ra nhng lnh
gi định để chương trình có thhat động. Điu này cho
phép thnghim tính logic ca chương trình chính).
Cui cùng, viết các mô đun. Kim nghim và duyt li tng mô
đun tht kri trước khi đưa vào chương trình chính. Nếu mô
đun được phân tách thành nhiu tiến trình nh hơn thì phi
viết mã (code) cho các tiến trình này trước, thnghim và
duyt li cn thn ri mi ghép li thành mô đun.
9
PHƯƠNG PH
PHƯƠNG PHÁ
ÁP TINH CH
P TINH CH
NH T
NH T
NG BƯ
NG BƯ
C
C
Chiến lược thiết kếttrên xung (top - down)
Thiết kếgii thut ttng th đến chi tiết
Module hoá bài toán
Chia bài toán (module chính) thành các module con cho đến khi
mi module con là mt bài toán đã biết cách gii quyết
“Chia để tr
Chia (Divide): Chia bài toán ln, thành nhiu bài toán nh
Tr(Conquer): Sdng thut toán đệ quy để gii tng bài toán
nh
Kết hp (Combine): To ra li gii cho bài toán cui cùng bng
cách sdng thông tin tkết qugii các bài toán nh.
10
PHƯƠNG PH
PHƯƠNG PHÁ
ÁP TINH CH
P TINH CH
NH T
NH T
NG BƯ
NG BƯ
C
C
Stepwise refinement
Tinh thn: module hoá bài toán, thiết kếkiu top-down
Bước 0. Trình bày ý chính ca gii thut bng ngôn ngt
nhiên.
?Làm cái gì?
Bước 1 tr đi: Chi tiết hoá dn nhng ý trong gii thut, s
dng nhiu ngôn nggicode (gi pseudo code) hơn.
Kết qucui cùng ca quá trình tinh chnh là chương trình viết
trên ngôn nglp trình đã chn trước vi cu trúc dliu dng
lưu tr, cài đặt cth.
?Làm như thếnào?
11
PHƯƠNG PH
PHƯƠNG PHÁ
ÁP TINH CH
P TINH CH
NH T
NH T
NG BƯ
NG BƯ
C
C
Bài toán: Tìm các s 2 chsmà khi đảo trt tca
hai s đós được mt snguyên tcùng nhau vi s
đã cho.
Bước 0:
12
PHƯƠNG PH
PHƯƠNG PHÁ
ÁP TINH CH
P TINH CH
NH T
NH T
NG BƯ
NG BƯ
C
C
Bước 1.
Dliu vào:
Dliu ra:
Ý tưởng thut toán:
Tìm các st 10 đến 99 thomãn yêu cu và ghi vào mng S và n
s lượng các stìm được.
Hin thkết qutmng S.
13
PHƯƠNG PH
PHƯƠNG PHÁ
ÁP TINH CH
P TINH CH
NH T
NH T
NG BƯ
NG BƯ
C
C
Bước 2.
Function Tim
Vào:
Ra: mng S và n
Biến nguyên n lưu s lượng các stìm được
1. n := 0;
2. Vi mi sx trong [10..99],
Kim tra xem x có s đảo là nguyên tcùng nhau hay không, nếu
đúng thì đưa x vào mng S và n := n + 1;
14
PHƯƠNG PH
PHƯƠNG PHÁ
ÁP TINH CH
P TINH CH
NH T
NH T
NG BƯ
NG BƯ
C
C
Bước 3. Hàm tìm s đảo
Function Sodao
Vào: x là s nguyên dương
Ra: S đảo ca x
Ý tưởng: Tx, ln lượt ly các chstbên phi ca x để to s
y ttrái sang phi.
1. Khi đầu y:=0
2. Vi x> 0, lp quá trình ly chshàng đơn vca x bsung
vào bên phi y
Tính y := y * 10 + (x mod 10) ri x := x div 10
3. Trvs đảo là y
15
PHƯƠNG PH
PHƯƠNG PHÁ
ÁP TINH CH
P TINH CH
NH T
NH T
NG BƯ
NG BƯ
C
C
Bước 4. Kim tra xem x và s đảo ca nó nguyên t
cùng nhau hay không
Function NTCN
Vào: x s nguyên dương
Ra: True, nếu x và s đảo nguyên tcùng nhau
False, nếu ngược li.
Ý tưởng: x là nguyên tcùng nhau vi s đảo ca x khi và ch
khi UCLN(x, Sodao(x)) = 1.
if UCLN(x, Sodao(x)) = 1 then Return True
else Return False;
16
PHƯƠNG PH
PHƯƠNG PHÁ
ÁP TINH CH
P TINH CH
NH T
NH T
NG BƯ
NG BƯ
C
C
Bước 5. Tìm UCLN ca hai s nguyên dương: Thut toán Euclid
Function UCLN
Vào: m, n nguyên (m >= n>= 0)
Ra: UCLN ước chung ln nht ca m,n
Biến r là s nguyên dương
1. Nếu m>n thì chuyn sang bước 2, ngược li, hoán chuyn giá trca m và
n.
2. Nếu n bng 0 thì trvUCLN = m và kết thúc thut toán
Ngược li, chuyn sang bước 4.
3. Tính r là phn dư ca phép chia m cho n.
4. Gán giá trca n cho m và ca r cho n. Quay li bước 2.
17
PHƯƠNG PH
PHƯƠNG PHÁ
ÁP TINH CH
P TINH CH
NH T
NH T
NG BƯ
NG BƯ
C
C
Bước 6.
Hàm tìm UCLN
Function UCLN(a,b: integer) : integer;
Var r: integer;
Begin
If m < n then
Begin r := m; m := n; n := r; end;
While n > 0 do
Begin
r := m MOD n;
m := n; n := r;
end;
UCLN := m;
End;
18
PHƯƠNG PH
PHƯƠNG PHÁ
ÁP TINH CH
P TINH CH
NH T
NH T
NG BƯ
NG BƯ
C
C
Function Sodao(x: integer): integer;
Var y: integer;
Begin
y := 0;
while x > 0 do
begin
y := 10*y + (x MOD 10);
x := x DIV 10;
end;
Sodao := y;
End;
19
PHƯƠNG PH
PHƯƠNG PHÁ
ÁP TINH CH
P TINH CH
NH T
NH T
NG BƯ
NG BƯ
C
C
Function NTCN (x: integer): Boolean;
Begin
If UCLN(x, Sodao(x)) = 1 then NTCN := True
Else NTCN := false;
End;