THAM SỐ TRỊ VÀ THAM SỐ BIẾN
Trong khai báo ở đầu của chương trình con, các tham shình thức có từ
khóa Var đứng trước gọi là tham số biến, ngược lại, nếu không có từ khóa
Var đi tớc thì gọi là tham số trị.
Ví d, trong khai báo hàm tính lũy thừa zk, ta viết :
Function Lt(z : Real ; k: Byte) : Real;
thì z và k đều là các tham số tr hình thức .
Còn theo khai báo của thủ tục Doicho :
Procedure Doicho(Var u, v : Real) ;
thì u và v đều là các tham sbiến hình thức.
13.1.1. Tham strị :
Tham số tr hình thức được cấp một ô nhớ riêng khi chương trình con
được gọi và b xóa bỏ khi chương trình con chạy xong. Nó được coi như một
biến địa phương, nhn a trị ban đầu là tham sthực sự được chuyển đến từ
chương trình chính qua li gọi chương trình con. Sau đó chương trình con
thể thay đổi giá tr ca tham số trị hình thức ở bên trong chương trình con,
song điều đó không làm thay đổi a trị của tham số thực sự.
Trong li gọi chương trình con các tham strị thực sự có thể là biến,
hằ?g hay biểu thức.
Ví d, muốn tính S= 43, ta viết :
S:= Lt(4, 3);
hoặc :
x:=4;
S:= Lt(x, 2+1);
trong đó x là biến kiểu thực .
ch thức hoạt động của lnh S:= Lt(x, 2+1); là như sau:
Ðầu tiên các tham shình thức z và k sẽ được khởi tạo giá tr ban đầu
z:=x; và k:=2+1; kết qủa là z=4 và k=3.
Kế đó các lệnh trong hàm Lt sẽ tính toán zk và gán kết qủa cho tên hàm,
nên Lt=43. Gía trnày được gán tiếp cho S.
Trước và sau khi thực hin chương trình con, gía trị ca tham số thực sự x
không hề b thay đổi, x vna tr là 4.
Vậy, các biến được truyn vào chương trình con dưới dạng tham số trị thì
không bị thay đổi. Nóich khác, mọi sự thay đổi ca tham số trị hình thức
trong chương trình con không làm thay đổi a trị ca tham số thực sự tương
ứng được truyn vào từ chương trình chính.
13.1.2. Tham sbiến :
Trong li gọi chương trình con các tham sbiến thực sự chỉ có the?là
biến, không the?là hằ?g hay biểu thức.
Ví d, các lệnh sau đây là sai :
Doicho(3, 4); { Sai vì 3 và 4 là các hằng}
Doicho(a+1, b); { Sai vì a+1 là một biểu thức}
Giả sử trong chương trình chínhhai biến thực a, b có gía tr a=4 và
b=3. Ðể hoán đổi a trị ca a và b ta dùng lệnh:
Doicho(a, b);
Vì u và v là các tham số biến hình thức nên chương trình con sẽ đồng nhất
u với a và đồng nhất v với b. Mọi thay đổi của tham số u trong chương trình
con đều là thay đổi của chính biến a, tương tự, mi thay đổi của tham số v
đều là thay đổi ca chính biến b. Kết qa là trước khi gọi thủ tc Doicho(a,b)
thì a=3, b=4, sau khi thc hiện thủ tc xong thì a=4, b=3.
Vậy, các biến được truyền vào chương trình con dưới dạng tham số biến
thì s thay đổi theo tham số biến hình thức tương ứng trong chương trình
con.
Thông thường, ta dùng tham sbiến khi muốn nhn li một a trị mới
sau khi thực hin chương trình con.
Bây giờ ta hiểu tại sao trong thủ tục Saptang t N là tham strị còn X
tham số biến:
Procedure SapTang( Var X : Kmang ; N: Integer);
N là số phần tử ca mng X thì không cn thay đổi, còn mng X thì lại
cần thay đổi để trở thành một dãy tăng. Nếu ta bỏ từ khóa Var trước X đi,
tức là:
Procedure SapTang( X : Kmang ; N: Integer);
thì lnh :
Saptang(A, N);
sẽ không làm thay đổi dãy A.
Thực chất của sự truyền tham số đối với các tham số biến là sự truyền địa
chỉ. Chương trình con s dùng các ô nhcủa chínhc biến đượ? truyền vào
dưới dạng tham số biến.
Ví d 13.1: Trong chương trình dưới đây, thủ tục TT có hai tham số a
và b : a là tham số tr còn b là tham sbiến. Hãy xem sự thay đổi gía trị của
hai biến x, y ca chương trình chính trước và sau khi gọi thủ tục TT:
PROGRAM VIDU13_1;
Var
x, y: Integer;
PROCEDURE TT( a : integer ; Var b : integer);
Begin
a:=a+6;