THỦ TỤC

1. Lí thuyết về thủ tục
a) Khái niệm: Thủ tục là một chương trình con thực hiện các thao tác nhất định và không trả về giá trị thông qua tên của nó.
b) Cấu trúc của thủ tục:
Procedure <tên thủ tục> [(<ds tham số>:<kiểu dữ liệu của tham số>)];
[<phần khai báo>];
begin
        [<dãy các lệnh>];
end;
c) Một số khái niệm khi viết chương trình con
Tham số hình thức: Là các biến dùng để mang dữ liệu đầu vào hoặc đầu ra (hoặc cả 2)  khi viết chương trình con.
Tham số thực sự: Dùng để thay vào tham số thực sự khi gọi chương trình con.
Tham số hình thức và tham số thực sự có thể trùng tên nhau; Cùng số lượng và tương ứng nhau về kiểu dữ liệu.
Khi viết tham số hình thức, tham số có thể là tham biến hoặc tham trị.
+Tham biến có từ khoá Var đằng trước dùng để mang dữ liệu đầu vào, ra hoặc cả 2; Khi gọi chương trình con, tham số thực sự thay vào tham biến phải là biến. Nó giữ được sự thay đổi sau khi gọi chương trình con.
+Tham trị: Khi khai báo không có  từ khoá Var ở trước, dùng để mang dữ liệu đầu vào; Khi gọi chương trình con, tham số thực sự thay vào tham trị có thể là biến hoặc hằng. Không giữ được sự thay đổi sau khi gọi chương trình con.
2. Ví dụ
Bài 1: Viết một chương trình in ra màn hình 3 hình chữ nhật có chiều rộng là 2 sao (*); chiều dài là một số sao (>=2 *) nào đó nhập từ bàn phím?
Ý tưởng: Việc viết ra 3 hình chữ nhật như trên có tính chất tương tự nhau; nên sử dụng một chương trình con viết ra hình chữ nhật chiều rộng 2 sao; chiều dài giả định là n sao. Vì chương trình con thực hiện thao tác viết ra hình chữ nhật, kết quả không sử dụng để tham gia biểu thức nên sử dụng thủ tục.
Giải quyết bài toán:
VAR a,b,c:byte;
Procedure hcn(n:byte); {n là tham số hình thức, tham trị dùng để mang dữ liệu vào}
Var i:byte;
Begin
For i:=1 to n do write(‘*’);writeln;
For i:=1 to n do write(‘*’);writeln;
End;
BEGIN
Write(‘nhap vao do dai 3 hinh chu nhat:’);readln(a,b,c);
Hcn(a);writeln; hcn(b); writeln; hcn(c);writeln;
Readln
END.

Bài 2:
Viết chương trình sử dụng thủ tục hoán đổi giá trị cho 2 biến bất kì.
Var X,Y:integer;
Procedure Hoandoi(Var a,b:integer); {a,b là tham biến}
Var tg:integer;
Begin
Tg:=a; a:=b; b:=tg;
End;
BEGIN
X:=5; Y:=10;
Writeln(‘X=’,X,’ Y=’,Y); {in ra X=5 Y=10}
Hoandoi(X,Y);
Writeln(‘X=’,X,’ Y=’,Y); {in ra X=10 Y=5}
Readln;
END.
-         Sở dĩ phải đặt a,b là tham biến vì nó dùng để mang dữ liệu đầu vào đồng thời cũng mang dữ liệu đầu ra. Giữ lại được sử thay đổi của  tham số sau khi thoát khỏi chương trình con.
-         Nếu viết Hoandoi(Var a:integer; b:integer); thì khi gọi chương trình con màn hình sẽ in ra X=10 Y=10 (vì sự thay đổi của X được giữ lại, còn Y thì không).
-         Nếu viết Hoandoi(a:integer; Var b:integer); thì khi gọi chương trình con màn hình sẽ in ra X=5 Y=5 (vì sự thay đổi của X không được giữ lại, còn Y thì được giữ lại).

-         Nếu viết Hoandoi(a:integer; b:integer); thì khi gọi chương trình con màn hình sẽ in ra X=5 Y=10 (vì sự thay đổi của cả X, Y không được giữ lại).

Không có nhận xét nào:

Đăng nhận xét