.c
om
ng
co
cu
u
du
o
ng
th
an
HÀM
CuuDuongThanCong.com
/>
.c
om
Giới thiệu về hàm
• Thành phần con của một
Subpart 3
th
Subpart 2
Subpart
1.2
định.
• Tên gọi của thành phần con:
• Thủ tục, chương trình con,
• Với C++: hàm
du
o
Subpart
2.1
u
Subpart
1.1
thực hiện 1 chức năng nhất
cu
ng
Subpart 1
an
co
ng
Program
chương trình, mỗi thành phần
phương thức
• Xử lý: I-P-O
• Input – Process – Output
2
CuuDuongThanCong.com
/>
an
co
• Hai loại:
• Hàm có giá trị trả về
• Hàm khơng có giá trị trả về (void)
ng
• Các thư viện bao gồm nhiều hàm hữu ích
.c
om
Hàm sẵn có
cu
u
du
o
ng
th
• Phải "#include" các thư viện phù hợp.
• Ví dụ
• <conio.h>
• <iostream> (for cout, cin)
3
CuuDuongThanCong.com
/>
• Có rất nhiều hàm tốn học
• Thư viện: <cmath>
.c
om
Sử dụng hàm sẵn có
ng
=
biến
=
du
o
pow
y
phần:
th
• Thành
an
• Ví dụ: y = pow(x,2);
co
ng
• Hầu hết đều có giá trị trả về
nhận
tên
giá
• I=
• P=
• O=
về
cu
• I-P-O:
trả
u
x, 2: tham số, giá trị ban đầu của hàm
trị
hàm
x, 2
tính lũy thừa
x^2
4
CuuDuongThanCong.com
/>
Lời gọi hàm
co
• Biểu thức pow(x,2) là lời gọi hàm.
.c
om
y = pow(x,2);
ng
• Ví dụ:
du
o
ng
• Ví dụ: y = pow(x+2,2);
th
an
• Tham số của hàm: giá trị cố định, biến, biểu thức
cu
u
• Lời gọi hàm có thể là thành phần của một biểu thức
• z = pow(x, 2)/10;
5
CuuDuongThanCong.com
/>
Các hàm sẵn có khác
th
an
• abs()
co
• Thư viện chứa các hàm như:
ng
.c
om
• #include <cstdlib>
du
o
ng
• labs()
cu
u
• fabs() trong thư viện <cmath>!
• Có thể nhầm lẫn
6
CuuDuongThanCong.com
/>
.c
om
ng
co
an
th
ng
du
o
u
cu
3-7
CuuDuongThanCong.com
/>
ng
co
an
th
cu
u
du
o
ng
• Lập trinh viên tự xây dựng hàm
• Nguyên tắc xây dựng:
• Chia để trị
• Dễ đọc
• Dễ dùng
• Định nghĩa hàm có thể
• Cùng file với hàm main()
• Khác file với main
.c
om
Hàm tự định nghĩa
8
CuuDuongThanCong.com
/>
Sử dụng hàm
cu
u
du
o
ng
th
an
co
ng
.c
om
1. Khai báo hàm
• Thơng tin dành cho trình biên dịch
• Biên dịch phù hợp
2. Định nghĩa hàm
• Thực thi thực sự: xây dựng hàm chi tiết
3. Gọi hàm
• Chuyển quyền điều khiển cho hàm
9
CuuDuongThanCong.com
/>
.c
om
Khai báo hàm
ng
• Nguyên mẫu hàm (function prototoype)
• Khai báo thơng tin cho trình biên dịch
du
o
• Vị trí:
ng
th
an
co
• Cú pháp:
<Kiểu_dữ_liệu> Tên_hàm (Kiểu_dữ_liệu_1 tham_số_1, …);
• Ví dụ:
double tinhDTB (double diem1, double diem2);
cu
u
• Trước hàm main()
• Các hàm ngang hàng nhau, khơng có trường hợp hàm này lồng vào hàm
kia
10
CuuDuongThanCong.com
/>
Định nghĩa hàm
th
an
co
ng
.c
om
• Ví dụ:
double tinhDTB (double diem1, double diem2)
{
return (diem1 + diem2)/2 ;
}
du
o
ng
• Tham số hình thức trong định nghĩa hàm: Nơi lưu trữ dữ liệu
cu
u
• Lệnh return: chuyển dữ liệu trả về cho “người gọi hàm”
11
CuuDuongThanCong.com
/>
Lời gọi hàm
ng
.c
om
• Tương tự gọi hàm đã định nghĩa sẵn
double dtb = tinhDTB(d1, d2)
co
• tinhDTB trả về giá trị kiểu double
ng
• Tham số thực: d1, d2
th
an
• Giá trị trả về được gán vào biến dtb
u
du
o
• Tham số: giá trị khơng đổi, biến, biểu thức
• Trong lời gọi hàm, các tham số thường được gọi là tham số thực sự
cu
• Bởi vì chúng chứa dữ liệu thực sự được truyền
12
CuuDuongThanCong.com
/>
Tham số
.c
om
• Tham số hình thức
co
ng
• Khai báo hàm
• Định nghĩa hàm
an
• Tham số thực sự
cu
u
du
o
ng
th
• Trong lời gọi hàm
13
CuuDuongThanCong.com
/>
Hàm trả về giá trị logic Boolean
.c
om
• Hàm có thể trả về bất kỳ kiểu dữ liệu nào
co
th
an
• Định nghĩa hàm
bool dat (int diem)
{
return (diem>=4)&&(rate<=10);
ng
• Khai báo hàm
bool dat(int diem);
du
o
cu
• Lời gọi hàm từ hàm khác:
u
• Trả về "true" hoặc "false"
ng
}
if (dat(diem))
cout << “Dat";
else
cout << “Rot”;
CuuDuongThanCong.com
14
/>
• Tương tự với hàm trả về một giá trị bất kỳ
co
ng
• Khai báo kiểu trả về là void
.c
om
Hàm có kiểu trả về void
th
an
• Ví dụ:
ng
• Khai báo hàm:
du
o
void showResults(double fDegrees, double cDegrees);
cu
u
• Kiểu trả về: "void"
• Khơng trả về giá trị nào hết
15
CuuDuongThanCong.com
/>
Định nghĩa hàm có kiểu trả về void
cu
u
du
o
ng
th
an
co
ng
.c
om
• Định nghĩa hàm:
void showResults(double fDegrees, double cDegrees)
{
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(1);
cout << fDegrees
<< " degrees fahrenheit equals \n"
<< cDegrees << " degrees celsius.\n";
}
• Khơng có lệnh return hoặc sử dụng hàm return;
16
CuuDuongThanCong.com
/>
Gọi hàm có kiểu trả về void
.c
om
• Giống như hàm các hàm void đã định nghĩa sẵn
• Từ một hàm khác, như main():
an
co
ng
• showResults(degreesF, degreesC);
• showResults(32.5, 0.3);
u
• Truyền cho hàm
du
o
ng
th
• Khơng có câu lệnh gán vì khơng trả về giá trị
• Tham số thực sự (degreesF, degreesC)
cu
• Hàm được gọi chỉ việc thực thi với dữ liệu truyền vào
17
CuuDuongThanCong.com
/>
Lệnh return
.c
om
• Trả quyền điều khiển về hàm đang gọi
an
co
ng
• Với các hàm có kiểu trả về khác void, phải có ít nhất 1 câu lệnh return
du
o
u
• return;
cu
về là void
ng
th
• Lệnh return có thể có hoặc khơng có trong hàm có kiểu trả
18
CuuDuongThanCong.com
/>
main()
.c
om
• main() là hàm đặc biệt:
• Chỉ có một và chỉ một hàm main tồn tại trong chương trình.
co
ng
• Ai gọi hàm main?
cu
u
du
o
ng
th
an
• Hệ điều hành
• Trả về kiểu int
19
CuuDuongThanCong.com
/>
• Nguyên tắc: hàm phải được định nghĩa trước khi gọi.
.c
om
Ngun mẫu (prototype):
ng
• Tuy nhiên, trong lập trình thì hàm main() có thể được đặt trước các hàm khác. Nếu hàm main() có
co
gọi các hàm khác thì trình biên dịch sẽ báo lỗi hàm này chưa định nghĩa.
th
an
• Do vậy, cần khai báo nguyên mẫu hàm trước hàm main().
du
o
u
Ví dụ:
cu
và khơng có thân hàm.
ng
• Cú pháp khai báo ngun mẫu của hàm giống như định nghĩa hàm, chỉ khác là kết thúc bằng dấu ;
CuuDuongThanCong.com
/>
Tham số
• Tham trị
an
co
• Giá trị của tham số được truyền
ng
.c
om
• Hai cách truyền tham số
ng
th
• Tham biến
cu
u
du
o
• Địa chỉ của tham số thực được truyền
21
CuuDuongThanCong.com
/>
Tham trị
.c
om
• Sao chép giá trị của tham số thực
co
ng
• Xem như biến cục bộ bên trong hàm
an
• Nếu có thay đổi, chỉ thay đổi giá trị cục bộ; hàm khơng có quyền thay đổi
cu
u
du
o
ng
th
giá trị của tham số thực.
22
CuuDuongThanCong.com
/>
cu
u
du
o
ng
th
an
co
ng
.c
om
Tham trị
23
CuuDuongThanCong.com
/>
Tham chiếu
.c
om
• Tham chiếu tới tham số thực sự
ng
• Trỏ tới vị trí vùng nhớ của tham số thực sự
th
cu
u
du
o
ng
• Sử dụng: tên_kiển& tên_biến
an
co
• Thay đổi giá trị tại vùng nhớ này => thay đổi giá trị của tham số thực sự
24
CuuDuongThanCong.com
/>
cu
u
du
o
ng
th
an
co
ng
.c
om
Tham chiếu
25
CuuDuongThanCong.com
/>