Cấu trúc 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.

· Ý nghĩa: giải quyết các bài toán lớn và phức tạp thành các bài toán nhỏ hơn và đơn giản hơn.

· Lợi ích khi sử dụng chương trình con:

+ Tránh được sự lập lại cùng một dãy lệnh. Khi cần dùng có thể gọi lại chương trình con đó.

+ Hỗ trợ việc thực hiện các chương trình lớn và phức tạp.

+ Phục vụ quá trình trừu tượng hoá. Người lập trình có thể sử dụng kết quả của chương trình con mà ko cần quan tâm đến chương trình đó đã được cài đặt thế nào.

+ Mở rộng khả năng ngôn ngữ lập trình thành thư viện cho nhiều người dùng.

+ Thuận tiện cho phát triển và nâng cấp chương trình.

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

a) Phân 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ó.

VD: Sin(x), Cos(x), Sqrt(x)

· Thủ tục (Procedure) là chương trình con thực hiện một số thao tác nào đó nhưng không trả về một giá trị nào qua tên của nó.

VD: Writeln, Readln, Delete,

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

[]

· Phần đầu: cấu trúc chương trình con tương tự chương trình chính, nhưng nhất thiết phải có phần đầu để khai báo tên, nếu là Hàm thì phải có khai báo kiểu dữ liệu trả về.

· Phần khai báo: có thể khai báo cho dữ liệu vào và ra, các hằng được sử dụng trong chương trình con.

· Phần thân: là các dãy lệnh được thưc hiện trong chương trình con từ dữ liệu vào và được kết quả như mong muốn.

v Tham số hình thức:

+ 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ủa chương trình con.

+ Các biến được khai báo dùng riêng cho chương trình con được gọi là biến cục bộ. Chương trình chính và các chương trình con khác không thể sử dụng được các biến này.

+ Các biến được khai báo ở chương trình chính là biến toàn cục và các chương trình con đều sử dụng được các biến này.

– Biến toàn cục là biến được khai báo trong chương trình chính. Các biến này co thẻ được dùng ở mọi nơi trong chương trình và tồn tại trong suốt thời gian làm việc của chương trình.

– Biến cục bộ (biến địa phương) là các biến được khai báo trong CTC. Các biến này chỉ được sử dụng trong phạm vi ctc mà nó được khai báo. Sau khi kết thức ctc các biến này sẽ không còn tồn tại.

Ví dụ:

 

PROGRAM vidu;
Var a,b,c:integer; {3 biến toàn cục}
PROCEDURE thutuc(n:integer);{n là biến cục bộ}
var i:integer; {i là biến cục bộ}
begin
    for i:=1 to 10 do writeln(i);
end;
BEGIN
    a:=5;b:=6;c:=8;
    thutuc( a);
    thutuc( b);
    thutuc( c);
    readln;
END.

 

– Trong trường họp biến cục bộ trùng tên với biến toàn cục thì máy không bị nhầm lẫn mà sẽ thực hiện trên biến cục bộ. Biến toàn cục không bị ảnh hưởng.


4. Cách truyền tham số trong chương trình con

– CTC không cần có tham số (sau tên ctc) nếu không dùng đến chúng hoặc dùng trực tiếp biến toàn cục
– Khi truyền tham số các tham số trong lời gọi ctc phải đúng thứ tự và kiểu tương ứng với khi khai báo ctc.
Ví dụ:

 

FUNCTION (Danh sách ác tham số):;
[Khai báo Const, Type, Var]
BEGIN
    ;
    :=;
END;
0

 

Khi gọi:

FUNCTION (Danh sách ác tham số):;
[Khai báo Const, Type, Var]
BEGIN
    ;
    :=;
END;
2 {lời gọi đúng}
FUNCTION (Danh sách ác tham số):;
[Khai báo Const, Type, Var]
BEGIN
    ;
    :=;
END;
3 {loi goi sai}
FUNCTION (Danh sách ác tham số):;
[Khai báo Const, Type, Var]
BEGIN
    ;
    :=;
END;
4{lời gọi sai}

– Tham số hình thức (đối) là các tham số sau tên hàm và thủ tục trong khai báo.
– Tham số thực sự là các tham số sau tên hàm và thủ tục trong lời gọi.
– Tham biến: là các tham số được khai báo sau từ khóa var. Các tham số thực phải là các biến chứ không được là giá trị. Tham biến có thể được thay đổi trong CTC và sau khi ra khỏi CTC nó vẫn giữ giá trị thay đổi đó.
– Tham trị: là các tham số được khia báo mà không đứng sau từ khóa var. Các tham số thực có thể là các giá trị, hằng, biến. Tham trị có thể thay đổi trong ctc nhưng sau khi kết thúc ctc giá trị của nó trở về như ban đầu.
– Các tham số trong hàm luôn là các tham trị, các tham số trong thủ tục có thể là tham trị hoặc tham biến.


5. Phân biệt cách sử dụng hàm và thủ tục

Hàm khác thủ tục ở chỗ hàm trả về một giá trị cho lệnh gọi thông qua tên hàm còn thủ tục thì không.

*Dùng hàm
– Kết quả của bài toán trả về 1 giá trị duy nhất (kiểu vô hướng, kiểu string hoặc kiểu con trỏ).
– Lời gọi CTC cần nằm trong các biểu thức tính toán.

*Dùng thủ tục
– Kết quả của bài toán không trả về giá trị nào hoặc trả về nhiều giá trị hoặc trả về kiểu dữ liệu có cấu trúc (Array, Record, File)
– Lời gọi CTC không nằm trong các biểu thức tính toán.

Chú ý: Nếu một công việc có thể làm bằng hàm thì chắc chắn sẽ làm được bằng thủ tục {tuy nhiên sẽ phức tạp hơn khi dùng hàm} nhưng một chương trình làm bằng thủ tục thì chưa chắc ta đã làm được bằng hàm.

Đối với Borland Pascal 7.0 ta có thể gọi hàm như gọi một thủ tục. Không nhất thiết phải lấy giá trị trả về. Để thực hiện được điều này trong menu

FUNCTION (Danh sách ác tham số):;
[Khai báo Const, Type, Var]
BEGIN
    ;
    :=;
END;
5 cần khai báo cú pháp mở rộng (Extended syntax), hoặc trong chương trình cần có dẫn hướng biên dịch {$ X+}. Nếu không, khi biên dịch (gõ F9) Pascal sẽ thông báo lỗi "Error 122: Invalid variable reference".