10/25/2016<br />
<br />
Kỹ thuật lập trình<br />
<br />
Tuần 9 - Hàm và việc tổ chức<br />
chương trình<br />
Giáo viên: Hà Đại Dương<br />
duonghd@mta.edu.vn<br />
<br />
10/25/2016<br />
<br />
1<br />
<br />
Vấn đề<br />
• Các chương trình đã viết (từ đầu môn học):<br />
– Ngắn gọn<br />
– Dễ hiểu (??)<br />
– Dễ quản lý về logic (??)<br />
<br />
• Chương trình lớn: hàng nghìn, triệu .. dòng<br />
lệnh, có nhiều đoạn tương tự nhau.<br />
Làm sao để quản lý được logic<br />
chương trình? Không phải viết những<br />
đoạn code lặp lại<br />
10/25/2016<br />
<br />
2<br />
<br />
Modul hoá chương trình<br />
• Chia chương trình thành những modul (đoạn)<br />
chuyên biệt nhằm thực hiện một công việc<br />
nào đó.<br />
• Logic trong mỗi modul có thể được kiểm soát<br />
dễ dàng hơn<br />
• Logic của cả chương trình thông qua việc sử<br />
dụng các modul cũng trở nên dễ dàng, tường<br />
minh hơn.<br />
10/25/2016<br />
<br />
3<br />
<br />
1<br />
<br />
10/25/2016<br />
<br />
Ví dụ<br />
• Viết chương trình nhập vào 2 ma trận A, B<br />
tính và in ra ma trận tổng C = A+B.<br />
• Có thể chia bài toán trên (chương trình của<br />
bài toán đó) thành các modul:<br />
– Nhập ma trận A<br />
– Nhập ma trận B<br />
– Tính ma trận tổng<br />
– In ma trận kết quả.<br />
10/25/2016<br />
<br />
4<br />
<br />
Modul hoá …<br />
• Ở ví dụ trên có 2 công việc:<br />
– Nhập ma trận A<br />
– Nhập ma trận B<br />
<br />
• Có thể nhận thấy chúng tương đối giống nhau.<br />
• Làm sao để không phải viết lại?<br />
• Modul hoá giúp có thể khái quát hoá vấn đề<br />
nào đó (ví dụ là nhập ma trận) thành một vấn<br />
đề chung và có thể sử dụng nhiều lần.<br />
10/25/2016<br />
<br />
5<br />
<br />
Ví dụ<br />
• Bài toán xét xem điểm M nằm trong hay ngoài<br />
tam giác ABC.<br />
• Một phương pháp khả<br />
thi là:<br />
– Tính sABC, sMAB,<br />
sMBC, và sMAC<br />
– So sánh<br />
Nếu sABC > sMAB+sMBC+sMAC: M ngoài ABC<br />
và ngược lại.<br />
10/25/2016<br />
<br />
6<br />
<br />
2<br />
<br />
10/25/2016<br />
<br />
Modul hoá …<br />
• Như vậy có thể khái quát việc tính diện tích<br />
tam giác thành một hàm để tính các diện tích<br />
sABC, sMAB, sMBC, và sMAC.<br />
<br />
10/25/2016<br />
<br />
7<br />
<br />
Nội dung bài học<br />
•<br />
•<br />
•<br />
•<br />
<br />
Hàm (function) là gì?<br />
Khai báo (viết hàm)<br />
Gọi (sử dụng) hàm<br />
Một số vấn đề khác:<br />
– Hàm không trả về giá trị<br />
– Các dạng tham số của hàm<br />
– Hàm trùng tên<br />
– Hàm với đối mặc định<br />
– Khai báo nguyên hàm<br />
<br />
10/25/2016<br />
<br />
8<br />
<br />
Hàm (function)<br />
<br />
10/25/2016<br />
<br />
9<br />
<br />
3<br />
<br />
10/25/2016<br />
<br />
Hàm (function)<br />
• Trong C mỗi modul được hiểu là 1 hàm<br />
• Hàm:<br />
– Là một modul (đoạn) nhằm thực hiện một công<br />
việc nào đó.<br />
– Truyền vào một số tham số<br />
– Trả về một giá trị (qua tên hàm)<br />
<br />
• Khi nào viết hàm:<br />
– Cầm tách biệt 1 chức năng nào đó<br />
– Khái quát hoá 1 công việc để tránh viết lại<br />
10/25/2016<br />
<br />
10<br />
<br />
Khai báo hàm<br />
<br />
10/25/2016<br />
<br />
11<br />
<br />
Khai báo hàm<br />
• Cú pháp:<br />
Kiểu Tên_Hàm(Danh sách tham số đầu vào)<br />
{<br />
Các lệnh của C<br />
…<br />
return Biểu_Thức;<br />
}<br />
10/25/2016<br />
<br />
12<br />
<br />
4<br />
<br />
10/25/2016<br />
<br />
Trong đó<br />
• Kiểu: Là kiểu dữ liệu trả về thông qua tên<br />
hàm<br />
– Là void nếu không trả về kiểu dữ liệu cụ thể (xét<br />
sau)<br />
<br />
• Tên_Hàm: Tên theo qui tắc đặt tên trong C<br />
– Tuy nhiên C cho phép đặt tên hàm trùng nhau<br />
nhưng phải có sự khác nhau về: số các tham số<br />
hoặc/và kiểu dữ liệu của các tham số đó.<br />
<br />
• return: Lệnh (từ khoá) của C.<br />
10/25/2016<br />
<br />
13<br />
<br />
Trong đó …<br />
• Danh sách các tham số đầu vào<br />
– Tên,<br />
– kiểu và<br />
– số lượng các tham số<br />
<br />
• Biểu_Thức: Giá trị của biểu thức này được trả<br />
về qua tên hàm, và có kiểu cùng với Kiểu của<br />
hàm.<br />
<br />
10/25/2016<br />
<br />
14<br />
<br />
Ví dụ 1<br />
• Hàm tính khoảng cách khi biết toạ độ 2 điểm<br />
(a, b) trong không gian:<br />
– Toạ độ của a: (ax, ay)<br />
– Toạ độ của b: (bx, by)<br />
– Khoảng cách (eclide) từ a đến b là<br />
kc = Căn bậc 2 của (ax-bx)2+(ay-by)2<br />
– Trong C hàm lấy căn bậc 2 là sqrt() trong thư viện<br />
math.h<br />
10/25/2016<br />
<br />
15<br />
<br />
5<br />
<br />