Procedure [ < danh sách tham số > ];
[ < phần khai báo > ]
Begin
[ < dãy các lệnh > ]
End;
Trong đó:
- Phần đầu thủ tục: gồm tên Procedure và tên thủ tục, danh sách tham số (nếu có).
- Phần khai báo: xác định các hằng, kiểu, biến và 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: viết giữa cặp tên dành riêng Begin và End.
Một số lưu ý:
- Sau tên dành riêng End kết thúc chương trình chính là dấu chấm (.) còn sau End kết thúc thủ tục là dấu chấm phẩy (;).
- Các thủ tục, nếu có, phải được khai báo và mô tả trong phần khai báo của chương trình chính, ngay sau phần khai báo biến.
- Khi cần thực hiện, ta phải viết lệnh gọi thủ tục tương tự như các thủ tục chuẩn.
Ví dụ 1: Lập chương trình cho phép vẽ nhiều hình chữ nhật với kích thước khác nhau.
Gợi ý làm bài:
- Để vẽ được hình chữ nhật với kích thước khác nhau, cần có hai tham số cho dữ liệu vào là chiều dài và chiều rộng.
- Phần đầu thủ tục được viết như sau: Procedure Ve_Hcn (chdai, chrong: integer);
- Thủ tục Ve_Hcn vẽ hình chữ nhật với kích thước tùy ý theo giá trị của tham số chdai và chrong. Với chdai và chrong là nguyên dương.
Chương trình mẫu:
Program VD_hcn;
Uses crt;
Var a,b,i:integer; {bien toan cuc}
Procedure Ve_Hcn(chdai,chrong:integer); {Bat dau CTC}
Var i, j: integer; {bien cuc bo}
Begin
{ve canh tren hinh chu nhat}
For i:=1 to chdai do write(‘*’);
Writeln;
For j:=1 to chrong -2 do {ve 2 canh ben}
Begin
Write(‘*’);
For i:=1 to chdai – 2 do write(‘ ’);{ve khoang trang}
Writeln(‘*’);
End;
{ve canh duoi}
For i:=1 to chdai do write(‘*’);
Writeln;
End; {Ket thuc CTC}
Begin
Clrscr;
Ve_Hcn(25,10); {ve hinh chu nhat 25x10}
Writeln; {cach 1 dong}
Ve_Hcn(5,10); {ve hinh chu nhat 5x10}
Readln;
Clrscr;
{ve 4 hinh chu nhat hinh dau tien 4x2. Moi hinh sau co kich thuoc gap doi hinh truoc}
a:=4; b:=2;
for i:=1 to 4 do
begin
Ve_Hcn(a,b);
readln;
a:=a*2; b:=b*2;
end;
End.
- Tham số giá trị (tham trị): tham số hình thức được thay bằng tham số thực sự tương ứng là các giá trị cụ thể và không được khai báo sau từ khóa var.
+ Các tham số chdai, chrong của thủ tục Ve_Hcn là tham trị. Trong lệnh gọi Ve_Hcn(25,10) tham số chdai được thay bởi số nguyên 25, tham số chrong được thay bởi số nguyên 10.
- Tham số biến (tham biến): tham số hình thức được thay bằng tham số thực sự tương ứng là tên các biến và được khai báo sau từ khóa var.
+ Trong lời gọi thủ tục Ve_Hcn(a,b), tham số chdai được thay bởi 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.
- Để phân biệt tham biến và tham trị Pascal sử dụng từ khóa Var để khai báo những tham số biến.
Function < tên hàm > [ < danh sách tham số > ) ] : < kiểu dữ liệu > ;
[ < phần khai báo > ]
Begin
[ < dãy các lệnh > ]
< tên hàm > := < biểu thức >
End;
Trong đó:
- Kiểu dữ liệu chỉ có thể là kiểu dữ liệu chuẩn: integer, real, char, boolean, string.
- Khác với thủ tục, trong thân hàm cần có lệnh gán giá trị cho tên hàm: < tên hàm >:= < biểu thức >;
Ví dụ 2: Xét chương trình rút gọn một phân số, trong đó sử dụng hàm tính ước chung lớn nhất (ƯCLN) của hai số nguyên.
Chương trình mẫu:
Program Rutgon_Phanso;
Uses crt;
Var Tuso, Mauso, a: Integer; {Bien toan cuc}
Function UCLN(x, y: Integer): Integer; {Bat dau ham UCLN}
Var sodu: Integer; {Bien cuc bo}
Begin
while y <> 0 do
begin
sodu:= x mod y;
x:= y;
y:= sodu;
end;
UCLN:= x; {Gan gia tri cho ten ham}
End; {Ket thuc ham}
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,'/', Mauso);
End.
Một số lưu ý:
- Việc sử dụng hàm hoàn toàn giống như sử dụng các hàm chuẩn.
- Lệnh gọi hàm bao gồm tên hàm và tham số thực sự tương ứng với tham số hình thức.
- Lệnh gọi hàm có thể tham gia vào một 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);
Viết chương trình con để tính n! = 1.2...n.
Gợi ý giải:
Vì bài toán này trả về 1 giá trị duy nhất nên ta dùng hàm.
Function GiaiThua(n:Integer) : Integer;
Var P, i: Integer;
Begin
P:=1;
For i:=1 To n Do
P:=P*i;
GiaiThua:=P;
End;
Viết chương trình con để tìm điểm đối xứng của điểm (x,y) qua gốc tọa độ.
Gợi ý giải:
Vì bài toán này trả về tọa độ điểm đối xứng (xx,yy) gồm 2 giá trị nên ta dùng thủ tục.
Procedure DoiXung(x,y:Integer; Var xx,yy:Integer);
Begin
xx:=-x;
yy:=-y;
End;
Nhận xét 2 ví dụ trên:
Procedure [ < danh sách tham số > ];
[ < phần khai báo > ]
Begin
[ < dãy các lệnh > ]
End;
Trong đó:
- Phần đầu thủ tục: gồm tên Procedure và tên thủ tục, danh sách tham số (nếu có).
- Phần khai báo: xác định các hằng, kiểu, biến và 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: viết giữa cặp tên dành riêng Begin và End.
Một số lưu ý:
- Sau tên dành riêng End kết thúc chương trình chính là dấu chấm (.) còn sau End kết thúc thủ tục là dấu chấm phẩy (;).
- Các thủ tục, nếu có, phải được khai báo và mô tả trong phần khai báo của chương trình chính, ngay sau phần khai báo biến.
- Khi cần thực hiện, ta phải viết lệnh gọi thủ tục tương tự như các thủ tục chuẩn.
Ví dụ 1: Lập chương trình cho phép vẽ nhiều hình chữ nhật với kích thước khác nhau.
Gợi ý làm bài:
- Để vẽ được hình chữ nhật với kích thước khác nhau, cần có hai tham số cho dữ liệu vào là chiều dài và chiều rộng.
- Phần đầu thủ tục được viết như sau: Procedure Ve_Hcn (chdai, chrong: integer);
- Thủ tục Ve_Hcn vẽ hình chữ nhật với kích thước tùy ý theo giá trị của tham số chdai và chrong. Với chdai và chrong là nguyên dương.
Chương trình mẫu:
Program VD_hcn;
Uses crt;
Var a,b,i:integer; {bien toan cuc}
Procedure Ve_Hcn(chdai,chrong:integer); {Bat dau CTC}
Var i, j: integer; {bien cuc bo}
Begin
{ve canh tren hinh chu nhat}
For i:=1 to chdai do write(‘*’);
Writeln;
For j:=1 to chrong -2 do {ve 2 canh ben}
Begin
Write(‘*’);
For i:=1 to chdai – 2 do write(‘ ’);{ve khoang trang}
Writeln(‘*’);
End;
{ve canh duoi}
For i:=1 to chdai do write(‘*’);
Writeln;
End; {Ket thuc CTC}
Begin
Clrscr;
Ve_Hcn(25,10); {ve hinh chu nhat 25x10}
Writeln; {cach 1 dong}
Ve_Hcn(5,10); {ve hinh chu nhat 5x10}
Readln;
Clrscr;
{ve 4 hinh chu nhat hinh dau tien 4x2. Moi hinh sau co kich thuoc gap doi hinh truoc}
a:=4; b:=2;
for i:=1 to 4 do
begin
Ve_Hcn(a,b);
readln;
a:=a*2; b:=b*2;
end;
End.
- Tham số giá trị (tham trị): tham số hình thức được thay bằng tham số thực sự tương ứng là các giá trị cụ thể và không được khai báo sau từ khóa var.
+ Các tham số chdai, chrong của thủ tục Ve_Hcn là tham trị. Trong lệnh gọi Ve_Hcn(25,10) tham số chdai được thay bởi số nguyên 25, tham số chrong được thay bởi số nguyên 10.
- Tham số biến (tham biến): tham số hình thức được thay bằng tham số thực sự tương ứng là tên các biến và được khai báo sau từ khóa var.
+ Trong lời gọi thủ tục Ve_Hcn(a,b), tham số chdai được thay bởi 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.
- Để phân biệt tham biến và tham trị Pascal sử dụng từ khóa Var để khai báo những tham số biến.
Function < tên hàm > [ < danh sách tham số > ) ] : < kiểu dữ liệu > ;
[ < phần khai báo > ]
Begin
[ < dãy các lệnh > ]
< tên hàm > := < biểu thức >
End;
Trong đó:
- Kiểu dữ liệu chỉ có thể là kiểu dữ liệu chuẩn: integer, real, char, boolean, string.
- Khác với thủ tục, trong thân hàm cần có lệnh gán giá trị cho tên hàm: < tên hàm >:= < biểu thức >;
Ví dụ 2: Xét chương trình rút gọn một phân số, trong đó sử dụng hàm tính ước chung lớn nhất (ƯCLN) của hai số nguyên.
Chương trình mẫu:
Program Rutgon_Phanso;
Uses crt;
Var Tuso, Mauso, a: Integer; {Bien toan cuc}
Function UCLN(x, y: Integer): Integer; {Bat dau ham UCLN}
Var sodu: Integer; {Bien cuc bo}
Begin
while y <> 0 do
begin
sodu:= x mod y;
x:= y;
y:= sodu;
end;
UCLN:= x; {Gan gia tri cho ten ham}
End; {Ket thuc ham}
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,'/', Mauso);
End.
Một số lưu ý:
- Việc sử dụng hàm hoàn toàn giống như sử dụng các hàm chuẩn.
- Lệnh gọi hàm bao gồm tên hàm và tham số thực sự tương ứng với tham số hình thức.
- Lệnh gọi hàm có thể tham gia vào một 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);
Viết chương trình con để tính n! = 1.2...n.
Gợi ý giải:
Vì bài toán này trả về 1 giá trị duy nhất nên ta dùng hàm.
Function GiaiThua(n:Integer) : Integer;
Var P, i: Integer;
Begin
P:=1;
For i:=1 To n Do
P:=P*i;
GiaiThua:=P;
End;
Viết chương trình con để tìm điểm đối xứng của điểm (x,y) qua gốc tọa độ.
Gợi ý giải:
Vì bài toán này trả về tọa độ điểm đối xứng (xx,yy) gồm 2 giá trị nên ta dùng thủ tục.
Procedure DoiXung(x,y:Integer; Var xx,yy:Integer);
Begin
xx:=-x;
yy:=-y;
End;
Nhận xét 2 ví dụ trên: