Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 5: Thực hiện chương trình con - Nguyễn Văn Hòa
Chương 5: Thꢀc hiꢁn
chương trình con
Giꢀng viên: Ph.D Nguyꢁn Văn Hòa
Khoa KT-CN-MT – ðH An Giang
1
ðꢂnh nghĩa
ꢀ Trong NNLT, tác vꢂ gꢃi “call” và trꢀ vꢄ (return)
cꢅa chương trình con ñưꢆc gꢃi chung là liên kꢇt
chương trình con “subprogram linkage”
2
Nꢃi dung chính cꢄa chương
ꢀ Giꢈi thiꢉu chung vꢄ ngꢊ nghĩa cꢅa Call và Return
ꢀ Thꢋc hiꢉn chương trình con ñơn giꢀn
ꢀ Thꢋc hiꢉn chương trình con vꢈi biꢇn cꢂc bꢌ ñꢌng
Stack
ꢀ Chương trình con lòng nhau (nested
Subprograms)
ꢀ Khꢍi (Blocks)
ꢀ Cài ñꢎt phꢏm vi ñꢌng
3
Ngꢅ nghĩa cꢄa viꢁc gꢆi (call) và trꢇ
vꢈ (return)
ꢀ Mꢌt sꢍ tác vꢂ cꢐn thiꢇt cho viꢉc gꢃi chương trình
con
ꢁ Cơ chꢇ truyꢄn các tham sꢍ (truyꢄn tham trꢑ, truyꢄn quy
chiꢇu, truyꢄn kꢇt quꢀ, ...)
ꢁ Các biꢇn cꢂc bꢌ là static hay not static
ꢁ Lưu lꢏi trꢏng thái hiꢉn hành (execution status) cꢅa
chương trình gꢃi CTC
ꢁ Chuyꢒn quyꢄn ñiꢄu khiꢒn cho CTC
ꢁ Cung cꢓp các truy xuꢓt ñꢇn các biꢇn không cꢂc bꢌ
4
Thꢀc hiꢁn CTC ñơn giꢇn: Call
ꢀ Chương trình con ñơn giꢀn “simple”
ꢁ Không lòng nhau và các biꢇn là tĩnh (static)
ꢀ Các tác vꢂ có cꢐn thiꢇt
ꢁ Lưu hiꢉn trꢏng thꢋc thꢑ cꢅa chương trình gꢃi “caller”
ꢁ Thꢋc hiꢉn tiꢇn trình truyꢄn tham sꢍ
ꢁ Chuyꢒn ñꢑa chꢔ trꢀ vꢄ cho chương trình con “callee”
ꢁ Chuyꢒn quyꢄn ñiꢄu khiꢒn cho chương trình con
“callee”
5
Thꢀc hiꢁn CTC ñơn giꢇn: Return
ꢀ Nꢇu sꢕ dꢂng truyꢄn trꢑ-kꢇt quꢀ, thì di chuyꢒn giá
trꢑ hiꢉn hành cꢅa các tham sꢍ hình thꢖc ñꢇn tꢗng
tham sꢍ thꢋc tương ꢖng
ꢀ Nꢇu là hàm, di chuyꢒn giá trꢑ cꢅa hàm ñꢇn vꢑ trí
mà caller có thꢒ lꢓy ñưꢆc
ꢀ Phꢂc hꢘi lꢏi trꢏng thái thꢋc thi cꢅa caller
ꢀ Trꢀ quyꢄn ñiꢄu khiꢒn lꢏi cho caller
6
Thꢀc hiꢁn CTC ñơn giꢇn: Parts
ꢀ Có 2 phꢐn phân biꢉt: phꢐn code thꢋc và phꢐn
noncode (biꢇn cꢂc bꢌ và dꢊ liꢉu có thꢒ bꢑ thay
ñꢙi)
ꢀ ðꢑnh dꢏng, hoꢎc layout, cꢅa phꢐn noncode cꢅa
mꢌt chương trình thꢋc thi con ñưꢆc gꢃi là bꢀn
hoꢏt ñꢌng (activation)
ꢀ Mꢌt thꢒ hiꢉn (instance) bꢀn hoꢏt ñꢌng là mꢚu cꢂ
thꢒ cꢅa bꢀn hoꢏt ñꢌng (bao gꢘm dꢊ liꢉu hoꢏt
ñꢌng cꢅa chương trình con)
7
Bꢇn hoꢉt ñꢃng cꢄa chương trình
con ñơn giꢇn
8
Code và bꢇn hoꢉt
ñꢃng cꢄa chương
trình vꢊi chương
trình con ñơn giꢇn
9
Cài ñꢋt CTC vꢊi biꢌn cꢍc bꢃ ñꢃng Stack
ꢀ Bꢀn hoꢏt ñꢌng phꢖc tꢏp
ꢁ Trình biên dꢑch phꢀi sinh code ñꢒ cꢓp phát và giꢀi
phóng mꢌt cách tưꢛng minh cho các tham sꢍ cꢂc bꢌ
ꢁ Phꢀi hꢜ trꢆ ñꢉ qui “recursion” (tꢏo ñꢘng thꢛi nhiꢄu thꢒ
hiꢉn bꢀn hoꢏt ñꢌng cꢅa mꢌt chương trình con)
ꢁ ðꢉ qui yêu cꢐu nhiꢄu thꢒ hiꢉn cꢅa bꢀn hoꢏt ñꢌng, mꢜi
thꢒ hiꢉn cꢅa bꢀn hoꢏt ñꢌng tương ꢖng vꢈi 1 mꢌt lꢐn
gꢃi ñꢉ qui
ꢁ Mꢜi thꢒ hiꢉn cꢐu 1 bꢀn copy các tham sꢍ hình thꢖc,
các biꢇn cꢂc bꢌ cꢓp phát ñꢌng và ñꢑa chꢔ trꢀ vꢄ
10
Bꢇn hoꢉt ñꢃng cꢄa NN vꢊi biꢌn cꢍc
bꢃ ñꢃng Stack
11
Cài ñꢋt CTC vꢊi biꢌn cꢍc bꢃ ñꢃng
Stack Bꢇn hoꢉt ñꢃng
:
ꢀ ðꢑnh dꢏng cꢅa bꢀn hoꢏt ñꢌng là tĩnh, nhưng kích
thưꢈc cꢅa nó có thꢒ ñꢌng
ꢀ Liên kꢀt ñꢁng (dynamic link) trꢝ ñꢇn ñꢔnh cꢅa bꢀn
hoꢏt ñꢌng cꢅa caller
ꢀ Bꢀn hoꢏt ñꢌng ñưꢆc xác ñꢑnh ra mꢌt cách ñꢌng
khi gꢃi chương trình con
ꢀ Run-time stack
12
Ví dꢍ: Hàm C
void sub(float total, int part)
{
int list[5];
float sum;
…
}
13
Ví dꢍ không ñꢁ qui
void fun1(int x) {
int y;
...
ꢂ 2
fun3(y);
}
void fun2(float r) {
int s, t;
...
ꢂ 1
fun1(s);
Hàm main gꢆi fun2
Hàm fun2 gꢆi fun1
}
void fun3(int q) {
... ꢂ 3
Hàm fun1 gꢆi fun3
}
void main() {
float p;
...
fun2(p);
}
14
Ví dꢍ không ñꢁ qui
15
Dynamic Chain và Local Offset
ꢀ Tꢞp hꢆp các dynamic links trong stack tꢏi mꢌt
thꢛi ñiꢒm nào ñó ñưꢆc gꢃi là dynamic chain,
hoꢎc call chain
ꢀ Các biꢇn cꢂc bꢌ có thꢒ ñưꢆc truy xuꢓt thông qua
các offset cꢅa nó trong bꢀn hoꢏt ñꢌng. Offset này
ñưꢆc gꢃi là local_offset
ꢀ Local_offset cꢅa mꢌt biꢇn cꢂc bꢌ có thꢒ ñưꢆc xác
ñꢑnh bꢟi trình biên dꢑch ngay thꢛi ñiꢒm dꢑch hoꢎc
thꢛi ñiꢒm thꢋc thi
16
Ví dꢍ vꢊi ñꢁ qui
int factorial (int n) {
<-----------------------------1
if (n <= 1) return 1;
else return (n * factorial(n - 1));
<-----------------------------2
}
void main() {
int value;
value = factorial(3);
<-----------------------------3
}
17
Bꢇn hoꢉt ñꢃng cꢄa factorial
18
19
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Nguyên lý ngôn ngữ lập trình - Chương 5: Thực hiện chương trình con - Nguyễn Văn Hòa", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_nguyen_ly_ngon_ngu_lap_trinh_chuong_5_thuc_hien_ch.pdf

