Lời gọi chương trình con

- Chương trình con là một dãy lệnh mô tả một số thao tác nhất định và có thể được thực hiện (được gọi) từ nhiều vị trí trong chương trình.

Giả sử ta có bài toán sau đây:

Hãy tính S=ab+cd+ef

Nếu như với những kiến thức chúng ta đã học trước đây. Chúng ta có thể làm như sau:

     + Sử dụng các biến để lưu kết quả của ab, cd,ef.

Tác hại: Như vậy ta sẽ phải sử dụng 3 đoạn chương trình tương đồng với nhau. Nếu không phải tính 3 lũy thừa mà là tính 1000 lũy thừa thì số lượng code sẽ rất lớn và dễ gây rối và nếu ta phát hiện có lỗi sai trong đoạn code này ta sẽ phải sửa lần lượt tất cả các đoạn code này.

Cách khắc phục: Ta sẽ viết một chương trình con để tính lũy thừa. Với x là giá trị kiểu thực còn k là thuộc kiểu nguyên.

Var j:integer;
Tich:=1.0;
For j:=1 to k do
Tich:=Tich*x;

Khi cần tính lũy thừa thì ta chỉ cần viết tên gọi chương trình con rồi thay thế (x,k) bằng các giá trị cụ thể.

Những hàm mà chúng ta thường sử dụng trước đây như : sqrt(), upcase(), delete(),… đều là những chương trình con.

Một số lợi ích của việc sừ dụng chương trình con: 

- Để tránh được việc phải viết lặp đi lặp lại cùng một dãy lệnh nào đó, ngôn ngữ lập trình cho phép tổ chức dãy lệnh đó thành một chương trình con. Sau đó, mỗi khi chương trình chính cần đến dãy lệnh này thì chỉ cần gọi thực hiện chương trình con đó.

- Hỗ trợ việc thực hiện các chương trình lớn: khi phải viết chương trình lớn hàng nghìn, hàng vạn lệnh, cần huy động nhiều người tham gia, có thể giao cho mỗi người (hoặc mỗi nhóm) viết một chương trình con, rồi sau đó lắp ghép chúng lại thành chương trình chính.

- Phục vụ cho chương trình trừu tượng hóa: Người lập trình có thể sử dựng các kết quả được thực hiện bởi chương trình con mà không cần phải quan tâm đến việc các chương trình con đó được cài đặt như thế nào. Trừu tượng hóa là tư tưởng chủ đạo để xây dựng chương trình nói chung và chương trình có cấu trúc nói riêng.

- Mở rộng khả năng ngôn ngữ. Các ngôn ngữ lập trình thường cung cấp phương thức đóng gói các chương trình con nhằm cung cấp như một câu lệnh mới (tương tự như các lệnh gọi thực hiện các hàm và thủ tục chuẩn) cho người lập trình sử dụng mà không cần biết mã nguồn của nó như thế nào.

- Thuận tiện cho phát triển, nâng cấp chương trình: Do chương trình được tạo thành từ các chương trình con nên chương trình dễ đọc, dễ hiểu, dễ kiểm tra và hiệu chỉnh. Việc nâng cấp, phát triển chương trình con nào đó, thậm chí bổ sung thêm các chương trình con mới nói chung không gây ảnh hưởng đến các chương trình con khác.

2. Phân loại và cấu trúc của chương trình con 

a) Phân loại

Chương trình con gồm hai loại:

Hàm function là chương trình con thực hiện một số thao tác nào đó và trả về một giá trị qua tên của nó.

Ví dụ : sin (x) nhận giá trị thực X và trả về giá trị sinx; Sqrt(x) nhận giá trị x và trả về giá trị căn bậc hai của x. ...

Thủ tục (procednre) là chương trình con thực hiện các thao tác nhất định nhưng không trả về giá trị nào đó qua tên của nó. Ví dụ các thao tác vào/ra chuẩn hay thủ tục xử lí xâu: writeln, readln, delete,insert,..

b) Cấu trúc chương trình con

Chương trình con có cấu trúc tương tự chương trình, nhưng nhất thiết phải có tên và phần đầu dùng để khai báo tên, nếu là hàm phải khai báo kiểu dữ liệu cho giá trị trả về của hàm:

[]

Phần khai báo có thể có khai báo biến cho dữ liệu vào và ra, các hằng và biến dùng trong chương trình con.

Phần thân của chương trình con là dãy câu lệnh thực hiện để từ những dữ liệu vào ta nhận được dữ liệu ra hay kết quả mong muốn.

Các biến được khai báo cho dữ liệu vào/ra được gọi là tham số hình thức.

Các biến được khai báo để dùng riêng trong chương trình con được gọi là biến cục bộ.

Ví dụ, trong chương trình con Luythua(x,k) ở phần 1 thì x, k là các tham số hình thức và j là biến cục bộ.

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

c) Thực hiện chương trình con

Để thực hiện (gọi) một chương trình con, ta cần phải có lệnh tương tự lệnh gọi hàm hay thủ tục chuẩn. Bao gồm tên chương trình con với tham số (nếu có) là các hằng và biến chứa dữ liệu vào và ra tương ứng với các tham số hình thức đặt trong cặp ngoặc (và). Các hằng và biến này được gọi là tham số thực sự.

Ví dụ :  Sqr(225)

Khi đó sqr là tên chương trình con và 225 là tham số thực sự.

Khi thực hiện chương trình con, các tham số hình thức để nhập dữ liệu vào sẽ nhận giá trị của tham số thực sự tương ứng, còn các tham số hình thức để lưu trữ dữ liệu ra sẽ trả giá trị đó cho tham số thực sự tương ứng.

Giải Bài Tập Tin Học 11 – Bài 18: Ví dụ về cách viết và sử dụng chương trình con giúp HS giải bài tập, giúp cho các em hình thành và phát triển năng lực sử dụng công nghệ thông tin và truyền thông:

Xem thêm các sách tham khảo liên quan:

  • Sách Giáo Viên Tin Học Lớp 11

1. Cách viết và sử dụng thủ tục

a) Cấu trúc của thủ tục

procedure  [(danh sách tham số)];
[]
Begin
	[]
End;

Phần đầu thủ tục: Gồm tên dành riêng procedure, tiếp theo là tên thủ tục. Danh sách tham số có thể có hoặc không có.

Phần khai báo : Dùng để xác định các hằng, kiểu, biến và cũng có thể xác định các chương trình con khác được sử dụng trong thủ tục.

Dãy câu lệnh : Đực viết giữa cặp tên dành riêng begin và end tạo thành thân của thủ tục.

b) Ví dụ về thủ tục

Ví dụ 1: Viết thủ tục vẽ hình chữ nhật có dạng như sau

	*******
	*	*
	*******

Chiều dài là 7 chiều rộng là 3.

Procedure Ve_Hcn;
	Begin
	Writeln(‘*******’);
	Writeln(‘*             *’);
Writeln(‘*******’);
	End;

Để sử dụng thủ tục này ta gọi Ve_Hcn;

Ví dụ 2: Viết thủ tục vẻ hình chữ nhật với chiều dài và chiều rộng được tùy chỉnh.

Procedure Ve_Hcn(chdai,chrong:integer);
Var I,j:integer;
Begin
	For i:=1 to chdai do write(‘*’);
	Writeln;
	For j:=1 to chrong-2 do
	Begin
		Write(‘*’);
		For i:=1 to chdai-2 do write(‘ ’);
		Writeln(‘*’);
	End;
	For i:=1 to chdai do write(‘*’);
End;

Để sử dụng thủ tục này ta gọi Ve_Hcn(a,b);

Khi gọi thủ tục, các tham số hình thức được thay bằng các tham số thực sự tương ứng là các giá trị cụ thể gọi là các tham số giá trị (tham trị) (Ví dụ: chdai,chrong được gọi là tham trị).

Khi gọi thủ tục Ve_Hcn(a,b) tham số chdai được thay bằng giá trị hiện thời của biến a,tham số chrong được thay bởi giá trị hiện thời của biến b. Trong lệnh gọi thủ tục, các tham số hình thức được thay bằng các tham số thực sự tương ứng là tên biến chứa dữ liệu ra được gọi là tham số biến (hay tham biến).

Để phân biệt tham biến và tham trị, Pascal sử dụng từ khóa var để khai báo những tham biến.

Ví dụ :

Nếu không sử dụng tham biến:

program dientro;
uses crt;
var 
	a,b:integer;
procedure hoandoi(x,y:integer);
	var TG:integer;
begin
	TG:=x;
	x:=y;
	y:=TG;
end;
begin
	clrscr;
	a:=5;
	b:=10;
	writeln(a:6,b:6);
	hoandoi(a,b);
	writeln(a:6,b:6);
	readkey;
end.

Kết quả:

Hai số không hề hoán đổi cho nhau

Lời gọi chương trình con

Sử dụng tham biến :

program dientro;
uses crt;
var 
	a,b:integer;
procedure hoandoi(var x,y:integer);
	var TG:integer;
begin
	TG:=x;
	x:=y;
	y:=TG;
end;
begin
	clrscr;
	a:=5;
	b:=10;
	writeln(a:6,b:6);
	hoandoi(a,b);
	writeln(a:6,b:6);
	readkey;
end.

Kết quả:

Lời gọi chương trình con

Khi nào dùng tham biến: Khi ta muốn thay đổi giá trị các tham số truyền vào thì tra sẽ sử dụng tham biến.

2. Cách viết và sử dụng hàm

Điểm khác nhau cơ bản giữa thủ tục và hàm là việc thực hiện luôn trả về giá trị kết quả thuộc kiểu xác định và giá trị đó được gán cho tên hàm.

Hàm có cấu trúc tương tự như thủ tục, tuy nhiên chỉ khác nhau phần đầu.

Function []:;

Trong đó kiểu dữ liệu chỉ có thể là integer, real, char, Boolean, string.

Khác với thủ tục, trong thân hàm phải có lệnh gán giá trị cho tên hàm:

:=;

Ví dụ 1:

Viết chưng tình thực hiện việc rút gọn một phân số , trong đó có sử dụng hàm tính ước chung lớn nhất của hai số nguyên.

program rutgon;
uses crt;
var 
	TuSo,MauSo,a:integer;
function UCLN(x,y:integer):integer;
	var sodu:integer;
begin
	while y<>0 do
	begin
		sodu:=x mod y;
		x:=y;
		y:=sodu;
	end;
	UCLN:=x;
end;
begin
	clrscr;
	write('Nhap vao tu so va mau so ');
	readln(TuSo,MauSo);
	a:=UCLN(TuSo,MauSo);
	if a>1 then
	begin
		TuSo:=TuSo div a;
		MauSo:=MauSo div a;
	end;
	writeln(TuSo:5,MauSo:5);
	readkey;
end.

Kết quả:

Lời gọi chương trình con

Trong chương trình này, các biến TuSo, MauSo và a là các biến toàn cục, còn biến sodu là biến cục bộ.

Sử dụng hàm

Việc sử dụng hàm tương tự với việc sử dụng các hàm chuẩn, khi viết lệnh gọi gồm tên hàm và tham số thực sự tương ứng với các tham số hình thức.

Lệnh gọi hàm có thể tham gia vào biểu thức như một toán hạng và thậm chí là tham số của lời gọi hàm, thủ tục khác.

Ví dụ:

A:=6*UCLN(TuSo,MauSo)+1;

Ví dụ 2. Viết chương trình tìm giá trị nhỏ nhất trong ba số có sử dụng hàm tìm số nhỏ nhất trong hai số.

Phân tích:

Do chỉ được sử dụng hàm tìm giá trị nhỏ nhất trong hai số. Nên ta sẽ làm như sau:

Đầu tiên sẽ tìm giá trị nhỏ nhất trong 2 số, Sau đó dùng kết quả này làm tham số cho hàm tìm giá trị nhỏ nhất với giá trị này và số còn lại.