1. Các lý thuyết về hàm
a) Khái niệm: Hàm là một
chương trình con thực hiện một số thao tác nào đó và trả về một giá trị thông
qua tên của nó.
Ví dụ: Hàm
sqrt(X); Sqr(Y); Sin(X); Copy(S,n,vt);…
- Nếu viết
N:=sqrt(X); đúng bởi vì cú pháp của câu lệnh gán là: <Tên biến>:=<biểu
thức>; máy sẽ lấy giá trị của biểu thức gán cho tên biến. Vì tên hàm có giá
trị nên phép gán trên là đúng.
- Nếu viết
N:=Readln(a); Sai vì tên thủ tục không có giá trị nên không thể thực hiện được
phép gán.
b) Cấu trúc của hàm:
Function <tên hàm> [(<danh
sách tham số>]: <kiểu dữ liệu của tham số>)]:<Kiểu dữ liệu của
hàm>;
[<phần khai báo>];
begin
[<dãy
các lệnh>];
<
tên hàm> := <biểu thức>;
end;
- Những phần ghi trong dấu [] thì có thể
có hoặc không, như vậy danh sách tham số, phần khai báo, dãy lệnh của hàm có
thể có hoặc không.
b) Phân biệt thủ tục và hàm:
· Giống nhau:
- Đều là chương trình con thực hiện một số
thao tác nào đó.
- Hàm và thủ tục có thể gọi đến nhau.
· Khác nhau:
- Hàm khác thủ tục ở điểm căn bản là hàm
luôn trả về một giá trị thuộc kiểu xác định thông qua tên hàm. (các kiểu dữ
liệu đơn giản: integer, real, boolean, char, string).
- Vì tên hàm có giá trị cụ thể nên hàm
được sử dụng giống như một biểu thức, còn thủ tục thì sử dụng giống như một câu
lệnh (clrscr; readln(a);..)
3. Ví dụ
Bài 1: Viết chương trình tìm số nhỏ nhất trong 4 số bất kì nhập từ bàn phím
với việc sử dụng một hàm tìm số nhỏ nhất trong 2 số.
Ý tưởng: Tìm số nhỏ nhất
trong 2 số a và b; tìm số nhỏ nhất trong 2 số c và d; Tìm số nhỏ nhất trong 2
số nhỏ nhất vừa tìm được.
- Vì muốn sử dụng một chương trình con mà giá trị nhỏ nhất của 2 số được
lưu trong tên nên sử dụng hàm.
Giải quyết bài toán:
Program sonhonhat;
Uses crt;
Var a,b,c,d:real; {a,b,c,d:
là biến toàn cục được sử dụng ở chương trình chính và mọi chương trình con}
Function min(x,y:real):Real; {x,y là tham số hình thức mang dữ liệu
đầu vào giả định}
Var m:real; {m là biến cục bộ chỉ sử dụng được ở chương trình con
này}
Begin
If x<y then m:=x else m:=y;
Min:=m; {không nhất thiết sử dụng m}
End;
BEGIN
Writeln(‘nhap vao 4 so thuc:’);readln(a,b,c,d);
Write(‘So nho nhat trong 4 so:’,min(min(a,b),min(c,d))); {c,b,c,d,min(a,b),min(c,d) là tham số thực
sự mang dữ liệu đầu vào thực}
Readln;
END.
Bài 2: Tính an
+bm +cp Với a,b,c là các số thực, n,m,p là các số nguyên
dương;
Ý tưởng: Việc tính an
, bm , cp có tính chất tương tự nhau nên dùng một chương
trình con tính lũy thừa của xk nào đó; Kết quả chương trình con tham
gia vào biểu thức nên sử dụng hàm.
Giải quyết bài toán:
Program tongluythua;
Uses crt;
Var a,b,c:Real; m,n,p:byte;Tong:real;
Function lthua(x:real; k:byte):real;
Var LT:real;
Begin
LT:=1; For i:=1 to k do LT:=LT*X;
Lthua:=LT;
End; {nếu viết lthua:=lthua*X; thì sai thì tên hàm không tham gia vào
biểu thức vế phải}
BEGIN
Write(‘nhap co so:’); readln(a,b,c);
Write(‘nhap so mu:’); readln(m,n,p);
Tong:=lthua(a,n)+lthua(b,m)+lthua(c,p);
Write(‘Ket qua=’,tong:8:1);
Realn;
END.
Chú ý:
Tham số hình thức và tham số thực sự phải có cùng số lượng và tương ứng nhau về
kiểu dữ liệu.
Không có nhận xét nào:
Đăng nhận xét