CHƯƠNG 6
HÀM (FUNCTION)
HÀM
(FUNCTION)
1. KHÁI NiỆM
• Hàm là mộtkhốilệnh thựchiệnmộtcôn
g
việchoànchỉnh (module), được đặttên
à
ề
ầ
ề
v
à
được
g
ọithực thi nhi
ề
ul
ầ
ntại nhi
ề
uvị
trí trong chương trình.
•Hàm còn gọi là chương trình con (subroutine)
1. KHÁI NiỆM
•Cóhailọai hàm:
–
Hàm thư vi
ệ
n: là nhữn
g
hàm đã đư
ợ
c
ệ
g
ợ
xây dựng sẵn. Muốnsử dụng các hàm
thư vi
ệ
n
p
hảikhaibáothư vi
ệ
nchứanó
ệ
p
ệ
trong phần khai báo #include.
–
Hàm
do
người
dùng
định
nghĩa
.
Hàm
do
người
dùng
định
nghĩa
.
1. KHÁI NiỆM
ể
•Hàm có th
ể
được
g
ọitừ chươn
g
trình
chính (hàm main) hoặctừ 1 hàm khác.
•Hàm có giá trị trả về hoặckhông.Nếu
hàm khôn
g
có
g
iá tr
ị
trả về
gọ
ilàthủ t
ụ
c
g
g
ị
gọ
ụ
(procedure)
2. DẠNG TỔNG QUÁT CỦA HÀM
ổ
•Dạn
g
t
ổ
n
g
quát của hàm do n
g
ười dùn
g
định nghĩa:
returnType functionName(parameterList)
{
{
body of the function
}
}
2. DẠNG TỔNG QUÁT CỦA HÀM
ể
•
returnTyp
e
:Ki
ể
udữ liệucủa
g
iá trị trả
về bởihàm.Nếuhàmkhôngtrả về giá trị
ì
à
th
ì
returnType l
à
void
•
functionNam
e
:
T
ên hàm.
•
parameterList
:Danhsáchcácthamsố
hình
thức
phân
cách
nhau
bởi
dấu
phẩy
hình
thức
phân
cách
nhau
bởi
dấu
phẩy
VÍ DỤ
int max(int a, int b)
{
{
if(a<b)
return b;
return
b;
else
return a;
}
}
3. GỌI HÀM
•Mộthàmkhiđã định n
g
hĩanhưn
g
chún
g
vẫnchưa đượcthựcthi,hàmchỉđược
ì
ó
ộ
ờ
thựcthikhitron
g
chươn
g
tr
ì
nh c
ó
m
ộ
tl
ờ
i
gọi đếnhàmđó.
• Cú pháp gọihàm:
<Tên hàm>([Danh sách các tham s
ố
])
<Tên hàm>([Danh sách các tham s
ố
])
VÍ DỤ
à ìí
•Gọi h
à
m tron
g
chươn
g
tr
ì
nh ch
í
nh:
void main()
{ int a, b;
cout<<” a=“; cin>>a;
cout<<”b=“; cin>>b;
cout<<”so lon nhat la:”<<max(a, b);
}
4. NGUYÊN TẮC HOẠT ĐỘNG CỦA HÀM
ể
ỗ
•Hàmcóth
ể
được
g
ọitừ nhiềuch
ỗ
khác
nhau trong chương trình.
•Khi hàm đượcgọi, khốilệnh tương ứng
củahàmđư
ợ
cth
ự
cthi.
ợ
ự
•Saukhithựchiện xong, quyền điềukhiển
được
trả
về
cho
chương
trình
gọi
.
được
trả
về
cho
chương
trình
gọi
.
4. NGUYÊN TẮC HOẠT ĐỘNG CỦA HÀM
void main()
{
it bUSC
int uscln
(
int a, int b
)
{
a=abs(a);
i
n
t
a,
b
,
USC
;
cout<<“Nhap a,b: ”;
cin>>a>>b;
a=abs(a);
b=abs(b);
while
(
a!=b
)
cin>>a>>b;
USC = uscln(a,b);
cout<<“Uoc chun
g
()
{
if(a>b) a-=b;
l
b
g
lon nhat la: ”, USC);
}
e
l
se
b
-=a;
}
return a
;}
return
a
;}
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
ầ
ố
ố
ể
• Khi hàm c
ầ
nnhận đ
ố
is
ố
(arguments) đ
ể
thực thi thì khi khai báo hàm cần khai báo
ố
ể
danh sách các tham s
ố
đ
ể
nhận giá trị từ
chương trình gọi. Các tham số này được
ố
gọilàtham s
ố
hình thứ
c
.
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
Ví
d
•
Ví
d
ụ:
int min(int a, int b)
{
{
if(a<b)
return
a
;
Tham số hình thức
return
a
;
else
return
b
;
return
b
;
}
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
•Khigọi hàm, ta cung cấpcácgiátrị thật,
các
g
iá tr
ị
nà
y
sẽđư
ợ
csaoché
p
vào các
g
ị
y
ợ
p
tham số hình thứcvàcácgiátrị thật được
gọ
ilà
tha
m
s
ố
th
ực
.
gọ
ự
Ví dụ: Để tìm giá trị nhỏ nhấtcủa2số 5và6ta
g
ọ
i
hàm
min(
5
,
6
)
ố
g
ọ
i
hàm
min(
5
,
6
)
min(int a, int b)
Tham s
ố
thực
min(int a, int b)
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
•Có hai cách truyền đốis
ố
vào tham s
ố
hình thức:
–Truyền
tham trị
–
Truyền
tham
biến
.
Truyền
tham
biến
.
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
•
Truyề
n
tha
m
tr
ị
(
cal
l
b
y
value
)
–
Sao ché
p
g
iá tr
ị
của
đố
i
s
ố
vào
tha
m
p
g
ị
số hình thức
củahàm.
–
Những
thay
đổi
của
tham
số
không
ảnh
Những
thay
đổi
của
tham
số
không
ảnh
hưởng đếngiátrị của đốisố.
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
í
Ví
dụ:
void double
(
int a
)
()
{
a = a
*
2;
a = a 2;
cout << “gia tri cua a trong ham double:“<< a;
}
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
void main()
{
{
int a=40;
double(a);
double(a);
cout << “\n Gia tri cua a trong ham main: ”;
cout << “a = “ << a << endl;
}
}
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
void main()
void double( int a )
void main()
{
int a=40;
void double( int a )
{
a = a
*
2;
40
a=40
*
2;
int a=40;
double(a);
cout<<
“
\
n Gia tri cua a
a = a 2;
cout << “Gia tri cua a
tr
o
n
g
h
a
m
doub
le:“<<
a;
40
a=40 2;
cout<<
\
n Gia tri cua a
trong ham main: ”;
cout << “a = “ << a <<
og a doub a;
}
endl;
}
Gia tri cua a trong ham double: 80
Gia tri cua a trong ham double: 80
Gia tri cua a trong ham main: 40
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
• Truyền tham chiếu
(
cal
l
b
y
reference
)
–
Sao ché
p
đ
ị
achỉ của đốis
ố
vào tham
p
ị
số hình thức. Do đó, những thay đổi đối
vớithams
ố
sẽ có tác d
ụ
n
g
trên đốis
ố
.
ụ g
Ví dụ:Khigọihàmdouble(&a);
Địa
chỉ
của
a
truyền
vào
cho
tham
số
hình
Địa
chỉ
của
a
truyền
vào
cho
tham
số
hình
thứccủahàm:double(int *b)
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
void double(in
t
*b)
{
{
*b *= 2;
cout <<
“
Trong hàm double a =
“
<< *b;
cout
<<
Trong
hàm
double
a
=
<<
*b;
}
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
void main()
void
double(
int
*b)
b
void
main()
{
it
40
void
double(
int
*b)
{
*b * 2
40
a
b
80
i
n
t
a=
40
;
double(&a);
“
\
T
h
*b
*
=
2
;
cout << “Trong hàm
double a =
“
<< *b;
40
a
100
100
80
cout <<
“
\
T
rong
h
am
main : a = “ << a ;
}
double
a
=
<<
*b;
}
Trong
hàm
double a = 8
}
Trong
hàm
double
a
=
8
Trong hàm double a = 80
Trong hàm main a = 80
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
void main()
{
int a = 20
,
b = 40
;
{,;
int *pa =&a, *pb=&b;
swap(pa pb);
swap(pa
,
pb);
cout << “sau khi goi swap: “;
cout << “a = “ << a << endl;
cout << “b = “ << b << endl
;
}
;}
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
void swap(int *a, int *b)
{
{
int temp;
temp = *a;
*
a =
*
b;
a = b;
*b = temp;
}
6. PROTOTYPE (NGUYÊN MẪU)CỦA HÀM
ể
•Dùn
g
đ
ể
loạitrừ việcbắtbuộcphải định
nghĩahàmtrướckhigọi.
• Prototype khai báo giống như header của
hàm
Ví dụ:
Header
: void dispayMessage()
Header
:
void
dispayMessage()
Prototype : void dispayMessage()