Hàm và thủ tục trong Pascal

Lập trình Pascal

Hàm và thủ tục là các đơn vị cơ bản của một chương trình Pascal. Hàm và thủ tục giúp tách nhỏ chương trình thành các đoạn mã nhỏ hơn, dễ quản lý hơn và có khả năng tái sử dụng.

Trong Pascal, hàm và thủ tục được định nghĩa bằng từ khóa function và procedure, tương ưng. Sau từ khóa function hoặc procedure là tên của hàm hoặc thủ tục, theo sau là các tham số của hàm hoặc thủ tục được đặt trong cặp dấu ngoặc đơn, và cuối cùng là khối lệnh của hàm hoặc thủ tục được đặt trong cặp dấu begin và end.

Cú pháp định nghĩa hàm:

function TenHam(tham_so: kieu_du_lieu): kieu_du_lieu;
begin
  // cac lenh xu ly
end;

Trong đó, TenHam là tên của hàm, tham_so là các tham số được truyền vào hàm, kieu_du_lieu là kiểu dữ liệu của giá trị trả về của hàm.

Cú pháp định nghĩa thủ tục:

procedure TenThuTuc(tham_so: kieu_du_lieu);
begin
  // cac lenh xu ly
end;

Trong đó, TenThuTuc là tên của thủ tục, tham_so là các tham số được truyền vào thủ tục, kieu_du_lieu là kiểu dữ liệu của tham số.

Ví dụ, chương trình sau định nghĩa một hàm tính tổng hai số nguyên:

program HamVaThuTuc;

function TinhTong(a, b: integer): integer;
var
  tong: integer;
begin
  tong := a + b;
  TinhTong := tong;
end;

var
  x, y, z: integer;

begin
  x := 1;
  y := 2;
  z := TinhTong(x, y);
  writeln('Tong cua ', x, ' va ', y, ' la ', z);
end.

Trong chương trình này, hàm TinhTong được định nghĩa với hai tham số a và b kiểu integer, và trả về kiểu integer. Trong khối lệnh của hàm, tổng của hai số a và b được tính toán và trả về giá trị của tổng.

Ở phần chính của chương trình, ba biến x, y, z được khai báo kiểu integer. Biến x được gán giá trị là 1, biến y được gán giá trị là 2. Hàm TinhTong được gọi với tham số x và y, và kết quả trả về được gán vào biến z

Phân biệt giữa hàm và thủ tục

Hàm và thủ tục là hai khái niệm khác nhau trong lập trình Pascal. Tuy cả hai đều là các đơn vị chương trình có thể được gọi ở nhiều nơi khác nhau trong chương trình, nhưng chúng có mục đích và cách sử dụng khác nhau.

Mục đích của hàm là trả về một giá trị cho người gọi hàm sử dụng trong các phép tính hoặc điều kiện khác. Hàm thực hiện một tác vụ nhất định và trả về kết quả của tác vụ đó cho người gọi hàm sử dụng.

Mục đích của thủ tục là thực hiện một hành động hoặc tác vụ nhất định mà không cần trả về bất kỳ giá trị nào cho người gọi thủ tục. Trong Pascal, thủ tục được định nghĩa bằng từ khóa “procedure”.

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

Trong lập trình Pascal, biến toàn cục (global variable) và biến địa phương (local variable) là hai loại biến được sử dụng để lưu trữ giá trị trong chương trình. Tuy nhiên, chúng có một số điểm khác nhau như sau:

  1. Phạm vi sử dụng:

Biến toàn cục được định nghĩa ngoài hàm hoặc thủ tục, có thể được sử dụng trong toàn bộ chương trình, bao gồm cả trong các hàm và thủ tục khác.Biến địa phương được định nghĩa trong hàm hoặc thủ tục, chỉ có thể được sử dụng trong phạm vi của hàm hoặc thủ tục đó.

  1. Thời gian tồn tại:
  • Biến toàn cục tồn tại trong toàn bộ chương trình, từ khi chương trình bắt đầu chạy đến khi kết thúc.
  • Biến địa phương chỉ tồn tại trong phạm vi của hàm hoặc thủ tục, và bị hủy khi hàm hoặc thủ tục đó kết thúc.
  1. Sự thay đổi giá trị:
    • Biến toàn cục có thể bị thay đổi giá trị bởi bất kỳ phần của chương trình nào. Biến địa phương chỉ có thể bị thay đổi giá trị trong phạm vi của hàm hoặc thủ tục đó.

Ví dụ:

program Example;
var
  a, b: integer; { biến toàn cục }

procedure Swap(x, y: integer); { x, y là biến địa phương }
var
  temp: integer; { biến địa phương }
begin
  temp := x;
  x := y;
  y := temp;
  writeln('Inside the Swap procedure:');
  writeln('a = ', x, ', b = ', y);
end;

begin
  a := 10;
  b := 20;
  writeln('Before the Swap procedure:');
  writeln('a = ', a, ', b = ', b);
  Swap(a, b);
  writeln('After the Swap procedure:');
  writeln('a = ', a, ', b = ', b);
end.

Trong ví dụ trên, biến “a” và “b” là biến toàn cục được định nghĩa ngoài thủ tục “Swap”. Trong khi đó, biến “x”, “y”, và “temp” là các biến địa phương được định nghĩa trong thủ tục “Swap”. Biến toàn cục “a” và “b” có thể được sử dụng ở bất kỳ nơi nào trong chương trình, trong khi biến địa phương “x”, “y”, và “temp” chỉ có thể được sử dụng trong

phạm vi của thủ tục “Swap”. Trong thủ tục “Swap”, các biến “x” và “y” là các tham số được truyền vào thủ tục và có phạm vi địa phương. Biến “temp” cũng là biến địa phương và được sử dụng để trao đổi giá trị của “x” và “y”. Khi thủ tục “Swap” kết thúc, các biến địa phương “x”, “y”, và “temp” sẽ bị hủy.

Khi chạy chương trình trên, đầu tiên chúng ta khởi tạo giá trị cho biến toàn cục “a” và “b”. Sau đó, chúng ta gọi thủ tục “Swap” để đổi chỗ giá trị của “a” và “b”. Trong thủ tục “Swap”, các giá trị của “x” và “y” được đổi chỗ bằng cách sử dụng biến địa phương “temp”. Khi thủ tục “Swap” kết thúc, các biến địa phương “x”, “y”, và “temp” bị hủy. Kết quả là giá trị của biến toàn cục “a” và “b” được đổi chỗ.

Kết quả khi chạy chương trình:

Before the Swap procedure:
a = 10, b = 20
Inside the Swap procedure:
a = 20, b = 10
After the Swap procedure:
a = 20, b = 10

Như vậy, chúng ta có thể thấy rõ sự khác biệt giữa biến toàn cục và biến địa phương trong Pascal, và cách sử dụng chúng để lưu trữ giá trị trong chương trình.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *