1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Kỹ thuật lập trình Hàm và việc tổ chức chương trình GV. Hà Đại Dương

18 281 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 402,57 KB

Nội dung

Chương trình lớn có hàng nghìn, triệu... dòng lệnh, có nhiều đoạn tương tự nhau. Vậy 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? Mời các bạn cùng tham khảo bài giảng để tìm hiểu về cách giải quyết vấn đề này như thế nào.

Trang 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

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

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

Trang 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ả.

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

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.

Trang 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

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

Hàm (function)

Trang 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

Khai báo hàm

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

returnBiểu_Thức;

}

Trang 5

Trong đó

Kiểu: Là kiểu dữ liệu trả về thông qua tên

hàm

– Là voidnế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

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

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

Trang 6

Ví dụ 1 …

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

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

Trang 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)

Ví dụ 2 …

Lời gọi hàm kc()

Hàm không trả về giá trị

Trang 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 đó

Ví dụ 3

• Viết hàm in kết quả diện tích của tam giác

Trang 9

Tham số của hàm

Bài toán đổi giá trị 2 số

• Có 2 số a bviết hàm cho phép đổi chỗ 2 số

này

• Sau khi thực hiện acó giá trị của bvà ngược

lại bcó giá trị của a

Ví dụ 4

Trang 10

Ví dụ 4 …

• Kết quả

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

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ỏ

Trang 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

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++)

Trang 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

Ba cách khai báo tham số

Tham trị

Con trỏ

Gọi hàm Hàm với các dạng tham số đầu vào

a, b không đổi

Trang 13

Hàm trùng tên

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ố

Trang 14

Thêm hàm DoiCho 2 số thực

• Kết quả

Hàm với đối mặc định

Trang 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

Cú pháp Kiểu Tên_Hàm(Kiểu1 th1, , Kiểu tm1 = gt1,… )

{

Các lệnh của C

returnBiểu_Thức;

}

• Ví dụ: Viết hàm tính luỹ thừa y của x

Ví dụ 5 - Hàm luythua

Trang 16

Khai báo nguyên hàm

Vấn đề

Ở ví dụ 5 đưa luythua() về sau main() ??

Khi biên dịch

• Xuất hiện thông báo lỗi

Trang 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()

Ví dụ 6

Bài tập

Trang 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ị)

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

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

Ngày đăng: 16/05/2017, 16:13

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w