Phần 3: Tham số biến và tham số trị
1. Lý thuyết
Như đã trình bày trong bài 2, tham số hình thức dùng để khai báo cho dữ liệu vào ra chương trình con. Tham số hình thức có thể có hai loại là tham số biến (tham biến) và tham số trị (tham trị).
*Sự khác biệt của tham số biến và tham số trị như sau: Nếu trong chương trình con có sự thay đổi giá trị của tham số hình thức thì sau khi thực hiện xong chương trình con:
- Tham số biến chứa giá trị đã bị thay đổi
- Tham số trị giữ nguyên giá trị ban đầu.
*Để khai báo là tham số biến ta thêm từ khóa Var trước tham số hình thức (nếu không có Var thì đó là tham số trị).
2. Ví dụ:
Program Vidu_thamso;
Var x, y: integer;
{——————————————————————-}
Procedure HoanDoi(var a, b: integer): integer;
Var tam: integer;
begin
tam:=a; a:=b; b:=tam
end;
{——————————————————————-}
BEGIN
write(‘Nhap hai so nguyen: ‘); readln(x, y);
writeln(‘Hai so vua nhap la: ‘, x:5, y:5);
HoanDoi(x, y);
write(‘Hai so sau khi hoan doi la: ‘, x:5, y:5);
readln
END.
3. Phân tích:
a) Thủ tục HoanDoi khai báo hai tham số a và b là tham biến do đó khi kết thức thủ tục, a và b giữ lại gia trị đã bị thay đổi trong chương trình con.
Trong chương trình trên nếu nhập vào x=5; y=10 thì trên màn hình in ra 2 dòng như sau:
Hai so vua nhap la: 5 10
Hai so sau khi hoan doi la: 10 5
b) Bây giờ sửa lại khai báo chương trình con thành:
Procedure HoanDoi(a, b: integer): integer;
thì kết quả trên màn hình là:
Hai so vua nhap la: 5 10
Hai so sau khi hoan doi la: 5 10
Vì lúc này a và b là hai tham trị nên việc thay đổi giá trị của chúng trong chương trình con sẽ không có tác dụng, khi thoát khỏi chương trình con chúng vẫn giữ nguyên giá trị ban đầu.
c) Tiếp theo sửa lại khai báo chương trình con thành:
Procedure HoanDoi(var a: integer; b: integer): integer;
(a là tham biến, b là tham trị).
thì kết quả trên màn hình là:
Hai so vua nhap la: 5 10
Hai so sau khi hoan doi la: 10 10
Vì lúc này a là tham biến nên giữ lại giá trị đã thay đổi, b là tham trị nên vẫn giữa nguyên giá trị ban đầu.
4. Kết luận:
Tùy theo bài toán ta có thể dùng tham trị hoặc tham biến, thông thường tham số cung cấp dữ liệu vào cho chương trình con được khai báo là tham trị, còn tham số nhận dữ liệu ra thì khai báo là tham biến.
Lưu ý:
- Tham số thực của tham biến chỉ có thể là biến (không thể là giá trị, hằng hay biểu thức)
- Tham số thực của tham trị có thể là biến, hằng, giá trị hoặc biểu thức.
Ví dụ: Với thủ tục HoanDoi trong mục c) ở trên thì các cách gọi nào sau đây là hợp lệ?
a) HoanDoi(x, 20); –> Có
b) HoanDoi(20, y); –> Không
c) HoanDoi(x, y+5); –> Có
d) HoanDoi(x+5, y); –> Không