- Phần khai báo dùng để xác định các hằng, các kiểu, các biến và cũng có thể khai báo hàm và thủ tục khác sử dụng trong thủ tục.. *Chú ý: -Hai tham số trong dấu ngoặc đơn sau tên thủ t
Trang 1B ÀI 18:
CÁCH VIẾT
VÀ SỬ DỤNG CHƯƠNG
TRÌNH CON
Trang 2VD: Vẽ hình chữ nhật có dạng:
*******
* * *******
Để vẽ hình chữ nhật như trên ta cần các lệnh sau.
Writeln(‘*******’);
Writeln(‘* *’);
Writeln(‘*******’);
Ta có thể đưa các lệnh này vào thủ tục có tên VE_HCN, mỗi lần gọi thủ tục này thì một HCN được in ra:
1 Cách viết và sử dụng thủ tục:
Trang 3Program CT1;
Procedure VE_ HCN ; Begin
Writeln(‘*******’); Writeln(‘* *’); Writeln(‘*******’); End;
Begin VE_ HCN;
Writeln; writeln;
VE_ HCN;
Writeln; writeln;
VE_ HCN;
Readln;
End
Bắt đầu thủ tục
Kết thúc thủ tục.
Gọi thủ tục vẽ HCN
Để cách hai dòng
CHƯƠNG TRÌNH:
Trang 4a Cấu trúc của thủ tục:
Procedure < Tên thủ tục>[(<Danh sách tham số>)];
[<Phần khai báo>]
Begin
{… dãy các lệnh (thân của thủ tục) }
End;
Trong đó:
- Phần đầu thủ tục : trước hết là tên dành riêng Procedure, tiếp theo sau là Tên thủ tục Danh sách tham số có thể có hoặc
không.
- Phần khai báo dùng để xác định các hằng, các kiểu, các biến
và cũng có thể khai báo hàm và thủ tục khác sử dụng trong thủ tục.
- Dãy câu lệnh đặt giữa cặp Begin … End; tạo thành thân của thủ tục.
Trang 5Procedure VE_HCN ( Dai, rong : integer);
-Dòng khai báo trên có nghĩa là: vẽ HCN có kích thước khác nhau tùy theo giá trị Dai , rong.
-Chương trình sau mô tả vẽ HCN với hai tham số Dai, rong
trên
b Ví dụ về thủ tục:
VD: Vẽ hình chữ nhật có dạng:
*******
* * *******
Sử dụng tham số dai va rong thể hiện cho chiều dài
và rộng của hình chữ nhật.
Trang 6Program CT2;
Procedure VE_HCN( dai, rong: integer); Var i, j : integer;
Begin { ve canh tren cua hcn}
For i:=1 to dai do write (‘ * ’); Writeln;
{ ve 2 canh ben }
For j:=1 to rong - 2 do
Begin
Write(‘ * ’ );
For i:=1 to dai - 2 do write(‘ ’); Writeln( ‘ * ’ );
{ ve canh duoi }
For i:=1 to dai do write(‘ * ’);
Writeln;
End;
{ chuong trinh chinh}
Begin
VE_HCN (25,10);
Writeln; writeln;
VE_HCN (5,10);
End.
*Chú ý:
-Hai tham số trong dấu ngoặc
đơn sau tên thủ tục khi khai báo
là tham số hình thức, còn trong
lời gọi thủ tục chúng được gọi là
tham số thực tế.
-Hai tham số dai, rong là tham
số hình thức
-Tham số 25,10,5 trong lời gọi
thủ tục là những tham số thực
tế.
-Khi khai báo tham trị thì giá
trị các tham số không thay đổi
khi kết thúc thủ tục.
Trang 7VD:
Chương trình có thủ tục Hoan_doi làm
nhiệm vụ hoán đổi giá trị hai biến.
Trong chương trình sử dụng từ khóa Var trong tham số của thủ tục vì cả 2 biến đều chứa dữ liệu
Procedure Hoan_Doi(var x,y :integer);
Trang 8Program CT3 Var a,b :integer;
Procedure Hoan_Doi(var x,y :integer); Var TG: integer;
Begin
TG : = x ;
x : = y ;
y : = TG ;
End;
{chuong trinh chinh}
Begin
A:=5; B:=10;
Writeln( A : 6, B : 6);
Hoan_Doi(A,B);
Writeln(A: 6, B:6);
Readln;
End.
Trong dòng đầu thủ tục :
Procedure Hoan_doi
(var x,y :integer);
Các tham số x, y là các tham
số biến
- Khai báo: VAR x,y : integer;
Xác định x, y là hai tham số
biến kiểu nguyên
- Để thấy được sự khác nhau
giữa tham số biến và tham
số trị ta xét chưong trình
sau, một trong 2 tham số trở
thành tham số giá trị
Kết quả
5 10
10 5
Trang 9Program CT4 Var a,b :integer;
Procedure Hoan_doi (x: integer, Var y: integer);
Var TG: integer;
Begin
TG : = x ;
x : = y ;
y : = TG ;
End;
{chuong trinh chinh}
Begin
A:=5; B:=10;
Writeln( A:6, B : 6);
Hoan_Doi(A,B);
Writeln(A: 6, B:6);
Readln;
Trong chương trình này x
khai báo tham trị, y khai báo
tham biến nên sau khi thực
hiện song thủ tục chỉ có y là
thay đổi giá trị còn biến x
không đổi
Kết quả khi chạy chương
trình:
5 10
5 5
Trang 10Cấu trúc của hàm:
FUNCTION <Tên hàm>( [ Danh sách tham số >] ) :
<kiểu của hàm>;
[< Phần khai báo> ] BEGIN
(…Dãy các lệnh ( thân của hàm )…)
<Tên hàm>: =<Biểu thức>
END;
2 Cách viết và sử dụng hàm:
Trang 11Sự giống nhau giữa Thủ Tục và Hàm:
1.Cả thủ tục và hàm đều là chương trình con, có cấu tạo giống như một chương trình trừ dòng đầu tiên và kết thúc bằng END;
2 Cả thủ tục và hàm đều có thể chứa các tham số ( tham số giá trị và tham số biến), cùng tuân theo các qui định về khai báo và
PROCEDURE <Tên thủ tục>
[(< Danh sách tham số>)];
[<Phần khai báo>]
BEGIN
(…Dãy các lệnh ( thân của thủ
tục )…)
END;
FUNCTION <Tên hàm>( [ Danh sách
tham số >] ):<kiểu của hàm>;
[< Phần khai báo> ] BEGIN
(…Dãy các lệnh ( thân của hàm )…)
<Tên hàm>: =<Biểu thức>
END;
Trang 12Ví dụ: Viết thủ tục tính bình phương của một số thực
Procedure BinhPhuong(X: real; var X2 : Real);
Begin
X2: = X*X ;
End;
BinhPhuong(a,Temp);
c:=Temp;(* c:=a2 *) BinhPhuong(b,Temp);
c: =c + Temp; (*c:=a2 + b2)
Cách tính c:=a 2 + b 2
trong chương trình chính
Trang 13Ví dụ: Viết hàm tính bình phương của một
số thực
Function BinhPhuong( X: Real) : Real;
Begin
BinhPhuong:=X*X ; End;
• c: = Binhphuong(a) +BinhPhuong(b);
Cách tính c:=a2+b2 trong chương trình chính
Trang 14* Sự khác giữa Thủ tục và Hàm:
Procedure BinhPhuong(X: real;
var X2 : Real);
Begin
X2: = X*X ;
End;
Function BinhPhuong( X: Real): Real; Begin
BinhPhuong:=X*X ; End;
Đầu Hàm bắt đầu với từ khóa FUNCTION , sau tên hàm và
phần khai báo danh sách tham số ( nếu có) phải chỉ ra giá trị kết
quả của Hàm thuộc kiểu dữ liệu nào <kiểu của hàm>
– Kiểu của hàm là kiểu kết quả của Hàm và chỉ có thể là một
trong các kiểu : Integer, Real, Char, Boolean, String
Trong thân của hàm thường có câu lệnh gán giá trị cho tên hàm
<Tên hàm>: =<Biểu thức>
Trang 15Sự khác giữa việc sử dụng Thủ tục và
việc sử dụng hàm Hàm:
BinhPhuong(a,Temp);
c:=Temp;(* c:=a2 *)
BinhPhuong(b,Temp);
c: =c + Temp; (*c:=a2 + b2*)
c: = Binhphuong(a) +BinhPhuong(b);
Lời gọi thủ tục:
Tên_thủ_tục(Các tham số truyền
vào nếu có)
Tương tự như sử dụng các hàm chuẩn của Pascal như SIN(x), SQRT(x), … Viết tên của hàm cần gọi
và truyền các tham số thật
sự cho hàm