SỞ GIÁO DỤC VÀ ĐÀO TẠO HÀ NỘI TRƯỜNG TRUNG HỌC PHỔ THễNG QUỐC OAI ĐỀ TÀI SÁNG KIẾN KINH NGHIỆM Mễ PHỎNG THUẬT TOÁN Giỏo viờn thực hiện: NGUYỄN THỊ HẢI Tổ chuyờn mụn : Toỏn – Tin Chuy
Trang 1SỞ GIÁO DỤC VÀ ĐÀO TẠO HÀ NỘI TRƯỜNG TRUNG HỌC PHỔ THễNG QUỐC OAI
ĐỀ TÀI SÁNG KIẾN KINH NGHIỆM
Mễ PHỎNG THUẬT TOÁN
Giỏo viờn thực hiện: NGUYỄN THỊ HẢI
Tổ chuyờn mụn : Toỏn – Tin
Chuyờn mụn dạy : Tin Học Trường THPT Quốc Oai
Năm học: 2010- 2011
Nhận xét của hội đồng khoa học giáo dục
Cấp cơ sở :
Trang 2
CÊp huyÖn :
LỜI NÓI ĐẦU
Tôi xin chân thành cảm ơn trường THPT Quốc Oai
và các bạn đồng nghiệp đã tạo điều kiện về thời gian và
tài liệu cần thiết giúp tôi hoàn thành đề tài với đúng
thời gian quy định
Trang 3Tôi xin chân thành cảm ơn những người thân trong gia đình, bạn bè và những người đã luôn ủng hộ và góp
ý để nội dung đề tài được đầy đủ hơn
Xin chân thành cảm ơn tất cả những ai đã và đang quan tâm đến đề tài để đề tài có thể mang lại một cẩm
nang hữu ích cho người yêu thích môn Tin học và
ngành Công Nghệ Thông Tin nói chung
Đề tài này do phạm vi nghiên cứu còn hạn hẹp và không tránh khỏi những thiếu xót Vì vậy tôi rất mong
nhận được sự quan tâm góp ý của các cấp lãnh đạo và
các đồng nghiệp để đề tài được hoàn thiện và sử dụng
rộng rãi hơn
Xin chân thành cảm ơn tất cả
Người thực hiện
Hai
Nguyễn Thị Hải
MỤC LỤC
I SƠ YẾU LÝ LỊCH: 6
II NỘI DUNG ĐỀ TÀI: 7
1 Lý do chọn đề tài: 7
2 Phạm vi của đề tài: 9
3 Thời gian thực hiện đề tài: 10
Trang 4III QUÁ TRÌNH THỰC HIỆN ĐỀ TÀI: 10
1 Tình trạng thực tế khi chưa thực hiện đề tài: 10
2 Khảo sát thực tế: 11
3 Nội dung và biện pháp thực hiện đề tài: 13
3.1 Bài toán sử dụng cấu trúc điều kiện: 14
a Bài toán: Tìm UCLN của 2 số nguyên M và N 14
b Phân tích bài toán: 14
c Nhận xét: 17
d Bài tập củng cố: 17
3.2 Bài toán kiểm tra một số nguyên dương là số nguyên tố: 18
a Bài toán: 18
b Phân tích bài toán: 18
c Nhận xét: 21
d Bài tập củng cố: 21
3.3 Bài toán sắp xếp trong mảng: 21
a Bài toán: 21
b Phân tích bài toán: 22
c Nhận xét: 25
d Bài tập củng cố: 25
3.4 Bài toán tìm kiếm trong mảng: 26
a Bài toán: 26
Trang 5b Phân tích bài toán: 26
c Nhận xét: 32
d Bài tập củng cố: 33
VI KẾT QUẢ THU ĐƯỢC: 33
V KIẾN NGHỊ, ĐỀ NGHỊ SAU KHI THỰC HIỆN ĐỀ TÀI: 35
VI TÀI LIỆU THAM KHẢO: 36
Họ và tên: NGUYỄN THỊ HẢI.
Ngày sinh: 13/ 05/ 1985
Năm vào ngành: 2010
Chức vụ: Giáo viên
Đơn vị công tác: Trường THPT Quốc Oai
Trình độ chuyên môn: Đại học
Hệ đào tạo: Chính quy
Trang 6 Bộ môn giảng dạy: Tin học.
Ngoại ngữ: B
Tên đề tài: MÔ PHỎNG THUẬT TOÁN
1 Lý do chọn đề tài:
Trong những năm gần đây nền khoa học kỹ thuật tiên tiếntrên thế giới ngày càng phát triển mạnh mẽ Đặc biệt là trongngành lĩnh vực Công nghệ thông tin, sự phát triển của nó đã ảnh
Trang 7hưởng vô cùng lớn đến sự phát triển của một đất nước, ảnh hưởngkhông nhỏ đến sự tri thức hoá của con người trong xã hội đó Bởi
vì sự phổ dụng hoá tin học trong mọi lĩnh vực trong sản xuất lẫntrong sinh hoạt hàng ngày đã trở nên phổ biến Sự phát triển đóđòi hỏi con người phải có đầy đủ khả năng về tri thức để làm chủđất nước, làm chủ chính mình, nhằm đưa đất nước đi lên theohướng công nghiệp hoá, hiện đại hoá đất nước, hoà cùng nhịp pháttriển mạnh mẽ của thế giới
Cùng hoà nhịp với các lĩnh vực khác, nền giáo dục cũngđang từng bước đổi mới cả về phương thức, nội dung, hình thức
và phương tiện dạy học nhằm đáp ứng nhu cầu cần thiết của xãhội về trình độ nhân lực, phát triển mức tối đa tư duy của conngười Do đó trong nền giáo dục hiện nay cần áp dụng tin họcrộng rãi cả trong việc dạy và học, giúp cho học sinh chiếm lĩnhđược tri thức, tư duy sáng tạo và năng lực giải quyết các vấn đề đểphù hợp với nhu cầu và hoàn cảnh mới Và người có khả nănggiúp cho nền giáo dục tiếp cận nhiều với Công nghệ thông tin(CNTT) chính là những người truyền đạt kiến thức cho người học,không ai khác là những người thầy, người cô đang giảng dạy trênghế nhà trường
Hiện nay tôi đang là một giáo viên giảng dạy trong mộttrường phổ thông, tôi cũng đã trải qua nhiều năm ngồi trên ghếnhà trường và tôi rút ra được một điều rằng học mà chỉ có lýthuyết, có ghi chép không, không có thực hành đi kèm, hay không
có thực tế mô phỏng thì thật sự việc học trở nên rất khó khăn cho
Trang 8cả người truyền đạt và người tiếp nhận kiến thức Không nhữngthế nó còn làm hạn chế tư duy sáng tạo của người học do không cóthực tế mô phỏng nên họ chỉ học mang tính tư duy trừu tượng.
Học sinh hiện nay càng có xu hướng học thự động nếukhông được tự thực hành hay tự đi tìm hiểu một nội dung nào đó.Điều đó khiến cho việc chỉ có lý thuyết mà không có thực hànhkèm theo, hay không có hình ảnh trực quan thì các em chỉ họcmang tính hình thức Ví dụ, khi học một bài về các hiện tượng tựnhiên như động đất, song thần, núi lửa, lũ lụt… thì học sinh sẽ biếtqua thông tin đại chúng, qua báo đài Nếu giáo viên đưa ra một vàihình ảnh minh họa được trình chiếu trên máy tính thì chắc chắntiết học đó sẽ sinh động và gây hứng thú cho học sinh rất nhiều.Vậy, với vai trò là một giáo viên dạy Tin học, tôi hiểu rất rõ tầmquan trọng của Tin học, của máy tính đối với nền giáo dục hiệnnay và với bộ môn tin học của tôi nói riêng Tin học, một kháiniệm không quá xa lạ với chúng ta hiện nay, nhưng nhiều ngườichỉ hiểu được ý nghĩa của nó là gắn liền với thông tin, với máytính Nhưng hiện nay, nó đã trở thành một môn học chính trêngiảng đường phổ thông, thì học sinh mới hiểu được phần nào được
ý nghĩa của nó, hiểu được những khía cạnh khác của bộ môn này
Đó là việc giải quyết các bài toán trên máy tính Một nội dungđược coi là khá khó đối với những ai mới và chưa thật sự hứng thúvới môn học Nó đòi hỏi học sinh phải có một khả năng tư duythuật toán khá tốt, biết vận dụng trong một ngôn ngữ lập trình nào
đó Và mục tiêu của tôi khi viết đề tài này là giúp các em có cái
Trang 9nhìn sâu hơn với môn học và tạo sự hứng thú, yêu thích môn họccủa các em.
Chính điều đó tôi thấy mình nên tìm hiểu mảng nội dung
mô phỏng thuật toán, nhằm đi xây dựng các hình ảnh mô phỏnggiúp cho người học có các giao diện hình ảnh thực tế khi học vềmột thuật toán nào đó hay nghiên cứu một bài toán cụ thể Nhưvậy việc đi kèm là hình ảnh mô phỏng sẽ làm cho sự dạy và họctrở nên sinh động hơn, giúp học sinh có thêm lý thú khi học, say
dễ dàng hơn Tôi xin trình bày đề tài
MÔ PHỎNG THUẬT TOÁN
2 Phạm vi của đề tài:
Là giáo viên giảng dạy trên trường phổ thông nên đối tượng màtôi nghiên cứu chính là những học sinh bắt đầu làm quen với kháiniệm thuật toán, giải bài toán trên máy tính và khái niệm ngôn ngữlập trình Nội dung đề tài cũng có thể được áp dụng đối với ngườibắt đầu làm quen với lập trình căn bản
Trang 103 Thời gian thực hiện đề tài:
Đề tài được thực hiện song song đồng thời với quá trình giảngdạy theo quy định và phân phối do Bộ GD ban hành Ý tưởng của đềtài cũng đã được tôi tìm hiểu và cân nhắc nội dung từ lâu
III QUÁ TRÌNH THỰC HIỆN ĐỀ TÀI:
1 Tình trạng thực tế khi chưa thực hiện đề tài:
Tôi đã có 3 năm kinh nghiệm trong giảng dạy (dạy thêm, hợpđồng và tập sự Hiện tại tôi đang là giáo viên tập sự tại trường THPTQuốc Oai), đã tiếp xúc với nhiều học sinh khác nhau Và cách các
em học và hiểu bộ môn này cũng theo các cách khác nhau Khigiảng ngoài giờ, các em có điều kiện thực hành nhiều và có nhiều cơhội hỏi giáo viên những gì mà các em thắc mắc, tôi thấy các em tiếpthu bài khá tốt Khi giảng dạy trên một tập thể học sinh, tôi thấy mộtthực tế hiện lên đó là các em càng học, càng có xu hướng khônghứng thú và yêu thích môn học Một tiết học giảng dạy, tôi thấy họcsinh có cảm giác không hiểu bài, kêu khó và ngại suy nghĩ Điều này
sẽ làm cho các em có cảm giác sợ môn học và không hứng thú tronghọc tập Nguyên nhân một phần do các em không có điều kiện tronghọc tập, máy tính không đủ để 1 học sinh / 1 máy tính thực hànhngay nội dung kiến thức vừa học Một phần do các em phải học quánhiều môn học phụ bên cạnh những môn học mà các em cho làchính, phục vụ cho việc thi tốt nghiệp và đại học sau này, cho nênlàm cho học thấy không hứng thú môn học Và một nguyên nhânnữa tôi thấy là chủ yếu, đó là sự truyền đạt kiến thức cho các emchưa thật sự hiệu quả, chưa thật sự giúp học sinh hiểu bài nhanh
Trang 11Một nội dung không hiểu sẽ kéo theo nhiều nội dung khác khó hiểu.Đặc biệt là nội dung phần viết thuật toán và viết chương trình trênmáy tính
Ví dụ: Khi dạy một bài toán lập trình về cấu trúc điều kiện( lặphay rẽ nhánh) Giáo viên yêu cầu học sinh nêu các bước giải một bàitoán trên máy tính Đa phần các em chỉ nêu được phần xác định yêucầu bài toán Phần viết thuật toán hay lập trình trên máy tính thì họcsinh sẽ thấy khó hiểu và khó trình bày Vì vậy giáo viên nên hướngdẫn kỹ hơn cho học sinh về phần nội dung trình bày thuật toán, môphỏng thông qua một ví dụ cụ thể và sau đó là chương trình minhhọa Hiện tại tôi đang giảng dạy khối 10 và khối 11 Khối 10, các emđược tìm hiểu sâu về cách xây dựng các thuật toán cho một bài toántrên máy tính Khối 11 là nội dung kiến thức về lập trình và cách giảimột bài toán trên một ngôn ngữ lập trình cụ thể Ví dụ, ngôn ngữPascal các em đang học Vì vậy tôi nghĩ các em cũng đã hình thànhcho mình một khái niệm chung về thuật toán và hiểu thế nào là lậptrình Thực tế, khi học sinh lớp 10 học về thuật toán, giáo viên nênhướng dẫn cách xây dựng thuật toán cho học sinh hiểu, sau đó minhhọa thuật toán đó trên một ví dụ cụ thể để học sinh nhanh hiểu vànhớ thuật toán hơn Còn khối 11, các em đã có kiến thức về xâydựng thuật toán, giáo viên nên hướng dẫn cho các em biết cách vậndụng thuật toán trên ngôn ngữ lập trình cụ thể
Vậy thực tế cho thấy, học sinh thì ngày càng không hiểu và khônghứng thú với môn học Gây cảm giác nhàm chán và sợ môn học.Còn giáo viên, khi thấy học sinh không chú ý nhiều vào bài, nội
Trang 12dung kiên thức càng khó truyền đạt khi mà học sinh không nắmđược nội dung chính bài cũ Vì vậy tạo cảm giác ức chế dạy chogiáo viên Kết quả thu được là không cao.
2 Khảo sát thực tế:
Để chứng minh cho tình trạng thực tế trên, tôi xin đưa ra một ví
dụ cụ thể để nói lên hiện trạng thực tế hiện nay của học sinh phổthông học bộ môn tin học Để thấy được tình trạng thực tế đang diễn
ra ở đa số học sinh tiếp cận với bộ môn tin học phổ thông
Giáo viên đưa ra một đề bài kiểm tra 1 tiết cho học sinh khối 10
Chấm bài, tôi thu được kết quả sau:
Trang 13a Sắp xếp dãy số trên tăng dần Minh họa thông qua một bộ giá trị
cụ thể và cho biết kết quả cuối cùng
b Tính tổng số phần tử là số nguyên tố
Nhận xét: Dạng bài toán này có sử dụng một số kiến thức cũ liên quan đến thuật toán sắp xếp dãy tăng dần và kiểm tra một số là số nguyên tố Chính vì vậy học sinh sẽ thấy khó khăn trong khi áp dụng thuật toán vào lập trình Thực tế, sau khi chấm một lớp với nội dung này, các em cũng thu được kết quả không cao như sau:
Trang 142 0 0
Nguyên nhân chính ở đây là do một phần ở ý thức học của họcsinh, một phần do khả năng tư duy thuật toán của các em chưa tốt nênlàm các em thấy môn học khó hiểu, một phần do sự truyền đạt nộidung bài học chưa thật sự hiệu quả của người dạy Nên kiểm tra chấtlượng, không thu được kết quả tốt
3 Nội dung và biện pháp thực hiện đề tài:
Để giải quyết một số thiếu sót còn tồn tại trong quá trình truyền đạtbài học, giúp học sinh có hứng thú và ý thức học môn học cao hơn,tạo khả năng tư duy logic, vận dung thuật toán trong lập trình
Sau đây tôi xin trình bày một số dạng bài thường gặp trong giảng dạytin học phổ thông bao gồm:
- Bài toán sử dụng cấu trúc điều kiện
- Bài toán kiểm tra một số nguyên là số nguyên tố
- Bài toán sắp xếp trong mảng
- Bài toán tìm kiếm trong mảng
3.1 Bài toán sử dụng cấu trúc điều kiện:
a Bài toán:
Tìm UCLN của 2 số nguyên M và N
a Phân tích bài toán:
- Xác định yêu cầu bài toán:
Input: M, N nguyên
Trang 15 Output: UCLN của M và N.
- Thuật toán:
Dạng liệt kê:
Thuật toán Euclide tìm UCLN (M, N)+ Nếu M = N thì UCLN = M ( hoặc N)
+ Nếu M >N thì UNLN (M, N) = UNLN (M – N, N)
+ Nếu M < N thì UNLN (M, N) = UNLN (M, N - M)
Dạng sơ đồ khối:
- Mô phỏng thuật toán:
Mô phỏng thuật toán với bộ giá trị M = 9, N = 6 Ta thu đượckết quả sau
Trang 17- Chương trình:
b Nhận xét:
Cấu trúc điều kiện là cấu trúc có sử dụng các điều kiện đểchạy vòng lặp Nếu thỏa mãn điều kiện thì vòng lặp thực hiện,nếu không thì thoát khỏi vòng lặp và đưa ra kết quả Các dạngcấu trúc điều kiện thường gặp là: If – then, For – to – do, While
Trang 18– do, Repeat – until, Case – of ,… Điều kiện ở đây là các biểuthức logic
Bài toán trên có sử dụng cấu trúc điều kiện là cấu trúcWhile - do Đây là dạng bài thường gặp trong lập trình
b Phân tích bài toán:
- Xác định yêu cầu bài toán:
+ Input: Nhập số nguyên dương N
+ Output: N là số nguyên tố hay không là số nguyên tố
- Thuật toán:
Trang 19- Mô phỏng thuật toán:
Dựa vào thuật toán, ta kiểm tra xem số 15 có là số nguyên tốkhông?
Sơ đồ khối
Trang 20Số 15 nhập vào:
Thuật toán chạy như sau:
chia hết cho 2 nên
tăng i = 3 quay lại
bước 5
Trang 22c Nhận xét:
Số nguyên tố là số chia hết cho 1 và chính nó
Bài toán gặp nhiều ở những dạng đề kiểm tra số nguyên tố hayđếm xem trong một dãy số có bao nhiêu số nguyên tố
Dạng bài toán này đòi hỏi học sinh phải biết sử dụng các cấutrúc điều kiện và biến kiểm tra để kiểm tra xem phần tử đó có lànguyên tố không
Khi gặp bài toán này, giáo viên nên giải thích rõ cho học sinh tạisao phải chia làm 3 trường hợp là nhỏ hơn 1; lớn hơn 1 nhỏ hơn
4 và lớn hơn hoặc bằng 4 Giải thích cho học sinh tiếp tại saokiểm tra N có chia hết cho phần nguyên căn bậc 2 của N không?Bài toán này có nội dung ý tưởng thuật toán không quá khónhưng khi lập trình, nhiều học sinh sẽ khó đưa ra được thôngbáo là nguyên tố hay không nếu học sinh không hiểu và khôngbiết sử dụng một biến kiểm tra kiểu Boolean Vậy khi đưa ra
Trang 23chương trình, giáo viên nên nói rõ về việc sử dụng biến kiểm tratrong chương trình là để làm gì
d Bài tập củng cố:
Kiểm tra số 78 và 113 có là số nguyên tố không?
3.3 Bài toán sắp xếp trong mảng:
a Bài toán:
Cho dãy số nguyên a1, a2, …, an gồm N phần tử kiểu nguyên.Hãy sắp xếp dãy tăng dần
b Phân tích bài toán:
- Xác định yêu cầu bài toán:
+ Input: Dãy số nguyên a1, a2, …, an
+ Output: Dãy đã được sắp xếp tăng dần
- Thuật toán:
Trang 24- Mô phỏng thuật toán:
Với input là bộ giá trị: 100, 19, 1, 98, 56, 43, 65, 72, 24, 35.
Trang 27Bài toán đặt ra là sắp xếp dãy theo thứ tự tăng dần của giátrị trong mảng Có rất nhiều thuật toán sắp xếp được đưa ra nhưsắp xếp chọn, sắp xếp tuần tự, sắp xếp chèn… Nhưng ở đây tôiđưa ra thuật toán sắp xếp đổi chỗ hay gọi là sắp xếp nổibọt( bublesort) Tức là: Các phần tử được duyệt từng cặp phần
tử một Cứ 2 phần tử gần nhau, nếu phần tử trước lớn hơn phần
tử sau thì ta sẽ đổi chỗ 2 phần tử đó cho nhau( vì ta đang sắp xếptăng dần) Quá trính này được lặp đi lặp lại đến khi dãy đượcsắp xếp và cặp so sánh cuối cùng là cặp giá trị 2 phần tử đầu
d Bài tập củng cố:
Cho dãy số sau: 89, 67, -8, 37, -99
Hãy mô phỏng giải thuật sắp xếp dãy số sau giảm dần
3.4 Bài toán tìm kiếm trong mảng:
a Bài toán:
Cho dãy số gồm N phần tử kiểu nguyên Tìm kiếm phần tử K cótrong dãy không? Nếu có đưa ra vị trí và kết thúc chương trình
b Phân tích bài toán:
- Xác định yêu cầu bài toán:
+ Input: Dãy số gồm N phần tử kiểu nguyên và số nguyênK(khóa)
+ Output: Thông báo có xuất hiện k và đưa ra vị trí hoặckhông tìm thấy k trong dãy
- Thuật toán:
Đề bài đưa ra có thể xảy ra 2 trường hợp: