Á Ệ
1. KH
Á
I Ni
Ệ
M
y
Hàm
là
một
khối
lệnh
thực
hiện
một
công
y
Hàm
là
một
khối
lệnh
thực
hiện
một
công
việchoànchỉnh (module), được đặttênvà
được
gọi
thực
thi
nhiều
lần
tại
nhiều
vị
trí
được
gọi
thực
thi
nhiều
lần
tại
nhiều
vị
trí
trong chương trình.
Hàm
còn
gọi
là
chương
tình
con
(
bti
)
y
Hàm
còn
gọi
là
chương
t
r
ình
con
(
su
b
rou
ti
ne
)
Á Ệ
1. KH
Á
I Ni
Ệ
M
y
Có
hai
lọai
hàm
:
y
Có
hai
lọai
hàm
:
y
Hàm thư viện
:lànhững hàm đã đượcxây
dự
ẵ
M ố
ử
d
á
hà
thư
iệ
dự
n
g
s
ẵ
n.
M
u
ố
ns
ử
d
ụn
g
c
á
c
hà
m
thư
v
iệ
n
phảikhaibáothư việnchứanótrongphần
khai
báo
#incl de
khai
báo
#incl
u
de
.
y
Hàm do người dùng định nghĩa
.
Á Ệ
1. KH
Á
I Ni
Ệ
M
y
Hàm
có
thể
được
gọi
từ
chương
trình
chính
y
Hàm
có
thể
được
gọi
từ
chương
trình
chính
(hàm main) hoặctừ 1 hàm khác.
Hà
ó
iá
t ị
t ả
ề
h ặ
khô
Nế
hà
y
Hà
mc
ó
giá
t
r
ị
t
r
ả
v
ề
h
o
ặ
c
khô
n
g
.
Nế
u
hà
m
không có giá trị trả về gọilàthủ tục
(d)
(
proce
d
ure
)
Ổ Á Ủ À
2. DẠNG T
Ổ
NG QU
Á
T C
Ủ
A H
À
M
y
Dạng tổng quát củahàmdongười dùng
y
Dạng
tổng
quát
của
hàm
do
người
dùng
định nghĩa:
et T e
f tio N e( ete Li t)
r
et
urn
T
yp
e
f
unc
tio
n
N
am
e(
param
ete
r
Li
s
t)
{
body of the function
}
}
Ổ Á Ủ À
2. DẠNG T
Ổ
NG QU
Á
T C
Ủ
A H
À
M
y
returnType
:
Kiểu
dữ
liệu
của
giá
trị
trả
về
y
returnType
:
Kiểu
dữ
liệu
của
giá
trị
trả
về
bởihàm.Nếuhàmkhôngtrả về giá trị thì
returnType
là
void
returnType
là
void
y
functionName
:Tênhàm.
á
á
ố
y
p
arameterLis
t
:Danhs
á
ch c
á
cthams
ố
hình thức phân cách nhau bởidấuphẩy
Í
VÍ
DỤ
int
max(
int
a
int
b)
int
max(
int
a
,
int
b)
{
if(a<b)
return b
;
;
else
return a;
return
a;
}
À
3. GỌI H
À
M
y
Một
hàm
khi
đã
định
nghĩa
nhưng
chúng
vẫn
y
Một
hàm
khi
đã
định
nghĩa
nhưng
chúng
vẫn
chưa đượcthựcthi,hàmchỉđượcthựcthi
khi
trong
chương
trình
có
một
lời
gọi
đến
khi
trong
chương
trình
có
một
lời
gọi
đến
hàm đó.
Cú
pháp
gọi
hàm
y
Cú
pháp
gọi
hà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Ụ
y
Gọi
hàm
trong
chương
trình
chính
:
y
Gọi
hàm
trong
chương
trình
chính
:
void main()
{
int
ab;
{
int
a
,
b;
cout<<” a=“; cin>>a;
cout
<<”b “;
cin
>>b;
cout
<<”b
=
“;
cin
>>b;
cout<<”so lon nhat la:”<<max(a, b);
}
}
4. NGUYÊN TẮC HOẠT ĐỘNG CỦA HÀM
y
Hàm
có
thể
được
gọi
từ
nhiều
chỗ
khác
Hàm
có
thể
được
gọi
từ
nhiều
chỗ
khác
nhau trong chương trình.
à
ố
ệ
ứ
y Khi h
à
m được
g
ọi, kh
ố
il
ệ
nh tươn
g
ứ
n
g
củahàmđượcthựcthi.
y Sau khi thự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
id i ()
it
l
(
it
it
b)
vo
id
ma
i
n
()
{
int
abUSC;
i
n
t
usc
l
n
(
i
n
t
a,
i
n
t
b)
{
a
=
abs(a);
int
a
,
b
,
USC;
cout<<“Nhap a,b: ”;
cin>>a>>b
;
a abs(a);
b=abs(b);
while(a!=b)
;
USC = uscln(a,b);
cout<<“Uoc chung lon
nhat
la: ” USC);
{
if(a>b) a-=b;
else
b
-
=a;
nhat
la:
”
,
USC);
}
else
b
-
=a;
}
return a
;}
;}
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
y
Khi
hàm
cần
nhận
đối
số
(
arguments
)
để
y
Khi
hàm
cần
nhận
đối
số
(
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ừ
danh
sách
các
tham
số
để
nhận
giá
trị
từ
chương trình gọi. Các tham số này đượcgọi
là
tham
số
hình
thức
là
tham
số
hình
thức
.
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
y
Ví
dụ
:
Ví
dụ
:
int min(int a, int b)
{
ố
{
if(a<b)
return a
;
Tham s
ố
hình thức
;
else
return b;
}
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
y
Khi
gọi
hàm
ta
cung
cấp
các
giá
trị
thật
các
y
Khi
gọi
hàm
,
ta
cung
cấp
các
giá
trị
thật
,
các
giá trị này sẽđược sao chép vào các tham số
hình
thức
và
các
giá
trị
thật
được
gọi
là
tham
hình
thức
và
các
giá
trị
thật
được
gọi
là
tham
số thực
.
Ví
d
Đ
ể
ì
iá
ị
h
ỏ
h
ấ
ủ
2
ố
5
à
6
Ví
d
ụ:
Đ
ể
t
ì
m
giá
tr
ị
n
h
ỏ
n
h
ấ
tc
ủ
a
2
s
ố
5
và
6
ta
gọihàmmin(5, 6)
Tham số thực
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
y
Có
hai
cách
truyền
đối
số
vào
tham
số
hình
y
Có
hai
cách
truyền
đối
số
vào
tham
số
hình
thức:
T ề
th
t ị
y
T
ruy
ề
n
th
a
m
t
r
ị
y Truyền
tham biến.
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
y
Truyền
tham
trị
(call
by
value)
y
Truyền
tham
trị
(call
by
value)
y Sao chép giá trị của
đốisố
vào
tham
s
ố
hìn
h
thứ
c
củahàm.
ổ
ủ
ố
ô
ả
y Nhữn
g
thay đ
ổ
ic
ủ
athams
ố
kh
ô
n
g
ả
nh
hưởng đếngiátrị của đốisố.
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
Ví d
ụ
:
Ví d
ụ
:
void double(int a)
{
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()
void main()
{
int a=40;
double
(
a
);
();
cout << “\n Gia tri cua a trong ham main: ”;
cout <<
“
a =
“
<< a << endl;
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
t
r
o
n
g
h
a
m
doub
l
e
:“<<
a;
40
a=40 2;
cout
<<
\
n
Gia
tri
cua
a
trong ham main: ”;
cou
t
<< “a = “ << a <<
to g
adoube a;
}
endl;
}
Gia tri cua a trong ham double: 80
Gia
tri
cua
a
trong
ham main: 40
Gia
tri
cua
a
trong
ham main: 40
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
y
Truyền
tham
chiếu
(call
by
reference)
Truyền
tham
chiếu
(call
by
reference)
y Sao chép địachỉ của đốisố vào tham
số
hình
thức
Do
đó
những
thay
đổi
đối
số
hình
thức
.
Do
đó
,
những
thay
đổi
đối
vớithamsố sẽ có tác dụng trên đốisố.
Ví dụ:Khigọihàmdouble(&a);
Địachỉ củaatruyềnvàochothamsố
hình thứccủahàm:double
(
int *b
)
(
)
Ố
Ì
Ứ
Ố
5. THAM S
Ố
H
Ì
NH TH
Ứ
C &THAM S
Ố
T
H
Ự
C
void
double(int
*
b)
void
double(int
b)
{
*b * 2
*b
*
=
2
;
cout << “Trong hàm double a = “ << *b;
}
Ố
Ì
Ứ
Ố
5. THAM S
Ố
H
Ì
NH TH
Ứ
C &THAM S
Ố
T
H
Ự
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);
“
\
h
*b
*
=
2
;
cout << “Trong hàm
double a
“
<< *b;
40
a
100
100
80
cout <<
“
\
T
ron
g
h
am
main : a = “ << a ;
}
double
a
=
<<
*b;
}
}
Trong
hàm
doublea 80
Trong
hàm
doublea
=
80
Trong hàm maina=80
5. THAM SỐ HÌNH THỨC &THAM SỐ THỰC
void main()
void
main()
{ int a = 20, b = 40;
it* & *b &b
i
n
t
*
pa =
&
a,
*
p
b
=
&b
;
swap(pa,pb);
cout << “sau khi goi swap: “;
cout <<
“
a
=“
<<a<<endl;
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)
void swap(
int
a
,
int
b)
{
in
t
temp;
temp =
*
a;
temp = a;
*a = *b;
*b = temp;
}
}
6. PROTOTYPE (NGUYÊN MẪU)CỦA HÀM
y
Dùng
để
loại
trừ
việc
bắt
buộc
phải
định
Dùng
để
loại
trừ
việc
bắt
buộc
phải
định
nghĩahàmtrướckhigọi.
y
Prototype
khai
báo
giống
như
header
của
y
Prototype
khai
báo
giống
như
header
của
hàm
Ví
d
Ví
dụ
:
Header : void dispayMessage()
Prototype : void dispayMessa
g
e()