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