Tuy nhiên mọi thứ điều có điểm khởi đầu của nó, với học sinh việc học Pascal là khởi đầu cho việc tiếpcận ngôn ngữ lập trình bậc cao, qua đó giúp các em hình dung được sự ra đời,cấu tạo,
Trang 1SỞ GIÁO DỤC VÀ ĐÀO TẠO HÀ NỘI
Trang 2- Họ và tên: Nguyễn Thị Tuân.
- Ngày tháng năm sinh: 11 – 05 – 1982
- Năm vào ngành: 2009
- Chức vụ: Giáo Viên
- Đơn vị công tác: Trường THPT Ba Vì
- Trình độ chuyên môn: Kỹ sư tin học
- Bộ môn giảng dạy: Tin Học
- Ngoại ngữ: Tiếng Anh
- Trình độ chính trị: Sơ cấp
Trang 3- Mục đích là nhằm áp dụng phương pháp hiện đại để bồi dưỡng cho họcsinh năng lực ham muốn học hỏi, tự giải quyết vấn đề, rèn luyện và phát triểnnăng lực tự học, nghiên cứu và làm việc một cách tự chủ Đồng thời để thíchứng với sự phát triển tư duy của học sinh trong xã hội mới, tiếp cận với các côngnghệ tiên tiến trong xã hội và trên thế giới Bên cạnh đó, trong các kĩ thuật dạyhọc mới, vai trò của người thầy có sự thay đổi là: “hướng dẫn học sinh biết tựmình tìm ra hướng giải quyết những vấn đề nảy sinh trong quá trình học tập, biếtcách làm việc độc lập, làm việc tập thể Thầy là người định hướng, là người cốvấn giúp học sinh tự đánh giá, cũng như giúp học sinh luôn đi đúng con đườngtìm hiểu, lĩnh hội kiến thức…”.
Trong thời đại công nghệ thông tin bùng nổ ngày nay, việc lập được cácchương trình tự hoạt động cho máy tính là cần thiết Và để làm được việc đó cần
có một quá trình nghiên cứu, học tập về ngôn ngữ lập trình lâu dài, qua đó nhàlập trình có thể chọn một ngôn ngữ lập trình thích hợp Tuy nhiên mọi thứ điều
có điểm khởi đầu của nó, với học sinh việc học Pascal là khởi đầu cho việc tiếpcận ngôn ngữ lập trình bậc cao, qua đó giúp các em hình dung được sự ra đời,cấu tạo, hoạt động cũng như ích lợi của các chương trình hoạt động trong máytính, giúp các em có thêm một định hướng, niềm đam mê về tin học, về nghềnghiệp lựa chọn sau này
Trang 4Khi thực hiện giảng dạy môn Tin Học lớp 11 tại Trường THPT Ba Vì, tôithấy rằng, việc học sinh lập trình giải các bài toán trên máy tính thường gặp rấtnhiều khó khăn và thường không có hệ thống phương pháp cụ thể để thực hiệnnhư: không xác định được bài toán, lựa chọn thuật toán không phù hợp với bàitoán, khi viết chương trình thì không khai báo được biến hoặc khai báo đượcbiến nhưng còn thiếu…
Xuất phát từ cơ sở trên, tôi đã chọn đề tài “Một số cải tiến về phương phápgiải bài toán trên máy tính”, nhằm giúp các em học sinh khối 11 có thể thực hiệngiải các bài toán trên máy tính để hạn chế sai sót cũng như tăng tính hiệu quả,tính đúng đắn của bài toán Quá đó hình thành tích cách, thói quen và cách tưduy hệ thống khi lập trình trên máy tính cho các em
3 Cơ sở khoa học của đề tài:
3.1 Cơ sở lí luận:
Các bước giải bài toán trên máy tính là một khâu rất quan trọng có thể đượcsử dụng hầu hết trong các tiết học đối với học sinh khối 11 Nó được áp dụngtrong các bài tập và giúp cho học sinh có cơ hội thực hành nhiều hơn
Để giải dược một bài toán trên máy tính đối với ngôn ngữ lập trình là bàitoán khó với nhiều học sinh, kể cả học sinh khá, giỏi Với mong muốn giúp các
em học sinh hiểu được những bài cơ bản và thấy yêu thích ngôn ngữ lập trìnhhơn, bản thân người giáo viên luôn cố gắng tìm tòi những phương pháp dạy họcphù hợp với nội dung kiến thức, với từng đối tượng học sinh, đặc biệt là nhữngđối tượng học sinh trung bình, yếu, kém Đồng thời giáo dục tư tưởng, ý thức,thái độ và lòng ham muốn học ngôn ngữ lập trình nói riêng và môn tin học nóichung của các em
3.2 Cơ sở thực tiễn
Khi làm các bài toán về lập trình học sinh phải nắm vững được nhữngkiến thức cơ bản về các bước giải bài toán trên máy tính Tuy nhiên trong quátrình giảng dạy và trao đổi với các đồng nghiệp khác trong tổ chuyên môn khidạy phần kiến thức này, tôi nhận thấy rất nhiều các học sinh ở những lớp khác
Trang 5nhau thường mắc những sai lầm giống nhau khi giải các bài toán liên quan tớilập trình thậm chí có cả học sinh khá, giỏi
Những lỗi mà học sinh thường gặp phải như :
- Không xác định được bài toán: ví dụ như không xác định được bài toáncho cái gì, điều kiện là gì, không xác định được bài toán cần những biến nào, cóbao nhiêu biến phát sinh khi viết chương trình
- Lựa chon thuật toán không đúng hoặc trong quá trình viết thường diễnđạt thuật toán chưa đầy đủ
- Những ví dụ mẫu trong sách giáo khoa còn rất ít để hỗ trợ cho phần bàitập về nhà cho học sinh
- Thời lượng các tiết học trên lớp còn hạn chế
3.3 Mục đích của sáng kiến kinh nghiệm.
Với mong muốn giúp học sinh nhận ra và khắc phục những sai lầm haymắc phải trong quá trình lập trình, giúp các em nắm vững, nắm chắc những kiếnthức cơ bản về lập trình, có thể tự mình giải quyết những bài tập cơ bản trongsách giáo khoa và sách bài tập hoặc những bài tập nâng cao hơn một chút chođối tượng học sinh trung bình, yếu là chính để các em thấy say mê hơn với ngônngữ lập trình tôi mạnh dạn viết sáng kiến kinh nghiệm : ”MỘT SỐ CẢI TIẾN VỀ
PHƯƠNG PHÁP GIẢI BÀI TOÁN TRÊN MÁY TÍNH” áp dụng cho khối 11 ởtrường THPT Ba Vì trong hai năm học 2010 - 2011 và 2011 - 2012 với đốitượng chủ yếu là các học sinh khá, trung bình, yếu, hy vọng phần nào các em sẽlàm được những bài toán cơ bản, hiểu tường tận các bước trong quá trình giảitoán mà không mắc phải những sai lầm nêu ở trên
3.4 Đối tượng nghiên cứu:
Học sinh khối 11 của trường THPT Ba Vì trong hai năm liên tiếp
2010 - 2011 11A5
11A6
4445
2011 - 2012 11A3
11A4
4646
4 Phương pháp nghiên cứu:
Trang 6- Đọc kỹ tài liệu sách giáo khoa, sách giáo viên Tin Học 11 và một số tàiliệu tham khảo khác.
- Dạy học và trắc nghiệm trên các đối tượng: Giỏi - Khá - Trung bình,yếu, kém trong đó nội dung dạy học, phương pháp thực hiện và kết quả thu đượcđánh giá chủ yếu đối với đối tượng học sinh khá, trung bình, yếu, kém
- Đưa ra bàn luận trước tổ, nhóm chuyên môn để tham khảo ý kiến vàcùng thực hiện
- Tham khảo ý kiến các trường bạn, ý kiến đóng góp của các thầy cô dạylâu năm đã có nhiều kinh nghiệm
- Dự giờ, kiểm tra, đánh giá chất lượng của học sinh
- Dạy thực nghiệm trên 2 lớp 11 của trường là: 11A3, 11A4
5 Phạm vi nghiên cứu và thời gian nghiên cứu:
- Nghiên cứu về chương trình Tin học 11
- Thời gian làm trắc nghiệm trong thời gian hai năm
- Kinh nghiệm của bản thân trong quá trình giảng dạy
Trang 7
II 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.
Đa số học sinh trong các lớp này khi thực hiện việc lập trình giải các bàitoán trên máy tính đều thực hiện không đúng phương pháp, không có trình tựlôgíc hệ thống của chương trình Đây lại là điều rất cần thiết trong lập trình điều
đó dẫn tới các em hiểu không đúng về bài toán, tư duy sai về thuật toán như:không xác định Input và Output bài toán, sử dụng thuật toán không phù hợp vớibài toán…, cũng như việc các em sử dụng ngôn ngữ lập trình chưa phù hợp đểdiễn đạt thuật toán Điều đó thường dẫn tới nhiều khả năng chương trình bị lỗi(error), hoặc bài toán bị bế tắc về thuật toán mà không có hướng giải quyết, khi
đó các em thường lại phải làm lại bài toán từ đầu dẫn đến việc mất thời gian,một số em thì “bất lực” không thực hiện được bài toán dẫn tới tâm lí e ngại,nhàm chán đối với học sinh
2 Điều tra cơ bản ban đầu.
- Phân loại về học lực:
NĂM
HỌC LỚP
SĨ SỐ
2011
- 2012
11A3 46 2 4 9 19 32 69 4 8 0 011A4 46 3 7 8 17 30 65 5 11 0 0
Đây là 2 lớp của khối 11 mà đối tượng học sinh chủ yếu là khá, trungbình, yếu, học sinh giỏi rất ít Vì thế yêu cầu kiến thức đưa ra cũng phải phù hợpvới nhận thức và khả năng của các em, không gây sự chán nản, học chống đối đểcác em có thể nắm chắc kiến thức cơ bản trong sách giáo khoa, lập trình thànhthạo một số dạng về ngôn ngữ lập trình Giúp học sinh ngày càng say mê, hứngthú với lập trình hơn
- Chuẩn bị sách giáo khoa và sách bài tập: tất cả học sinh có đủ
- Trong quá trình thực hiện khảo sát rất nhiều học sinh khi thực hiện lậptrình giải bài toán trên máy tính tỷ lệ thành công lần chạy thử đầu tiên rất thấp
Trang 8Khi đó các em phải sửa chữa lại chương trình rất là nhiều lần đặc biệt là về thuậttoán thì chương trình thực hiện được, có trường hợp do sử dụng sai thuật toánnên bài toán bế tắc không thực hiện được thậm chí dẫn tới hiện tượng máy tính
bị “treo” Số liệu trên cũng đã phản ánh phần nào tình trạng chung đó
3 Nội dung của đề tài.
Nội dung chủ yếu của đề tài là giới thiệu cho học sinh một cải tiến mới vềphương pháp giải bài toán trên máy tính Phương pháp này thể hiện tính khoahọc hệ thống, tính lôgíc chặt chẽ khi giải các bài toán trên máy tính, giúp họcsinh có tư duy hệ thống, sáng tạo hơn và kết quả sẽ tốt hơn khi lập trình thựchiện giải các bài toán trên máy tính
3.1 Xác định Input và Output của bài toán.
Mỗi bài toán được đặc tả bởi hai thành phần: Input và Output, việc xácđịnh bài toán chính là xác định rõ hai thành phần này và mỗi quan hệ giữachúng Các thông tin đó cần được nghiên cứu cẩn thận để có thể lựa chọn thuậttoán, cách thể hiện các đại lượng đã cho, các đại lượng phát sinh trong quá trìnhgiải bài toán và ngôn ngữ lập trình thích hợp
Việc định hướng cho học sinh xác định được Input và Output của bài toán
là bước hết sức quan trọng Vì thông qua việc xác định hai thành phần này giáoviên cũng nên yêu cầu học sinh xác định luôn số lượng biến và kiểu dữ liệu cầnsử dụng trong bài toán khi lập trình, cũng như các biến cần sử dụng phát sinhtrong quá trình thực hiện bài toán, đây là vấn đề các em hầu như chưa bao giờthực hiện nên gặp rất nhiều khó khăn khi khai báo biến cho chương trình, có thểhiểu đơn giản rằng
Input chính là dữ liệu đầu vào của bài toán (giả thiết)
Output là dữ liệu đầu ra của bài toán (kết luận)
Ví dụ 1:
Lập chương trình tìm ước chung lớn nhất của hai số nguyên dương M, N.Qua bài toán này có thể xác định được ngay dữ liệu đầu vào của bài toán đãcho là M, N nguyên dương, và dữ liệu đầu ra là ước chung lớn nhất (ƯCLN) củahai số đã cho
Trang 9- Input: M, N nguyên dương.
- Input: Dãy A gồm N số nguyên a1, a2,…,an
- Output: Tổng các số dương trong dãy
Sau khi xác định được hai thành phần Input và Output ta phải xác định luôn
số lượng biến và kiểu dữ liệu của biến cần sử dụng trong chương trình dựa vàoInput và Output đã xác định được
Với Input và Output đã xác định có thể nhận ra ngay cần phải khai báo biến
N dùng để xác định số lượng số hạng của dãy và một biến mảng để chứa các sốhạng trong dãy, hai biến này phải thuộc kiểu dữ liệu số nguyên
Nhưng với hai biến này thì chưa thể giải bài toán được trong bài này cầnphát sinh thêm biến thì mới giải được, đây là đặc điểm khác với bài toán trên
Để tính được tổng các số dương trong dãy số ta phải sử dụng vòng lặp do
đó phải sử dụng biến đếm, thực hiện tính tổng phải có biến để chứa tổng Cácbiến này thuộc kiểu số nguyên
Tóm lại bài toán tính tổng các số dương trong dãy số cần có các biến sau
Biến N: xác định số lượng số hạng
Biến mảng: chứa số hạng
Biến đếm: dùng cho vòng lặp (biến phát sinh)
Biến tổng: dùng để chứa tổng các số dương trong dãy số
Như vậy xác định bài toán chính là khâu giúp học sinh biết được bài toáncho cái gì? Và cần tìn cái gì? để từ đó khai báo các biến trong chương trình
3.2 Thiết kế thuật toán.
Có thể nói khi lập trình giải một bài toán trên máy tính thì đây là bước quantrọng nhất Mỗi thuật toán chỉ giải một bài toán nào đó, nhưng có thể có nhiều
Trang 10thuật toán khác nhau cùng giải một bài toán vì vậy cần thiết kế hoặc chọn mộtthuật toán tối ưu để giải bài toán.
Khi thực hiện thiết kế hoặc lựa chọn thuật toán người lập trình thường quantâm đến các tài nguyên như: thời gian thực hiện chương trình (chương trình thựchiện nhanh hay chậm), số lượng ô nhớ (chương trình chiếm dụng bao nhiêu bộnhớ trên máy tính)…
Trong các loại tài nguyên thì thường người ta quan tâm nhiều nhất đến tàinguyên thời gian vì đó là dạng tài nguyên không tái tạo được
Khi thiết kế thuật toán để giải một bài toán cụ thể cần căn cứ vào lượng tàinguyên mà thuật toán đòi hỏi và lượng tài nguyên thực tế cho phép
Để mô tả được thuật toán trước tiên học sinh phải đưa ra được ý tưởng củathuật toán, rồi mới mô tả, thiết kế thuật toán theo ý tưởng đó Trong khi mô tảthuật toán cần chú ý về áp dụng số lượng biến cho chương trình
Như ví dụ trên: Tìm ước chung lớn nhất của hai số nguyên dương M, N
Để giải được bài toán này có nhiều thuật toán có thể thực hiện được, ở đâytôi sử dụng thuật toán tìm ƯCLN bằng phương pháp hiệu
* Ý tưởng thuật toán:
- Nếu M = N thì giá trị chung đó là ƯCLN của M và N;
- Nếu M >N thì ƯCLN(M, N) = ƯCLN(M-N, N);
- Nếu M > N thì ƯCLN(M, N) = ƯCLN(M, N-M);
* Thuật toán:
Sử dụng phương pháp liệt kê
Bước 1: Nhập M, NBước 2: Nếu M = N thì ƯCLN là M hoặc N, chuyển đến Bước 5;Bước 3: Nếu M > N thì M ← M - N ngược lại N ← N - M;
Bước 4: Quay lại Bước 2;
Bước 5: Đưa ra kết quả ƯCLN rồi kết thúc
* Nhận xét thuật toán:
Đây là thuật toán tìm ƯCLN của hai số nguyên dương bằng phương pháphiệu, thuật toán đơn giản và dễ hiểu và tối ưu Mục đích của thuật toán này là so
Trang 11sánh hai số với nhau sau đó lấy số lớn trừ số bé, quá trình này lặp đi lặp lạinhiều lần và thực hiện phép trừ cho đến khi nào hai số bằng nhau thì đó chính làƯCLN của bài toán lúc này M = N.
Nhược điểm của thuật toán này là nếu hai số M và N có sự chênh lệch lớnthì số lần lặp sẽ lớn Ngoài ra có thể tham khảo và yêu cầu học sinh trình bàythêm một số thuật toán khác rồi so sánh với thuật toán này để nhận biết thuậttoán tối ưu hơn
Tóm lại khâu lựa chon và thiết kế thuật toán là khâu rât quan trọng Nhưtrên đã nói một bài toán có thể có nhiều thuật toán để giải do đó phải biết lựachọn thuật toán tối ưu để áp dụng cho bài toán Thuật toán tối ưu là thuật toánphải đáp ứng được các tiêu chí như: thời gian chạy chương trình, chiếm dụng bộnhớ của chương trình, rõ ràng, dễ hiểu… thuật toán nào thời gian chạy chươngtrình nhanh nhất và chiếm dụng ít bộ nhớ trên máy tính nhất đồng thời đảm bảotính đúng đắn của bài toán, phù hợp với chương trình thì đó là thuật toán tối ưu.Thuật toán phải có tính khả dụng và có hướng phát triển với chương trình lớnhơn Nhưng thông thường học sinh không lựa chọn thuật toán mà biết thuật toánnào thì làm, không tìm xem bài toán này có còn thuật toán nào tối ưu để giải chophù hợp vì vậy học sinh thường có những kết quả không mong muốn mặc dùchương trình vẫn chạy
3.3 Viết chương trình.
Việc viết chương trình là tổng hợp giữa việc lựa chọn cách tổ chức dữ liệu
và sử dụng ngôn ngữ lập trình để diễn đạt đúng thuật toán
Khi viết chương trình ta nên chọn một ngôn ngữ lập trình hoặc một phầnmềm chuyên dụng với thuật toán Viết chương trình trong ngôn ngữ nào thì cầnphải tuân theo đúng qui định ngữ pháp của ngôn ngữ đó
Chương trình dịch chỉ có thể phát hiện và thống báo các lỗi cú pháp, còn lỗingữ nghĩa thì được phát hiện khi thực hiện chương trình
Khi viết chương trình cần chú ý về bố cục chương trình, trang trí trình bàychương trình phải gọn gàng tạo điều kiện thuận lợi cho quá trình sửa chữa vàphát triển chương trình sau này Một thao tác quan trọng khi viết chương trình
Trang 12đó là các em phải lưu chương trình, học sinh rất hay quên thao tác này nên dẫnđến mất chương trình không khôi phục được.
* Chương trình bài toán tìm UCLN của hai số nguyên dương M và N.
- Phân tích chương trình: Học sinh cần bám sát vào phần Input và Outputcủa bài toán cũng như thuật toán đã thiết kế để thực hiện Với chương trình cầnphải khai báo 2 biến đơn: M và N Biến M và N dùng để lưu trữ 2 số hạng đượcnhập vào từ bàn phím Hai biến đơn này đều thuộc kiểu dữ liệu số nguyên
- Về thuật toán: Mục đích của thuật toán là biến đổi M và N bằng hiệu của
số lớn trừ số bé, trừ cho đến khi nào M =N thì dừng, đây cũng chính là kết quảƯCLN của bài toán Như vậy thuật toán này có sử dụng cấu trúc lặp với số lầnchưa biết trước để mô tả hành động lặp M - N hoặc N - M đến khi nào M = N thìdừng Các câu lệnh trong vòng lặp thường được lặp lại nhiều lần, vì vậy để tănghiệu quả của chương trình thì những thao tác không cần lặp lại nên đưa ra ngoàivòng lặp
- Phương pháp thực hiện:
+ Mở chương trình ngôn ngữ lập trình Pascal
+ Lưu chương trình với tên UCLN