[r]
(1)Ngơn ngữ lập trình
Bài 3:
Hàm Nạp chồng Hàm
Giảng viên: Lê Nguyễn Tuấn Thành Email: thanhlnt@tlu.edu.vn
(2)Nội dung
2
1 Hàm (Function)
2 Nạp chồng hàm (Overloading)
(3)1 HÀM
(4)Cơ bản về hàm
4
Hàm định nghĩa sẵn
Hàm trả giá trị
Hàm không trả giá trị (hàm void)
Hàm người dùng định nghĩa
Khai báo, định nghĩa, gọi hàm
Hàm đệ quy (recursive functions)
Quy tắc phạm vi (scope rules)
Biến địa phương (local)
(5)Giới thiệu về hàm
Hàm (Function): một khối chương trình (blocks of
programs) có mục đích rõ ràng
Một số thuật ngữ (cách gọi) khác hàm
ngôn ngữ khác:
Phương thức (procedures), chương trình (subprograms),
phương thức (methods)
Khái niệm I – P – O
Input – Process – Output
Thành phần chương trình
(6)Hàm định nghĩa trước
(Predefined functions)
6
C++ cung cấp nhiều thư viện với đầy đủ hàm định nghĩa sẵn !
Hai kiểu:
Hàm trả giá trị
Hàm không trả giá trị
Phải “#include” thư viện thích hợp
(7)Sử dụng hàm định nghĩa sẵn
C++ có vơ số hàm toán học định nghĩa sẵn!
Trong thư viện <cmath.h> Hầu hết trả giá trị
Ví dụ: theRoot = sqrt(9.0);
Các thành phần biểu thức trên:
sqrt: tên hàm
theRoot: biến gán giá trị trả hàm
9.0: đối số (argument) đầu vào (starting input) cho hàm
Viết theo khái niệm I – P – O:
I = 9.0
P = “tính bậc hai” (the square root)
(8)Lời gọi hàm
(Function call)
8
Trở lại ví dụ trước theRoot = sqrt(9.0);
Biểu thức sqrt(9.0) lời gọi hàm (function call hay
function invocation)
Đối số lời gọi hàm literal (vd: 9.0),
một biến hay biểu thức
Lời gọi hàm sử dụng biểu thức
(9)(10)Chương trình với hàm định nghĩa sẵn (2/2)
(11)Một số hàm định nghĩa sẵn khác (1/3)
#include <cstdlib>
abs(): trả giá trị tuyệt đối số nguyên (int)
labs(): trả giá trị tuyệt đối số nguyên lớn (long
int)
fabs(): trả giá trị tuyệt đối số thực (float)
Hàm toán học
pow (x, y): x^y
Lưu ý: một hàm có thể nhiều đối số, mỗi đối số có
(12)Một số hàm định nghĩa sẵn khác (2/3)
(13)(14)Hàm void định nghĩa sẵn
14
Khơng có giá trị trả lại
(15)Bộ tạo số ngẫu nhiên
Trả số “được chọn ngẫu nhiên”
Được sử dụng cho mơ (simulation), trị chơi (game)
rand(): trả giá trị RAND_MAX
Scaling: ép buộc số ngẫu nhiên vào khoảng nhỏ
Ví dụ: rand() % 6 // trả lại giá trị ngẫu nhiên khoảng từ
0 đến
Shifting: rand() % +
Hạt giống (seed) dùng để tạo số ngẫu nhiên
Hàm rand() tạo chuỗi trình tự (sequence) số ngẫu nhiên Chúng ta sử dụng “hạt giống (seed)” để thay trình tự tạo
số ngẫu nhiên với hàm srand(seed_value):
void function
(16)Bài tập
16
Viết chương trình C++ sinh N số ngẫu nhiên (N <
100) khoảng đến 1000, sau xếp theo thứ
tự tăng dần giảm dần
(17)Hàm người dùng định nghĩa
Lập trình viên tự viết hàm cho mục đích mình! Xây dựng khối chương trình
Chia để trị (Divide & Conquer) Dễ đọc (Readability)
Sử dụng lại (Re-use)
Hàm mà bạn định nghĩa có thể:
Trong file với hàm main()
(18)Những bước cần có xây dựng một hàm
18
3 bước xây dựng hàm
1. Khai báo / nguyên mẫu hàm (function
declaration/prototype)
Thông tin cho trình biên dịch (compiler)
Thơng dịch (interpret) thích hợp lời gọi hàm
2. Định nghĩa hàm (function definition)
Cài đặt thực tế hàm
3. Gọi hàm (function call)
(19)(Function declaration)
Còn gọi nguyên mẫu hàm (function prototype)
Khai báo thơng tin cho trình biên dịch Nói cho trình biên
dịch biết cách để thông dịch lời gọi hàm
Cú pháp:
<giá_trị_trả_lại> TênHàm(danh_sách_đối_số); Ví dụ:
double totalCost( int numberParameter, double priceParameter);
Được đặt trước lời gọi hàm
Trong không gian khai báo hàm main()
(20)Định nghĩa hàm
(Function definition)
20
Cài đặt thực tế hàm Giống cài đặt hàm
main()
Ví dụ:
double totalCost ( int numberParameter, double priceParameter) {
const double TAXRATE = 0.05; double subTotal;
subtotal = priceParameter * numberParameter; return (subtotal + subtotal * TAXRATE);
}
Được đặt sau hàm main() Không đặt bên hàm
main()