Biến cục bộ là gì tin học 11 năm 2024

Biến toàn cục là biến khai báo ở đầu chương trình chính, tồn tại trong suốt thời gian làm việc của chương trình. Ta có thể sử dụng và làm thay đổi giá trị của biến toàn cục nhờ các câu lệnh trong chương trình chính cũng như trong tất cả các chương trình con.

Biến cục bộ là biến là biến khai báo ở đầu chương trình con. Chúng được cấp phát bộ nhớ khi chương trình con đươc gọi đến và bị xoá khi máy thoát khỏi chương trình con đó. Biến cục bộ có giá trị trong chương trình con và tất cả các chương trình con khác nằm trong chương trình con này.

Nếu tên biến cục bộ của một chương trình con trùng với một tên biến toàn cục thì máy không bị nhầm lẫn, máy sẽ dùng hai ô nhớ khác nhau để lưu trữ hai biến, khi ra khỏi chương trình con, biến cục bộ tự động được xoá.

Khi gặp một lời gọi đến chương trình con, máy sẽ thực hiện các bước sau: - Cấp phát bộ nhớ cho các đối, các biến cục bộ.

- Truyền giá trị của các tham số thực sự cho các tham số giá trị tương ứng, truyền địa chỉ các tham số thực sự ứng với tham số biến cho các tham số biến của thủ tục.

- Thực hiện các lệnh trong chương trình con, trong khi thực hiện chương trình con, các biến cục bộ và các tham số giá trị có thể bị biến đổi nhưng không ảnh hưởng đến các biến bên ngoài. Trái lại, mọi thay đổi của tham số biến trong chương trình con sẽ kéo theo sự thay đổi của tham số thực sự tương ứng (vì có sự truyền theo địa chỉ). Do đó, khi thoát khỏi chương trình con, các tham số thực sự ứng với tham số biến vâùn giữ được giá trị mới nhất do chương trình con tạo ra.

- Thực hiện xong các lệnh của chương trình con, máy xoá tất cả các đối và các biến cục bộ và trở về lệnh kế sau nơi gọi nó.

Trang 46

Việc lấy kết quả thực hiện chương trình con như sau: nếu là hàm thì lấy kết quả

thông qua tên hàm, nếu là thủ tục thì kết quả ở tham số thực sự ứng với tham số biến. Khi cần lấy duy nhất một giá trị từ chương trình con thì ta lập một

FUNCTION, khi cần lấy từ hai giá trị trở lên từ chương trình con hoặc không lấy giá trị nào thì ta phải lập PROCEDURE.

4 Ví dụ 1: Lập hàm tính diện tích hình thang. Nhập dữ liệu của hai thửa ruộng

hình thang và tính tổng diện tích hai thửa ruộng. Var a1, b1, h1, a2, b2 , h2, s : Real;

(************* Bat dau Function **************) Function DTHinhThang(a, b, h) : Real;

Begin

DTHinhThang := (a + b) * h / 2; End;

(********* Bat dau chuong trinh chinh **********) Begin

Write( ‘ Canh dai, ngan va cao cua thua ruong thu nhat: ‘ ); Readln(a1, b1, h1);

Write( ‘ Canh dai, ngan va cao cua thua ruong thu hai: ‘ ); Readln(a2, b2, h2);

s := DTHinhThang(a1, b1, h1) + DTHinhThang(a2, b2, h2); Writeln( ‘ Tong dien tich hai thua ruong = ‘, s : 0 : 3);

Readln; End.

4 Ví dụ 2: Lập hàm tính ước số chung lớn nhất (USCLN). Sau đó, dùng hàm này

để tính USCLN và bội số chung nhỏ nhất (BSCNN) của hai số được nhập từ bàn phím.

Var m, n, usc, bsc: Integer;

(************ Function USCLN *************) Function USCLN(a, b : Integer): Integer;

Var r : Integer; Begin

While b < > 0 do Begin

Trang 47 a := b;

b := r;

End; { a hien tai la USCLN cua a va b ban dau } USCLN := a;

End;

(********* bat dau chuong trinh chinh *********) Begin

Write( ' Nhap so thu nhat : ' ); Readln(m);

Write( ' Nhap so thu hai: ' ); Readln(n);

usc := USCLN(m, n);

bsc := m * n div USCLN(m, n);

Writeln( ' Uoc so chung lon nhat cua ', m, ' va ', n, ' la : ', usc); Writeln( ' Boi so chung nho nhat cua ', m, ' va ', n, ' la :', bsc); Readln;

End.

4 Ví dụ 3: Lập một thủ tục để tính đồng thời diện tích và thể tích hình cầu.

Var r, s, v : Real; Reply : Char;

(************** Function ***************) Procedure SVHinhCau( r : Real; Var s, v :Real); Begin

s := 4 * pi * r * r;

v := 4 * pi * r * r * r / 3; End;

(******** bat dau chuong trinh chinh ********) Begin

Repeat

Write( ‘ Nhap ban kinh hinh cau : ‘ ); Readln(r);

SVHinhCau(r, s, v);

Writeln( ‘ Dien tich = ‘, s : 0 : 4, ‘. The tich = ‘, v : 0 :4 ); Write( ‘ Ban co tiep tuc khong ?(C/K) ‘ );

Trong bài Python này bạn sẽ học về biến toàn cục (global), biến cục bộ (local), biến nonlocal trong Python và trường hợp sử dụng các biến này.

Trong ngôn ngữ lập trình Python, một biến được khai báo bên ngoài hàm hoặc trong phạm vi toàn cục được gọi là biến toàn cục hay biến global. Biến toàn cục có thể được truy cập từ bên trong hoặc bên ngoài hàm.

Biến cục bộ là gì tin học 11 năm 2024

Tuyển dụng lập trình python

Hãy xem ví dụ về cách tạo biến toàn cục trong Python.

x = "Biến toàn cục" 
# khai báo biến x  

# Gọi x từ trong hàm vidu()  
def vidu():  
    print("x trong hàm vidu() :", x)
vidu()  

# Gọi x ngoài hàm vidu()  
print("x ngoài hàm vidu():", x)  

Trong ví dụ trên, ta khai báo biến x là biến toàn cục, và định nghĩa hàm vidu() để in biến x. Cuối cùng ta gọi hàm vidu() để in giá trị của biến x. Chạy code trên ta sẽ được kết quả là:

x trong hàm vidu(): Biến toàn cục  
x ngoài hàm vidu(): Biến toàn cục  

Chuyện gì sẽ xảy ra nếu bạn thay đổi giá trị của x trong hàm?

x = 2   
def vidu():  
   x=x*2      
   print(x)
vidu()  

Nếu chạy code này bạn sẽ nhận được thông báo lỗi:

UnboundLocalError: local variable 'x' referenced before assignment  

Lỗi này xuất hiện là do Python xử lý x như một biến cục bộ và x không được định nghĩa trong vidu().

Để thay đổi biến toàn cục trong một hàm bạn sẽ phải sử dụng từ khóa global. Chúng tôi sẽ nói kỹ hơn trong bài về từ khóa global.

Biến cục bộ trong Python

Biến được khai báo bên trong một hàm hoặc trong phạm vi cục bộ được gọi là biến cục bộ hay biến local.

def vidu():  
 y = "Biến cục bộ"  
vidu()  
print(y)  

Khi chạy code trên bạn sẽ nhận được thông báo lỗi:

NameError: name 'y' is not defined  

Lỗi này xuất hiện là do chúng ta đã cố truy cập vào biến cục bộ y trong phạm vi toàn cục, nhưng y chỉ làm việc trong hàm vidu() hoặc phạm vi cục bộ.

Thông thường, để tạo một biến cục bộ, chúng ta sẽ khai báo nó trong một hàm như ví dụ dưới đây:

def vidu():  
 y = "Biến cục bộ"  
 print(y)  
vidu()  

Chạy code trên ta sẽ được kết quả

Biến cục bộ  

Chúng ta quay trở lại xem xét vấn đề trước đó, lúc x là một biến toàn cục và chúng ta muốn thay đổi x trong vidu().

Biến cục bộ và biến toàn cục

Ở đây, chúng ta sẽ học cách dùng biến cục bộ và toàn cục trong cùng một code.

x = 2
def vidu():  
 global x  
 y = "Biến cục bộ"  
 x = x * 2  
 print(x)  
 print(y)  

# Viết bởi uCode.vn   
vidu()  

Chạy code trên ta sẽ có đầu ra:

4  
Biến cục bộ  

Trong code trên, chúng ta khai báo x là biến toàn cục và y là biến cục bộ trong vidu() và dùng toán tử * để thay đổi biến toàn cục và in cả giá trị của x và y. Sau khi gọi hàm vidu() giá trị của x sẽ thành 4 vì được nhân đôi.

Ví dụ sử dụng biến toàn cục và cục bộ trùng tên:

x trong hàm vidu(): Biến toàn cục  
x ngoài hàm vidu(): Biến toàn cục  

0

Sau khi chạy code trên ta có đầu ra:

x trong hàm vidu(): Biến toàn cục  
x ngoài hàm vidu(): Biến toàn cục  

1

Trong code trên, chúng ta sử dụng cùng tên x cho cả biến cục bộ và biến toàn cục. Khi in cùng biến x chúng ta nhận được hai kết quả khác nhau vì biến được khai báo ở cả hai phạm vi, cục bộ (bên trong hàm vidu()) và toàn cục (bên ngoài hàm vidu()).

Khi chúng ta in biến trong hàm vidu() nó sẽ xuất ra Biến x cục bộ: 10, đây được gọi là phạm vi cục bộ của biến. Tương tự khi ta in biến bên ngoài hàm vidu() sẽ cho ra Biến x toàn cục: 5, đây là phạm vi toàn cục của biến.

Biến nonlocal trong Python

Từ nonlocal này mình không biết dịch sang tiếng Việt sao cho chuẩn. Trong Python, biến nonlocal được sử dụng trong hàm lồng nhau nơi mà phạm vi cục bộ không được định nghĩa. Nói dễ hiểu thì biến nonlocal không phải biến local, không phải biến global, bạn khai báo một biến là nonlocal khi muốn sử dụng nó ở phạm vi rộng hơn local, nhưng chưa đến mức global.

Để khai báo biến nonlocal ta cần dùng đến từ khóa nonlocal.

Ví dụ:

x trong hàm vidu(): Biến toàn cục  
x ngoài hàm vidu(): Biến toàn cục  

2

Chạy code trên bạn sẽ có đầu ra:

x trong hàm vidu(): Biến toàn cục  
x ngoài hàm vidu(): Biến toàn cục  

3

Trong code trên có một hàm lồng là ham_trong(), ta dùng từ khóa nonlocal để tạo biến nonlocal. Hàm ham_trong() được định nghĩa trong phạm vi của ham_ngoai().