bai giang 5

46
NGÔN NG NGÔN NG L L P TRÌNH C++ 1 P TRÌNH C++ 1 Tu Tu n 5 n 5

Upload: nbb3i

Post on 17-Jun-2015

2.794 views

Category:

Education


3 download

TRANSCRIPT

Page 1: Bai Giang 5

NGÔN NGNGÔN NGỮỮ LLẬẬP TRÌNH C++ 1P TRÌNH C++ 1TuTuầần 5n 5

Page 2: Bai Giang 5

NNộội dung tri dung trìình bnh bààyy

Page 3: Bai Giang 5

KhKháái nii niệệm hm hààmm

• Trong khi lập trình, ta thấy có những đoạn mã lặp đi lặp lại nhiều lần để thực hiện một công việc nào đó. Ta có thể tách đoạn mã đó thành một module cụ thể. Sau đóthay cho việc viết lặp đi lặp lại đoạn mã, ta chỉ cần thực hiện module nhiều lần.

Page 4: Bai Giang 5

KhKháái nii niệệm hm hààmm

• Ví dụ: Trong một bài toán ta cần phải thực hiện 10 lần tính n!. Thay cho việc viết 10 lần lặp đi lặp lại các đoạn mã tính n!. Ta chỉ cần viết một module tính n!, sau đó gọi module này ra 10 lần. Rõ ràng sau khi module hóa, chương trình của ta xây dựng ngắn và đơn giản hơn rất nhiều.

Page 5: Bai Giang 5

KhKháái nii niệệm hm hààmm

• Hàm chính là các module mang một đoạn chương trình. Một hàm mà thực hiện một nhiệm vụ nào đó chỉ cần viết một lần và sau đó ta có thể sử dụng lại hàm đó nhiều lần tại bất kỳ nơi nào trong chương trình.

Page 6: Bai Giang 5

Ưu điƯu điểểm cm củủa via việệc sc sửử ddụụng hng hààmm

• Các công việc để giải bài toán được phân chia một cách rõ ràng.

• Chương trình sáng sủa, dễ đọc, dễ sửa lỗi.• Trừu tượng hoá thủ tục: Khi một hàm được xây

dựng và kiểm tra xong, ta không cần quan tâm đến nội dung của hàm.

• Hàm giúp che giấu thông tin.• Hàm có thể được sử dụng lại nhiều lần.

Page 7: Bai Giang 5

CCáác thư vic thư việện hn hààm trong C++m trong C++

• Thư viện hàm trong C++ là nơi lưu giữ các hàm được xây dựng sẵn nhằm mang lại sự tiện dụng cho người lập trình. Ví dụ: Khi cần tính cos(x) ta chỉ cần sử dụng hàm cos trong thư viện math.h mà không cần quan tâm hàm cos đó được lập trình như thế nào.Ví dụ: y = cox(x);

Page 8: Bai Giang 5

CCáác thư vic thư việện hn hààm trong C++m trong C++

• Một số thư viện hàm cần quan tâm:– iostream: Là thư viện hướng đối tượng cung

cấp các chức năng nhập / xuất dữ liệu.– math: Là thư viện chứa các hàm toán học– time: Là thư viện chuyên xử lý về thời gian– stdlib: Thư viện này bao gồm các chức năng

liên quan đến việc cấp phát, giải phóng bộnhớ; Chuyển đổi các kiểu dữ liệu; Điều khiển tiến trình; Sắp xếp và tìm kiếm dữ liệu; Một sốphép tính toán học.

Page 9: Bai Giang 5

CCáác thư vic thư việện hn hààm trong C++m trong C++

• Để sử dụng hàm trong một thư viện nào đó, ta cần phải khai báo thư viện ở phía trên cùng của chương trình theo cú pháp sau:

#include <tên thư viện.h>– Ví dụ: Ta muốn sử dụng hàm tính căn (sqrt),

hàm này nằm ở thư viện math. Vậy ta cần phai báo thư viện ở đầu chương trình như sau:

#include <math.h>

Page 10: Bai Giang 5

CCúú phphááp hp hààmm• Ngoài việc sử dụng các hàm có sẵn trong các thư viện,

ta có thể tự xây dựng các hàm ở bên trong chương trình.

• Hàm không có giá trị trả về:void <tên hàm>(tham số hình thức){

Nội dung hàm}

tham số hình thức: Chứa giá trị đầu vào của hàm. Tham số này có thể có hoặc không có. Nếu có nhiều hơn một tham số thì các tham số cách nhau bởi dấu phảy.

Page 11: Bai Giang 5

CCúú phphááp hp hààmm– Ví dụ:

• Hàm viết chữ “DAI HOC THANG LONG” lên màn hìnhvoid DHTL(){

cout << “DAI HOC THANG LONG” << endl;}

• Hàm viết n chữ số tự nhiên đầu tiên lên màn hình, mỗi sốcách nhau bởi một dấu trống

void vietSo(int n){

for (int i = 0; i < n; i++)cout << i << “ “;

cout << endl;}

Page 12: Bai Giang 5

CCúú phphááp hp hààmm• Hàm có giá trị trả về:

<kiểu giá trị trả về> <tên hàm>(tham số hình thức){

Nội dung hàm

return <giá trị trả về>;}

tham số hình thức: Chứa giá trị đầu vào của hàm. Tham số này có thể cóhoặc không có. Nếu có nhiều hơn một tham số thì các tham số cách nhau bởi dấu phảy.

giá trị trả về: Là giá trị mà hàm sẽ nhận được sau khi thực hiện xong. Giátrị trả về có thể là một biến số hoặc hằng số hoặc một giá trị cụ thể. Tuy nhiên giá trị trả về phải cùng kiểu giá trị với kiểu giá trị trả về.

return: Hàm kết thúc ngay sau câu lệnh return. Các câu lệnh sau lệnh return không được thực hiện.

Page 13: Bai Giang 5

CCúú phphááp hp hààmm– Ví dụ:

• Hàm tính diện tích của hình chữ nhậtint dienTichHCN(int a, int b){

int dientich;dientich = a * b;return dientich;

}• Hàm tính diện tích của hình tròn

float dienTichHT(float r){

return (float) 3.14 * r * r;}

Page 14: Bai Giang 5

ThThựực hic hiệện hn hààm (gm (gọọi hi hààm)m)• Tại một vị trí trong chương trình, khi cần sử dụng một

hàm nào đó, ta cần phải gọi hàm theo cú pháp sau:– Đối với hàm không có giá trị trả về:

<tên hàm> (các tham số thực);Các tham số thực: Có thể có hoặc không. Nếu có sẽ chứa dữ liệu đầu vào của hàm.

Ví dụ: void main(){

int x = 12;

DHTL();vietSo(8);vietSo(x);

}

Page 15: Bai Giang 5

ThThựực hic hiệện hn hààm (gm (gọọi hi hààm)m)

– Đối với hàm có giá trị trả về: Về cú pháp gọi hàm cũng giống như hàm không có giá trị trảvề, tuy nhiên hàm có giá trị trả về có thể được ghép chung vào với các biểu thức hoặc phép gán, …

• Ví dụ: – Biểu thức:

• y = a*a + b*b*b + 5 • Ta có thể viết với hàm pow như sau:

y = pow(a, 2) + pow(b, 3) + 5

Page 16: Bai Giang 5

ThThựực hic hiệện hn hààm (gm (gọọi hi hààm)m)

• Ví dụ:int main(){

int x = 5, y = 9;int dtHCN = dienTichHCN(x, y);cout << “DT Hinh chu nhat la: “ << dtHCN << endl;

float dtHT = dienTichHT(sqrt(pow(x,2) + pow(y,2)));cout << “DT Hinh tron la: “ << dtHT << endl;

}

Page 17: Bai Giang 5

Nguyên mNguyên mẫẫu hu hààmm

• Nguyên mẫu hàm được dùng để khai báo với trình biên dịch các hàm sẽ được sửdụng trong chương trình.

• Nguyên mẫu hàm thường được đặt ở đầu chương trình, phía dưới phần khai báo thư viện.

Page 18: Bai Giang 5

Nguyên mNguyên mẫẫu hu hààmm

• Cú pháp:<kiểu giá trị trả về> <tên hàm> (các tham số);Các tham số: – Số lượng tham số của nguyên mẫu hàm phụ

thuộc vào số lượng tham số hình thức của hàm.

Page 19: Bai Giang 5

Nguyên mNguyên mẫẫu hu hààmm• Ví dụ:

#include <iostream.h>

int tinhTong(int, int, int); // Nguyên mẫu hàm

void main(){

cout << tinhTong(3, 5, 8) << endl;}

int tinhTong(int x, int y, int z){

return x + y + z;}

Page 20: Bai Giang 5

Nguyên mNguyên mẫẫu hu hààmm

• Chú ý:– Trong nguyên mẫu hàm ta có thể lược bớt

phần tên của tham số và chỉ quan tâm đến phần kiểu dữ liệu của tham số.

– Nếu khai báo hàm nằm phía trên hàm main() thì ta có thể không cần khai báo Nguyên mẫu hàm. Nếu khai báo hàm nằm phía dưới hàm main() thì ta buộc phải sử dụng Nguyên mẫu hàm

Page 21: Bai Giang 5

BiBiếến ton toààn cn cụục vc vàà bibiếến cn cụục bc bộộ• Biến toàn cục: Là biến có thể được sử dụng ở bất kỳ nơi nào trong

chương trình. Biến toàn cục được khai báo ở bên ngoài hàm và thường nằm phía dưới khai báo thư viện.– Ví dụ:

#include <iostream.h>int x;void main(){

cout << x << endl;tangX();cout << x << endl;

}void tangX(){

x = x + 1;}

Page 22: Bai Giang 5

BiBiếến ton toààn cn cụục vc vàà bibiếến cn cụục bc bộộ• Biến cục bộ được khai báo ở bên trong một khối lệnh và

chỉ có ý nghĩa ở trong khối lệnh đó.– Ví dụ:

#include <iostream.h>

void main(){

{int x = 9;cout << x << endl;x = x + 1;

}

cout << x << endl;}

Page 23: Bai Giang 5

BiBiếến ton toààn cn cụục vc vàà bibiếến cn cụục bc bộộ• Nếu biến cục bộ được khai báo ở bên trong một hàm thì nó chỉ có ý nghĩa ở

trong hàm đó.– Ví dụ:

#include <iostream.h>

void main(){

int x = 25;cout << x << endl;tangX();cout << x << endl;

}void tangX(){

int x = 20;x = x + 1;cout << “x trong ham tangX: “ << x << endl;

}

Page 24: Bai Giang 5

Tham sTham sốố ccủủa ha hààmm

• Như ta đã biết tham số của hàm sẽ mang các giá trị đầu vào cho hàm.

• Các tham số của hàm mang ý nghĩa làbiến cục bộ ở trong hàm đó.

• Mỗi khi tham số hình thức đại diện cho một tham số thực nào đó, thì giá trị của tham số thực sẽ được truyền vào cho tham số hình thức để thực hiện làm đầu vào cho hàm.

Page 25: Bai Giang 5

Tham sTham sốố ccủủa ha hààmm• Ví dụ:

#include <iostream.h>

void thamso(int x){

cout << "x tham so truoc = " << x << endl;x = x + 25;cout << "x tham so sau = " << x << endl;

}

void main(){

int x = 10;cout << x << endl;thamso(x);cout << x << endl;

}

Page 26: Bai Giang 5

HHààm gm gọọi hi hààmm

• Ta có thể thực hiện việc gọi hàm từ một hàm khác.

• Ví dụ:– Viết hàm tính chuỗi:

S = 12 / 1! + 22 / 2! + 32 / 3! + … + n2 / n!

Hàm tính chuỗi gọi đến 2 hàm tính bình phương vàtính giai thừa.

Page 27: Bai Giang 5

ThiThiếết kt kếế toptop--downdown

• Chia bài toán ban đầu thành các bài toán nhỏ hơn• Xử lý các bài toán nhỏ• Kết hợp lời giải của các bài toán nhỏ để giải bài

toán lớn• Lời giải của mỗi bài toán nhỏ có thể được cài đặt

bởi một hàm

Page 28: Bai Giang 5

Case Study: VCase Study: Vẽẽ hhììnhnh

1. Phân tích bài toán– Bạn muốn vẽ hình một em bé như dưới đây

** *

* */ \

/ \/ \--------------

/ \/ \

/ \

– Input: Không có gì– Output: Hình em bé– Nhận xét: Hình em bé có thể được vẽ dựa trên các hình đơn giản như

hình tròn, hai đường giao nhau, đường nằm ngang.

Page 29: Bai Giang 5

Case Study: VCase Study: Vẽẽ hhììnhnh

1. Thiết kế thuật toán1. Vẽ một hình tròn2. Vẽ một hình tam giác3. Vẽ hai đường giao nhauLàm mịn (refine) thuật toán1. Vẽ một hình tam giác

1. Vẽ hai đường giao nhau2. Vẽ đường ngang

Page 30: Bai Giang 5

Case Study: VCase Study: Vẽẽ hhììnhnh

• Sơ đồ cấu trúc của bài toán

Vẽ hình em bé

Vẽ hình tròn Vẽ hình tam giác Vẽ hai đường giao nhau

Vẽ hai đường giao nhau Vẽ đường ngang

Page 31: Bai Giang 5

Case Study: VCase Study: Vẽẽ hhììnhnh1. Cài đặt

#include <iostream.h>

// Cac nguyen mau hamvoid ve_hinh_tron();void ve_hinh_tam_giac();void ve_hai_duong_giao();void ve_duong_ngang();

// Ham chinhvoid main(){

ve_hinh_tron();ve_hinh_tam_giac();ve_hai_duong_giao();

}

Page 32: Bai Giang 5

Case Study: VCase Study: Vẽẽ hhììnhnh

1. Cài đặt// Ham ve hinh tronvoid ve_hinh_tron(){

cout<<" * "<<endl;cout<<" * *"<<endl;

cout<<" * * "<<endl;}

// Ham ve hinh tam giacvoid ve_hinh_tam_giac(){

ve_hai_duong_giao();ve_duong_ngang();

}

Page 33: Bai Giang 5

Case Study: VCase Study: Vẽẽ hhììnhnh1. Cài đặt

// Ham ve hai duong giao nhauvoid ve_hai_duong_giao(){

cout<<" / \\ "<<endl;cout<<" / \\ "<<endl;cout<<" / \\"<<endl;

}

// Ham ve duong nam ngangvoid ve_duong_ngang(){

cout<<" -------"<<endl;}

Page 34: Bai Giang 5

Case Study: VCase Study: Vẽẽ hhììnhnh

1. Kiểm tra chương trình

** *

* */ \

/ \/ \--------------

/ \/ \

/ \

Page 35: Bai Giang 5

GiGiảải thi thííchch

• Nguyên mẫu hàm (prototype) – <kiểu giá trị trả về> <tên hàm>(<danh sách đối số>)– Đặt trước hàm main

• Lời gọi hàm– Các câu lệnh trong hàm được thực thi– Hàm được gọi trong hàm main hoặc các hàm khác

• Định nghĩa hàm– Chỉ rõ các câu lệnh trong hàm– Định nghĩa hàm được đặt sau hàm main

Page 36: Bai Giang 5

HHààm trong chương trm trong chương trììnhnh1. #include <iostream.h>

1. // Các nguyên mẫu hàm đặt ở đây

1. void main()2. {3. // Các lời gọi hàm4. }

1. // Các định nghĩa hàm đặt ở đây

Page 37: Bai Giang 5

MMởở rrộộng bng bàài toi toáánn

• Thay đổi hàm vẽ hình tròn// Ham ve hinh tronvoid ve_hinh_tron(){

const char kitu_dau = ‘@’;cout<<" "<<kitu_dau<<endl;

cout<<" "<<kitu_dau<<" “<<kitu_dau<<endl;cout<<" “<<kitu_dau<<“ “<<kitu_dau<<endl;

}=> kitu_dau là hằng cục bộ của hàm ve_hinh_tron, nó chỉ được hiểu trong hàm này

Page 38: Bai Giang 5

HHààm không cm không cóó đ đốối si sốố• Giới thiệu chương trình

void gioi_thieu(){

cout<<“Chuong trinh nay duoc viet boi TM17”<<endl;cout<<“Ban quyen 2004”<<endl;cout<<“Phien ban 2.3”<<endl;

}• Hướng dẫn dùng chương trình

void huong_dan(){

cout<<“Chuong trinh tinh chu vi va dien tich hinh tron”<<endl;cout<<“Sau loi thong bao, ban hay nhap vao ban kinh hinh tron,”;cout<<“sau do chuong trinh se in ra ket qua”<<endl;

}

Page 39: Bai Giang 5

BBàài ti tậập: Vp: Vẽẽ hhìình ngôi nhnh ngôi nhàà

1. Phân tích bài toán– Bạn muốn vẽ hình một ngôi nhà như dưới đây

/ \/ \

/ \------------| |

| || |------------

– Input: Không có gì– Output: Hình ngôi nhà– Nhận xét: Hình ngôi nhà có thể được vẽ bởi các đường giao nhau,

đường nằm ngang và các đường song song.

Page 40: Bai Giang 5

BBàài ti tậập: Vp: Vẽẽ hhìình ngôi nhnh ngôi nhàà

1. Thiết kế thuật toán1. Vẽ hình tam giác2. Vẽ hai đường song song3. Vẽ đường ngangLàm mịn (refine) thuật toán1. Vẽ hình tam giác

Vẽ hai đường giao nhauVẽ đường ngang

Page 41: Bai Giang 5

BBàài ti tậập: Vp: Vẽẽ hhìình ngôi nhnh ngôi nhàà

• Sơ đồ cấu trúc của bài toán

Vẽ hình ngôi nhà

Vẽ hình tam giác Vẽ hai đường song song Vẽ đường ngang

Vẽ hai đường giao nhau Vẽ đường ngang

Page 42: Bai Giang 5

BBàài ti tậập: Vp: Vẽẽ hhìình ngôi nhnh ngôi nhàà1. Cài đặt

#include <iostream.h>

// Cac nguyen mau hamvoid ve_hinh_tam_giac();void ve_hai_duong_ss();void ve_hai_duong_giao();void ve_duong_ngang();

// Ham chinhvoid main(){

ve_hinh_tam_giac();ve_hai_duong_ss();

ve_duong_ngang();}

Page 43: Bai Giang 5

BBàài ti tậập: Vp: Vẽẽ hhìình ngôi nhnh ngôi nhàà

1. Cài đặt// Ham ve hinh tam giacvoid ve_hinh_tam_giac(){

ve_hai_duong_giao();ve_duong_ngang();

}

// Ham ve hai duong song songvoid ve_hai_duong_ss(){

cout<<" | |"<<endl;cout<<" | |"<<endl;cout<<" | |"<<endl;

}

Page 44: Bai Giang 5

BBàài ti tậập: Vp: Vẽẽ hhìình ngôi nhnh ngôi nhàà1. Cài đặt

// Ham ve hai duong giao nhauvoid ve_hai_duong_giao(){

cout<<" / \\ "<<endl;cout<<" / \\ "<<endl;cout<<" / \\"<<endl;

}

// Ham ve duong nam ngangvoid ve_duong_ngang(){

cout<<" -------"<<endl;}

Page 45: Bai Giang 5

BBàài ti tậập: Vp: Vẽẽ hhìình ngôi nhnh ngôi nhàà

1. Kiểm tra chương trình

/ \/ \

/ \------------| || || |------------

Page 46: Bai Giang 5

BBàài ti tậập vp vềề nhnhàà

1. Vẽ hình tàu vũ trụ/ \

/ \/ \------------| || || |------------| || || |------------| |

| || |------------

/ \/ \

/ \

2. Viết chữ HELLO bằng các khối kí tự