HÀM

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