Tải bản đầy đủ
Truyền tham số cho chương trình con

Truyền tham số cho chương trình con

Tải bản đầy đủ

trình con đó. Do vậy một tham trị không bao giờ là kết quả tính toán của chương
trình con.
Ví dụ 4: Viết chương trình tính lập phương.
PROGRAM Tinh_Lap_Phuong;
VAR x: integer; {x là biến toàn cục}
PROCEDURE LapPhuong(var a:integer); {a là một tham số biến}
Begin
a:=a*a*a;
End;
BEGIN
write(‘Nhập số cần tính lập phương x = ‘); readln(x);
LapPhuong(x); {tham số thực x được truyền cho tham số biến a}
writeln(‘Lập phương của số vừa nhập = ‘, x);
Readln;
END.
Ví dụ 5: Về sự thay đổi giá trị của tham số biến và tham số giá trị
Trong chương trình dưới đây, thủ tục có hai tham số a và b: a là tham số giá trị còn
b là tham số biến. Hãy xem sự thay đổi giá trị của 2 biến x và y của chương trình
chính trước và sau khi gọi thủ tục thamso:
Program vidu_5;
Uses crt;
Var x,y: integer;
Procedure thamso(a: integer; var b: integer);
Begin
a:= a + 6;
b:= b + 8;
end;
13

BEGIN
Write(‘ nhap x = ‘); readln(x);
Write(‘ nhap y = ‘); readln(y);
Writeln(‘gia tri hai so vua nhap la x = ‘,x:2,’ va y =’,y:2);
Thamso(x,y);
Writeln(‘ gia tri hai so sau khi goi thu tuc tham so la x = ‘,x:2,’ va y =’,y:2);
Readln;
END.
Ta thấy sau khi thực hiện chương trình thì x sẽ không thay đổi giá trị còn y sẽ
có giá trị thay đổi. Kết quả thực hiện chương trình như sau:

Ví dụ 6: Viết hàm tính ước chung lớn nhất của 2 số nguyên dương, tiếp đó sử
dụng hàm này để xây dựng hàm tính bội số chung nhỏ nhất của hai số nguyên
dương
- Hàm tính ước chung lớn nhất:
Function UCLN(a,b:integer) : integer;
Var sodu, t : integer;
Begin
If b>a then
Begin
14

T:=b; b:=a; a:=t:
End;
Sodu := a mod b;
While sodu <> 0 do
Begin
A:=b; b:=sodu; sodu:=a mod b;
End;
UCLN := b;
End;
- Hàm tính bội chung nhỏ nhất
Function BCNN (a,b : integer) : integer;
Var tg : integer;
Begin
Tg := UCLN (a,b);
BCNN := a*b div tg;
End;
Qua ví dụ trên ta thấy chương trình con sau có thể sử dụng lời gọi chương
trình con trước cùng cấp.
4. Các bước cần làm khi viết một chương trình con
Bước 1: Đặt câu hỏi chương trình con là Procedure hay Function?
Giải quyết:
Chương trình con là Function khi và chỉ khi thỏa mản đồng thời các yêu cầu sau:
- Nếu ta muốn nhận lại một và chỉ một kết quả mà thôi.
- Kết quả phải là kiểu xác định (kiểu vô hướng).
- Có cần dùng tên của Hàm để viết trong các biểu thức hay không ?

15

- Nếu không thỏa mản các tinh chất trên thì chương trình con là Procedure.
Ví dụ : Function BinhPhuong( x: real) : real;
Begin
BinhPhuong := x * x;
End;
(*---------------------------------------------*)
Procedure BinhPhuong( x : real; var y: real);
Begin
y:=x*x;
End.
Xem cách tính c = a2 + b2
+ Nếu dùng Function: c: = BinhPhuong(a) + BinhPhuong(b);
+ Nếu dùng Procedure với một biến trung gian tg:
BinhPhuong(a,tg); c:=tg; (c:=a2)
BinhPhuong(b,tg); c:= c+tg; (c:= a2 + b2)
Như vậy với bài này chúng ta nên chọn chương trình con là hàm (Function) thì sẽ
hợp lí và nhanh hơn.
Bước 2: Giải quyết vấn đề tham số của chương trình con.
Giải quyết :
- Chương trình con có cần tham số không?
- Nếu đối tượng của chương trình con là biến toàn cục thì biến này không cần đưa
vào làm tham số.
- Nếu chương trình phải thực hiện với nhiều đối tượng theo cùng một qui cách ta
phải khai báo tham số ở phần đầu chương trình.
- Nếu có tham số thì loại tham số nào ?
- Các tham số đóng vai trò cung cấp dữ liệu đầu vào sẽ là các Tham trị.
- Các tham số là các kết quả thu lại được từ chương trình con là Tham biến.
16