SKKN Một số kinh nghiệm trong bồi dưỡng học sinh giỏi môn Tin học lớp 11

SKKN Một số kinh nghiệm trong bồi dưỡng học sinh giỏi môn Tin học lớp 11

Bồi dưỡng học sinh giỏi (BDHSG) là công việc khó khăn, đòi hỏi nhiều công sức của giáo viên và học sinh. Đây là nhiệm vụ nặng nề nhưng cũng rất vinh dự cho giáo viên tham gia bồi dưỡng, việc phát triển bồi dưỡng học sinh giỏi góp phần đào tạo nhân tài cho đất nước được xem là nhiệm vụ cần thiết và quan trọng.

Gần 10 năm công tác tôi đã 4 lần được BGH nhà trường tín nhiệm phân công BDHSG môn tin học 11. Tuy nhiên, các tài liệu nghiên cứu và bàn sâu về BDHSG môn tin học còn ít, các đồng nghiệp trong nhà trường đều là những giáo viên trẻ, kinh nghiệm BDHSG chưa nhiều. Mặt khác môn tin học thường bị xem là môn phụ. Vì vậy, khi chọn đội tuyển học sinh giỏi còn gặp nhiều khó khăn (cả về chất lượng và số lượng học sinh tham gia), tài liệu ôn luyện đều do giáo viên tự mày mò, nghiên cứu.

Tôi luôn trăn trở: Làm thế nào để các em lĩnh hội tốt các kiến thức ôn luyện? Làm thế nào để kết quả đạt được tốt nhất? Làm thế nào để mang lại thành tích cho các em và mang lại vinh dự cho nhà trường? Vì vậy trong quá trình bồi dưỡng, tôi luôn cố gắng tìm hiểu nội dung cơ bản và nâng cao, tìm ra phương pháp tối ưu để cho công tác bồi dưỡng có hiệu quả nhất phù hợp với đầu vào của học sinh. Bằng tất cả nỗ lực của bản thân, qua tìm tòi, trao đổi và thảo luận với các đồng nghiệp trong và ngoài nhà trường, tôi xin mạnh dạn chia sẻvới các đồng nghiệp về đề tài mà tôi đã nghiên cứu trong thừi gian qua: “Một số kinh nghiệm trong bồi dưỡng học sinh giỏi môn tin học lớp 11". Mong muốn góp một phần nhỏ vào công tác bồi dưỡng học sinh giỏi của nhà trường, để đội ngũ học sinh giỏi của trường ngày càng đạt kết quả cao hơn. Mặt khác làm tài liệu để các đồng nghiệp có thể tham khảo, cùng nhau góp ý, chia sẻ, áp dụng để công tác BDHSG ngày càng có chất lượng tốt hơn.

 

docx 22 trang thuychi01 47938
Bạn đang xem 20 trang mẫu của tài liệu "SKKN Một số kinh nghiệm trong bồi dưỡng học sinh giỏi môn Tin học lớp 11", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
MỤC LỤC
PHẦN 1. MỞ ĐẦU
1. Lí do chọn đề tài
Bồi dưỡng học sinh giỏi (BDHSG) là công việc khó khăn, đòi hỏi nhiều công sức của giáo viên và học sinh. Đây là nhiệm vụ nặng nề nhưng cũng rất vinh dự cho giáo viên tham gia bồi dưỡng, việc phát triển bồi dưỡng học sinh giỏi góp phần đào tạo nhân tài cho đất nước được xem là nhiệm vụ cần thiết và quan trọng. 
Gần 10 năm công tác tôi đã 4 lần được BGH nhà trường tín nhiệm phân công BDHSG môn tin học 11. Tuy nhiên, các tài liệu nghiên cứu và bàn sâu về BDHSG môn tin học còn ít, các đồng nghiệp trong nhà trường đều là những giáo viên trẻ, kinh nghiệm BDHSG chưa nhiều. Mặt khác môn tin học thường bị xem là môn phụ. Vì vậy, khi chọn đội tuyển học sinh giỏi còn gặp nhiều khó khăn (cả về chất lượng và số lượng học sinh tham gia), tài liệu ôn luyện đều do giáo viên tự mày mò, nghiên cứu. 
Tôi luôn trăn trở: Làm thế nào để các em lĩnh hội tốt các kiến thức ôn luyện? Làm thế nào để kết quả đạt được tốt nhất? Làm thế nào để mang lại thành tích cho các em và mang lại vinh dự cho nhà trường? Vì vậy trong quá trình bồi dưỡng, tôi luôn cố gắng tìm hiểu nội dung cơ bản và nâng cao, tìm ra phương pháp tối ưu để cho công tác bồi dưỡng có hiệu quả nhất phù hợp với đầu vào của học sinh. Bằng tất cả nỗ lực của bản thân, qua tìm tòi, trao đổi và thảo luận với các đồng nghiệp trong và ngoài nhà trường, tôi xin mạnh dạn chia sẻvới các đồng nghiệp về đề tài mà tôi đã nghiên cứu trong thừi gian qua: “Một số kinh nghiệm trong bồi dưỡng học sinh giỏi môn tin học lớp 11". Mong muốn góp một phần nhỏ vào công tác bồi dưỡng học sinh giỏi của nhà trường, để đội ngũ học sinh giỏi của trường ngày càng đạt kết quả cao hơn. Mặt khác làm tài liệu để các đồng nghiệp có thể tham khảo, cùng nhau góp ý, chia sẻ, áp dụng để công tác BDHSG ngày càng có chất lượng tốt hơn.
2. Mục đích nghiên cứu
	Việc nghiên cứu đề tài này nhằm giúp cho các giáo viên có thêm tài liệu tham khảo, trao đổi kinh nghiệm trong việc BDHSG, góp phần nâng cao chất lượng đội tuyển môn Tin học.
3. Đối tượng nghiên cứu
- Các học sinh thuộc đội tuyển tin học trường THPT Cẩm Thủy 1 qua các năm học: 2010-2011; 2013-2014; 2016-2017; 2018-2019
- Chương trình tin học lớp 11.
4. Phương pháp nghiên cứu
- So sánh, đối chiếu.
- Phân tích, tổng hợp
PHẦN II. NỘI DUNG
I. CƠ SỞ LÝ LUẬN
1. Tầm quan trọng của việc bồi dưỡng học sinh giỏi môn tin học
Nghị quyết TW2 khóa VIII đã chỉ rõ: “Việc bồi dưỡng học sinh giỏi là nguồn nhân tài cho đất nước được các nhà trường THPT đặc biệt quan tâm và mọi giáo viên THPT đều có nhiệm vụ phát hiện và bồi dưỡng học sinh giỏi” 
Mục tiêu bồi dưỡng học sinh môn tin học 11 (lập trình Pascal) không phải là để tạo ra các nhà lập trình chuyên nghiệp, mà mục tiêu chính của công tác này là bồi dưỡng khả năng tư duy, sáng tạo và lập luận, phân tích, thiết kế của học sinh. Sự say mê sẽ giúp các em chịu khó tìm tài liệu để mở mang kiến thức. Và quan trọng hơn là nó giúp học sinh phát huy được trí tưởng tượng, tư duy trừu tượng và khả năng sáng tạo của môn học.
2. Tiêu chí lựa chọn các học sinh tham gia BDHSG môn tin học.
Các tiêu chí cần có là:
Có khả năng tư duy tốt (Ở mức khá trở lên)
Có sự yêu thích môn học.
Chuyên cần và tự giác trong học tập
II. THỰC TRẠNG CỦA VẤN ĐỀ
1. Ảnh hưởng từ tâm lý, quan niệm của học sinh và phụ huynh về môn tin học đến việc thành lập đội tuyển.
Tin học là môn học đặc trưng mang tính chất khám phá, hấp dẫn sinh động rất cần thiết trong thời đại hiện nay. Tuy nhiên, lâu nay trong quan niệm của không ít phụ huynh và học sinh thì môn tin học thường được coi là môn phụ, không thi tốt nghiệp, không thi đại học nên phụ huynh học sinh có phần lơ là, không có sự đầu tư nhiều cho môn học.
Thực tế đã có em rất có tố chất, muốn tham gia đội tuyển nhưng bố mẹ cấm không cho con mình tham dự, đã có phụ huynh điện thoại hoặc đến tận nhà giáo viên để xin cho các em được nghỉ học đội tuyển với lí do: bản thân các em không đủ sức khỏe để theo học (một lý do mà ai cũng hiểu nó chỉ là cái cớ để từ chối mà thôi). Thêm nữa, khi chọn đội tuyển lại gặp phải tình trạng: những học sinh có năng lực, tư duy tốt thì phụ huynh các em đã ưu tiên vào các đội tuyển Toán, Lý, Hóa. Sau khi đủ số lượng học sinh cho các môn trên thì mới đến lượt môn tin học. Do vậy, để thành lập đội tuyển tin học không hoàn toàn đơn giản. Khi đó tiêu chí yêu thích môn học và sự chuyên cần, tự giác của học sinh lại được giáo viên lấy làm tiêu chuẩn để chọn học sinh. Không chọn được trò giỏi sẽ khó dạy được học sinh đạt những kết quả cao trong kỳ thi.
2. Thuận lợi và khó khăn
a) Thuận lợi
Nhà trường: Tạo điều kiện về cơ sở vật chất, trang thiết bị đáp ứng khá đầy đủ yêu cầu cho việc dạy và học tin học; Luôn quan tâm chỉ đạo và sát sao trong việc xây dựng kế hoạch bồi dưỡng học sinh giỏi ngay từ đầu năm học.
Giáo viên: được đào tạo đúng chuyên ngành, tinh thần trách nhiệm cao và dành nhiều tâm huyết trong việc giảng dạy nói chung và công tác BDHSG nói riêng.
Học sinh: chăm ngoan, tự giác, có ý thức nỗ lực phấn đấu vươn lên.
Khó khăn
Giáo viên dạy bồi dưỡng vừa phải bảo đảm chất lượng đại trà, vừa phải hoàn thành chỉ tiêu chất lượng mũi nhọn và công tác kiêm nhiệm. Do đó việc đầu tư cho công tác bồi dưỡng HSG cũng có phần bị hạn chế. Công tác tự nghiên cứu, tự bồi dưỡng để nâng cao chất lượng dạy học sinh giỏi đòi hỏi nhiều thời gian, tâm huyết. Cùng với đó trách nhiệm lại nặng nề, áp lực công việc lớn cũng là những khó khăn không nhỏ với giáo viên tham gia BD HSG.
Nguồn tài chính để chi trả cho giáo viên BDHSG còn hạn hẹp, chưa huy động được các nguồn tài trợ của các tổ chức, cá nhân.
Tâm lí, quan niệm của các học sinh và gia đình học sinh coi môn Tin học là môn phụ, không đầu tư nhiều cho môn học. Học sinh luôn đứng trước sự lựa chọn giữa học chuyên sâu để thi HSG và học để thi ĐH, bản thân các em cũng như phụ huynh các em không yên tâm vì phải mất nhiều thời gian và ảnh hưởng đến kết quả học tập ôn thi ĐH sau khi thi HSG. Vì vậy, chọn được những em có khả năng tư duy tốt vào môn Tin học là rất khó. Khi đó, tiêu chí lựa chọn các em có khả năng tư duy nhanh và tốt nhất để tham gia ôn luyện không thực hiện được mà phải chọn các học sinh có khả năng tư duy thấp hơn nhưng có sự yêu thích và ủng hộ của gia đình. Một số học sinh tham gia học bồi dưỡng nhưng chưa thật cố gắng nên kết quả thi HSG chưa cao.
Hiện nay có rất nhiều sách nâng cao và các tài liệu tham khảo, internet,... song chương trình bồi dưỡng chưa có sách hướng dẫn chi tiết, cụ thể từng tiết, từng buổi học như trong chương trình chính khoá. Vì thế, soạn thảo chương trình bồi dưỡng là một việc làm hết sức quan trọng và rất khó khăn đối với giáo viên tham gia bồi dưỡng. 
III. GIẢI QUYẾT VẤN ĐỀ
1. Phát hiện các học sinh có tố chất và đam mê môn học để động viên các em tham gia đội tuyển càng sớm càng tốt.
Theo tôi, để đạt được kết quả cao trong việc bồi dưỡng học sinh dự thi cần đặc biệt quan tâm tới khâu chọn đội tuyển - đây là công việc khó khăn và quan trọng. Phải được giáo viên phát hiện và bồi dưỡng từ năm học lớp 10. Sau đó tiến hành trao đổi lại với giáo viên chủ nhiệm, các giáo viên toán, lý, hóa, và phụ huynh học sinh để động viên các em tham gia ôn luyện. Cụ thể là:
Nếu giáo viên được trực tiếp giảng dạy học sinh ở lớp 10 thì cần phát hiện và chọn học sinh ngay khi học xong hai bài đó là: bài 4 “Bài toán và thuật toán” và bài 6 “ Giải bài toán bằng MTĐT”. 
Trường hợp giáo viên không trực tiếp dạy học sinh năm lớp 10 thì cần tìm hiểu kết quả của học sinh ở lớp 10 qua điểm tổng kết, điểm các môn học như Tin, Toán, Vật lí,, tham khảo thêm ý kiến giáo viên đã trực tiếp giảng dạy học sinh ở lớp đó nhất là giáo viên chủ nhiệm và giáo viên toán, tin để nắm bắt những mặt mạnh, mặt yếu của học sinh. Từ đó lựa chọn đúng đối tượng học sinh. Học sinh tham gia đội tuyển phải có các tố chất: khả năng tư duy logic, kiên trì, tự giác và có niềm đam mê môn học. 
Để thành lập đội tuyển chính thức: Cần tổ chức thi chọn lọc qua ít nhất 2 vòng loại để lựa chọn chính xác đối tượng học sinh vào bồi dưỡng. Cần đánh giá học sinh một cách khách quan, chính xác, không chỉ qua bài thi mà cả qua việc học tập bồi dưỡng hằng ngày, tránh trường hợp bỏ sót nhân tài.
2. Xây dựng kế hoạch bồi dưỡng
Mục đích của công việc này là xây dựng một kế hoạch để từ đó giáo viên có thể dựa vào và soạn thảo nội dung bồi dưỡng. (Việc soạn thảo chương trình bồi dưỡng cần phải đảm bảo sao cho có thể dẫn dắt học sinh đi từ nội dung cơ bản của chương trình học chính khoá, tiến dần tới chương trình nâng cao, từ đơn giản tới phức tạp. Đồng thời cũng phải có ôn tập củng cố). 
Theo tôi giáo viên cần căn cứ vào 3 yếu tố sau để xây dựng kế hoạch:
Thời lượng cấu trúc của chuyên đề thi HSG theo quy định của Bộ GD&ĐT cũng như của sở GD.
Thời gian ôn luyện
Mức độ tiếp thu của học sinh .
Ví dụ:
	SỞ GD&ĐT THANH HÓA
TRƯỜNG THPT CẨM THỦY 1
KẾ HOẠCH BỒI DƯỠNG HSG
NĂM HỌC 2018-2019
CÁC GIAI ĐOẠN
NỘI DUNG
THỜI GIAN DỰ KIẾN
Giai đoạn 1
Rèn luyện cho HS kĩ năng xác định bài toán.
Viết thuật toán theo 2 cách: 
Liệt kê và sơ đồ khối
Hết năm học lớp 10
Giai đoạn 2
Cấu trúc chương trình, các kiểu dữ liệu
Cách khai báo: tên CT, thư viện, hằng, biến
Các thủ tục vào/ra đơn giản
Viết 1 số chương trình đơn giản
Từ 20/8 đến 10/8/2018
Cấu trúc rẽ nhánh và lặp
Giải các bài tập trong SGK: đổi tiền, gà và chó, trăm trâu trăm bó cỏ, kiểm tra tam giác, gửi tiền tiết kiệm
Giai đoạn 3
Giai đoạn 3
Viết chương trình giải các bài toán cơ bản:
Tìm số Fibonaci thứ n
Kiểm tra tính nguyên tố, kiểm tra tính hoàn hảo của 1 số nguyên dương.
Kiểm tra số chính phương
(cung cấp thêm 2 hàm trunc và round)
Tìm UCLN của hai số nguyên dương
Cộng và tối giản phân số
Phân tích một số thành số nhị phân
Từ 11/8 đến 25/9/2018
Mảng 1 chiều:
Cú pháp khai báo(trực tiếp, gián tiếp)
Quy cách nhập, xuất phần tử của mảng
Áp dụng làm các bài tập (tìm max, min, tính tổng, tbc của dãy, kiểm tra dãy là cấp số cộng, dãy số hạnh phúc).
Từ 26/9 đến 05/10/2018
Luyện tập mảng 1 chiều
Bài toán sắp xếp dãy (sx nổi bọt, sx nhanh)
Bài toán hòa mảng
Tìm kiếm nhị phân
Bài toán cực tiểu địa phương
Bài toán tìm kiếm số k trong dãy
Tính lũy thừa
Kiểm tra số siêu nguyên tố
Xóa phần tử của mảng
Chèn thêm, xóa đi phần tử trên mảng
Từ 6/10 đến 16/10/2018
Kiểu xâu + chương trình con
Khai báo xâu, hàm và thủ tục xử lý xâu
Bài toán đếm số kí tự là chữ số, đếm số lượng của chúng có trong xâu
Cách viết và sử dụng chương trình con
Từ 15/10 đến 31/10/2018
Bài tập cơ bản về xâu
Kiểm tra xâu đối xứng
Bài toán vòng hạt
Kiểm tra số đẹp
Tìm xâu con đối xứng
Giai đoạn 4
Luyện viết các chương trình thuộc nội dung lập trình cơ bản như:
Tìm dãy con thỏa mãn 1 số ĐK nào đó
Chia đoạn sao cho tổng các đoạn bằng nhau và số đoạn là lớn nhất
Kiểm tra các số trong dãy là số sinh đôi, số amstrong, số đẹp
Bài toán tính điểm kiểm tra và một số bài toán khác
01/11 đến 31/12/2018
Giai đoạn 5
Dạy lập trình nâng cao với các bài toán quy hoạch động tiêu biểu
1/1/2019 đến 31/1/2019
Giai đoạn 6
Luyện giải đề
01/2 đến 05/3/2019
Chú ý: Tùy vào khả năng tiếp thu của học sinh mà giáo viên có thể đẩy nhanh hoặc chậm hơn so với thời gian dự kiến. Phải bố trí thời gian học sao cho đảm bảo có nhiều thời gian luyện đề ở giai đoạn nước rút.
3. Tiến hành bồi dưỡng
Sau khi xây dựng kế hoạch bồi dưỡng và thời gian dự kiến hoàn thành mỗi nội dung. Tôi đã tiến hành ôn luyện theo kế hoạch đề ra theo các giai đoạn từ dễ đến khó, từ đơn giản đến phức tạp. Đặc biệt với đối tượng là học sinh có chất lượng đầu vào thấp hơn. Giáo viên cần tham khảo, tìm tòi và chọn lọc tốt để xây dựng được một chương trình phù hợp nhất, chỉ tập trung giải quyết thật tốt nội dung trong 3 hoặc 4 câu đầu tiên của đề thi theo cấu trúc của sở ban hành. 
 Cụ thể gồm 6 giai đoạn cơ bản như sau: 
Giai đoạn 1: Rèn luyện cho học sinh kĩ năng xác định bài toán. Vì để viết được một chương trình chính xác, bước phân tích đề rất quan trọng. Bước này không thể bỏ qua vì nếu làm không kỹ bước này có thể sai cả bài toán. Sau đó, rèn luyện kĩ năng viết thuật toán theo hai cách: Liệt kê và sơ đồ khối.
Giai đoạn 2: Hướng dẫn học sinh nắm thật vững cấu trúc chung của một chương trình; Các kiểu dữ liệu và phạm vi giá trị của chúng. Các câu lệnh và ý nghĩa hoạt động của từng câu lệnh (đặc biệt là các lệnh vào/ra, rẽ nhánh, lặp); 
Ở giai đoạn này giáo viên phải dạy chậm, phân tích hết sức tỉ mỉ, không nóng vội để tránh được việc học sinh học trước quên sau, dẫn đến mất thời gian ôn luyện lại sau đó. 
Giai đoạn 3: Tiến hành cho HS tập vận dụng kiến thức đã được học để viết các chương trình đơn giản như: kiểm tra tính nguyên tố của 1 số nguyên dương, tìm UCLN của 2 số nguyên dương, sắp xếp dãy số, tìm kiếm một số k có trong dãy, kiểm tra 1 dãy số có thỏa mãn một tính chất nào đó hay không? 
Ở giai đoạn này, ban đầu học sinh chưa quen với các lỗi khi chạy chương trình, vì vậy với mỗi chương trình, giáo viên cần hướng dẫn học sinh cách phát hiện và sửa lỗi. Thậm chí có thể gài lỗi vào để học sinh nhận biết và quen với các lỗi thường gặp từ đó hình thành kỹ năng soát lỗi, rèn luyện tính kiên trì, bình tĩnh và cẩn thận của một người học lập trình.
Đồng thời, giáo viên cần cho học sinh tiếp cận với khái niệm “độ phức tạp của thuật toán” và hướng dẫn học sinh cách đánh giá độ phức tạp của thuật toán ngay ở giai đoạn này. Mục đích để sau này đứng trước mỗi bài toán các em biết lựa chọn thuật toán sao cho có thể chạy được tối đa các test.
Lưu ý trong quá trình thực hiện giai đoạn: 
Ban đầu nên cho học sinh nhập dữ liệu từ bàn phím và đưa kết quả ra màn hình để các em hình dung cách thức đưa dữ liệu vào các biến và in dự liệu ra như thế nào, sau đó mới hướng dẫn học sinh cách đọc và in dữ liệu với tệp văn bản. 
Khi học sinh đã viết tốt các chương trình đơn giản kể trên, giáo viên tiến hành dạy học sinh cách viết và sử dụng chương trình con luôn.
Ví dụ: Khi học sinh đã hiểu và viết thành thạo thuật toán kiểm tra tính nguyên tố của 1 số nguyên dương và kiểu dữ liệu mảng 1 chiều thì tôi sẽ phát triển bài toán kiểm tra tính nguyên tố của 1 số nguyên dương bằng cách cho học sinh viết chương trình đếm các số nguyên tố có trong dãy (yêu cầu sử dụng chương trình con kiểm tra số nguyên tố), viết chương trình đếm các số nguyên tố nhỏ hơn số n cho trước bằng phương pháp sàng Eratosthenes.
Giai đoạn 4: Cho học sinh luyện viết các chương trình thuộc nội dung lập trình cơ bản (có nội dung tương đương 25 bài toán như phụ lục đính kèm). Mục đích: nhằm khai thác tốt các câu đầu của đề thi, dành chắc chắn ít nhất 10 điểm khi đi thi. 
Với mỗi bài toán, giáo viên cần yêu cầu học sinh đưa ra hướng giải quyết, sau đó mới định hướng cách giải cho học sinh. Riêng các bài toán khó, giáo viên nên để học sinh có thời gian suy nghĩ và phân tích thật kỹ bài toán trước khi giáo viên chữa bài, tuyệt đối không vội vàng chữa bài ngay vì như vậy các em mới nhớ lâu và khắc sâu cách giải.
Lưu ý: 
Khi chữa bài, giáo viên phải giải một cách chi tiết (không nên giải tắt) để gúp học sinh hiểu sâu sắc bài toán
Giáo viên cần yêu cầu học sinh ghi chép lại ý tưởng giải quyết sau mỗi đề bài khó (tựa như một chiếc chìa khóa để mở kho báu vậy), ghi theo cách mà các em diễn đạt sao cho các em cảm thấy dễ hình dung nhất. Mục đích là để các em khắc sâu cách giải và tránh gặp phải sai lầm lần sau.
Lưu ý việc học sinh mất điểm vì chỉ tập trung vào giải quyết ý chính mà quên đi các ý phụ (Ví dụ: Có những bài toán đề bài yêu cầu nếu không thỏa mãn một tính chất nào đó thì in ra số -1 chẳng hạn. Học sinh thường hay quên và bỏ qua, nó sẽ rất nguy hiểm khi có nhiều test rơi vào trường hợp này)
Để kiểm tra, đánh giá sau trong giai đoạn này giáo viên phải soạn đề kiểm tra bám sát chương trình cơ bản (chưa có phần chương trình nâng cao). Bám sát cấu trúc, thời gian, phạm vi kiến thức 3 câu đầu của đề thi. Chấm và chữa bài chi tiết, rút kinh nghiệm từng câu, từng ý cho học sinh. 
Mặt khác, giáo viên cần ghi lại nhật kí chấm bài để biết được mức độ tiến bộ của từng em, từ đó có những tác động tích cực để nâng cao hiệu quả giảng dạy. 
Giai đoạn 5: Khi học sinh đã làm tốt các đề ở phần lập trình cơ bản thì tiến hành dạy lập trình nâng cao với các bài toán quy hoạch động tiêu biểu. Đồng thời với mỗi bài toán ta có thể mở rộng để cho học sinh giải quyết 1 bài toán khác dựa trên ý tưởng của bài toán ban đầu. Mục đích là để học sinh tiếp thu, khắc sâu kiến thức mới và rèn luyện khả năng tư duy logic.
Ví dụ 1: Sau khi dạy học sinh bài toán tính tổng của các phần tử liên tiếp từ ap đến aq giáo viên có thể mở rộng thành bài toán chia dãy số thành k đoạn sao cho tổng các đoạn bằng nhau và số đoạn là lớn nhất như sau: 
Bài toán ban đầu: Cho dãy số nguyên gồm n phần tử a1, a2, , an và hai số nguyên dương p và q (1 £ p £ q £ n). Yêu cầu: Hãy tính tổng của các phần tử liên tiếp từ ap  aq.
Dữ liệu: Vào từ file văn bản SUM.INP có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương n và k, hai số được ghi cách nhau một dấu cách. (1 £ k, n £ 105)
- Dòng 2: Ghi n số nguyên a1, a2, , an, các số được ghi cách nhau ít nhất một dấu cách (-32000 £ ai £ 32000). 
- Dòng thứ i trong k dòng tiếp theo: Mỗi dòng ghi hai số nguyên dương pi và qi, hai số được ghi cách nhau một dấu cách (1 £ pi £ qi £ n). 
Kết quả: Ghi ra file văn bản SUM.OUT theo cấu trúc như sau:
- Dữ liệu được ghi trên k dòng: Dòng thứ i ghi một số nguyên là tổng giá trị của các phần tử trong đoạn 
SUM.INP
SUM.OUT
5 3
2 9 -3 5 8
1 5
2 3
4 4 
21
6
5
*Các bước tiến hành:
Bước 1: GV hướng dẫn thuật toán
	Gọi S[i] là tổng giá trị các phần tử a1, a2, , ai (1 £ i £ n).
	Ta có công thức quy hoạch động để tính S[i] như sau:
	S[i] := S[i - 1] + A[i];
	Như vậy, việc tính T[n] được thực hiện bằng vòng lặp:
	S[0] := 0;	
For i:=1 to n do
	S[i] := S[i - 1] + A[i];
	Kết quả: Tổng các phần tử liên tiếp từ ap đến aq được tính theo công thức:
	Sum := S[q] - S[p-1];
Bước 2: Cho HS viết chương trình
Bước 3: Giáo viên chuẩn hóa bằng Code tham khảo:
// Độ phức tạp O(n+k)
Const fi='sum.inp'; fo='sum.out';
Var n,k: longint;
 i, p, q: longint;
 s: array[0..100001] of int64;
 a: array[1..100001] of integer;
BEGIN
assign(input, fi); reset(input);
assign(output, fo); rewrite(output);
 	readln(n,k);
 	s[0]:= 0;
 	for i:= 1 to n do
 	begin
 	read(a[i]);
 	s[i]:= s[i-1]+ a[i];
 	end;
 	 for i:= 1 to k do
 	 begin
 	readln(p, q);
 	writeln(s[q] - s[p-1]);
 	 end;
 	close(input); close(output);
END.
Bước 3: Phát triển bài toán
Yêu cầu học sinh dựa vào tư tưởng bài toán trên để viết chương trình chia một dãy số thành k đoạn sao cho tổng các đoạn bằng nhau và số đoạn là lớn nhất. 
Đề bài: Cho dãy số nguyên gồm n phần tử a1, a2, , an . Yêu cầu: chia dãy số thành k đoạn sao cho tổng các đoạn bằng nhau và k là lớn nhất. 
Dữ liệu: Vào từ file văn bản SUM1.INP có cấu trúc như sau:
- Dòng 1: Ghi số nguyên dương n (1 £ n £ 105)
- Dòng 2: Ghi n số nguyên a1, a2, , an, các số được ghi cách nhau ít nhất một dấu cách (-32000 £ ai £ 32000). 
Kết quả: Ghi ra file SUM1.OUT hai số nguyên là số đoạn và tổng mỗi đoạn
Ví dụ:
SUM1.INP
SUM1.OUT
5 
2 9 -3 9 5 2 1 8
11
Các bước thực hiện:
Bước 1: Giáo viên cho HS đưa ra ý tưởng giải quyết bài toán
Bước 2: Chuẩn hóa ý tưởng
Gọi S[i] là tổng giá trị các phần tử a1, a2, , ai (1 £ i £ n).
	Ta dựa vào thuật toán trên làm cơ sở:
Tính S[i] như sau:S[i] := S[i - 1] + A[i];
Áp dụng công thức tính tổng các phần tử liên tiếp từ ap đến aq:
	Sum := S[q] - S[p-1];
	Để chia được nhiều đoạn nhất có thể thì ta cần cho k(số đoạn) giảm dần từ n tới 1, kiểm tra nếu: S[n] không chia hết cho k thì giảm k, ngược lại thì:
+ Tính tb:= S[n] div k; //Tổng của mỗi đoạn con
+ Kiểm tra xem có thể chia được nhiều nhất bao nhiêu đoạn có tổng bằng nhau và đưa ra kết quả.
Bước 3: Cho HS viết code
Bước 4: Chuẩn hóa code
Code tham khảo: 
const fi='sum1.inp';
 fo='sum1.out';
var n, k, i, doan,vt : longint; tb:int64;
 s: array[0..100001] of int64;
 a: array[1..100001] of integer;
BEGIN	
 assign(input, fi); reset(input);
 assign(output, fo); rewrite(output);
 readln(n);
 s[0]:=

Tài liệu đính kèm:

  • docxskkn_mot_so_kinh_nghiem_trong_boi_duong_hoc_sinh_gioi_mon_ti.docx
  • docxPHỤ LỤC.docx