Chương 2 PHÁT HUY NĂNG LỰC LẬP TRÌNH CHO HỌC SINH THPT QUA GIẢI CÁC BÀI TOÁN SỬ DỤNG KỸ THUẬT CHIA ĐỂ TRỊ BẰNG NGÔN NGỮ LẬP TRÌNH PYTHON THEO CHƯƠNG TRÌNH GIÁO DỤC PHỔ THÔNG 2018 10 1
Trang 1SỞ GIÁO DỤC VÀ ĐÀO TẠO NGHỆ AN
SÁNG KIẾN KINH NGHIỆM
ĐỀ TÀI:
QUA CÁC BÀI TOÁN SỬ DỤNG KỸ THUẬT CHIA ĐỂ TRỊ
BẰNG NGÔN NGỮ LẬP TRÌNH PYTHON THEO CHƯƠNG TRÌNH GIÁO DỤC PHỔ THÔNG 2018”
Lĩnh vực: Tin học
Trang 2SỞ GIÁO DỤC VÀ ĐÀO TẠO NGHỆ AN TRƯỜNG THPT HÀ HUY TẬP
-o0o -
SÁNG KIẾN KINH NGHIỆM
ĐỀ TÀI:
QUA CÁC BÀI TOÁN SỬ DỤNG KỸ THUẬT CHIA ĐỂ TRỊ
BẰNG NGÔN NGỮ LẬP TRÌNH PYTHON THEO CHƯƠNG TRÌNH GIÁO DỤC PHỔ THÔNG 2018”
Trang 31.2 Đặc điểm, mục tiêu, yêu cầu và nội dung của môn Tin học trong
Chương trình giáo dục phổ thông 2018 4
1.3 Phát huy năng lực lập trình của học sinh trong Chương trình giáo dục
2.1 Khảo sát thực trạng dạy học lập trình môn Tin học tại trường THPT
Hà Huy Tập
2.2 Thực tiễn học lập trình nói chung và kỹ tuật chia để trị trong lập
trình Tin học nói riêng ở trường THPT Hà Huy Tập, thành phố Vinh,
Nghệ An
6
8
Trang 4Chương 2 PHÁT HUY NĂNG LỰC LẬP TRÌNH CHO HỌC SINH THPT
QUA GIẢI CÁC BÀI TOÁN SỬ DỤNG KỸ THUẬT CHIA ĐỂ TRỊ
BẰNG NGÔN NGỮ LẬP TRÌNH PYTHON THEO CHƯƠNG TRÌNH
GIÁO DỤC PHỔ THÔNG 2018 10
1 Một số giải pháp nâng cso năng lực lập trình cho học sinh 10
1.1 Xây dựng bài giảng tốt, hệ thống bài tập phong phú đa dạng 10
1.2 Sử dụng phương pháp giảng dạy và đánh giá phù hợp 13
1.3 Tổ chức học sinh học giải quyết vấn đề bằng thiết kế thuật toán 14
1.4 Tổ chức cho học sinh đánh giá tính tối ưu và hiệu quả của thuật toán 15
1.4.1 Đánh giá thời gian thực hiện của một thuật toán 15
1.4.2 Các nguyên tắc để tính thời gian T(n) đánh giá thời gian thực hiên
1.5 Không ngừng trau dồi chuyên môn cập nhật cong nghệ mới 16
1.6 Giúp học sinh nâng cao khả năng tự học 16
2 Phát huy năng lực lập trình cho học sinh THPT khi giải một số bài
2.1 Tổ chức học sinh học cách giải quyết vấn đề bằng thiết kế thuật toán 17
2.1.1 Thiết kế thuật toán theo kỹ thuật chia để trị 17
2.1.2 Mô hình thuật toán khi giải bài toán theo kỹ thuật chia để trị 18
2.2 Kết hợp các phương pháp dạy học tích cực nhằm phát huy năng lực
lập trình cho học sinh qua giải bài toán theo kỹ thuật chia để trị 19
2.3 Một số bài toán áp dụng kỹ thuật chia để trị 19
2.3.2 Bài toán tìm min, max của dãy 21
2.3.3 Bài toán tìm tổng con lớn nhất 24
2.3.4 Bài toán tìm kiếm – thuật toán tìm kiếm nhị phân 26
Trang 52.3.5 Bài toán sắp xếp – thuật toán sắp xếp trộn 29
3 Kết quả khảo sát về tính cấp thiết và khả thi của đề tài 32
3.2 Phương pháp khảo sát và thang đánh giá 32
3.4 Tính cấp thiết của các giải pháp đề xuất 33
3.5 Tính khả thi của các giải pháp đề xuất 34
Phần ba KẾT LUẬN
1 Hiệu quả, ý nghĩa của sáng kiến kinh nghiệm 35
2 Nhận định về việc áp dụng sáng kiến kinh nghiệm và khả năng mở rộng
đề tài
35
3 Bài học kinh nghiệm và đề xuất 36
PHỤ LỤC
Trang 6Phần một ĐẶT VẤN ĐỀ
1 Lí do chọn đề tài
Thực hiện Nghị quyết của Đảng, Quyết định của Quốc hội và Thủ tướng Chính phủ, Chương trình giáo dục phổ thông 2018 xây dựng theo định hướng phát triển phẩm chất và năng lực của học sinh, tạo môi trường học tập và rèn luyện giúp học sinh phát triển hài hoà về thể chất và tinh thần
Chương trình giáo dục phổ thông 2018 giúp học sinh vận dụng phương pháp học tập tích cực để hoàn chỉnh các tri thức và kỹ năng nền tảng có ý thức lựa chọn nghề nghiệp và học tập suốt đời, có phẩm chất tốt đẹp và năng lực cần thiết để trở thành người công dân có trách nhiệm, người lao động có văn hoá, đáp ứng nhu cầu phát triển của cá nhân và yêu cầu của sự nghiệp xây dựng, bảo vệ Tổ quốc trong thời đại toàn cầu hoá và cách mạng công nghiệp mới
Giáo dục môn Tin học đóng vai trò chủ đạo trong việc chuẩn bị cho học sinh khả năng tiếp nhận, mở rộng tri thức và sáng tạo trong thời đại cách mạng công nghiệp 4.0 và toàn cầu hoá Tin học có ảnh hưởng lớn đến cách sống, suy nghĩ và hành động của con người, là công cụ hiệu quả biến việc học thành tự học suốt đời Tin học giúp học sinh thích ứng và hoà nhập với xã hội hiện đại, hình thành, phát triển năng lực tư duy để học sinh học tập, làm việc, nâng cao chất lượng cuộc sống, đóng góp vào sự nghiệp xây dựng và bảo vệ Tổ quốc
Ở bậc THPT, môn Tin học có sự phân hoá sâu Tùy theo sở thích và dự định về nghề nghiệp trong tương lai, học sinh lựa chọn một trong hai định hướng: Tin học ứng dụng và Khoa học máy tính Từ thực tiễn trong quá trình giảng dạy,
để giúp học sinh tiếp cận và học tốt chuyên đề theo định hướng Khoa học máy
tính, chúng tôi đã lựa chọn đề tài “Phát huy năng lực lập trình cho học sinh THPT qua giải các bài toán sử dụng kỹ thuật chia để trị bằng ngôn ngữ lập trình Python theo chương trình giáo dục phổ thông 2018”
Trang 72
3 Nhiệm vụ nghiên cứu
Xác định cơ sở lý luận của đề tài xuất phát từ chủ trương của Đảng, Nhà nước, Bộ Giáo dục và Đào tạo; đặc điểm, mục tiêu, yêu cầu và nội dung của môn Tin học trong Chương trình giáo dục phổ thông 2018
Đưa ra một số giải pháp hợp lý giúp học sinh rèn luyện kỹ năng lập trình và thực hành thiết kế thuật toán theo kỹ thuật chia để trị chuyên đề Khoa học máy tính - sách Tin học 11 Chương trình giáo dục phổ thông 2018
4 Đối tượng nghiên cứu
Kỹ thuật chia để trị và các bài toán sử dụng kỹ thuật chia để trị bằng ngôn ngữ lập trình Python theo Chương trình giáo dục phổ thông 2018
5 Phương pháp nghiên cứu
- Nghiên cứu và sưu tầm tài liệu
- Trao đổi chuyên môn với bạn bè, đồng nghiệp để giải quyết vấn đề
6 Điểm mới của đề tài
- Giúp giáo viên, học sinh có cái nhìn tổng quát về chủ đề thực hành thiết kế thuật toán theo kỹ thuật chia để trị theo chuyên đề khoa học máy tính sách Tin học
11 Chương trình giáo dục phổ thông 2018
- Giúp học sinh rèn luyện tư duy logic, khả năng tập trung, kỹ năng lập trình,
kỹ năng xử lý các bài toán lớn, kỹ năng giải quyết vấn đề
7 Cấu trúc của đề tài
Phần một Đặt vấn đề
1 Lí do chọn đề tài
2 Mục đích nghiên cứu
3 Nhiệm vụ nghiên cứu
4 Đối tượng nghiên cứu
5 Phương pháp nghiên cứu
6 Điểm mới của đề tài
7 Cấu trúc của đề tài
Phần hai Nội dung
Chương 1 Cơ sở lí luận và cơ sở thực tiễn
1 Cơ sở lí luận
2 Cơ sở thực tiễn
Trang 83
Chương 2 Phát huy năng lực lập trình cho học sinh THPT qua giải các bài toán sử dụng kỹ thuật chia để trị bằng ngôn ngữ lập trình Python theo Chương trình giáo dục phổ thông 2018
1 Một số giải pháp nâng cao năng lực lập trình cho học sinh THPT
2 Phát huy năng lực lập trình cho học sinh THPT qua các bài toán sử dụng
kỹ thuật chia để trị
3 Kết quả khảo sát về tính cấp thiết và khả thi của đề tài
Phần ba Kết luận
1 Hiệu quả của đề tài
2 Nhận định về áp dụng sáng kiến kinh nghiệm và khả năng mở rộng đề tài
3 Bài học kinh nghiệm và đề xuất
Trang 9Chương trình giáo dục phổ thông mới 2018 chỉ rõ mục tiêu giúp học sinh làm chủ kiến thức phổ thông, biết vận dụng hiệu quả kiến thức, kỹ năng đã học vào đời sống và tự học suốt đời, có định hướng lựa chọn nghề nghiệp phù hợp, biết xây dựng và phát triển hài hoà các mối quan hệ xã hội
Nội dung giáo dục theo Chương trình giáo dục phổ thông 2018 có các môn
học mới như Hoạt động trải nghiệm, Hướng nghiệp, Giáo dục địa phương; thay
đổi phương pháp dạy học chú trọng tích cực hóa hoạt động học tập của học sinh, chú trọng tổ chức hoạt động học nhằm hình thành và phát triển năng lực tự học
cho học sinh và thực hiện phương châm “Học qua làm”
Chương trình giáo dục trung học phổ thông 2018 giúp học sinh phát triển phẩm chất, năng lực cần thiết của người lao động, nâng cao ý thức và nhân cách công dân, phát huy khả năng tự học và ý thức học tập suốt đời, khả năng lựa chọn nghề nghiệp phù hợp với năng lực, hoàn cảnh của bản thân để tiếp tục học lên, học nghề hay tham gia lao động, khả năng thích ứng với những thay đổi trong bối cảnh toàn cầu hoá và cách mạng công nghiệp mới
1.2 Đặc điểm, mục tiêu, yêu cầu và nội dung của môn Tin học trong Chương trình giáo dục phổ thông 2018
Chương trình môn Tin học ở cấp THPT giúp học sinh củng cố và nâng cao năng lực tin học đã được hình thành, phát triển ở giai đoạn giáo dục cơ bản, đồng thời cung cấp cho học sinh tri thức mang tính định hướng nghề nghiệp thuộc lĩnh vực tin học hoặc ứng dụng tin học, cụ thể là:
Trang 105
- Giúp học sinh có những hiểu biết cơ bản về hệ thống máy tính, một số kỹ thuật thiết kế thuật toán, tổ chức dữ liệu và lập trình; củng cố và phát triển hơn nữa cho học sinh tư duy giải quyết vấn đề, khả năng đưa ra ý tưởng và chuyển giao nhiệm vụ cho máy tính thực hiện
- Giúp học sinh hiểu thêm một số ngành tin học, có khả năng ứng dụng tin học; tạo ra sản phẩm số phục vụ cộng đồng và nâng cao hiệu quả công việc; có khả năng lựa chọn, sử dụng, kết nối các thiết bị số, dịch vụ mạng và truyền thông, phần mềm và các tài nguyên số khác
- Giúp học sinh có khả năng hoà nhập và thích ứng được với sự phát triển của
xã hội số; tìm kiếm và trao đổi thông tin theo cách phù hợp, tuân thủ pháp luật, có đạo đức, ứng xử văn hoá và có trách nhiệm; ứng dụng công nghệ thông tin và truyền thông trong học và tự học; chủ động và tự tin trong việc định hướng nghề nghiệp tương lai của bản thân
1.3 Phát huy năng lực lập trình của học sinh trong Chương trình giáo dục phổ thông 2018
Năng lực là thuộc tính cá nhân được hình thành, phát triển nhờ tố chất sẵn
có và quá trình học tập, rèn luyện, cho phép con người huy động tổng hợp các kiến thức, kỹ năng và các thuộc tính cá nhân khác như hứng thú, niềm tin, ý chí, thực hiện thành công một loại hoạt động nhất định, đạt kết quả mong muốn trong những điều kiện cụ thể
Trong Chương trình giáo dục phổ thông 2018, thông qua môn học và hoạt động giáo dục các năng lực chung được hình thành như năng lực tự chủ, giao tiếp
và hợp tác, giải quyết vấn đề,… đồng thời giúp học sinh hình thành các năng lực đặc thù như năng lực ngôn ngữ, năng lực tính toán, năng lực khoa học, năng lực công nghệ, năng lực tin học,…
Phát huy năng lực tin học và lập trình là một mục tiêu được nêu ra trong Chương trình giáo dục phổ thông 2018 Trong đó chỉ rõ yêu cầu giúp học sinh hiểu biết kỹ thuật thiết kế thuật toán, tổ chức dữ liệu và lập trình để nâng cao năng lực lập trình, phát triển tư duy giải quyết vấn đề, đưa ra ý tưởng và chuyển giao nhiệm vụ cho máy tính thực hiện
Năng lực lập trình của học sinh được thể hiện qua khả năng đưa ra ý tưởng, khả năng biểu diễn thuật toán, khả năng lập trình, khả năng sửa lỗi chương trình, khả năng phân tích đánh giá thuật toán,…
Trang 116
Chương trình môn Tin học THPT có sự phân hoá sâu theo định hướng nghề nghiệp Nội dung giáo dục tin học được tổ chức thành các nhóm chủ đề theo hai định hướng: Tin học ứng dụng và Khoa học máy tính Tuỳ theo sở thích và định hướng nghề nghiệp của bản thân, học sinh lựa chọn một trong hai định hướng trên qua việc chọn nhóm chủ đề tương ứng
Định hướng Khoa học máy tính đáp ứng mục đích đi sâu vào hệ thống máy tính, phát triển tư duy máy tính, khả năng tìm tòi, khám phá, phát triển các phần mềm và dịch vụ trên máy tính, trang bị kiến thức về thuật toán và lập trình;… giúp hình thành năng lực lập trình cho học sinh
Năng lực lập trình giúp học sinh có tư duy sáng tạo, có kỹ năng thực hành, hiện thực hóa ý tưởng tốt, phát triển năng lực quản lí, làm chủ vấn đề, có khả năng áp dụng lý thuyết vào thực tiễn, xử lý linh hoạt, từ đó có sự lựa chọn phù hợp cho nghề nghiệp trong tương lai Vì vậy việc phát huy năng lực lập trình cho học sinh ngay từ khi học phổ thông là rất quan trọng
2 Cơ sở thực tiễn
2.1 Khảo sát thực trạng dạy học lập trình môn Tin học tại trường THPT Hà Huy Tập
Để tìm hiểu về thực trạng dạy học lập trình ở môn Tin học tại trường THPT
Hà Huy Tập, chúng tôi tiến hành khảo sát 4 giáo viên dạy Tin học và học sinh các lớp trên Google Form Nội dung khảo sát như sau:
Đối với giáo viên:
Câu 1: Theo thầy (cô), dạy học lập trình ở bậc THPT có cần thiết không?
Câu 2: Theo thầy (cô), dạy học lập trình ở bậc THPT đối với giáo viên có khó khăn không?
Đối với học sinh:
Câu 1: Em có thích học lập trình trong môn Tin học ở trường THPT không?
Câu 2: Theo em, học lập trình ở bậc THPT đối với bản thân em có khó không?
Trang 127
Câu 3: Theo em, học lập trình ở bậc THPT tác dụng dụng định hướng nghề
nghiệp trong tương lai không?
Kết quả thu được như sau:
+ Đối với giáo viên:
+ Đối với học sinh:
Qua kết quả khảo sát cho thấy, theo giáo viên dạy học lập trình cho học sinh
là cần thiết (100% ), đối với giáo viên, việc dạy lập trình còn gặp một số khó
khăn (75%) Đối với học sinh, có trên 50% học sinh được khảo sát, yêu thích lập
trình môn tuy học, nhưng đây là phần học tương đối khó đối với các em Trong
thời đại công nghệ 4.0, đa số học sinh nhân thức được việc học lập trinh môn Tin
Trang 13Nội dung phần lập trình theo chương trình cũ phần lớn bài tập áp dụng các công thức toán, học sinh phải có kiến thức tốt về toán mới giải quyết được, các bài toán ít liên quan đến thực tiễn nên học sinh chưa hiểu được mục đích của lập trình Một số bài giảng của giáo viên chưa trực quan, sinh động, do đó học sinh chỉ hoàn thành các bài tập một cách bị động, không kích thích tư duy, tính sáng tạo, một số học sinh học tin chỉ mang tính đối phó
Trong Chương trình Tin học lớp 10 năm 2018, học sinh đã được học phần
kỹ thuật lập trình cơ bản Lớp 11 học sinh tiếp tục được học các nội dung về kỹ thuật lập trình, học sinh đã có thể sử dụng ngôn ngữ lập trình cùng với các công
cụ có sẵn trong thư viện để thể hiện thuật toán Tuy nhiên, khả năng tự đánh giá
và thiết kế thuật toán cho bài toán còn hạn chế
Học lập trình là một môn học khó so với học sinh vì nó liên quan đến tư duy logic, tư duy toán học,… Đây còn là một môn học khô khan, khó hiểu, mơ hồ, đòi hỏi học sinh phải kiên trì, có bản lĩnh Ở lứa tuổi học sinh THPT, chỉ một số
em ham thích tìm hiểu kĩ thuật lập trình, đại đa số chưa hiểu rõ ý nghĩa của lập trình tin học với thực tiễn cuộc sống cũng như việc chọn nghề trong tương lai, ngại khó, ngại khổ nên thiếu tự giác trong học tập
Kết quả học tập môn Tin của học sinh trong những năm qua ở trường THPT đạt được một số kết quả, nhưng kỹ năng lập trình của học sinh lớp 11 đại trà đạt mức trung bình, học sinh mới giải được những bài toán mức độ dễ, chỉ một
số học sinh giỏi cấp trường trở lên đạt mức độ khá, giỏi
Trang 149
Giáo viên các trường THPT nói chung và Trường THPT Hà Huy Tập đã cố gắng tìm tòi, đổi mới phương pháp dạy học nhưng cũng chỉ mới đạt được một số kết quả nhất định, đa số học sinh vẫn chưa có hứng thú với môn Tin học nhất là phần lập trình, đòi hỏi giáo viên cần tiếp tục tìm kiếm giải pháp mới nhằm nâng cao ý thức, gây hứng thú trong việc học bộ môn Tin học đặc biệt là rèn luyện kĩ năng và phát huy năng lực lập trình cho học sinh
Trang 1510
Chương 2 Phát huy năng lực lập trình cho học sinh THPT qua giải các bài toán sử dụng kỹ thuật chia để trị bằng ngôn ngữ lập trình
Python theo Chương trình giáo dục phổ thông 2018
1 Một số giải pháp nâng cao năng lực lập trình cho học sinh 1.1 Xây dựng bài giảng tốt, hệ thống bài tập phong phú đa dạng
Để nâng cao chất lượng bộ môn Tin học nói chung và phát huy năng lực lập trình của học sinh nói riêng, giáo viên cần xây dựng bài giảng có chất lượng với nội dung kiến thức chuẩn, hợp lý, phương pháp dạy học tích cực, đồng thời tự thiết kế hoặc sưu tầm hệ thống bài tập phong phú, đa dạng
- Bài giảng cần xác định rõ mục tiêu, kiến thức, kỹ năng phù hợp, có phương pháp dạy học cụ thể cho từng phần, thực hiện số hóa bài giảng từ quay video, ghi âm, lập trình, chạy thử,… trên phần mềm thích hợp
- Để xây dựng bài giảng tốt, đảm bảo kiến thức cơ bản giáo viên phải dựa vào sách giáo khoa Chương trình giáo dục phổ thông 2018, đồng thời tham khảo thêm các tài liệu giảng dạy chất lượng, tham khảo internet
- Bài tập Tin học lớp 11 biên soạn tương đối đầy đủ, tuy nhiên chưa đa dạng, ít bài tập gắn kết với thực tiễn cuộc sống,… Vì vậy, giáo viên cần thiết kế thêm hệ thống bài tập phù hợp, đa dạng cả trắc nghiệm và tự luận
- Trong mỗi chủ đề, dựa vào kiến thức cơ bản giáo viên có thể thiết kế các dạng bài tập như trắc nghiệm nhiều lựa chọn, trắc nghiệm điền khuyết, giải thích, bài tập mô phỏng tiến trình, đặc biệt là hệ thống bài tập lập trình,…
- Bài tập lập trình cần vận dụng kiến thức để giải bài toán theo các bước, giáo viên cần thiết kế các bài tập từ mức độ thấp đến cao, giúp học sinh làm quen từng bước, từ đó rèn luyện kĩ năng và phát huy năng lực lập trình
Ví dụ 1 (về soạn giảng)
Chuyên đề 2: Thực hành thiết kê thuật toán theo kỹ thuật chia để trị
Bài 1 Ý tưởng chia để trị (Sách Kết nối tri thức với cuộc sống)
Hoạt động khởi động: Giáo viên sử dụng phương pháp tường thuật và hoạt động nhóm để thực hiện phần khởi động
Trang 1611
- GV tường thuật cho HS
nghe “Câu chuyện bó đũa”
- HS thảo luận nhóm rút ra
bài học:
+ Đối với cuộc sống: Chia
nhỏ bó đũa để dễ bẻ hơn
+ Đối với Tin học: Bài toán
lớn chia thành bài toán nhỏ
sẽ dễ giải hơn => Ý tưởng
của kỹ thuật chia để trị
- Đối với cuộc sống:
chia nhỏ bó đũa để dễ
bẻ hơn (Đoàn kết sẽ thành công)
- Đối với lập trình Tin: bài toán lớn chia thành bài toán nhỏ dễ giải hơn -> Kỹ thuật chia để trị
+ Giáo viên chia lớp thành nhiều nhóm, mỗi nhóm 2 học sinh, các nhóm trả lời câu hỏi trắc nghiệm trên điện thoại qua ứng dụng quizizz
+ Trong quá trình học sinh trả lời ứng dụng quizizz có xếp thứ tự câu trả lời nên các nhóm có sự ganh đua để trả lời đúng và nhanh
Trang 1712
- Dạng bài tập tự luận
Nên ra các bài tập từ cơ bản đến nâng cao, mang tính ứng dụng thực tiễn gây hứng thú cho học sinh như:
Bài tập 1: Có n viên bi giống hệt nhau, biết rằng trong các viên bi này có
một viên bi giả và viên bi giả này nặng hơn các viên bi còn lại Chỉ một cái cân thăng bằng, em hãy tìm ra viên bi giả đó Cần ít nhất bao nhiêu lần cân để tìm ra viên bi giả?
Bài tập 2: Ban Giám hiệu nhà trường cần tìm một bạn lớp em có chiều cao
đúng bằng 1,7m hoặc gần với chiều cao đó nhất để tham gia đội hình thể thao
Em hãy giúp nhà trường chọn bạn học sinh đó
Trang 1813
Bài tập 3: Hai người chơi như sau: Người thứ nhất sẽ nghĩ ra một số
nguyên dương trong khoảng từ 1 đến N (N được cho biết trước) Người thứ hai sẽ lần lượt đưa ra các số dự đoán Với mỗi số dự đoán này, người thứ hai sẽ nhận được câu trả lời cho biết số mình vừa nêu ra lớn hơn, nhỏ hơn, hay bằng với số
mà người thứ nhất đã nghĩ Em hãy giúp người thứ hai chọn đúng số cần tìm với
số lần đoán càng ít càng tốt
1.2 Sử dụng phương pháp giảng dạy và đánh giá phù hợp
Giáo viên cần chọn lựa và khai thác hiệu quả các phương pháp giảng dạy phù hợp đặc trưng môn Tin học, nhằm tăng cường sự tương tác của học sinh trong giờ học, kích thích phát huy khả năng tư duy và giải quyết vấn đề
- Phương pháp dạy học tích cực của môn Tin học ở THPT như dạy học theo
dự án, làm việc theo nhóm, dạy học phân hóa, dạy học giải quyết vấn đề, dạy học kết hợp với trải nghiệm thực tiễn, dạy học liên môn và liên ngành,…
- Ở mỗi chủ đề, mỗi bài học, giáo viên cần lựa chọn phương pháp phù hợp nhất giúp học sinh phát huy tính chủ động, tích cực Đối với các tiết lập trình thường sử dụng phương pháp làm việc nhóm kết hợp giải quyết vấn đề
- Kết hợp với các phương pháp dạy học, giáo viên hướng dẫn học sinh tìm tòi, nghiên cứu, tự đề xuất các biện pháp giải quyết những vấn đề đặt ra trong bài học hoặc đề xuất các thuật toán trước khi đưa ra mã hóa thuật toán
- Trong quá trình giảng dạy, giáo viên cần sử dụng các phương tiện dạy học
bổ trợ như máy tính, máy chiếu, bút trình chiếu, phần mềm ứng dụng,… để vừa tạo môi trường học tập linh hoạt, thu hút sự tập trung, chú ý của học sinh
- Song song với việc áp dụng phương pháp dạy học phù hợp, giáo viên cần thực hiện việc đánh giá có hiệu quả, từ hỏi bài trên lớp đến các kì kiểm tra trong năm học cần phản hồi kết quả kịp thời, giúp học sinh tích cực học tập
- Giáo viên cần xây dựng nhiều dạng bài kiểm tra để đánh giá toàn diện năng lực của học sinh, chú trọng hơn vào kĩ năng thực hành Cần động viên, khuyến khích học sinh khá giỏi, đánh giá công bằng đối với học sinh chưa chú ý học tập
Trang 1914
Phương pháp dạy học: Làm việc nhóm, dạy học phân hóa và dạy học giải quyết vấn đề Giáo viên chia lớp thành 3 nhóm theo học lực giỏi, khá, trung bình hoặc dựa vào kỹ năng lập trình
Nhóm trung bình: Thực hiện tìm ý tưởng của bài toán
(nhóm học sinh khá, giỏi đối chứng, từ đó đưa ra ý tưởng tốt nhất)
Nhóm khá: Viết thuật toán giải quyết bài toán
(Nhóm khá thực hiện, nhóm trung bình đối chứng, nhóm giỏi đối chứng và cải tiến)
Nhóm giỏi: Cải tiến thuật toán và thực hiện đánh giá độ phức tạp thuật
toán
Sử dụng phương pháp làm việc theo nhóm kết hợp dạy học phân hóa và giải quyết vấn đề giúp học sinh ở nhóm trung bình bước đầu viết được ý tưởng thuật toán theo kỹ thuật chia để trị, nhóm khá viết được chương trình, nhóm giỏi
đã biết cải tiến chương trình và đánh giá được độ phức tạp của thuật toán Từ đó các nhóm học sinh được rèn luyện và nâng cao hơn kỹ năng lập trình
Ví dụ 2 (về đánh giá)
Giáo viên có thể thực hiện đánh giá qua bài trả lời trắc nghiệm trên ứng dụng Quizizz, Azota,… hoặc hoạt động nhóm để lấy điểm thường xuyên
1.3 Tổ chức học sinh học giải quyết vấn đề bằng thiết kế thuật toán
Thuật toán là phương pháp giải quyết một vấn đề, một bài toán, tiến hành thiết kế thuật toán học sinh sẽ biết suy luận logic, hiểu sâu về bài toán, đưa ra các phương pháp lập trình hiệu quả hơn, tránh lỗi khi lập trình
Thiết kế thuật toán giúp học sinh hình thành kĩ năng giải quyết vấn đề, có tư duy lập trình tốt, nhờ đó khi gặp bất kỳ bài toán nào cũng tìm ra hướng giải quyết tối ưu và nảy sinh cách lập trình nhanh và đơn giản nhất
Để thiết kế một thuật toán tốt cần thực hiện: tìm hiểu bài toán, thiết kế thuật toán, phân tích và chứng minh tính đúng đắn của thuật toán Khi giải một bài toán, giáo viên yêu cầu học sinh tìm hiểu, thiết kế thuật toán
Thuật toán sau khi thiết kế cần được chứng minh tính đúng đắn Để chứng minh được thuật toán đúng, chúng ta cần chứng minh rằng với mọi bộ dữ liệu đầu vào thì dữ liệu đầu ra phải thõa mãn yêu cầu của bài toán
Trang 2015
1.4 Tổ chức học sinh đánh giá tính tối ƣu và hiệu quả của thuật toán
1.4.1 Đánh giá thời gian thực hiện của một thuật toán
Để đánh giá tính tối ưu và hiệu quả thuật toán chúng ta cần tính
độ phức tạp thời gian thực hiện thuật toán Độ phức tạp thời gian thuật toán là
khối lượng thời gian cần thiết để chạy chương trình thể hiện thuật toán
Có hai cách để đánh giá thời gian thực hiện của một thuật toán:
- Cách một bằng thực nghiệm, chúng ta viết chương trình và cho chạy
chương trình với các dữ liệu vào khác nhau trên một máy tính
- Cách hai bằng phương pháp lí thuyết, coi thời gian thực hiện thuật toán
như hàm số của cỡ dữ liệu vào, cỡ dữ liệu vào là một tham số đặc trưng cho dữ
liệu vào, có ảnh hưởng quyết định đến thời gian thực hiện chương trình
Độ phức tạp thời gian, trong trường hợp tổng quát, có thể coi là một hàm T(n)
là thời gian nhiều nhất cần thiết để thực hiện thuật toán, với n là 1 số tự nhiên được
xác định tùy thuộc từng bài toán cụ thể
1.4.2 Các nguyên tắc để tính thời gian T(n) đánh giá thời gian thực hiện
thuật toán
- Các phép toán đơn giản như phép tính số học +, -, *, ?, phép lấy thương
nguyên và số dư, các phép so sánh sẽ tính là 1 đơn vị thời gian
- Các phép toán logic cơ bản như and, or, not sẽ tính là 1 đơn vị thời gian
- Các lệnh đơn như lệnh gán, lệnh in, đọc dữ liệu,… là 1 đơn vị thời gian
- Vòng lặp for hoặc while được tính thời gian bằng tổng đơn vị thời gian
thực hiện của mỗi bước lặp
- Lệnh if với nhiều trường hợp rẽ nhánh sẽ được tính thời gian bằng đơn vị
thời gian lớn nhất của các lệnh nhánh
- Áp dụng các nguyên tắc tính khung thời gian trên có thể tính được gần
chính xác thời gian thực hiện chương trình mà không cần cài đặt và chạy chương
trình trên máy tính
- Sử dụng kí hiệu toán học O để mô tả độ lớn của hàm Giả sử n là một số
nguyên dương, T(n) và f(n) là hai hàm thực không âm Ta viết T(n)= O(f(n)) nếu
và chỉ nếu tồn tại các hằng số dương c và n0 , sao cho T(n)≤ c x f(n), mọi n ≥ n 0
- Nếu một thuật toán có thời gian thực hiện T(n)= O(f(n)) chúng ta nói rằng
thuật toán có thời gian thực hiện cấp f(n)
Trang 2116
1.5 Không ngừng trau dồi chuyên môn, cập nhật công nghệ mới
- Với sự phát triển không ngừng của lĩnh vực công nghệ thông tin trong thời đại 4.0, giáo viên cần tìm hiểu các công nghệ mới, cập nhật liên tục để tích lũy kiến thức, đầu tư thời gian vào công tác nghiên cứu khoa học như tham gia các đề tài, viết sáng kiến kinh nghiệm phục vụ tốt nhất cho công tác giảng dạy
- Để thực hiện tốt yêu cầu giảng dạy bộ môn Tin học THPT 2018, giáo viên cần được bồi dưỡng và tự nghiên cứu để nắm bắt chương trình, làm chủ các kỹ năng, phương tiện dạy học để truyền đạt kiến thức tốt nhất cho học sinh
- Giáo viên nhóm Tin tăng cường tổ chức sinh hoạt nhóm hoặc lập nhóm trên Zalo, Facebook,… để trao đổi thông tin, phương pháp dạy học, trao đổi cách thức soạn bài, cách lập trình một bài toán khó,… giúp dạy học tốt hơn
- Giáo viên thường xuyên tìm hiểu, học hỏi những vốn kiến thức từ thực tiễn cuộc sống về môi trường, kinh tế, xã hội,… để có những bài giảng hấp dẫn hoặc soạn được những bài tập thực hành gắn liền với cuộc sống đang diễn ra
- Giáo viên có thể theo dõi trang cá nhân của những nhân vật có tên tuổi về trong giới lập trình, khoa học dữ liệu, thiết kế web,… để trau dồi kiến thức cho bản thân, tích lũy kinh nghiệm và có những khám phá mới về công nghệ
1.6 Giúp học sinh nâng cao khả năng tự học
- Giáo viên ra bài tập về nhà cho học sinh, hướng dẫn trước các bước để học sinh tự lập trình ở nhà, kết nối điện thoại để học sinh trao đổi với giáo viên khi gặp khó khăn Mỗi lớp cần chọn một số học sinh có kỹ năng lập trình tốt trực tiếp hướng dẫn các nhóm học sinh trong thời gian tự học
- Phát huy năng lực lập trình cho học sinh ngoài việc học trên lớp thì phần lớn kỹ năng lập trình của học sinh được hình thành và phát triển qua quá trình tự học, tự tìm hiểu Sau khi học trên lớp, học sinh cần làm lại những bài đã học, từ những bài toán đơn giản, mở rộng các bài toán khó hơn
- Trong quá trình học, việc tự lập trình chạy thử các test giúp học sinh có tư duy lập trình tốt hơn, hiểu được tính logic, ý nghĩa của các dòng lệnh Hiện nay, trên Internet có nhiều trang web cung cấp môi trường học tập, lập trình trực quan giúp học sinh có thể lập trình trên đó, hệ thống sẽ biên dịch và kiểm tra lỗi giúp học sinh rèn luyện kĩ năng lập trình rất nhanh và hiệu quả
Trang 2217
2 Phát huy năng lực lập trình cho học sinh THPT qua giải một
số bài toán theo kỹ thuật chia để trị
(Chuyên đề 2 – Thực hành thiết kế thuật toán theo kỹ thuật chia để trị - Chuyên
đề học tập tin học 11 - Chương trình giáo dục phổ thông 2018)
2.1 Tổ chức học sinh học cách giải quyết vấn đề bằng thiết kế thuật toán, đánh giá độ phức tạp của thuật toán để viết chương trình
2.1.1 Thiết kế thuật toán theo kỹ thuật chia để trị
2.1.1.1 Kỹ thuật chia để trị
- Chia để trị (Divide and Conquer) là tư tưởng phổ biến trong cuộc sống được áp dụng hiệu quả vào lĩnh vực Tin học, đây là một trong các kỹ thuật quan trọng của thiết kế giải thuật, giúp giải quyết những bài toán lớn trong thời gian nhỏ
mà kỹ thuật lập trình lại không quá phức tạp
- Nội dung cơ bản của phương pháp chia để trị là: Người ta phân bài toán thành các bài toán con, các bài toán con lại tiếp tục được phân thành các bài toán nhỏ hơn, cứ tiếp tục như thế cho đến khi chúng ta nhận được bài toán con đã có thuật giải hoặc có thể dễ dàng đưa ra thuật giải
- Sau khi đưa ra thuật giải, kết hợp nghiệm của các bài toán con để nhận được nghiệm của bài toán con lớn hơn để cuối cùng nhận được nghiệm của bài toán cần giải Thông thường các bài toán con được phân chia cùng dạng với bài toán ban đầu chỉ có cỡ của chúng là nhỏ hơn
2.1.1.2 Ý tưởng của kỹ thuật chia để trị
- Ý tưởng của kỹ thuật chia để trị được chia thành ba bước như sau:
+ Bước 1: Chia/ Tách nhỏ: Chia bài toán ban đầu (phức tạp) thành các bài
toán con (đơn giản hơn) cho đến khi không thể chia nhỏ được nữa Các bài toán con có cùng dạng với bài toán ban đầu hoặc có liên quan với nhau Mỗi bài toán con có thể được giải quyết một cách độc lập
+ Bước 2: Trị/ Giải quyết bài toán con: Tìm cách giải quyết đưa ra các lời
giải của các bài toán con một cách cụ thể
+ Bước 3: Kết hợp: Kết hợp các lời giải của các bài toán con để có được lời giải của bài toán ban đầu Nếu bài toán ban đầu được chia thành các bài toán con
có cùng dạng với nó thì quá trình phân chia và giải quyết các bài toán này có quá trình đệ quy
Trang 2318
- Sơ đồ ý tưởng của kỹ thuật chia để trị: Gọi P là bài toán ban đầu cần giải quyết, ta có sơ đồ sau:
2.1.2 Mô hình thuật toán khi giải bài toán theo kỹ thuật chia để trị
Với P là bài toán ban đầu cần giải quyết, ta có hàm chiadetri(P) như sau:
1 def ChiaDeTri(P):
2 if P la bài toán đủ đơn giản:
3 loi_giai = <Giải quyết bài toán P>
4 else:
5 <Chia bài toán P thành các bài toán con>
#Chia
6 <Gọi tapBTcon là tập các bài toán con>
7 <Gọi tapLGcon là tập các lời giải của các bài toán con>
#Trị
10 <Ghi nhận lgBTcon vào tập tapLGcon>
11 loi_giai = <Kết hợp các lời giải của tập tapLGcon> #Kết hợp
12 return loi_giai
Bài toán P
Bài toán con P1 Bài toán con P2 Bài toán con Pk
Lời giải P 1 Lời giải P 2 Lời giải P k
Lời giải bài toán P