Kỹ thuật lập trình - Tuần 9: Hàm và việc tổ chức chương trình
Đã có hàm DoiCho(x,y) với x, y là số nguyên.
• Muốn xây dựng hàm đổi chỗ 2 số thực làm thế
nào?
– Viết hàm với tên khác: Khả thi, nhưng hơi phiền
hà khi sử dụng.
– Viết hàm trùng tên, cũng là DoiCho(x,y) nhưng các
tham số x, y là thực: C/C++ cho phép làm điều này.
• C/C++ cho phép viết các hàm trùng tên nhưng
phải khác nhau về số lượng và/hoặc kiểu dữ
10/25/2016 liệu của các tham số.
18 trang |
Chia sẻ: huyhoang44 | Lượt xem: 724 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Kỹ thuật lập trình - Tuần 9: Hàm và việc tổ chức chương trình, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
10/25/2016
1
Tuần 9 - Hàm và việc tổ chức
chương trình
Giáo viên: Hà Đại Dương
duonghd@mta.edu.vn
Kỹ thuật lập trình
10/25/2016 1
Vấn đề
• Các chương trình đã viết (từ đầu môn học):
– Ngắn gọn
– Dễ hiểu (??)
– Dễ quản lý về logic (??)
• Chương trình lớn: hàng nghìn, triệu .. dòng
lệnh, có nhiều đoạn tương tự nhau.
10/25/2016 2
Làm sao để quản lý được logic
chương trình? Không phải viết những
đoạn code lặp lại
Modul hoá chương trình
• Chia chương trình thành những modul (đoạn)
chuyên biệt nhằm thực hiện một công việc
nào đó.
• Logic trong mỗi modul có thể được kiểm soát
dễ dàng hơn
• Logic của cả chương trình thông qua việc sử
dụng các modul cũng trở nên dễ dàng, tường
minh hơn.
10/25/2016 3
10/25/2016
2
Ví dụ
• Viết chương trình nhập vào 2 ma trận A, B
tính và in ra ma trận tổng C = A+B.
• Có thể chia bài toán trên (chương trình của
bài toán đó) thành các modul:
– Nhập ma trận A
– Nhập ma trận B
– Tính ma trận tổng
– In ma trận kết quả.
10/25/2016 4
Modul hoá
• Ở ví dụ trên có 2 công việc:
– Nhập ma trận A
– Nhập ma trận B
• Có thể nhận thấy chúng tương đối giống nhau.
• Làm sao để không phải viết lại?
• Modul hoá giúp có thể khái quát hoá vấn đề
nào đó (ví dụ là nhập ma trận) thành một vấn
đề chung và có thể sử dụng nhiều lần.
10/25/2016 5
Ví dụ
• Bài toán xét xem điểm M nằm trong hay ngoài
tam giác ABC.
• Một phương pháp khả
thi là:
– Tính sABC, sMAB,
sMBC, và sMAC
– So sánh
Nếu sABC > sMAB+sMBC+sMAC: M ngoài ABC
và ngược lại.
10/25/2016 6
10/25/2016
3
Modul hoá
• Như vậy có thể khái quát việc tính diện tích
tam giác thành một hàm để tính các diện tích
sABC, sMAB, sMBC, và sMAC.
10/25/2016 7
Nội dung bài học
• Hàm (function) là gì?
• Khai báo (viết hàm)
• Gọi (sử dụng) hàm
• Một số vấn đề khác:
– Hàm không trả về giá trị
– Các dạng tham số của hàm
– Hàm trùng tên
– Hàm với đối mặc định
– Khai báo nguyên hàm
10/25/2016 8
Hàm (function)
10/25/2016 9
10/25/2016
4
Hàm (function)
• Trong C mỗi modul được hiểu là 1 hàm
• Hàm:
– Là một modul (đoạn) nhằm thực hiện một công
việc nào đó.
– Truyền vào một số tham số
– Trả về một giá trị (qua tên hàm)
• Khi nào viết hàm:
– Cầm tách biệt 1 chức năng nào đó
– Khái quát hoá 1 công việc để tránh viết lại
10/25/2016 10
Khai báo hàm
10/25/2016 11
Khai báo hàm
• Cú pháp:
Kiểu Tên_Hàm(Danh sách tham số đầu vào)
{
Các lệnh của C
return Biểu_Thức;
}
10/25/2016 12
10/25/2016
5
Trong đó
• Kiểu: Là kiểu dữ liệu trả về thông qua tên
hàm
– Là void nếu không trả về kiểu dữ liệu cụ thể (xét
sau)
• Tên_Hàm: Tên theo qui tắc đặt tên trong C
– Tuy nhiên C cho phép đặt tên hàm trùng nhau
nhưng phải có sự khác nhau về: số các tham số
hoặc/và kiểu dữ liệu của các tham số đó.
• return: Lệnh (từ khoá) của C.
10/25/2016 13
Trong đó
• Danh sách các tham số đầu vào
– Tên,
– kiểu và
– số lượng các tham số
• Biểu_Thức: Giá trị của biểu thức này được trả
về qua tên hàm, và có kiểu cùng với Kiểu của
hàm.
10/25/2016 14
Ví dụ 1
• Hàm tính khoảng cách khi biết toạ độ 2 điểm
(a, b) trong không gian:
– Toạ độ của a: (ax, ay)
– Toạ độ của b: (bx, by)
– Khoảng cách (eclide) từ a đến b là
kc = Căn bậc 2 của (ax-bx)2+(ay-by)2
– Trong C hàm lấy căn bậc 2 là sqrt() trong thư viện
math.h
10/25/2016 15
10/25/2016
6
Ví dụ 1
10/25/2016 16
Kiểu Tên hàm Danh sách các tham số đầu vào
Các lệnh của C Biểu thức trả về
Gọi hàm
10/25/2016 17
Gọi hàm
• Cú pháp:
Tên_hàm(Các tham số đầu vào thực)
• Ví dụ tính khoảng cách từ (1,2) đến (5,3)
kc(1, 2, 5, 3)
– 1: Tham số thực tương ứng với ax
– 2: Tham số thực tương ứng với ay
– 5: Tham số thực tương ứng với bx
– 3: Tham số thực tương ứng với by
10/25/2016 18
10/25/2016
7
Ví dụ 2
• Viết chương trình tính diện tích tam giác ABC
(khi biết toạ độ các điểm A, B, C).
• Diện tích ABC khi biết độ dài 3 cạnh (l,m,n)
SABC = sqrt(p*(p-l)*(p-m)*(p-n))
• Không dùng hàm -> Vẫn làm được, nhưng phải
viết các đoạn code lặp lại.
• Sử dụng hàm kc() ở ví dụ 1 (15 phút)
10/25/2016 19
Ví dụ 2
10/25/2016 20
Lời gọi hàm kc()
Hàm không trả về giá trị
10/25/2016 21
10/25/2016
8
Khai báo
• Cú pháp:
void Tên_Hàm(Danh sách tham số đầu vào)
{
Các lệnh của C
[return;]
}
• Nhằm thực hiện 1 công việc nào đó.
10/25/2016 22
Ví dụ 3
• Viết hàm in kết quả diện tích của tam giác
10/25/2016 23
10/25/2016 24
10/25/2016
9
Tham số của hàm
10/25/2016 25
Bài toán đổi giá trị 2 số
• Có 2 số a, b viết hàm cho phép đổi chỗ 2 số
này.
• Sau khi thực hiện a có giá trị của b và ngược
lại b có giá trị của a.
10/25/2016 26
Ví dụ 4
10/25/2016 27
10/25/2016
10
Ví dụ 4
• Kết quả
10/25/2016 28
a, b không đổi cho nhau vì sao?
• Trong hàm DoiCho x, y là tham số đầu vào và
là 2 biến cục bộ của DoiCho.
• Trong lời gọi hàm:
– a là tham số thực tương ứng với x
– b là tham số thực tương ứng với y.
• Biến x nhận giá trị của a và biến y nhận giá trị
của b.
• Trong DoiCho x, y thực sự đổi chỗ cho nhau
nhưng điều đó không ảnh hưởng đến a,b.
10/25/2016 29
Tham số dạng con trỏ
• Để hàm DoiCho() thực sự đổi được giá trị của
a và b
Khai báo x, y dạng con trỏ
10/25/2016 30
10/25/2016
11
Tham số dạng con trỏ
• Để hàm DoiCho() thực sự đổi được giá trị của
a và b
Thực hiện lời gọi hàm
10/25/2016 31
10/25/2016 32
Tham số dạng tham chiếu
• Để hàm DoiCho() thực sự đổi được giá trị của
a và b
Khai báo x, y dạng tham chiếu (C++)
10/25/2016 33
10/25/2016
12
Tham số dạng tham chiếu
• Để hàm DoiCho() thực sự đổi được giá trị của
a và b
Thực hiện lời gọi hàm
10/25/2016 34
10/25/2016 35
Ba cách khai báo tham số
10/25/2016 36
Tham trị
Con trỏ
Tham chiếu
Gọi hàmHàm với các dạng tham số đầu vào
a, b không đổi
10/25/2016
13
Hàm trùng tên
10/25/2016 37
Vấn đề
• Đã có hàm DoiCho(x,y) với x, y là số nguyên.
• Muốn xây dựng hàm đổi chỗ 2 số thực làm thế
nào?
– Viết hàm với tên khác: Khả thi, nhưng hơi phiền
hà khi sử dụng.
– Viết hàm trùng tên, cũng là DoiCho(x,y) nhưng các
tham số x, y là thực: C/C++ cho phép làm điều này.
• C/C++ cho phép viết các hàm trùng tên nhưng
phải khác nhau về số lượng và/hoặc kiểu dữ
liệu của các tham số.10/25/2016 38
Thêm hàm DoiCho 2 số thực
10/25/2016 39
10/25/2016
14
Thêm hàm DoiCho 2 số thực
10/25/2016 40
Thêm hàm DoiCho 2 số thực
• Kết quả
10/25/2016 41
Hàm với đối mặc định
10/25/2016 42
10/25/2016
15
Vấn đề
• C++ cho phép khai báo tham số với giá trị mặc
định để khi gọi có thể truyền giá trị cho các
tham số này hoặc không. Khi không truyền thì
các tham số này nhận giá trị mặc định.
10/25/2016 43
Cú pháp
Kiểu Tên_Hàm(Kiểu1 th1,.., Kiểu tm1 = gt1, )
{
Các lệnh của C
return Biểu_Thức;
}
• Ví dụ: Viết hàm tính luỹ thừa y của x.
10/25/2016 44
Ví dụ 5 - Hàm luythua
10/25/2016 45Truyền 2 cho n Không tuyền Truyền 3 cho n
10/25/2016
16
Khai báo nguyên hàm
10/25/2016 46
Vấn đề
• Ở ví dụ 5 đưa luythua() về sau main() ??
10/25/2016 47
Khi biên dịch
• Xuất hiện thông báo lỗi
10/25/2016 48
10/25/2016
17
Khai báo nguyên hàm (prototype)
• Ý nghĩa: Khai báo dạng thức của hàm bao gồm
tên hàm, số lượng và kiểu các tham số đầu
vào, kiểu giá trị trả về của hàm.
• Cú pháp
Kiểu Tên_Hàm(Danh sách tham số);
• Ví trí: Thường đặt trước hàm main()
10/25/2016 49
Ví dụ 6
10/25/2016 50
Bài tập
10/25/2016 51
10/25/2016
18
Bài tập
1. A, B, C và M là các điểm trên mặt phẳng. Viết
chương trình kiểm tra xem M có nằm trong
tam giác ABC hay không?
Tổ chức thành các hàm:
– Tính khoảng cách
– Tính diện tích
– Nhập dữ liệu từ fie (không trả về giá trị)
10/25/2016 52
Bài tập
2. Viết chương trình nhập 1 mảng n phần tử từ
file dữ liệu dạng text, sắp xếp tăng dần và in
mảng đó ra màn hình.
Tổ chức thành các hàm
– Nhập mảng từ file
– Sắp xếp
– In danh sách
10/25/2016 53
Bài tập về nhà
1. Hàm chuẩn hoá họ tên
2. Hàm tính số ngày giữa 2 ngày
3. Hàm đổi số tiền dạng số thành chữ
4. Hàm tính số tiền taxi
5. Hàm tính số tiền điện
10/25/2016 54
Các file đính kèm theo tài liệu này:
- tuan_09_ham_va_to_chuc_chuong_trinh_835.pdf