Bài giảng Kỹ thuật lập trình: Chương 3 - TS. Vũ Hương Giang (Phần 3)
lượt xem 4
download
Phần 3 bài giảng Kỹ thuật lập trình - Chương 3: Các kỹ thuật xây dựng chương trình phần mềm" trình bày các kiến thức về Kỹ thuật xây dựng hàm/thủ tục bao gồm: Một số khái niệm thường gặp, nguyên tắc chung, các quy tắc tăng tốc độ, kỹ thuật chồng/ đa năng hóa các hàm/toán tử.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Kỹ thuật lập trình: Chương 3 - TS. Vũ Hương Giang (Phần 3)
- • Với mỗi bài toán, làm thế nào để: – Thiết kế giải thuật nhằm giải quyết bài toán đó – Cài đặt giải thuật bằng một chương trình máy tính - Hãy làm cho chương trình chạy đúng trước khi tăng tính hiệu quả của chương trình - Hãy tăng tính hiệu quả của chương trình và đồng thời thể hiện tốt phong cách lập trình của cá nhân CuuDuongThanCong.com https://fb.com/tailieudientucntt
- CHƯƠNG III. CÁC KỸ THUẬT XÂY DỰNG CHƯƠNG TRÌNH PHẦN MỀM I. Mở đầu II. Làm việc với biến III. Viết mã chương trình hiệu quả IV. Thiết kế chương trình V. Xây dựng hàm/thủ tục CuuDuongThanCong.com https://fb.com/tailieudientucntt
- V. CÁC KỸ THUẬT XÂY DỰNG HÀM/THỦ TỤC 1. Một số khái niệm thường gặp 2. Nguyên tắc chung 3. Các quy tắc tăng tốc độ 4. Kỹ thuật chồng/ đa năng hóa các hàm/toán tử CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1. Một số khái niệm thường gặp • Biểu thức (expression): tính toán giá trị đích dựa trên giá trị nguồn • Lệnh gán (assigment): lưu trữ giá trị của biểu thức hoặc của biến nguồn vào trong 1 biến đích CuuDuongThanCong.com https://fb.com/tailieudientucntt
- a. Hàm định nghĩa sẵn • Được định nghĩa trong các thư viện • Cần khai báo thư viện ở đầu chương trình để có thể dùng các hàm này • Ví dụ: trong thư viện cmath, hàm sqrt tính căn bậc hai của một số • the_root = sqrt(9.0); – 9.0 : tham số, cũng có thể là một biến hoặc là một biểu thức – the_root : biến lưu kết quả trả về (3.0) – sqrt(9.0) : lời gọi hàm (kích hoạt việc thực hiện hàm sqrt), cũng có thể được sử dụng như một biểu thức bonus = sqrt(sales) / 10; cout
- b. Hàm do LTV định nghĩa • Khai báo hàm: – Chỉ ra cách thức gọi hàm – Phải khai báo trước khi gọi hàm – Cú pháp Kiểu_trả_về Tên_hàm (Kiểu_1 tên_tham_số_1,.., Kiểu_n tên_tham_số_n); Kiểu_trả_về Tên_hàm (Kiểu_1,.., Kiểu_n); //Chú thích: hàm dùng để làm gì • Ví dụ: khai báo hàm cho phép tính tổng chi phí theo công thức: tổng chi phí = số lượng hàng * giá mỗi mặt hàng + 5% thuế giá trị gia tăng double total_cost(int number_par, double price_par); double total_cost(int, double); CuuDuongThanCong.com https://fb.com/tailieudientucntt
- b. Hàm do LTV định nghĩa • Định nghĩa hàm: – Chỉ ra cách thức thực hiện nhiệm vụ của hàm – Định nghĩa trước hoặc sau khi gọi hàm đều được – Cú pháp: Kiểu_trả_về Tên_hàm (Danh_sách_tham_số) { //code return kết_quả; } • Ví dụ: double total_cost(int number_par, double price_par) { const double TAX_RATE = 0.05; //5% tax double subtotal; subtotal = price_par * number_par; return (subtotal + subtotal * TAX_RATE); } CuuDuongThanCong.com https://fb.com/tailieudientucntt
- c. Gọi hàm • Tên_hàm(tham_số_1, …, tham_số_n) • Giá trị được truyền vào các tham số của hàm sẽ được sử dụng trong phần thân hàm. – Pass by value: giá trị truyền vào là bản sao của giá trị lưu trữ trong biến đóng vai trò tham số đầu vào • Giá trị tham số không thay đổi khi được sử dụng trong thân hàm • Gọi hàm tham trị loại bỏ các thay đổi ngoài ý muốn lên các tham số – Pass by reference: giá trị truyền vào là địa chỉ của tham số đầu vào • Giá trị tham số có thể thay đổi khi được sử dụng trong thân hàm, do truyền biến gốc chứ không phải bản sao • Thay đổi giá trị của đối số trong hàm sẽ ảnh hưởng hoặc thay đổi trực tiếp lên biến gốc CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Ví dụ void square_num (int *); Khai báo hàm int main() { int p = 5; printf ("P is now %d\n", p); square_num (&p); Truyền địa chỉ của p vào hàm square_num printf ("P is now %d\n", p); Hàm thay đổi giá trị của p thành 25 return 0; } void square_num (int *num) Định nghĩa hàm, tham số vào là { con trỏ num trỏ điến giá trị kiểu int (*num)= (*num) * (*num); } * biểu diễn giá trị mà con trỏ num trỏ đến CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Viết hàm để hoán đổi giá trị hai biến? void trao_doi(int so1, int so2) { int temp; temp = so1; so1 = so2; so2 = temp; } void sap_xep_mang(int *a, int n) { int i, j, temp; for (i=0; i
- Viết hàm để hoán đổi giá trị hai biến? void trao_doi(int *so1, int *so2) { int temp; temp = *so1; *so1 = *so2; *so2 = temp; } void sap_xep_mang(int *a, int n) { int i, j; for (i=0; i
- d. Biến tham chiếu trong C++ • Cú pháp: – kieuDL &ten_bien; • Bí danh của biến khác – Thay đổi biến tham chiếu (bí danh) sẽ làm thay đổi giá trị của biến được tham chiếu • Ví dụ: – int count = 1; – int &ref = count; //ref là bí danh của count – ++ref; //tăng count lên 1,sử dụng bí danh ref CuuDuongThanCong.com https://fb.com/tailieudientucntt
- e. Tham số kiểu tham chiếu trong C++ • Giống tham số được khai báo var trong Pascal • Thay đổi tham số kiểu tham chiếu (tham số hình thức) trong thân hàm sẽ làm thay đổi tham số thực khi truyền. void trao_doi(int &x, int &y) { int temp = x; x = y; y = temp; } • Gọi hàm: int a=5, b=8; trao_doi(a, b); • Với cách gọi hàm này, C++ tự gửi địa chỉ của a và b làm tham số cho hàm trao_doi(). CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Ví dụ - Hàm tham chiếu #include int x = 4; int & myFunc() { return x; } int main() { cout
- 2. Nguyên tắc chung • Mỗi CTC đều phải được thiết kế tốt, có khả năng cài đặt và kiểm thử độc lập: – Giao diện được tối thiểu hóa – Phân tách phần giao diện và phần cài đặt – Bao gói dữ liệu – Quản lý tài nguyên trước sau như một – Thiết lập các hợp đồng và thông báo lỗi đến cho người dùng CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 2. Nguyên tắc chung • Tuân thủ các quy tắc đặt ra. – Chỉ nên vi phạm 1 quy tắc nếu được đền bù bằng thứ đáng để mạo hiểm • Phong cách lập trình cần phải nhất quán. – Nếu bạn chấp nhận một quy tắc như cách thức đặt tên hàm hay biến, hằng thì hãy tuân thủ nó trong toàn bộ chương trình. • Mỗi chương trình con (CTC) phải có một nhiệm vụ rõ ràng. – Có 2 loại CTC: functions và procedures. Functions chỉ nên tác động tới duy nhất 1 giá trị - giá trị trả về của hàm – Một CTC phải đủ ngắn để người đọc có thể nắm bắt được chức năng của nó: tính toán, đánh giá hay biến đổi dữ liệu – Tối thiểu hóa số các tham số của CT con. • > 6 tham số cho 1 CTC là quá nhiều CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 2. Nguyên tắc chung • Đơn giản hóa vấn đề - Problem Simplification: – Để tăng hiệu quả của chương trình, hãy đơn giản hóa vấn đề mà nó giải quyết. • Đơn giản hóa mã nguồn – Code Simplification : – Hầu hết các chương trình chạy nhanh là đơn giản. – Vì vậy, hãy đơn giản hóa chương trình để nó chạy nhanh hơn. • Không ngừng nghi ngờ - Relentless Suspicion: – Đặt câu hỏi về sự cần thiết của mỗi đoạn mã nguồn, mỗi thuộc tính và mỗi dữ liệu thành viên trong cấu trúc dữ liệu. • Liên kết sớm - Early Binding: – Hãy thực hiện ngay công việc để tránh thực hiện nhiều lần sau này. CuuDuongThanCong.com https://fb.com/tailieudientucntt
- a. Đặt tên • Tên hàm / thủ tục: – Phải ngắn gọn và có tính chất gợi nhớ – Phải là động từ hoặc cụm động từ – Bắt đầu bằng chữ in hoa/in thường một cách thống nhất • Tên tham số: bất kỳ tên hợp lệ nào – Không nên trùng với tên của các biến trong CT CuuDuongThanCong.com https://fb.com/tailieudientucntt
- b. Trừu tượng hóa quy trình nghiệp vụ • “Black Box”: hộp đen tham chiếu tới thứ mà ta biết cách sử dụng, nhưng ta không biết phương thức hoạt động hay thao tác chi tiết của nó • Người dùng chương trình không cần biết chương trình được viết như thế nào, nhưng cần biết chương trình đó dùng để làm gì • Xây dựng hàm/thủ tục như là các hộp đen: – LTV – người sử dụng hàm – cần biết hàm đó làm gì, không cần biết làm thế nào – LTV cần biết nếu đưa đúng các tham số vào hộp đen thì hộp đen sẽ trả ra kết quả gì CuuDuongThanCong.com https://fb.com/tailieudientucntt
- c. Che giấu thông tin • Thiết kế các hàm/thủ tục dưới dạng các hộp đen chính là ví dụ của việc che giấu thông tin – Hàm được sử dụng mà không cần biết nó được viết như thế nào – Thân hàm được giấu đi • Điều này cho phép LTV – Thay đổi hoặc nâng cao hiệu quả của hàm bằng cách viết lại phần định nghĩa hàm – Đọc phần khai báo hàm và các chú thích tương ứng để biết cách sử dụng hàm CuuDuongThanCong.com https://fb.com/tailieudientucntt
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Kỹ thuật lập trình - Phạm Thế Bảo
0 p | 220 | 32
-
Bài giảng Kỹ thuật lập trình: Chương I - Lưu Hồng Việt
48 p | 194 | 23
-
Bài giảng Kỹ thuật lập trình: Chương IV - Lưu Hồng Việt
32 p | 151 | 17
-
Bài giảng Kỹ thuật lập trình: Chương III - Lưu Hồng Việt
51 p | 147 | 15
-
Bài giảng Kỹ thuật lập trình: Chương V - Lưu Hồng Việt
19 p | 127 | 15
-
Bài giảng Kỹ thuật lập trình: Phần 1 - ĐH CNTT&TT
37 p | 114 | 10
-
Bài giảng Kỹ thuật lập trình - Bài 1: Tổng quan về kỹ thuật lập trình
65 p | 165 | 8
-
Bài giảng Kỹ thuật lập trình: Bài 1 - Phạm Đình Sắc
9 p | 129 | 7
-
Bài giảng Kỹ thuật lập trình nâng cao: Chương 4 - ThS. Dương Thành Phết
26 p | 92 | 7
-
Bài giảng Kỹ thuật lập trình - Chương 10: Tổng kết môn học (Trường Đại học Bách khoa Hà Nội)
67 p | 15 | 4
-
Bài giảng Kỹ thuật lập trình: Chương 1 - Trần Quang
39 p | 8 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 2 - Trần Quang
25 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 3 - Trần Quang
52 p | 10 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 4 - Trần Quang
32 p | 7 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 6 - Trần Quang
37 p | 11 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 7 - Trần Quang
28 p | 6 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 8 - Trần Quang
34 p | 8 | 2
-
Bài giảng Kỹ thuật lập trình: Chương 9 - Trần Quang
33 p | 4 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn