Tài liệu Skkn kích thích hứng thú học tập bộ môn tin học thông qua dạy học chương trình con tin học 11

  • Số trang: 33 |
  • Loại file: PDF |
  • Lượt xem: 69 |
  • Lượt tải: 0
dangvantuan

Tham gia: 02/08/2015

Mô tả:

SỞ GIÁO DỤC ĐÀO TẠO VĨNH PHÚC TRƯỜNG THPT YÊN LẠC 2 =====***===== BÁO CÁO KẾT QUẢ NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN Tên sáng kiến: KÍCH THÍCH HỨNG THÚ HỌC TẬP BỘ MÔN TIN HỌC THÔNG QUA DẠY HỌC CHƯƠNG TRÌNH CON TIN HỌC 11 Tác giả sáng kiến: CHU THỊ THU Mã sáng kiến: 28.62.01 Yên Lạc, năm 2020 DANH MỤC CÁC CHỮ VIẾT TẮT 1. THPT: Trung học phổ thông 2. HSG: Học sinh giỏi 3. HS: Học sinh 4. SKKN: Sáng kiến kinh nghiệm 5. NXB: Nhà xuất bản 6. NH: Năm học 7. KK: Khuyến khích 8. HSDT: Học sinh dự thi 9. CTC: Chương trình con MỤC LỤC 1. LỜI GIỚI THIỆU.............................................................................................................1 2. TÊN SÁNG KIẾN ...........................................................................................................1 3. TÁC GIẢ SÁNG KIẾN ...................................................................................................1 4. CHỦ ĐẦU TƯ TẠO RA SÁNG KIẾN ...........................................................................2 5. LĨNH VỰC ÁP DỤNG SÁNG KIẾN .............................................................................2 6. NGÀY SÁNG KIẾN ĐƯỢC ÁP DỤNG ........................................................................2 7. MÔ TẢ BẢN CHẤT CỦA SÁNG KIẾN........................................................................2 7.1. Tổng quan các vấn đề nghiên cứu .........................................................................2 7.1.1. Mục đích nghiên cứu........................................................................................2 7.1.2. Bản chất đối tượng nghiên cứu .......................................................................2 7.1.3. Đối tượng, phạm vi nghiên cứu.......................................................................2 7.1.4. Phương pháp nghiên cứu ................................................................................2 7.1.5. Giới hạn về không gian của phương pháp nghiên cứu .................................3 7.1.6. Phạm vi nghiên cứu..........................................................................................3 7.2. Phần nội dung ......................................................................................................3 7.2.1. Cơ sở lý luận .....................................................................................................3 7.2.2. Cơ sở thực tiễn ..................................................................................................3 7.2.3. Nội dung cụ thể .................................................................................................4 I. Khái niệm chương trình con ..............................................................................4 A. Khái niệm .......................................................................................................4 B. Lợi ích của việc sử dụng chương trình con .................................................4 II. Phân loại và cấu trúc chương trình con ..........................................................4 A. Phân loại .........................................................................................................4 B. Cấu trúc chương trình con ...........................................................................4 C. Thực hiện chương trình con .........................................................................5 D. Khai báo CTC ................................................................................................5 E. Biến toàn cục và biến cục bộ ........................................................................7 F. Cách truyền tham số trong chương trình con.............................................7 G. Tính đệ quy của chương trình con ..............................................................8 H. Một số ví dụ ...................................................................................................9 J. Bài tập áp dụng ............................................................................................15 7.3. Khả năng áp dụng của sáng kiến .........................................................................22 8. NHỮNG THÔNG TIN CẦN BẢO MẬT .....................................................................23 9. CÁC ĐIỀU KIỆN CẦN THIẾT ĐỂ ÁP DỤNG SÁNG KIẾN .....................................23 10. LỢI ÍCH THU ĐƯỢC .................................................................................................23 KẾT LUẬN ........................................................................................................................28 TÀI LIỆU THAM KHẢO..................................................................................................29 BÁO CÁO KẾT QUẢ NGHIÊN CỨU, ỨNG DỤNG SÁNG KIẾN 1. LỜI GIỚI THIỆU Để rèn luyện kỹ năng lập trình cho học sinh khá, giỏi trước khi chọn đội tuyển đi thi học sinh giỏi môn Tin học có rất nhiều cách mà giáo viên có thể áp dụng đối với các đối tượng học sinh khác nhau. Các trường có điểm thi đầu vào cao thì việc rèn luyện kỹ năng sẽ có nhiều thuận lợi nhưng với các trường có điểm thi đầu vào trung bình và thấp thì việc rèn luyện kỹ năng lập trình cho các em gặp rất nhiều khó khăn. Tuy nhiên trong cùng một trường với các đối tượng học sinh khác nhau giáo viên có thể áp dụng nhiều biện pháp khác nhau để rèn luyện kỹ năng lập trình cho học sinh với hiệu quả khác nhau. Các giáo viên đều hướng dẫn cho học sinh biết một bài toán có thể được giải với nhiều thuật toán khác nhau và mỗi thuật toán chỉ giải được một bài toán hoặc một lớp bài toán, nhưng thực tế cho thấy, đứng trước một bài toán tin học đặc biệt là bài toán về xâu kí tự học sinh thường lúng túng khi lập trình việc này cũng có thể do nhiều nguyên nhân, chẳng hạn không biết xử lý dữ liệu như thế nào, không biết đọc, ghi dữ liệu ra sao… , mặt khác học sinh không có máy để thực hành thêm ở nhà. Tuy nhiên, khi học sinh được rèn luyện từ những bài cơ bản cho đến những bài toán có dạng tương tự hoặc dạng mở rộng từ một bài toán cơ bản nào đó trong sách giáo khoa, hoặc một bài toán cơ bản nào đó mà các em biết thì các em có thể xây dựng và có hứng thú để xây dựng thuật toán cho bài toán đặt ra. Vì vậy giáo viên có thể chọn các bài tập cơ bản liên quan đến mảng một chiều, mảng hai chiều, xâu kí tự từ đó mở rộng và phát triển đến các bài toán có sử dụng chương trình con để để rèn luyện kỹ năng lập trình và kích thích hứng thú học tập bộ môn Tin học cho học sinh. Dĩ nhiên cách làm này không mới với giáo viên nhưng cách chọn các bài toán cơ bản như thế nào để học sinh có thể vận dụng và kích thích được húng thú học tập môn Tin học cho học sinh đó lại là điều đáng quan tâm. Chương trình con là một trong những vấn đề hay gặp trong lập trình nói chung và lập trình pascal nói riêng. Chương trình tin học lớp 11 đã giới thiệu và có một số ví dụ về chương trình con nhưng trong quá trình học lập trình khô khan, để học sinh không nhàm chán và tránh mắc phải những sai lầm khi lập trình lại kích thích hứng thú học tập cho học sinh không phải là việc đơn giản. Vì những lý do trên tôi chọn đề tài “Kích thích hứng thú học tập bộ môn Tin học thông qua dạy học chương trình con tin học 11” nhằm cung cấp cho học sinh những kiến thức khái quát hơn về chương trình con, rèn luyện kỹ năng lập trình và kích thích hứng thú học tập bộ môn này cho học sinh thông qua một số bài toán cụ thể. 2. TÊN SÁNG KIẾN “Kích thích hứng thú học tập bộ môn Tin học thông qua dạy học chương trình con tin học 11” 3. TÁC GIẢ SÁNG KIẾN - Họ và tên: Chu Thị Thu Trang 1 - Địa chỉ: Trường THPT Yên Lạc 2 – Huyện Yên Lạc – Tỉnh Vĩnh Phúc - Số điện thoại: 037467972 E_mail:chuthu.yl2@gmail.com 4. CHỦ ĐẦU TƯ TẠO RA SÁNG KIẾN - Họ tên: Chu Thị Thu - Trình độ chuyên môn: Đại học sư phạm Tin học - Đơn vị công tác: Trường THPT Yên Lạc 2– Huyện Yên Lạc – Tỉnh Vĩnh Phúc 5. LĨNH VỰC ÁP DỤNG SÁNG KIẾN Ứng dụng chương trình con trong lập trình giảng dạy học sinh lớp 11 môn Tin học và bồi dưỡng học sinh tham gia kì thi chọn học sinh giỏi các cấp môn Tin học. 6. NGÀY SÁNG KIẾN ĐƯỢC ÁP DỤNG Từ ngày 01/08/2018 7. MÔ TẢ BẢN CHẤT CỦA SÁNG KIẾN 7.1. Tổng quan các vấn đề nghiên cứu 7.1.1. Mục đích nghiên cứu Góp phần đổi mới phương pháp dạy học sinh đại trà và học sinh tham dự kì thi học sinh giỏi môn Tin học theo hướng phát huy tính tích cực, chủ động và sáng tạo của học sinh giúp học sinh tiếp thu tri thức một cách có hiệu quả. Góp phần gây hứng thú học tập môn Tin học cho học sinh lớp 11 và học sinh tham gia thi chọn học sinh giỏi, tránh việc học thụ động, học vẹt. Giúp học sinh lĩnh hội tri thức một cách khoa học, củng cố và khắc sâu kiến thức. Qua đề tài này tôi mong muốn cung cấp cho học sinh một trong những vấn đề mà các em đang gặp phải trong khi lập trình thông qua việc sử dụng chương trình con giúp các em chủ động hơn trong học tập, tích luỹ kiến thức, kỹ năng lập trình. 7.1.2. Bản chất đối tượng nghiên cứu Đưa ra hệ thống lý thuyết về chương trình con và ứng dụng chương trình con giải các bài tập trong ngôn ngữ lập trình Pascal giúp học sinh lĩnh hội tri thức, giúp các em tích cực, chủ động tích lũy kiến thức, kích thích hứng thú học tập bộ môn Tin học. Qua đó, học sinh phát triển được tư duy logic thông qua hệ thống bài tập giúp các em rèn luyện được tính tự giác, tính kỉ luật, thói quen tự học đó là những đức tính rèn luyện tốt của học sinh. 7.1.3. Đối tượng, phạm vi nghiên cứu Đối tượng: Chương trình con trong lập trình Phạm vi: Các vấn đề về chương trình con trên ngôn ngữ lập trình Pascal. 7.1.4. Phương pháp nghiên cứu Phương pháp Trang 2 Nghiên cứu lí luận chung. Khảo sát điều tra thực tế dạy học. Tổng hợp đúc rút kinh nghiệm. Cách thực hiện Trao đổi với đồng nghiệp, tham khảo ý kiến giáo viên cùng bộ môn. Liên hệ thực tế trong nhà trường, áp dụng và đúc rút kinh nghiệm qua quá trình giảng dạy. Thông qua việc giảng dạy trực tiếp học sinh khối 11 và học sinh tham gia thi chọn học sinh giỏi môn Tin học lớp 11. 7.1.5. Giới hạn về không gian của phương pháp nghiên cứu Đề tài được đề cập với đồng nghiệp và thực nghiệm sư phạm qua các em học sinh lớp 11A1, 11A2 và các em học sinh tham gia dự kì thi chọn học sinh giỏi môn Tin học lớp 11 năm học 2017-2018, năm học 2018-2019 7.1.6. Phạm vi nghiên cứu Tôi đã nghiên cứu đề tài này trong suốt quá trình giảng dạy và thực nghiệm đề tài này trong năm học 2018-2019. 7.2. Phần nội dung 7.2.1. Cơ sở lý luận Đứng trước một bài toán lập trình tin học học sinh thường lúng túng và không biết tìm thuật toán của bài toán từ đâu và tìm như thế nào? Một số học sinh khá, giỏi trong đội thì có thói quen là mò mẫm và thử nghiệm để tìm lời giải, điều đó có thể dẫn tới kết quả đúng hoặc sai hoặc chệch hướng giải quyết bài toán, hiệu suất để tìm thuật toán như thế là không cao, một số học sinh kém hơn thì không biết cách tìm thuật toán từ đâu và điều đó gây tâm lý chán nản cho các em. Với tình hình ấy để giúp học sinh định hướng tốt hơn trong quá trình tìm thuật toán, trước khi có thể tự tìm được thuật toán tốt hơn thì người giáo viên cần tạo cho học sinh thói quen tìm thuật toán từ các các bài toán cơ bản quen thuộc mà các em đã biết, khai thác các yếu tố đặc trưng của một số bài toán cơ bản sử dụng chương trình con để giải quyết cho các bài toán mới. Việc áp dụng thuật toán của các bài toán cơ bản về chương trình con xây dựng thuật toán cho các bài toán tương tự hoặc các bài toán mở rộng từ các bài toán cơ bản đó là một quá trình giúp học sinh kích thích hứng thú học tập và rèn luyện kỹ năng lập trình. 7.2.2. Cơ sở thực tiễn Trường tôi nằm dưới chân đê dải sông Hồng nên đa số học sinh ở nông thôn nên chưa có cơ hội, điều kiện tiếp xúc với công nghệ và máy tính. Vì vậy, tin học là một môn học tương đối lạ lẫm và khó đối với học sinh trường tôi. Học sinh học trên lớp đã không có hứng thú học tin học đặc biệt là các bài lập trình vì các em không học thêm hay tin học không phải là môn mà các em thi đại học. Điều này dẫn đến ý thức tự giác của học sinh chưa cao, đặc biệt là đối với môn học lập trình Tin học lớp 11. Những thao tác thực hành thì đa phần học sinh chưa nhớ Trang 3 vì ở nhà các em cũng không có máy tính để học sinh rèn luyện các kỹ năng thực hành cho học sinh. Phần chương trình con là phần các em học rất ít trên tiết lý thuyết. Cơ sở trên đã giúp tôi áp dụng đề tài kích thích hứng thú học tập bộ môn Tin học thông qua chương trình con trong lập trình Pascal giảng dạy cho học sinh khối 11 và áp dụng cho học sinh tham dự kì thi chọn học sinh giỏi cấp tỉnh và cấp quốc gia. 7.2.3. Nội dung cụ thể Tất cả các nội dung, các ví dụ, bài tập trong đề tài này được xây dựng trên ngôn ngữ lập trình Pascal I. Khái niệm chương trình con A. Khái niệm Để viết chương trình giải các bài toán lớn, phức tạp người lập trình có thể chia thành nhiều bài toán nhỏ, mỗi bài toán là một dãy lệnh mô tả một số thao tác nhất định (gọi là chương trình con). Sau đó ghép nối các chương trình con thành chương trình chính. Chương trình con là dãy các lệnh mô tả một số thao tác nhất định và có thể được thực hiện (được gọi) từ nhiều vị trí khác nhau trong chương trình. B. 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. • Hỗ trợ việc thực hiện các chương trình lớn • Phục vụ cho quá trình trừu tượng hóa • Mở rộng khả năng ngôn ngữ • Thuận tiện cho việc phát triển nâng cấp chương trình II. Phân loại và cấu trúc chương trình con A. Phân loại Trong nhiều ngôn ngữ lập trình, chương trình con thường gồm hai loại: ➢ Hàm (Function): Là chương trình con thực hiện một số thao tác nào đó và trả về một giá trị qua tên của nó. Ví dụ: Sin(x) nhận vào giá trị thực x và trả về giá trị sin x Sqrt(x) nhận vào gía trị x trả về giá trị căn bậc hai của x Length(x) nhận vào xâu x và trả về độ dài của xâu x ➢ Thủ tục (Procedure): Là chương trình con thực hiện một số thao tác nào đó, và không trả về giá trị nào qua tên của nó. Ví dụ: Các thủ tục vào/ra chuẩn hay thủ tục xử lí xâu: writeln, readln, delete B. Cấu trúc chương trình con [] Trang 4 ▪ Phần đầu: Cấu trúc chương trình con tương tự chương trình chính, chương trình chính, nhưng nhất thiết phải có phần đầu để khai báo tên, nếu là Hàm thì phải có khai báo kiểu dữ liệu trả về. ▪ Phần khai báo: Có thể khai báo cho dữ liệu vào ra, các hằng được sử dụng trong chương trình con ▪ Phần thân: Là dãy các lệnh được thực hiện trong chương trình con từ dữ liệu vào và được kết quả như mong muốn. Phần này luôn nằm giữa hai từ khóa là Begin và End. Ở giữa là các thao tác cần thực hiện. Sau từ khóa End là dấu chấm phẩy (;).  Một số lưu ý: ➢ Một chương trình con có thể có hoặc không có tham số hình thức, có thể có hoặc không có biến cục bộ. • Tham số hình thức: Là tham số được đưa vào khi định nghĩa chương trình con • Tham số thực sự: Là tham số được viết trong lời gọi chương trình con • Biến cục bộ: Là các biến được khai báo trong chương trình con • Biến toàn phần: Là các biến được khai báo trong chương trình chính ➢ Trong thân hàm cần có lệnh: :=; ➢ Kết thúc chương trình con là dấu chấm phẩy (;) C. Thực hiện chương trình con ➢ Để thực hiện (gọi) một chương trình con, ta cần phải có lệnh gọi nó tưởng tự lệnh gọi hàm hay thủ tục chuẩn, bao gồm tên chương trình con với tham số (nếu có) là các hằng và biến chứa dữ liệu vào và ra tương ứng với các tham số hình thức đặt trong cặp ngoặc ( và ). Các hằng và biến này được gọi là các tham số thực số thực sự. ➢ Lệnh gọi chương trình con sẽ thực hiện từ trên xuống dưới trong chương trình chính. ➢ Khi thực hiện gọi chương trình con, các tham số hình thức dùng để nhập dữ liệu vào của tham số thực sự tương ứng. Khi xuất dữ liệu thì tham số hình thức lưu trữ dữ liệu ra sẽ trả giá trị cho tham số thực sự tương ứng D. Khai báo CTC – Nhắc lại cấu trúc của một chương trình PROGRAM Tên_chương_trình; { Tên chương trình} USES ...; {Khai báo thư viện} CONST ...;{Khai báo hằng} TYPE ...;{Khai báo kiểu} VAR ...;{Khai báo biến} Khai báo CTC BEGIN {Chương trình chính} ; END. Trang 5 Như vậy phần khai báo CTC nằm ở phần cuối của phần khai báo a. Khai báo và lời gọi hàm – Khai báo: FUNCTION (Danh sách ác tham số):; [Khai báo Const, Type, Var] BEGIN ; :=; END; Chú ý luôn có phép gán tên hàm cho giá trị để hàm trả về giá trị khi được gọi Ví dụ: tính tổng của 2 số x và y Function tong(x,y:integer):integer; {Do có giá trị trả về} var s:integer; begin s:=x+y; tong:=s; end; – Lời gọi hàm (danh sách các tham số thực); Ví dụ: tong(4,5); b. Khai báo và lời gọi thủ tục – Khai báo: PROCEDURE (Danh sách các tham số);{không có giá trị trả về} [Khai báo Const, Type, Var] BEGIN ; END; Ví dụ: Procedure inso(n:integer); var i:inteher; Begin for i:=1 to n do write(i:5); end; – Lời gọi thủ tục Trang 6 (danh sách các tham số thực); Ví dụ: inso(6); E. Biến toàn cục và biến cục bộ ➢ Biến toàn cục là biến được khai báo trong chương trình chính. Các biến này co thẻ được dùng ở mọi nơi trong chương trình và tồn tại trong suốt thời gian làm việc của chương trình. ➢ Biến cục bộ (biến địa phương) là các biến được khai báo trong CTC. Các biến này chỉ được sử dụng trong phạm vi ctc mà nó được khai báo. Sau khi kết thức ctc các biến này sẽ không còn tồn tại. Ví dụ: PROGRAM vidu; Var a,b,c:integer; {3 biến toàn cục} PROCEDURE thutuc(n:integer);{n là biến cục bộ} var i:integer; {i là biến cục bộ} begin for i:=1 to 10 do writeln(i); end; BEGIN a:=5;b:=6;c:=8; thutuc( a); thutuc( b); thutuc( c); readln; END. Trong trường họp biến cục bộ trùng tên với biến toàn cục thì máy không bị nhầm lẫn mà sẽ thực hiện trên biến cục bộ. Biến toàn cục không bị ảnh hưởng. F. Cách truyền tham số trong chương trình con ➢ CTC không cần có tham số (sau tên ctc) nếu không dùng đến chúng hoặc dùng trực tiếp biến toàn cục ➢ Khi truyền tham số các tham số trong lời gọi ctc phải đúng thứ tự và kiểu tương ứng với khi khai báo ctc. Ví dụ: Procedure inso(a:integer; ch:char); begin {các lệnh của CTC} end; Trang 7 {gọi} inso(13,'a'); {lời gọi đúng} inso('a',13); {loi goi sai} inso(13);{lời gọi sai} ➢ Tham số hình thức (đối) là các tham số sau tên hàm và thủ tục trong khai báo. ➢ Tham số thực sự là các tham số sau tên hàm và thủ tục trong lời gọi. ➢ Tham biến: là các tham số được khai báo sau từ khóa var. Các tham số thực phải là các biến chứ không được là giá trị. Tham biến có thể được thay đổi trong CTC và sau khi ra khỏi CTC nó vẫn giữ giá trị thay đổi đó. ➢ Tham trị: là các tham số được khia báo mà không đứng sau từ khóa var. Các tham số thực có thể là các giá trị, hằng, biến. Tham trị có thể thay đổi trong ctc nhưng sau khi kết thúc ctc giá trị của nó trở về như ban đầu. ➢ Các tham số trong hàm luôn là các tham trị, các tham số trong thủ tục có thể là tham trị hoặc tham biến.  Phân biệt cách sử dụng hàm và thủ tục Hàm khác thủ tục ở chỗ hàm trả về một giá trị cho lệnh gọi thông qua tên hàm còn thủ tục thì không. * Hàm (Function) ✓ Kết quả của bài toán trả về 1 giá trị duy nhất (kiểu vô hướng, kiểu string hoặc kiểu con trỏ). ✓ Lời gọi CTC cần nằm trong các biểu thức tính toán. * Thủ tục (Procedure) ✓ Kết quả của bài toán không trả về giá trị nào hoặc trả về nhiều giá trị hoặc trả về kiểu dữ liệu có cấu trúc (Array, Record, File) ✓ Lời gọi CTC không nằm trong các biểu thức tính toán. ➢ Chú ý: Nếu một công việc có thể làm bằng hàm thì chắc chắn sẽ làm được bằng thủ tục {tuy nhiên sẽ phức tạp hơn khi dùng hàm} nhưng một chương trình làm bằng thủ tục thì chưa chắc ta đã làm được bằng hàm. Đối với Borland Pascal 7.0 ta có thể gọi hàm như gọi một thủ tục. Không nhất thiết phải lấy giá trị trả về. Để thực hiện được điều này trong menu Options >Compiler cần khai báo cú pháp mở rộng (Extended syntax), hoặc trong chương trình cần có dẫn hướng biên dịch {$ X+}. Nếu không, khi biên dịch (gõ F9) Pascal sẽ thông báo lỗi “Error 122: Invalid variable reference”. G. Tính đệ quy của chương trình con Một CTC trong Pascal có thể gọi về chính nó. Một lời gọi như thế gọi là một lời gọi đệ quy. Ta xét ví dụ sau: Nhập vào 1 số ngun và tính n!. Ta đã biết n! = 1 nếu n =0 Trong trường hợp n>=1 ta có n!=n.(n-1)! Hàm tính n! function giai_thua(n:integer):longint; Trang 8 begin if n=0 then giai_thua:=1 else giai_thua:=n*giai_thua(n-1); end; Lưu ý: ✓ Khi sử dụng đệ quy phải có điều kiện kết thúc đệ quy (TH suy biến). Trong ví dụ ta xét điều kiện kết thúc đệ quy chính là n=0. Nếu không có điều kiện kết thúc này chương trình của ta sẽ lặp vô hạn. ✓ Luôn có lời gọi đệ quy, trong TH trên là lời gọi giai_thua(n-1); H. Một số ví dụ Ví dụ 1: Cho số nguyên dương N (N<105). Viết chương trình chuyển đổi số tự nhiên N cho trước sang hệ cơ số 2 bằng việc xây dựng hàm chuyển đổi Dec2Bin( ). Hướng dẫn: - Xây dựng hàm Dec2Bin( ) chuyển đổi từ số tự nhiên sang số nhị phân. Sử dụng biến S để lưu giá trị số nhị phân của N. Khởi gán bằng 0. Tiến hành lặp chuyển đổi cơ số: Lặp trong khi mà N > 0 SoDu = số dư của N chia cho 2. N = N chia cho 2. Bổ sung chữ số SoDu vào số S thành một chữ số Trả về kết quả cuối cùng của S. - Viết thân chương trình chính với nội dung dùng để kiểm tra kết quả thực hiện của hàm. Khai báo biến N, M Thông báo nhập và nhập giá trị cho biến N Gán giá trị M bằng kết quả trả về của hàm Dec2Bin( N ) In thông báo về kết quả số nhị phân chuyển đổi được (giá trị của M) Gọi hàm readln trước khi kết thúc chương trình Chương trình: Program Doi_Co_So; Uses crt; Var N:integer; { 1. Thu tuc chuyen so tu nhien n cho truoc sang ket qua tra ve he co so 2 } Function Dec2Bin ( n:integer ):integer; Var S,So,Du:integer; Trang 9 Begin S := 0; So := n ; While ( So > 0) do Begin Du := So mod 2 ; So := So div 2 ; S := S * 10 + Du; End; Dec2Bin:= S ; End; { 2. Than chuong trinh chinh dap ung yeu cau bai toan } BEGIN clrscr; write( 'Nhap so N =' ); readln(N ); writeln(' Dang nhi phan cua N la ', Dec2Bin(N) ); readln; END. Ví dụ 2: Cho hai số nguyên dương a, b (a,b<10 5). Viết các hàm USCLN(a,b) tính ước số chung lơn nhất của a, b và BSCNN(a, b) tính bội số chung nhỏ nhất của a, b. Hướng dẫn: Khai báo hàm USCLN có: Tên hàm: USCLN Kiểu dữ liệu trả về: integer Tham số: 2 tham trị là int a, int b Giá trị trả về: chính là giá trị ước số chung lớn nhất của a và b. Function USCLN( a, b: Integer): Integer; Var Sodu:integer; Begin While (b <> 0) do Begin Sodu:= a mod b; Trang 10 a := b; b := Sodu; End; USCLN := a; End; {Tuong tu ham BSCNN(a, b : Integer)} Function BSCNN(a,b: Integer): Integer; Var k :integer; Begin For k := a to a*b do { Lap voi moi i co gia tri tu a den 1} If ((k mod a = 0) and ( k mod b = 0)) then { Kiem tra a, b cung chia het cho k? } Break; { break de thoat, luu giu lai gia tri cua k.} BSCNN:= k; End; * Mở rộng bài toán: Từ ví dụ 2, viết chương trình tối giản phân số n/m. Với n, m là hai số nguyên dương không lớn hơn 105. Ví dụ 3: Cho số nguyên dương N (N<105). Viết hàm kiểm tra số N có phải là số nguyên tố hay không? Hướng dẫn: Khai báo hàm kiểm tra số nguyên tố có: Tên hàm: KiemtraSNT Dữ liệu trả về: int, ( 0 nếu không phải là số nguyên tố, là 1 nếu là số nguyên tố ) Tham số: tham trị là int N, số cần kiểm tra. Xử lý kiểm tra: Dựa trên ví dụ đã có ở phần trước. Function KiemtraSNT(N: Integer ): Boolean; Var OK : Boolean; i : Integer; Begin OK:= True; For i := 2 to trunc(sqrt(N)) do can bac 2 cua N} { Khoi gan gia tri dung cho ktrSNT} { Lap voi moi i co gia tri tu 2 den phan nguyen Trang 11 If N mod i = 0 then Begin { Kiem tra xem N co chia het cho i hay khong} OK:=false; break; end; { Neu dung thi khong la so nguyen to va thoat khoi vong lap} KiemtraSNT:=OK; End; Cải tiến thuật toán, không sử dụng biến phụ OK: Function KiemtraSN(N: Integer): Integer; Var i :integer; Begin For i := 2 to trunc(sqrt(N)) do can bac 2 cua N} { Lap voi moi i co gia tri tu 2 den phan nguyen If N mod i = 0 then { Kiem tra xem N co chia het cho i hay khong} Begin Writeln('N khongla SNT'); Break; End { Neu dung thi khong la so nguyen to va thoat khoi vong lap } Else Writeln('N la SNT'); { N la SNT} End; Ví dụ 4: Viết chương trình thực hiện lần lượt các công việc sau: 1. Lập thủ tục nhập ba số thực dương a , b , c (a,b,c <105) từ bàn phím . 2. Lập thủ tục kiểm tra xem ba số trên có lập thành ba cạnh của tam giác hay không ? 3. Viết hàm tính diện tích của tam giác . 4. Viết hoàn thiện chương trình chính. Chương trình mẫu Program Tam_Giac; Uses crt; Var a,b,c : Integer; { 1. Thu tuc nhap} Procedure NhapABC (Var a, b, c : Integer); Begin Trang 12 Write( 'Nhap a:' ); Readln( a ); Write( 'Nhap b:' ); Readln( b ); Write( 'Nhap c:' ); Readln( c ); End; { 2. Ham tinh dien tich} Function Dientich( a, b, c:Integer ) : Real; Var dt,p : Real; Begin p := (a+b+c)/2; dt := sqrt(p* (p-a)*(p-b)*(p-c)); Dientich := dt; End; { 3. Thu tuc kiem tra va In kqua tinh dien tich (neu la tam giac) } Procedure KiemTra_InDienTich ( a,b,c:Integer); Begin If ((a+b>c) and (b+c>a) and (a+c>b)) then Writeln(' Ba canh tren tao thanh tam giac.dien tich', Dientich(a,b,c) ) Else Writeln('Ba canh tren khongtao thanh tam giac'); End; { 4. Than chuong trinh chinh } BEGIN NhapABC(a,b,c); KiemTra_InDienTich (a,b,c); END. Ví dụ. 5: Viết chương trình hoàn chỉnh thực hiện phân tích ra N ra thành các thừa số nguyên tố. Ví dụ: N = 1260 = 2 . 2 . 3 . 3 . 5 . 7 Hướng dẫn: ➢ Viết hàm nhập số N. Lưu ý, hàm nhập cần truyền tham số N theo dạng tham biến để lưu lại giá trị đã nhập vào. Trang 13 ➢ Viết hàm phân tích số N ra các thừa số nguyên tố và in các thừa số đó ra màn hình với ý tưởng thuật toán: Chia N cho số nguyên tố u (nhỏ nhất là 2). Trong khi N còn chia hết cho u thì tiến hành phân tích N với u là thừa số. Giảm N đi u lần. Nếu N không chia hết cho u, thi tăng u lên 1. Quá trình lặp lại với u từng bước tăng lên 1 nếu N không chia hết cho u. N từng bước giảm xuống u lần nếu N chia hết cho u. Quá trình lặp lại đến một mức u tăng lên và N giảm xuống để N = u, khi đó giá trị mới của N sẽ là 1. Chương trình mẫu Program Phan_Tich_Thua_So; Uses crt; Var N : integer; { 1. Thu tuc nhap so N. } Procedure NhapSoN( var NN : Integer ); Begin NN := 0; {Gan khoi dau bang 0 de vao vong lap, vong lap dung khi nhap khac 0} While ( N = 0 ) do Begin Write( 'Nhap N=' ); Readln(NN ); End; End; { 2. Thu tuc phan tich N ra thanh cac thua so nguyen to } Procedure PhantichSoN ( Var N1 : Integer ); Var u,dem:Integer; Begin If ( N1 > 1 ) Then Begin u := 2; dem := 0; While ( N1 > 1 ) do If ( N1 mod u = 0 ) Then Trang 14 Begin dem:=dem+1; Writeln( u); N1 := N1 div u; End Else u:=u+1; End Else Writeln(' Khong the phan tich duoc' ); End; { 3. Than chuong trinh chinh } BEGIN Clrscr; Writeln('Phan tich so N thanh tich cua cac so nguyen to :' ); NhapSoN( N ); PhantichSoN( N ); Writeln ('Nhan Enter de ket thuc ...' ); Readln; END. J. Bài tập áp dụng Bài tập 1: Viết chương trình giải phương trình bậc hai với yêu cầu sử dụng các chương trình con để giải quyết các trường hợp xãy ra của delta. Mã chương trình: Program Giai_PT_bac_hai; uses crt; var a,b,c,delta:real; Procedure delta_duong; begin write('Phuong trinh co hai nghiem x1=',(-b+sqrt(delta))/(2*a),'x2=',(b+sqrt(delta))/(2*a)); Trang 15 end; Procedure delta_khong; begin write('Phuong trinh co nghiem kep x=',-b/(2*a):3:1); end; Procedure delta_am; begin writeln('Phuong trinh vo nghiem'); end; {Chuong trinh chinh} Begin clrscr; write('Nhap a: ');readln(a); write('Nhap b: ');readln(b); write('Nhap c: ');readln(c); delta:=b*b-4*a*c; if delta>0 then delta_duong else if delta = 0 then delta_khong else delta_am; readln end. Nhận xét: Chương trình con cho phép chia nhỏ công việc nhằm đơn giản hoá. Ngoài ra một công việc nào đó lặp lại nhiều lần trong chương trình nên dùng CTC vì khi đó mã chương trình sẽ gọn, dễ theo dõi, gỡ rối hơn. Bài tập 2: Viết chương trình cho phép nhập hai số vào hai biến, thực hiện đổi giá trị của hai biến cho nhau. Yêu cầu dùng chương trình con để thực hiện chức năng đổi giá trị. Mã chương trình: Program CTC_1; uses crt; var a,b: real; {----CTC doi gia tri----} Procedure swap(var x,y:real); var tam:real; begin Trang 16
- Xem thêm -