1. Trang chủ
  2. » Công Nghệ Thông Tin

PHẠM VI TÁC DỤNG CỦA CÁC KHAI BÁO pot

15 410 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Phạm Vi Tác Dụng Của Các Khai Báo
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Công Nghệ Thông Tin
Thể loại bài luận
Định dạng
Số trang 15
Dung lượng 1,17 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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

Trang 1

PHẠM VI TÁC DỤNG CỦA CÁC KHAI BÁO

13.2.1 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ớ

Trong ví dụ 12.5 ( Bài 12 ), biến N và A là các biến toàn cục, còn biến Tam là biến địa phương của thủ tục Doicho, nó chỉ có tác dụng trong thủ tục

Trang 2

Doicho mà thôi Tương tự, biến j là biến địa phương của thủ tục Saptang Mỗi thủ tục Nhap, Saptang và Inday đều có một biến địa phương tên là i, tuy chúng trùng tên song trong bộ nhớ chúng là ba ô nhớ khác nhau, có phạm vi tác dụng khác nhau

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

Program VIDU13_3; {1}

Var {2}

x: Integer; {3}

Procedure TTUC1; {4}

Var {5}

y: Integer; {6}

Begin {7}

y:=x+5; {8}

Writeln(y); {9}

End; {10} { hết TTUC1 }

Trang 3

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 gía 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

Trang 4

13.2.2 Phạm vi tác dụng của các khai báo :

Hình 13.1

Phạm vi tác dụng hay tầm tác dụng của biến (hay hằng, kiểu dữ liệu, chương trình con) là khu vực mà trong đó nó có thể sử dụng được, ngoài khu vực đó nó bị xem là chưa khai báo

Ðể diễn tả phạm vi tác dụng của biến nói riêng, của các khai báo nói

chung, kể cả khai báo chương trình con, ta đưa ra khái niệm gọi là mức: mức

0 là chương trình chính, mức 1 là các chương trình con của chương trình chính, mức 2 là các chương trình con của các chương trình con mức 1, v.v

Trang 5

Hình vẽ 13.1 mô tả một chương trình có hai chương trình con A và B ở mức 1, trong chương trình con A lại có hai chương trình con A1 và A2 ở mức 2

Việc xác định phạm vi tác dụng của các biến (hay hằng, kiểu dữ liệu, chương trình con) dựa trên các nguyên tắc sau:

Các biến được khai báo ở mức 0 (chương trình chính) có phạm vi tác dụng

là toàn bộ chương trình

Các biến được khai báo ở mức nào sẽ có phạm vi là vùng giới hạn mức đó,

kể cả các mức cao hơn nằm trong mức này

Ví dụ: các biến được khai báo trong thủ tục A sẽ dùng được trong thủ tục

A, A1 và A2, nhưng không dùng được trong chương trình chính và trong thủ tục B Các biến được khai báo trong thủ tục B sẽ dùng được trong thủ tục B nhưng không dùng được trong chương trình chính và trong các thủ tục A, A1 và A2

-Có thể khai báo hai (hay nhiều) biến trùng tên ở các mức khác nhau nhưng chúng vẫn là hai biến khác nhau có phạm vi tác dụng khác nhau

Nếu hai biến trùng tên lại nằm trong hai mức có phạm vi bao trùm nhau thì biến ở mức thấp hơn sẽ tạm bị che khuất khi làm việc ở mức cao hơn

Trang 6

Ví dụ : Nếu chương trình chính và thủ tục B có khai báo hai biến trùng tên

là x, thì trong thủ tục B chỉ có biến x địa phương của B là có tác dụng, còn biến x của chương trình chính tạm thời bị che đi Ra khỏi thủ tục B, biến x địa phương của B bị xóa và biến x toàn cục hoạt động lại bình thường

Ví dụ 13.4: Xét chương trình sau:

Program VIDU13_4; {1}

Var {2}

x: Integer; {3}

Procedure B; {4}

Var {5}

x: Integer; {6}

Begin {7}

x:=5; {8}

Writeln(x); {9}

End; {10}

Trang 7

BEGIN {11}

x:=10; {12}

B; {13}

Writeln(x); {14}

Readln; {15}

END {16}

Chạy<VD13_4.EXE>

Chép tập tin nguồn <VD13_4.PAS>

Khi chạy chương trình kết qủa in ra là :

5

10

Ðầu tiên lệnh {12} gán cho biến x của chương trình chính gía trị x=10 Lệnh {13} gọi thủ tục B Vì thủ tục B cũng có biến địa phương tên x nên biến x toàn cục tạm thời ngưng hoạt động và lệnh {8} gán cho biến x địa phương gía trị x:=5 Lệnh {9} in gía trị của biến x địa phương là số 5

Trang 8

Khi trở lại chương trình chính thì biến x địa phương bị xóa khỏi bộ nhớ và biến x toàn cục hoạt động trở lại, lệnh {14} sẽ in gía trị của biến x toàn cục

là số 10

Phạm vi của các chương trình con cũng được xác định tương tự

Câu hỏi là thủ tục A2 có thể gọi được ở những đâu ?

Vì thủ tục A2 được khai báo trong thủ tục A nên nó chỉ được biết đến bên trong thủ tục A, nghĩa là:

Có thể gọi thủ tục A2 từ một vị trí trong thân của thủ tục A, trong thân của thủ tục A1,và cả trong thân của A2 (gọi đệ quy)

Tóm lại phạm vi của thủ tục A2 là toàn bộ thủ tục A

Tương tự, phạm vi của thủ tục A1 là toàn bộ thủ tục A

Phạm vi của thủ tục A hay B là toàn bộ chương trình, kể cả trong thủ tục

A, A1, A2 và B

Ðể hiểu rõ thêm về phạm vi của các biến, cách thức xây dựng và sử dụng các thủ tục và hàm, ta xét ví dụ sau :

Ví dụ 13.5:

Trang 9

Nhập hai ma trận A, B cấp MxN, tính ma trận hiệu C=A-B, in ba ma trận lên màn hình Cho biết ma trận nào gồm toàn số 0

Phân tích: Có bốn việc chính phải làm:

Nhập hai ma trận A và B Về bản chất, đây chỉ là một loại công việc nên có thể viết thành một thủ tục để gọi hai lần

Tính ma trận C=A-B Ðây là một việc nhưng chuyên biệt có thể viết thành một thủ tục để chương trình sáng sủa

In ba ma trận A, B và C Về bản chất đây chỉ là một loại công việc nên có thể viết thành một thủ tục và gọi ba lần

Kiểm tra xem ma trận nào toàn số 0 ? : Câu trả lời là một gía trị lôgic đúng hay sai (True hay False), vậy phải viết dạng hàm và gọi ba lần ứng với các đối số là A, B và C

Chương trình như sau:

PROGRAM VIDU13_5;

{ Tính hiệu hai ma trận }

Uses CRT;

Trang 10

Type

Kmatran = Array[1 10, 1 10] of Integer ;

Var

N, M : Integer;

A, B, C: Kmatran;

Procedure Nhap(Var X: Kmatran ; ten: Char );

Var

i, j : Integer;

Begin

For i:=1 to M do { nhập mảng X }

For j:=1 to N do

begin

Write(‘Nhập ‘, ten , ‘[‘ , i, ‘,’ , j , ‘]: ‘);

Readln(X[i,j]);

Trang 11

end;

End; { Hết Nhập}

Procedure InMatran( Chugiai: String ; X: Kmatran);

{ In ma trân X lên màn hình }

Var

i, j : Integer;

Begin

Writeln(Chugiai);

For i:=1 to M do

begin

For j:=1 to N do write(X[i,j]:4 );

Writeln;

end;

End; { Hết In Ma trận}

Trang 12

Procedure Tinh( Var X: Kmatran; A , B : Kmatran);

{ Tính ma trận X=A-B}

Var

i ,j : Integer;

Begin

For i:=1 to M do

For j:=1 to N do X[i,j]:=A[i,j]-B[i,j];

End; { Hết Tính }

Function Bang0( X : Kmatran) : Boolean ;

{ Kiểm tra ma tran X gồm toàn số 0 ? }

Var

i, j : Integer;

Ktra: Boolean;

Begin

Trang 13

Ktra:=TRUE;

For i:=1 to M do

For j:=1 to N do

if X[i,j] <> 0 then Ktra:=FALSE;

Bang0:=Ktra;

End; { Hết hàm Bằng 0}

BEGIN { chương trình chính }

Clrscr;

Repeat

Write(‘ Nhập số hàng, số cột M, N : ‘);

Readln(M, N);

Until (N>0) and ( N<11) and ( M>0) and ( M<11) ;

Nhap( A, ‘A’ );

Nhap( B, ‘B’ );

Trang 14

Tinh(C, A, B);

InMatran( ‘ Ma trận A là: ‘ , A);

InMatran( ‘ Ma trận B là: ‘ , B);

InMatran( ‘ Ma trận C là: ‘ , C);

If Bang0(A) =TRUE then writeln(‘ A toàn số 0 ‘);

If Bang0(B) =TRUE then writeln(‘ B toàn số 0 ‘);

If Bang0(C) =TRUE then writeln(‘ C toàn số 0 ‘);

Readln;

END

Chạy<VD13_5.EXE>

Chép tập tin nguồn <VD13_5.PAS>

Trong các chương trình con ở ví dụ trên, hai biến M và N được sử dụng tự nhiên mà không cần phải khai báo dưới dạng tham số vì chúng là các biến toàn cục, phạm vi của chúng là toàn bộ chương trình

Trang 15

Rõ ràng nếu không sử dụng thủ tục và hàm thì chương trình trên sẽ viết rất dài dòng

Ngày đăng: 19/06/2014, 09:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w