1. Trang chủ >
  2. Công Nghệ Thông Tin >
  3. Tin học văn phòng >

Tham trị và tham biến

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (735.23 KB, 141 trang )


BỘ MÔN TIN HỌC







TRƯỜNG ĐẠI HỌC HOA LƯ



a. Tham số trị

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, nhận giá

trị ban đầu là tham số thực sự được chuyển đến từ chương trình chính qua lời gọi chương

trình con. Sau đó chương trình con có thể thay đổi giá trị của tham số trị hình thức ở bên

trong chương trình con, song điều đó không làm thay đổi giá trị của tham số thực sự.

Trong lời gọi chương trình con các tham số trị thực sự có thể là biến, hằng 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 .

Cách thức hoạt động của lệnh S:= Lt(x, 2+1); là như sau:





Ðầu tiên các tham số hình thức z và k sẽ được khởi tạo giá trị ban đầu z:=x; và

k:=2+1; kết quả là z=4 và k=3.







Kế đó các lệnh trong hàm Lt sẽ tính toán z k và gán kết quả cho tên hàm, nên Lt=4 3.

Giá trị này được gán tiếp cho S.







Trước và sau khi thực hiện chương trình con, giá trị của tham số thực sự x không

hề bị thay đổi, x vẫn có giá trị là 3.



Vậy: các biến được truyền vào chương trình con dưới dạng tham số trị thì không bị thay

đổi. Nói cách khác, mọi sự thay đổi của tham số trị hình thức trong chương trình con

không làm thay đổi giá trị của tham số thực sự tương ứng được truyền vào từ chương trình

chính.

b. Tham số biến

Trong lời gọi chương trình con các tham số biến thực sự chỉ có thể là biến, không

thể là hằng 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ính có hai biến thực a, b có giá trị a=3 và b=3. Ðể

hoán đổi giá trị của a và b ta dùng lệnh:



Ngôn ngữ lập trình Pascal



70



BỘ MÔN TIN HỌC







TRƯỜNG ĐẠI HỌC HOA LƯ



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ự, mọi thay đổi của tham số v đều là thay đổi của chính biến b.

Kết quả là trước khi gọi thủ tục Doicho(a,b) thì a=3, b=4, sau khi thực hiện thủ tục 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 số biến khi muốn nhận lại một giá trị mới sau khi thực

hiện chương trình con.

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 ô nhớ của chính các biến được truyền vào dưới dạng tham

số biến.

Ví dụ 3: 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 số biến. Hãy xem sự thay đổi giá trị của hai biến x, y của chương trình chính

trước và sau khi gọi thủ tục TT:

PROGRAM VIDU5_3;

Var

x, y: Integer;

PROCEDURE TT(a: integer ; Var b: integer);

Begin

a:=a+6;

b:=b+8;

Writeln(‘a= ’, a);

Writeln(‘b= ’, b)

End;

BEGIN

x:=4;

y:=7;

TT(x,y);



{14}



Writeln(‘x= ’, x); {15}

Writeln(‘y= ’, y); {16}

Readln



Ngôn ngữ lập trình Pascal



71



BỘ MÔN TIN HỌC







TRƯỜNG ĐẠI HỌC HOA LƯ



END.

Trước khi gọi thủ tục TT thì x=4, y=7.

Khi gọi thủ tục TT(x, y); thì các tham số hình thức a, b được gán a:=x; b:=y; nên a=4, và

b=7. Các lệnh trong thủ tục a:=a+6; và b:=b+8; sẽ làm thay đổi các tham số a và b: a=10,

b=15, và do đó hai lệnh:

Writeln(‘a= ’, a); sẽ in ra a = 10

Writeln(‘b= ’, b); sẽ in ra b = 15

Thực hiện xong thủ thục TT, máy trở lại chương trình chính làm tiếp các lệnh {15} và

{16}:

Writeln(‘x= ’, x); sẽ in ra x = 4

Writeln(‘y= ’, y); sẽ in ra y =15

Như vậy, x được truyền vào chương trình con thông qua tham số trị a nên mọi sự

thay đổi của a trong chương trình con đều không ảnh hưởng gì đến x. Ngược lại, biến y

được truyền vào chương trình con thông qua tham số biến b nên mọi sự thay đổi của b

trong thủ tục TT đều kéo biến y thay đổi theo.

Tính chất trên đây của tham số biến cho phép khai thác thêm các khả năng của thủ

tục và hàm. Ta biết thủ tục không trả về giá trị nào thông qua tên nó, còn hàm thì trả về

một giá trị duy nhất qua tên hàm. Song một chương trình con hoàn toàn có thể trả về hai

hay nhiều giá trị thông qua các tham số biến, như ví dụ 4.3.

5. Phạm vi tác dụng của các khai báo

a. Biến toàn cục và biến địa phương:

Một chương trình có chứa hàm hay thủ tục gọi là chương trình chính, thủ tục hay

hàm gọi là chương trình con.

Vì chương trình con cũng là một chương trình nên trong chương trình con cũng có

khai báo biến, khai báo hằng, .v.v., cũng có khai báo chương trình con của riêng nó, ...

Các biến được khai báo trong chương trình chính gọi là biến toàn cục (global

variable), chúng dùng được ở mọi nơi kể từ lúc khai báo cho đến khi kết thúc chương trình.

Các biến được khai báo trong một chương trình con gọi là biến địa phương (local

variable). Sở dĩ gọi là địa phương vì chúng chỉ có tác dụng trong chương trình con nơi nó

được khai báo mà thôi. Các tham số trị hình thức của chương trình con cũng là biến địa

phương. Các biến địa phương chỉ tồn tại trong thời gian chương trình con đang thực hiện,

khi chương trình con thực hiện xong thì các biến địa phương sẽ bị xóa khỏi bộ nhớ.

Ví dụ 4: Xét chương trình dưới đây:

Program VIDU5_4;



Ngôn ngữ lập trình Pascal



{1}



72



BỘ MÔN TIN HỌC



Var







TRƯỜNG ĐẠI HỌC HOA LƯ



{2}



x: Integer;



{3}



Procedure TTUC1;



{4}



Var



{5}



y: Integer;



{6}



Begin



{7}



y:=x+5;



{8}



Writeln(y)

End;



{9}

{10} { hết TTUC1 }



BEGIN



{11}



x:=10;



{12}



TTUC1;



{13}



Writeln(y);



{14} { lệnh này bị lỗi}



Readln



{15}



END.



{16}



Chương trình gồm 16 dòng được đánh số từ {1} đến {16}.





Biến x là toàn cục nên có phạm vi tác dụng từ dòng {3} đến dòng {16}. Biến y là

biến địa phương của TTUC1 nên có phạm vi tác dụng từ dòng {6} đến dòng {10}.







Lệnh Writeln(y); ở dòng {9} in ra số 15, còn lệnh Writeln(y); ở dòng {14} lại bị

lỗi. Thật vậy, sau khi thực hiện lệnh {12} gán x:=10; dòng {13} gọi TTUC1 và điều

khiển chuyển đến

dòng {4}. Các dòng

{5} {6} cấp ô nhớ

cho biến y địa

phương, dòng {8}

gán y:=x+5; nên

y=15 và dòng {9}

in giá trị 15 của y.

Ðến đây, TTUC1

kết thúc và biến y

bị xóa khỏi bộ nhớ,

điều khiển được trả về cho lệnh {14} trong chương trình chính, nhưng vì y đã bị xóa

nên không thể in được, và máy sẽ báo lỗi.



Ngôn ngữ lập trình Pascal



73



Xem Thêm
Tải bản đầy đủ (.doc) (141 trang)

×