Bài 18.
VÍ DỤ VỀ CÁCH VIẾT VÀ SỬ DỤNG CHƯƠNG TRÌNH CON
(tiết 2)
KIỂM TRA BÀI CỦ
1. Nêu cấu trúc của thủ tục?
2. Cho phần đầu thủ tục như sau:
Procedure Tong(x,y:integer; var s:integer);
Trong lời gọi thủ tục ở chương trình ta gọi:
Tong(a,b,T);
- Hãy xác định tham số hình thức, tham số thực sự?
- Xác định tham số giá trị, tham số biến?
NỘI DUNG
1. Cách viết và sử dụng thủ tục.
a. Cấu trúc thủ tục:
b. Ví dụ về thủ tục
2. Cách viết và sử dụng hàm. a. Cấu trúc của hàm.
b. Ví dụ về hàm.

2. Cách viết và sử dụng hàm.
Cấu trúc của hàm:
Function [()]: ;
[]
Begin
[]
:= ;
End;
Kiểu dữ liệu trả về có thể gồm những kiểu nào?
 Kiểu dữ liệu chỉ có thể là kiểu dữ liệu chuẩn
(integer, real, boolean, char, string)
2. Cách viết và sử dụng hàm.
Cấu trúc hàm
Function [()]:
;
[]
Begin
[]
:= ;
End;
Procedure [()];
[]
Begin
[]
End;

Cấu trúc thủ tục
So sánh sự giống và khác nhau của hàm và thủ tục?
2. Cách viết và sử dụng hàm.
Cấu trúc của hàm:
Giống nhau:
+ Đều là chương trình con, có cấu trúc giống một chương trình.
+ Đều có thể có tham số (tham biến hoặc tham trị), cùng tuân theo quy định về khai báo và sử dụng của các tham số này.
Khác nhau:
+ Việc thực hiện hàm luôn trả về giá trị thuộc kiểu xác định qua tên hàm.
+ Trong thân hàm thường có câu lệnh gán giá trị cho tên hàm.
2. Cách viết và sử dụng hàm.
b. Ví dụ về hàm:
Ví dụ 1: Lập chương trình thực hiện việc rút gọn một phân số, trong đó có sử dụng hàm tính ước số chung lớn nhất (ƯCLN) của hai số nguyên.
HÃY XÁC ĐỊNH
Trong chương trình có mấy hàm?

Hàm UCLN dùng để làm gì?

Biến nào là biến toàn cục?

Biến nào là biến cục bộ?

Tham số hình thức là tham biến hay tham trị?

Lời gọi hàm:

Câu lệnh gán giá trị cho tên hàm?
UCLN:=x
Chương trình rút gọn phân số
tuso,mauso,a
sodu
Tham trị: x,y:integer
a:=UCNL(tuso,mauso)
Program Rutgon_phanso;
USES CRT;
Var tuso,mauso,a:integer;








Begin
Write(‘Nhap tu so, mau so’);Readlln(tuso,mauso);
a:=UCNL(tuso,mauso);
If a>1 Then
Begin
tuso:=tuso div a; mauso:=mauso div a;
End;
Write(tuso:5, mauso:5);
End.
Function UCLN(x,y:integer):integer;
Var sodu:integer;
Begin
While y<>0 Do
Begin
sodu:=x mod y; x:=y; y:=sodu;
End; UCLN:=x;
End;
Có một hàm
Tìm ước số chung lớn nhất của x,y
CHƯƠNG TRÌNH RÚT GỌN
2. Cách viết và sử dụng hàm.
a. Cấu trúc của hàm:
b. Ví dụ về hàm:



Hàm được sử dụng như thế nào trong chương trình?
Sử dụng hàm:
+ Việc sử dụng hàm tương tự như sử dụng các hàm chuẩn.
+ Lệnh gọi hàm có thể tham gia vào biểu thức như 1 toán hạng hoặc làm tham số cho chương trình con khác.
Ví dụ: a:=UCLN(tuso,mauso)+5;
write(UCLN(tuso,mauso);
Ví dụ 2: Viết chương trình tìm số nhỏ nhất trong 3 số.
(xây dựng hàm tính giá trị nhỏ nhất của 2 số)
Giả sử x = 3, y = 7
=> số nhỏ nhất là x = 3.
Làm thế nào để biết được số nhỏ nhất?
 So sánh giá trị của 2 số. Nếu x>y thì số nhỏ nhất là y, ngược lại số nhỏ nhất là x.
Chương trình tìm số nhỏ nhất trong 3 số
Program Minbaso;
var a, b, c: real;





Begin
Write(‘ Nhap vao ba so’); Readln(a,b,c);
Writeln(‘So nho nhat trong 3 so la:’,Min(Min(a,b),c));
Readln
End.
Biến toàn cục:
Tham số giá trị:
Hàm sử dụng làm tham số hay tham gia biểu thức?
a,b,c
x,y
Làm tham số
Function Min(x,y:real):real;
Begin
if x>y then Min:=y
else Min:=x;
End;
Chương trình tìm số nhỏ nhất trong 3 số
Ví du 3: Viết chương trình con tính tổng của 2 nguyên số nhập vào từ bán phím.
Function Tong(x,y:integer):integer;
Begin
Tong:=x+y;
End;
Procedure Tong(x,y:integer; var t:integer);
Begin
t:=x+y;
End;
Nên sử dụng thủ tục hay hàm?
Sử dụng hàm
Sử dụng thủ tục
=> Nên sử dụng hàm
Ví dụ 4: Viết chương trình con kiểm tra số nguyên a là số chẵn hay số lẻ.
Procedure KT(a:integer);
Begin
IF a mod 2 = 0 Then
Write(‘ La so chan’)
Else Write(‘La so le);
End;
Function KT(a:integer):boolean;
Begin
IF a mod 2 = 0 Then
KT:=true
Else KT:=false;
End;
Sử dụng thủ tục
Sử dụng hàm
Nên sử dụng thủ tục hay hàm?
=> Nên sử dụng thủ tục
Khi nào thì sử dụng hàm, khi nào thì sử dụng thủ tục?
Khi cần thực hiện một công việc nào đó người ta dùng thủ tục, còn khi cần tính một giá trị nào đó người ta dùng hàm.
Ví du 3: Chương trình tính tổng của 2 số nhập vào từ bàn phím (sử dụng hàm tính tổng của hai số)
Program Tinh_tong;
Var a,b:integer;



Begin
Writeln(‘Nhap 2 so:’); readln(a,b);
Writeln(‘Tong cua 2 so’,Tong(a,b));
Readln
End.
Function Tong(x,y:integer):integer;
Begin
Tong :=x+y;
End;
HAM
THUTUC
Ví du 4: Chương trình kiểm tra 1 số nguyên nhập vào từ bàn phím là số chẳn hay lẻ.
Program Kiem_tra;
Var a:integer;





Begin
Writeln(‘Nhap vao 1 so:’); readln(a);
KT(a);
Readln
End.
Procedure KT(x:integer);
Begin
IF x mod 2 = 0 Then
Write(‘ La so chan’)
Else Write(‘La so le’);
End;
THUTUC
HAM
Kiến thức cần nhớ
Khái niệm chương trình con
- Phân loại chương trình con
+ Thủ tục
+ Hàm
- Cấu trúc chương trình con

[]

- Tham số hình thức
+ Tham số giá trị
+ Tham số biến
- Biến cục bộ
- Biến toàn cục
KÍNH CHÀO CÁC THẦY CÔ
VÀ CÁC EM!
Bài tập
Bài 1:Viết chương trình con kiểm tra 1 số nguyên là số âm hay số dương?
Bài 2: Viết chương trình con tính tổng bình phương của 2 số nguyên.
nguon VI OLET