Tải bản đầy đủ (.pdf) (63 trang)

Bài giảng lý thuyết ngôn ngữ lập trình chương 8 cđ CNTT hữu nghị việt hàn

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (278.01 KB, 63 trang )

Lý thuyết ngôn ngữ lập trình

Chương 8
CHƯƠNG TRÌNH CON


Nội dung
Khái niệm
Đặc tả và cài đặt chương trình con
Phương pháp truyền tham số cho chương
trình con
chương trình con chung
Đồng thường trình
Thực thi chương trình con


Khái niệm
Có hai khả năng trừu tượng hoá cơ bản có
thể được bao gồm trong một NNLT là:


sự trừu tượng hoá quá trình



sự trừu tượng hoá dữ liệu.
Trong thời kỳ đầu của NNLT bậc cao, chỉ
có sự trừu tượng hoá quá trình. Trong
thập niên 80 của thế kỷ 20, nhiều người đã
bắt đầu tin rằng sự trừu tượng hoá dữ liệu
là cũng quan trọng như sự trừu tượng hoá


quá trình.


Khái niệm
Máy tính có thể lập trình được đầu tiên,
Babbages’s Analytical Engine, được xây
dựng trong những năm 1940, đã có khả
năng sử dụng lại các tập hợp của các thẻ
đục lỗ mang lệnh trong các vị trí khác nhau
của chương trình. Trong một NNLT hiện
đại, những thẻ đục lỗ mang lệnh đó giống
như là các tập hợp các câu lệnh được viết
ra và được gọi là chương trình con.
Chương trình con là một phép toán trừu
tượng được định nghĩa bởi người lập
trình.


Khái niệm (tt)
Chương trình con có các đặc tính chung
như sau:
- Tất cả chương trình con đều chỉ có một
điểm vào (entry point).
- Chương trình gọi bị tạm dừng trong suốt
thời gian nó gọi chương trình con thực thi,
có nghĩa là chỉ có một chương trình con
duy nhất (thuộc chương trình đó) được
thực thi trong thời gian đó.
- Điều khiển luôn luôn được trả về cho
chương trình gọi khi việc thực thi chương

trình con kết thúc.


Đặc tả và cài đặt chương trình con
Đặc tả chương trình con
Sự đặc tả chương trình con bao gồm:
- Tên của chương trình con
- Số lượng các tham số, thứ tự của chúng
và kiểu dữ liệu của mỗi một tham số.
- Số lượng các kết quả, thứ tự của chúng
và kiểu dữ liệu của mỗi một kết quả.
- Hoạt động được thực hiện bởi chương
trình con.


Đặc tả và cài đặt chương trình con
Chương trình con biểu diễn một hàm toán
học, là một ánh xạ từ tập hợp các tham số
đến tập hợp các kết quả. Chương
trình con trả về một kết quả duy nhất
trong tên chương trình con thường được
gọi là một hàm.
Cú pháp điển hình đặc tả hàm được quy
định trong ngôn ngữ lập trình C như sau:
< Tên hàm > (< danh sách các đối số>)
< Khai báo biến >
{ <Khai báo thêm các biến >
< Các câu lệnh >
}



Đặc tả và cài đặt chương trình con (tt)
Trong đó :
+ Tên hàm : buộc phải có.
+ Danh sách các đối số : không bắt buộc. Có hay
không tuỳ theo chúng ta định dùng hàm đó làm gì.
+ Khai báo biến : Nếu Danh sách các đối số mà có
thì phần này buộc phải có. Còn nếu không thì
ngược lại có thể bỏ qua.
+ Phần trong { } : là thân hàm. Dấu { } là bắt buộc
đối với mọi hàm.
+ < Khai báo tham biến > : ngay sau { và gọi là biến
cục bộ dành riêng cho hàm sử dụng.
+ đối số luôn luôn truyền theo trị ( không thay đổi
giá trị).


Đặc tả và cài đặt chương trình con (tt)
Ví dụ : Chương trình C tính giai thừa có sử
dụng chương trình con.
#include <stdio.h>
unsigned long giaithua(int n)
{ unsigned long ketqua = 1;
int i;
for (i=2; i<=n; i++)
ketqua *= i;
return ketqua;
}



Đặc tả và cài đặt chương trình con (tt)

void main()
{ int n;
printf("\nNhap vao gia tri N : ");
scanf("%d", &n);
printf("%d! = %lu", n, giaithua(n));
getch();
}


Đặc tả và cài đặt chương trình con (tt)

Nếu chương trình con trả về nhiều
hơn một kết quả hoặc không có
kết quả trả về trong tên chương trình
con thường được gọi là thủ tục
(procedure hoặc subroutine).


Đặc tả và cài đặt chương trình con (tt)
Chúng ta xét một thủ tục được viết trong ngôn ngữ
lập trình Pascal như sau:
Ví dụ:
Procedure Docdl;
Var i:integer;
Begin
Readln(fi,n);
For i:=1 to n do
read(fi,a[i]);

end;
Trong ví dụ này, tham số có tên đứng sau VAR biểu thị một
kết quả hoặc một tham số có thể bị thay đổi.


Đặc tả và cài đặt chương trình con (tt)
Mặc dù chương trình con biểu diễn một hàm
toán học nhưng nó cũng có các vấn đề
tương tự như đối với các phép toán
nguyên thuỷ:
- Chương trình con có thể có các tham số
ẩn trong dạng biến non-local mà nó tham
chiếu.
- Chương trình con có thể có kết quả ẩn
(hiệu ứng lề) được trả về thông qua sự
thay đổi các biến non-local hoặc thông qua
việc thay đổi các tham số vào-ra của nó.


Đặc tả và cài đặt chương trình con (tt)

- Chương trình con có thể nhạy cảm với tiền
sử (tự sửa đổi), có nghĩa là kết quả của nó
không chỉ phụ thuộc vào tham số được
cho tại lần gọi đó mà còn phụ thuộc vào
toàn bộ lịch sử các lần gọi trước đó. Nhạy
cảm với tiền sử có thể do dữ liệu cục bộ
vẫn còn giữ lại giữa các lần gọi của
chương trình con hoặc thông qua sự thay
đổi mã riêng của nó (ít phổ biến hơn).



Đặc tả và cài đặt chương trình con (tt)
Cài đặt chương trình con
Các phép toán nguyên thuỷ được cài đặt
bằng cách dùng cấu trúc dữ liệu và các
phép toán được cung cấp bởi máy tính ảo
bên dưới ngôn ngữ lập trình.
Chương trình con biểu diễn một phép toán
được xây dựng bởi người lập trình và do
đó chương trình con được cài đặt bằng
cách dùng cấu trúc dữ liệu và các
phép toán được cung cấp bởi chính
bản thân ngôn ngữ lập trình đó.


Đặc tả và cài đặt chương trình con (tt)

Sự cài đặt được xác định bởi thân chương
trình con, bao gồm cả việc khai báo dữ
liệu cục bộ xác định cấu trúc dữ liệu được
dùng cho chương trình con và các lệnh
xác định hành động sẽ làm khi chương
trình con thực hiện.


Đặc tả và cài đặt chương trình con (tt)

Sự khai báo và các lệnh thường được bao
gói, người sử dụng chương trình con

không thể truy xuất được tới dữ liệu cục
bộ và các lệnh bên trong chương trình
con. Người sử dụng chỉ có thể gọi chương
trình con với một tập hợp các tham số và
nhận lại các kết quả đã được tính toán.


Đặc tả và cài đặt chương trình con (tt)

Thông thường trong chương trình con còn
có thể có các chương trình con khác biểu
thị các phép toán được định nghĩa bởi
người lập trình và các chương trình con đó
chỉ dùng cho chương trình con chứa
chúng. Những chương trình con "cục bộ"
này được bao gói, nghĩa là chúng không
thể được gọi tới từ bên ngoài chương trình
con chứa chúng.


Đặc tả và cài đặt chương trình con (tt)

Kiểm tra kiểu cũng là một vấn đề quan trọng
đối với chương trình con. Mỗi lần gọi
chương trình con đòi hỏi các tham số có
kiểu đúng như đã được xác định trong sự
đặc tả chương trình con. Kiểu của kết
quả được trả về của chương trình con
cũng phải được biết đến.



Đặc tả và cài đặt chương trình con (tt)

Vấn đề kiểm tra kiểu tương tự như đối với
các phép toán nguyên thuỷ. Kiểm tra kiểu
có thể được thực hiện một cách tĩnh trong
quá trình dịch, nếu đã có sự khai báo kiểu
cho các tham số và kết quả của mỗi một
chương trình con. Mặt khác kiểm tra kiểu
có thể là động trong quá trình thực hiện
chương trình. Sự chuyển đổi kiểu ẩn các
tham số để đổi chúng thành các kiểu đúng
cũng có thể được cung cấp một cách tự
động bởi sự cài đặt ngôn ngữ.


Đặc tả và cài đặt chương trình con (tt)
Ví dụ 8.3:
#include <stdio.h>
unsigned USCLN (unsigned n, unsigned m)
{ while (n != 0 && m != 0)
if (n>m)

n -= m;

else

m -= n;

if (n == 0)

return m;
else
return n;
}


Đặc tả và cài đặt chương trình con (tt)
unsigned BSCNN (unsigned n, unsigned m)
{
return n * m / USCLN(n, m);
}
void main()
{ unsigned n, m;
printf("\nNhap hai vao so nguyen duong : ");
scanf("%u%u", &n, &m);
printf("\nUSCLN cua %u va %u = %u", n, m, USCLN(n,m));
printf("\nBSCNN cua %u va %u = %u", n, m, BSCNN(n,m));
getch();
}


Phương pháp truyền tham số cho chương trình con

Phương pháp truyền tham số cho chương
trình con là lộ trình mà trên đó các tham số
được truyền đến và/hoặc truyền từ các
chương trình con được gọi.
Tham số có hai loại là tham số hình thức và
tham số thực tế.
Tham số hình thức là một loại đặc biệt của

ÐTDL cục bộ trong chương trình con. Nó
được xác định lúc định nghĩa chương trình
con. Khi định nghĩa chương trình con, phải
xác định một danh sách các tham số hình
thức cùng với khai báo kiểu tương ứng.


Phương pháp truyền tham số cho chương trình con

Tham số thực tế là một ÐTDL được gởi cho
chương trình con bằng cách truyền trong
lời gọi thực hiện chương trình con. Hay nói
cách khác, tham số thực tế là giá trị của
biến tại thời gian chạy chương trình.
Thông thường, tham số hình thức được gọi
là tham số, còn tham số thực tế còn được
gọi là đối số.


Phương pháp truyền tham số cho chương trình con (tt)
Chúng ta xét ví dụ sau để phân biệt giữa tham số hình thực
và tham số thực tế.
Ví dụ :
int sum(int a, int b)
{
return (a+b);
}
int sumValue;
int value1 = 20;
int value2 = 40;

sumValue = sum(value1,value2);


×