Bài giảng môn Nhập môn về lập trình - Chương 6: Hàm (Function)
Chương 6
Hꢀm (Function)
Presenter:
Nhập môn về lập trình (C6)
Slide 1
Learning outcomes
L.O.4.1 – Xác định được thành phần của một hàm.
L.O.4.2 – Hiện thực được giải thuật dưới dạng hàm.
L.O.4.3 – Giải thích được các kiểu truyền tham số trong C.
L.O.4.4 – Tổ chức được các chương trình lớn, gồm nhiều
hàm.
L.O.3.5 – Hiện thực được các giải thuật đệ quy bằng ngôn
ngữ C và hiểu được nguyên tắc hoạt động của nó.
Nhập môn về lập trình (C6)
Slide 2
Tổ chức chương trꢁnh C
Cꢂu trꢃc module
Tiền xꢄ lꢅ:
Mô tꢃ module
• #include
• #define
#<Tiꢀn xꢁ lꢂ>
Khai bꢆo / định nghꢇa:
• Hằng
Khai bꢄo / đꢅnh nghꢆa
Hꢇm 1
• Biꢈn
• Hꢀm/biꢈn extern
• Mô tả hꢀm
Cꢆc hꢀm:
Hꢇm 2
• main được chạy đầu tiên.
• Định nghꢇa ngang cꢂp,
không lồng nhau.
Hꢇm 3
• Được gꢉi mới chạy.
Nhập môn về lập trình (C6)
Slide 3
Tổ chức chương trꢁnh C
Project/solution : chương trꢁnh
Mô tꢃ module
#<Tiꢀn xꢁ lꢂ>
Khai bꢄo / đꢅnh nghꢆa
Lập trꢁnh theo module
Hꢇm 1
Hꢇm 2
Hꢇm 3
Mô tꢃ module
#<Tiꢀn xꢁ lꢂ>
Khai bꢄo / đꢅnh nghꢆa
Hꢇm 1
Hꢇm 2
Hꢇm 3
Mô tꢃ module
#<Tiꢀn xꢁ lꢂ>
Khai bꢄo / đꢅnh nghꢆa
Chia ra
nhiꢀu
.cpp
Hꢇm 1
Hꢇm 2
Hꢇm 3
Mô tꢃ module
#<Tiꢀn xꢁ lꢂ>
Khai bꢄo / đꢅnh nghꢆa
Hꢇm 1
Hꢇm 2
Hꢇm 3
Source file
Nhập môn về lập trình (C6)
Slide 4
Hàm là gì ?
Hꢀm lꢀ phương tiện phân chia code của module ra nhiều
đơn vị nhỏ hơn để dễ quản lꢅ vꢀ sꢄa chữa.
Một dꢈ ꢄn/giꢃi phꢄp/chương trꢉnh = tập hợp N module
Một Module = tập hợp N hꢇm
Nhập môn về lập trình (C6)
Slide 5
Cꢆc vꢂn đề của hꢀm
Khai bꢄo hꢇm
extern
Mô tả trước
Hꢇm
Đꢅnh nghꢆa hꢇm
Định nghꢇa biꢈn
Lệnh thực thi
Gꢊi hꢇm
Trực tiꢈp
Giꢆn tiꢈp
Truyꢀn tham sꢋ hꢇm
Trị
Tham khảo
Nhập môn về lập trình (C6)
Slide 6
Khai bꢆo/định nghꢇa hàm
Cú pháp :
[extern|static] [ret_type] name ([arglist])
{ [statements]*
[return expr;]
[statements]*
[return expr;]
extern | static
Ret_type Name( arglist )
}
{
}
Đꢅnh nghꢆa biꢌn
[statements]*
[return expr;]
[statements]*
[return expr;]
Nhập môn về lập trình (C6)
Slide 7
Khai bꢆo/định nghꢇa hàm
Cꢃ phꢆp
Cú pháp :
[extern|static] [ret_type] name ([arglist])
{ [statements]*
[return expr;]
[statements]*
[return expr;]
}
extern (khai bꢆo): hàm đꢊ được định nghꢇa trong module
khꢆc.
static (định nghꢇa): hàm chỉ được gꢉi cục bộ trong
module chứa hàm này, không thể lꢀ đối tượng của extern.
Nhập môn về lập trình (C6)
Slide 8
Khai bꢆo/định nghꢇa hàm
Trị trả về, tham số, gꢉi hꢀm
return expr; kꢈt thꢃc hꢀm, trꢋ về vꢀ trả trị lꢀ expr. Giá trị
của expr sẽ được gꢋi về nơi gꢉi hàm để sꢄ dụng.
arglist : là danh sách các tham sꢋ hình thức (hꢀm có
thể không có tham số), mỗi tham số được cách nhau bꢋi
dꢂu phꢌy (,) và được mô tả theo cꢃ phꢆp như sau :
type parameter_name [=defaultvalue]
defaultvalue là giá trị gán mꢍc định cho tham số nꢈu
không cung cꢂp lúc gꢉi hꢀm.
Dạng thức gꢉi hꢀm:
tên_hàm(<danh sꢆch tham số thực>);
Nhập môn về lập trình (C6)
Slide 9
Khai bꢆo/định nghꢇa hàm
Vꢎ dụ khai bꢆo, định nghꢇa
Trong phần định nghꢇa hꢀm (function definition), ta phải
cung cꢂp đầy đủ tên hꢀm, kiểu trị trả về, số lượng tham số,
kiểu vꢀ tên cꢆc tham số.
Vꢎ dụ :
Khai bꢆo hꢀm:
Tên hꢇm
Định nghꢇa hꢀm:
Tham sꢋ hꢉnh thức
Kiꢍu trꢃ vꢀ
Trꢅ trꢃ vꢀ
Nhập môn về lập trình (C6)
Slide 10
Khai bꢆo/định nghꢇa hàm
Vꢎ dụ gꢉi hꢀm
Nꢈu hꢀm được định nghꢇa trong module khꢆc, cần cꢏ khai
bꢆo extern trước khi gꢉi hꢀm.
Vꢎ dụ :
Tham sꢋ thꢈc
Nhập môn về lập trình (C6)
Slide 11
Truyền tham số
Trong VC++, có 3 cꢆch truyền tham số cho hꢀm :
• Truyền trị dưới dạng một biểu thức.
Tham số hꢁnh thức :
Tham số thực :
(kiểu tên)
(biểu thức)
• Truyền địa chỉ bằng biꢈn con trỏ (kiểu*).
Tham số hꢁnh thức :
(kiểu* tên)
Tham số thực :
(&tên)
• Truyền địa chỉ bằng biꢈn tham khảo (kiểu&).
Tham số hꢁnh thức :
Tham số thực :
(kiểu& tên)
(tên)
Nhập môn về lập trình (C6)
Slide 12
Hàm đệ qui
Định nghꢇa
Hàm mà trong thân hꢀm có gꢉi lại chꢎnh nꢏ thꢁ được gꢉi lꢀ
hꢀm đệ qui.
Một bꢀi toꢆn muốn xꢄ lꢅ theo dạng hꢀm đệ qui phải đưa
được về dạng :
Fn(x) = G(Fn-1(x))
Vꢎ dụ :
n! = n * (n-1)!
S(n) = n + S(n-1)
Fibo(n) = Fibo(n-1) + Fibo(n-2)
Nꢈu cꢏ 2 hꢀm A, B mꢀ trong hꢀm A cꢏ gꢉi hꢀm B vꢀ trong
hꢀm B cꢏ gꢉi lại A thꢁ được gꢉi lꢀ đệ qui tương hổ.
Nhập môn về lập trình (C6)
Chương 5 : LặSp &liđdệequ1i 4
Hàm đệ qui
Vꢎ dụ tꢎnh ex
Hàm ex tꢎnh theo triển khai Maclaurin:
ex = 1 + x1/1! + x2/2! + ... + xn-1/(n-1)! + xn/n!
cꢏ thể viꢈt lại thꢀnh:
ex(n) = ex(n-1) + xn/n!
Ngoꢀi ra, cꢆc hꢀm xn vꢀ n! cꢑng cꢏ thể tꢎnh đệ qui
xn = xn-1 . x
n! = (n-1)! . n
Trong đꢏ, n giảm dần mỗi lần gꢉi đệ qui cho nên ta cần
kiểm soꢆt sự trꢋ về của hꢀm bằng điều kiện ban đầu
• ex(0) = 1 : khi n=0 thꢁ trả về trị 1.
• x0 = 1 : khi n=0 thꢁ trả về trị 1.
• 1! = 1 : khi n=1 thꢁ trả về trị 1.
Nhập môn về lập trình (C6)
Chương 5 : LặSp &liđdệequ1i 5
Hꢀm đệ qui
Cꢆc hꢀm đệ qui
Nhập môn về lập trình (C6)
Slide 16
Bài toán tháp Hà nội
Chuyển chồng đꢇa từ cột A sang cột C, cột B trung gian.
• Mỗi lần chỉ chuyển một đꢇa.
• Đꢇa nhỏ nằm trên đꢇa lớn.
A
B
C
Nhập môn về lập trình (C6)
Slide 17
Phân tích và giải thuật
Hꢀnh động chuyển chồng n đꢇa từ cột A sang cột C (cột B
trung gian) được phân tꢎch ra thꢀnh cꢆc hꢀnh động sau :
• Chuyển chồng n-1 đꢇa từ cột A sang cột B (cột C trung gian).
• Chuyển đꢇa từ cột A sang cột C.
• Chuyển chồng n-1 đꢇa từ cột B sang cột C (cột A trung gian).
Nhập môn về lập trình (C6)
Slide 18
Hàm inline
Hàm inline là hàm không dùng cách gꢉi thông thường mà
chuơng trình dịch sẽ thay gꢉi hàm bằng chính thân hàm
vào chỗ gꢉi.
Vꢎ dụ
Nhập môn về lập trình (C6)
Slide 19
Bạn đang xem tài liệu "Bài giảng môn Nhập môn về lập trình - Chương 6: Hàm (Function)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_mon_nhap_mon_ve_lap_trinh_chuong_6_ham_function.pdf

