I. Mục đích yêu cầu
Học sinh cần biết:
ã Chương trình con thực chất là một khối lệnh (tập các lệnh) nhằm giải quyết một bài toán con để góp phần giải quyết một bài toán lớn hơn bằng một chương trình.
ã Khi phải viết chương trình dài, phức tạp, việc sử dụng chương trình con là hết sức cần thiết.
II. Phương pháp, phương tiện giảng bài
Phương pháp: Thuyết trình, giảng giải
Phương tiện: SGK, SGV
Bảng phụ:
Người soạn: Hà Trung Hòa. Lớp: SP Tin 40 Giáo viên hướng dẫn: Lê Thị Bích Liên Ngày soạn : 30/09/2008 Ngày giảng : / /2008 Chương VI: Chương trình con và lập trình có cấu trúc Bài 17: Chương trình con và phân loại I. Mục đích yêu cầu Học sinh cần biết: Chương trình con thực chất là một khối lệnh (tập các lệnh) nhằm giải quyết một bài toán con để góp phần giải quyết một bài toán lớn hơn bằng một chương trình. Khi phải viết chương trình dài, phức tạp, việc sử dụng chương trình con là hết sức cần thiết. II. Phương pháp, phương tiện giảng bài Phương pháp: Thuyết trình, giảng giải Phương tiện: SGK, SGV Bảng phụ: III. Tiến trình bài giảng Nội dung Hoạt động GV và HS Kiểm tra bài cũ: Viết chương trình tính LuyThua=an. Với a là số thực, n là số nguyên nhập từ bàn phím. Chương VI: Chương trình con và lập trình có cấu trúc Bài 17: Chương trình con và phân loại 1. Khái niệm chương trình con. Bài toán 1: Tính tổng bốn luỹ thừa: TLuythua=an+bm+cp+dq Với a, b, c, d là các số thực, n, m, p, q là các số nguyên. Input: a, b, c, d kiểu thực; m, n, p, q kiểu nguyên. Output: Đưa ra màn hình kết quả TLuythua=an + bm + cp + dq. - Việc chia nhỏ các bài toán thành các bài toán con được gọi là cách thiết kế từ trên xuống. - Để nâng cao hiệu quả lập trình, các ngôn ngữ lập trình bậc cao đều cung cấp khả năng xây dựng chương trình con dạng tổng quát “đại diện” cho nhiều đoạn lệnh tương tự nhau. Ví dụ: tính luỹ thừa luythua=xk, trong đó lũy thừa và x là giá trị kiểu thực còn k thuộc kiểu nguyên. Ta có thể đặt tên cho chương trình con này là luythua và tham số cần thiết là x và k . Khi cần tính luỹ thừa cụ thể ta chỉ cần viết tên chương trình con và thay thế (x,k) bằng giá trị cụ thể tương ứng. program Tinh_tong; var TLuyThua,a,b,c,d:real; m,n,p,q:integer; Function LuyThua(x:real;k:integer):real; var i:integer; Tich:real; begin Tich:=1.0; For i:=1 to k do Tich:=Tich*x; LuyThua:=Tich; end; BEGIN write('Nhap du lieu theo thu tu a, b, c, d, m, n, p, q:'); readln(a,b,c,d,m,n,p,q); TLuyThua:=LuyThua(a,m)+LuyThua(b,n) +LuyThua(c,p) +LuyThua(d,q); write('Tong luy thua=',TLuyThua:2:2); readln; END. * Nhận xét: Sử dụng chương trình con chương trình ngắn gọn, dễ theo dõi hơn chương trình không sử dụng chương trình con. - Khi lập trình giải toán, ta có thể phân chia chương trình thành các khối (môđun), mỗi khối bao gồm các lệnh giải một bài toán nào đó. Mỗi khối lệnh sẽ được xây dựng thành một chương trình con. Sau đó, chương trình chính sẽ được xây dựng từ các chương trình con này. Chương trình con cũng có thể được xây dựng từ các chương trình con khác. Cách lập trình như vậy dựa trên phương pháp lập trình có cấu trúc và chương trình được xây dựng gọi là chương trình có cấu trúc. * Chú ý: Chương trình con đôi khi chỉ được dùng đúng một lần xong khi đó nó vẫn có tác dụng làm sáng sủa chương trình. Bài toán 2: Viết chương trình nhập vào số nguyên dương N (0 < N < 50) và dãy số nguyên dương a1, ..., an. Đưa ra số lượng số nguyên tố. Input: Số nguyên dương ( 0 < N < 50) và dãy số nguyên dương a1, ..., an Output: Số lượng số nguyên tố. * Khái niệm chương trình con (SGK) * Lợi ích của việc sử dụng chương trình con. - Tránh được việc phải lặp đi lặp lại cùng một dãy lệnh nào đó. VD: Bài toán 1, 2 - Hỗ trợ việc thực hiện các chương trình lớn. VD: Bài toán quản lý điểm - Phục vụ cho quá trình trừu tượng hoá. Ví dụ khi sử dụng các hàm toán học như sin(x), cos(x),...ta không cần xem nó được xây dựng như thế nào. Trừu tượng hoá là tư tưởng chủ đạo để xây dựng chương trình nói chung và chương trình có cấu trúc nói riêng. -Mở rộng khả năng ngôn ngữ. Ví dụ: Trong bài toán 1 ta xây dựng thêm được chương trình con luỹ thừa. - Thuận tiện cho phát triển, nâng cấp chương trình Đáp án: Program TinhLuyThua; Var a,LuyThua:real; i,n:integer; BEGIN Write(‘Nhap a=’);readln(a); Write(‘Nhap n=’);readln(n); LuyThua:=1.0; For i:=1 to n do LuyThua:=LuyThua*a; Write(‘Luy thua ‘,a:2:2,’^’,n,’ =’,LuyThua:8:4); Readln; END. GV: Các chương trình giải các bài toán phức tạp thường rất dài, có thể gồm rất nhiều lệnh. Khi đọc những chương trình dài rất khó nhận biết được chương trình thực hiện các công việc gì và hiệu chỉnh chương trình cũng khó khăn. Vậy phải cấu trúc chương trình như thế nào để cho chương trình dễ đọc, dễ hiệu chỉnh, nâng cấp? Trước tiên chúng ta đi xét bài toán sau. GV: Đưa ra bài toán 1 GV: Theo toán học để giải được bài toán này ta làm như thế nào? HS: Ta sẽ tính từng luỹ thừa, sau đó cộng tổng các luỹ thừa đó lại ta được kết quả TLuythua. GV: Giả sử có bài toán sau: TLuyThua= 63+ 64+ 65+ 66 Khi em là nhóm trưởng (nhóm gồm 4 người ) và nhóm em nhận được bài toán thì làm cách nào để có kết quả nhanh nhất. HS: Trả lời. GV: Nhận xét và khẳng định: Có thể giao cho 4 người mỗi người thực hiện một bài. Giá trị TluyThua là tổng kết quả của bốn bài toán con đó. GV: áp dụng ý tưởng đó trong lập trình ta sẽ dùng các biến LuyThua1 để tính toán và lưu trữ kết quả của an. Tương tự LuyThua2, LuyThua3, LuyThua4 dùng để tính toán và lưu trữ kết quả của bm, cp, dq. GV: Cả lớp theo dõi chương trình tinh_tong trang 92 SGK. GV: Hãy quan sát và cho biết có mấy khối lệnh được viết tương tự nhau? HS: Có 4 khối lệnh được viết tương tự nhau. GV: Bằng trực quan một em cho cô biết khi viết như vậy em có nhận xét gì không ? HS: ở đây có 4 khối lệnh tương tự nhau được lặp đi lặp lại làm cho chương trình vừa dài, vừa khó theo dõi. GV: Để nâng cao hiệu quả lập trình, các ngôn ngữ lập trình bậc cao đều cung cấp khả năng xây dựng chương trình con dạng tổng quát “đại diện” cho nhiều đoạn lệnh tương tự nhau. Chẳng hạn, tính luỹ thừa luythua=xk, trong đó lũy thừa và x là giá trị kiểu thực còn k thuộc kiểu nguyên. Ta có thể đặt tên cho chương trình con này là luythua và tham số cần thiết là x và k . Khi cần tính luỹ thừa cụ thể ta chỉ cần viết tên chương trình con và thay thế (x,k) bằng giá trị cụ thể tương ứng chẳng hạn để tính an , bm, cp, dq ta viết luythua(a, n), luythua(b, m), luythua(c, p), luythua(d,q). GV:Sau đây thầy sẽ giới thiệu cho các em chương trình tính TLuyThua có sử dụng chương trình con được viết bằng ngôn ngữ Pascal. GV: Treo bảng phụ. GV: Bảng phụ sử dụng một chương trình con là hàm LuyThua kiểu thực với các tham số hình thức là x kiểu thực, k kiểu nguyên. Khi cần tính các giá trị cụ thể ta chi việc gọi tên chương trình. Ví dụ: Tính LuyThua=an. Ta sẽ gọi LuyThua(a,n) GV: Một em cho thầy biết chương trình có sử dụng chương trình con có ngắn gọn và dễ theo dõi hơn so với chương trình không sử dụng chương trình con không? HS: Trả lời GV: Nhận xét và khẳng định: Chương trình có sử dụng chương trình con ngắn gọn, dễ theo dõi hơn chương trình không sử dụng chương trình con. GV: Theo em, để sản xuất ra được một chiếc xe máy, có phải chỉ cần qua tay một người thợ ? Hay phải qua một dây chuyền sản xuất ? HS: Trả lời GV: Đúng vậy, để sản xuất ra một chiếc xe máy người ta phải phân thành nhiều công đoạn như sản xuất ra khung xe, yên xe,... Mỗi công đoạn được giao cho các tổ lao động chuyên làm một bộ phận. Và có một bộ phận chuyên lắp ráp sản phẩm từ các bộ phận nhỏ. GV: Đối với lập trình cũng vậy, khi lập trình giải toán, ta có thể phân chia chương trình thành các khối (môđun), mỗi khối bao gồm các lệnh giải một bài toán nào đó. Mỗi khối lệnh sẽ được xây dựng thành một chương trình con. Sau đó, chương trình chính sẽ được xây dựng từ các chương trình con này. Chương trình con cũng có thể được xây dựng từ các chương trình con khác. Cách lập trình như vậy dựa trên phương pháp lập trình có cấu trúc và chương trình được xây dựng gọi là chương trình có cấu trúc. GV: Cần chú ý là chương trình con đôi khi chỉ được dùng đúng một lần xong khi đó nó vẫn có tác dụng làm sáng sủa chương trình. GV: Để hiểu rõ hơn về việc cần thiết phải sử dựng chương trình con chúng ta đi xét bài toán 2. GV: Đưa ra bài toán GV: Từ bài toán trên một em xác định Input, Output? HS: Trả lời. GV: Để giải được bài toán trên ta cần phải làm gì? HS: Trả lời GV: Tạo 1 biến: đếm số lượng số nguyên tố. Lần lượt với mỗi số ai (với i=1,...,n) ta kiểm tra số đó có là số nguyên tố hay không. Nếu là số nguyên tố thì tăng biến đếm lên 1 đơn vị. Như vậy với N = 50 thì ta phải viết đi viết lại 50 lần dãy lệnh tương tự nhau để kiểm tra một số nguyên dương có phải là số nguyên tố hay không? GV: Như vậy chúng ta thấy được việc cần thiết phải sử dụng chương trình con trong chương trình. GV: Qua các ví dụ trên ta có khái niệm chương trình con. Vậy mời 1 em đọc khái niệm chương trình con. HS: Đọc khái niệm chương trình con trong SGK. GV: Qua hai ví dụ trên một em cho biết sử dụng chương trình con có những lợi ích gì? GV (Giải thích): Do chương trình được tạo thành từ các chương trình con nên dễ đọc, dễ hiểu, dễ kiểm tra và hiệu chỉnh. Việc nâng cấp, phát triển chương trình con nào đó, thậm chí bổ sung thêm các chương trình con mới nói chung không gây ảnh hưởng tới các chương trình con khác. * Lưu ý: Nếu còn thời gian thì yêu cầu học sinh suy nghĩ và đưa ra các bài toán cần thiết phải sử dụng chương trình con. III. Củng cố Tóm lại qua bài học hôm nay chúng ta cần lưu ý: Chương trình con Dãy lệnh thực hiện 1 công việc nào đó Xây dựng nên chương trình chính và có thể được xây dựng từ các chương trình con khác Được gọi từ nhiều vị trí khác nhau Khi nào thì cần thiết phải sử dụng chương trình con: Khi chương trình lặp đi lặp lại các đoạn lệnh tương tự nhau. Lợi ích của việc sử dụng chương trình con IV. Dặn dò Học bài cũ và đọc trước mục 2.Phân loại và cấu trúc của chương trình con V. Rút kinh nghiệm Nhận xét của giáo viên hướng dẫn Ngày tháng năm 2008 Giáo viên hướng dẫn
Tài liệu đính kèm: