SỞ GIÁO DỤC VÀ ĐÀO TẠO NGHỆ AN
SÁNG KIẾN KINH NGHIỆM
ĐỀ TÀI:
“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Ị 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
SỞ 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:
“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Ị 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
Tên tác giả:
NGUYỄN XUÂN QUỲNH TRANG
TRÌNH THỊ HỒNG LOAN
Tổ bộ môn: TOÁN TIN
Năm học 2022 - 2023
MỤC LỤC
Trang
1
Phần một. ĐẶT VẤN ĐỀ
2
1. Lí do chọn đề tài
2
2. Mục đích nghiên cứu
2
3. Nhiệm vụ nghiên cứu
2
4. Đối tƣợng nghiên cứu
2
5. Phƣơng pháp nghiên cứu
2
6. Điểm mới của đề tài
3
7. Cấu trúc của đề tài
4
Phần hai. NỘI DUNG
Chƣơng 1
CƠ SƠ LÝ LUẬN VÀ CƠ SỞ THỰC TIỄN
4
1. Cơ sở lý luận
1.1. Chủ trƣơng của Đảng, Nhà nƣớc, Bộ giáo dục về Chƣơng trình giáo
4
dục phổ thông 2018
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
4
Chƣơng trình giáo dục phổ thông 2018
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
5
phổ thông 2018
6
2. Cơ sở thực tiễn
6
8
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
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
10
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
13
1.2. Sử dụng phƣơng pháp giảng dạy và đánh giá phù hợp
14
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
15
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
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
15
thuật toán
16
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
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
17
17
toán theo kỹ thuật chia để trị
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ị
18
2.1.2. Mô hình thuật toán khi giải bài toán theo kỹ thuật chia để trị
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
19
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.1. Bài toán tính lũy thừa
21
2.3.2. Bài toán tìm min, max của dãy
24
2.3.3. Bài toán tìm tổng con lớn nhất
26
2.3.4. Bài toán tìm kiếm – thuật toán tìm kiếm nhị phân
29
2.3.5. Bài toán sắp xếp – thuật toán sắp xếp trộn
32
3. Kết quả khảo sát về tính cấp thiết và khả thi của đề tài
32
3.1. Nội dung khảo sát
32
3.2. Phương pháp khảo sát và thang đánh giá
33
3.3. Đối tượng khảo sát
33
3.4. Tính cấp thiết của các giải pháp đề xuất
34
3.5. Tính khả thi của các giải pháp đề xuất
Phần ba. KẾT LUẬN
35
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
36
3. Bài học kinh nghiệm và đề xuất
37
TÀI LIỆU THAM KHẢO
PHỤ LỤC
Phầ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”.
2. Mục đích nghiên cứu Giúp giáo viên có những giải pháp hợp lý trong quá trình giảng dạy nhằm
phát huy năng lực lập trình cho học sinh THPT.
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ị 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. Từ đó giúp học sinh nâng cao kỹ năng lập trình, kỹ năng xử lý các bài toán sử dụng kỹ thuật chia để trị`và ứng dụng trong việc giải các bài toán lớn.
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 đề.
2
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
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
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
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 1.1. Chủ trƣơng của Đảng, Nhà nƣớc, Bộ giáo dục về Chƣơng trình
giáo dục phổ thông mới 2018
Chương trình giáo dục phổ thông mới 2018 có sự đổi mới toàn diện và đồng bộ từ quan điểm, mục tiêu, chương trình, nội dung và thời lượng giáo dục, sách giáo khoa, phương pháp dạy học và kiểm tra đánh giá.
Chươ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
4
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à:
- 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.
5
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,…
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:
b. Không
Đố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? a. Có 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ó
b. Không
b. Không
khó khăn không? a. Có Đố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? a. Có 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?
6
a. Có b. Không
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?
b. Không
a. Có Kết quả thu được như sau: + Đối với giáo viên:
+ Đối với học sinh:
7
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
học ở trường phổ thôn góp phần giúp các em có định hướng nghề nghiệp tốt trong tương lai, nhất là những ngành mới như Khoa học máy tính, Trí tuệ nhân tạo,…
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
Qua thực tế giảng dạy ở trường THPT Hà Huy Tập, với Chương trình giáo dục phổ thông 2006 (chương trình giáo dục cũ) phần lập trình được học ở chương trình Tin học 11, nội dung chủ yếu là các kiến thức cơ bản. Các nội dung khó hơn như kỹ thuật đệ quy, kỹ thuật chia để trị,… chủ yếu giáo viên chỉ dạy cho các học sinh tham gia kì thi học sinh giỏi Tỉnh.
Nộ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.
8
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.
9
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.
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à
10
hoạt động nhóm để thực hiện phần khởi động.
Nội dung
Câu chuyện bó đũa Rút ra bài học
Hoạt động - 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ị.
Ví dụ 2 (về các dạng bài tập)
- Dạng bài tập trắc nghiệm Hoạt động luyện lập: + Giáo viên cho cho học làm một số câu hỏi trắc nghiệm thông qua ứng dụng Quizizz sau khi học xong nội dung mục 2. Thuật toán tìm kiếm nhị phân (Sách Kết nối tri thức với cuộc sống).
+ 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
11
nên các nhóm có sự ganh đua để trả lời đúng và nhanh.
- 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ả?
12
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 đó.
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.
Ví dụ 1 (về phương pháp)
Bài 7. Thiết kế thuật toán theo kỹ thuật chia để trị (Sách chuyên đề học
tập định hướng Khoa học máy tính – Kết nối tri thức với cuộc sống)
13
Mục 1. Bài toán tính lũy thừa
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.
14
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.
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.
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
- Các phép toán đơn giản như phép tính số học +, -, *, ?, phép lấy thương
- 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
- 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ị
Độ 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ể. thuật toán nguyên và số dư, các phép so sánh sẽ tính là 1 đơn vị thời gian. thực hiện của mỗi bước lặp. 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 ≥ n0.
- 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
15
thuật toán có thời gian thực hiện cấp f(n).
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.
16
- 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ả.
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ể.
17
+ 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.
Bài toán P
Bước chia
…
Bài toán con P1
Bài toán con P2
Bài toán con Pk
Bước trị
- Sơ đồ ý tưởng của kỹ thuật chia để trị: Gọi P là bài toán ban đầu cần giải
…
Lời giải P1
Lời giải P2
Lời giải Pk
Bước kết hợp
Lời giải bài toán P
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:
loi_giai =
if P la bài toán đủ đơn giản:
else: for btcon in tapBTcon: lgBTcon = ChiaDetri(btcon) #Trị loi_giai = 18 1 def ChiaDeTri(P):
2
3
4
5
6
7
bài toán con>
8
9
10
11
tapLGcon> #Kết hợp
12 return loi_giai 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 của học sinh qua giải bài toán theo kỹ thuật chia để trị - Kết hợp các phương pháp dạy học tích cực 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,… Trong lập trình theo kỹ
thuật chia để trị chủ yếu kết hợp dạy học phân hóa, làm việc nhóm, liên môn, trải
nghiệm thực tiễn, giải quyết vấn đề,... - Để thực hiện tốt kỹ năng lập trình chia để trị, giáo viên cần soạn bài hợp
lý, đưa ra các dạng bài toán có thể lập trình theo kỹ thuật chia để trị, ở mỗi bài
toán hoặc ở mỗi bước lập trình cần làm rõ đã rèn luyện và phát huy năng lực lập
trình cho học sinh bằng phương pháp nào. - Giáo viên cần chia học sinh thành các nhóm, có thể phân chia học sinh
thành các nhóm giỏi, khá, trung bình hoặc các nhóm học sinh đại trà có trưởng
nhóm là học sinh có kỹ năng lập trình tốt. Giáo viên đưa ra nhiệm vụ, yêu cầu các
nhóm thực hiện trong thời gian nhất định. - Sau khi các nhóm hoàn thành nhiệm vụ, giáo viên tổ chức đối chất, giải
trình kết quả giữa các nhóm học sinh, sau cùng giáo viên sửa lỗi, giải thích, kết
luận, đánh giá bằng điểm số kết quả các nhóm. 2.3. Một số bài toán áp dụng kỹ thuật chia để trị 2.3.1. Bài toán tính lũy thừa
Bài toán: Cho một số nguyên a và một số nguyên n ≥ 1, tính an.
- 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 dựa vào học lực giỏi, khá, trung
bình hoặc dựa vào kỹ năng lập trình. - Tiến trình thực hiện: Giáo viên giao nhiệm vụ cho các nhóm thực hiện.
Sau khi các nhóm hoàn thành nhiệm vụ sẽ đối chứng, giải quyết vấn đề, giáo viên
kết luận và đưa ra thuật toán tốt nhất. Ý tưởng
Giáo viên giao cho nhóm học sinh trung bình thực hiện; nhóm học sinh 19 khá, giỏi đối chứng, từ đó đưa ra ý tưởng tốt nhất.
Bài toán đơn giản: nếu n = 1 thì an = a
Bước 1: Chia/ Tách nhỏ: Chia bài toán đã cho thành bài toán con:
+ Với n chẵn: n = 2k an = a2k = (ak)2= (an/2)2 = an/2 . an/2 + Với n lẽ: n = 2k + 1 an = a2k+1 = a(ak)2= a(an/2)2 = a. an/2 .an/2 Thực hiện chia cho đến khi n = 1 (đưa về bài toán đơn giản)
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. Thuật toán
Giáo viên giao cho nhóm học sinh trung bình và khá thực hiện; nhóm giỏi đối chứng và cải tiến. Dự kiến kết quả nhóm trung bình và khá:
Áp dụng mô hình thuật toán theo kỹ thuật chia để trị ta có hàm tính lũy return a thừa:
1 def tinhluythua(a,n):
2 if n==1:
3
4 else:
5 if (n%2==0):
6 return tinhluythua(a,n//2)*
tinhluythua(a,n//2)
7 else:
8 return tinhluythua(a,n//2)*
tinhluythua(a,n//2)*a Dự kiến đối chứng nhóm giỏi:
Với code hàm tinhluythua trên được gọi nhiều lần nên gán cho biến b để 20 code ngắn gọn hơn như sau:
1 def tinhluythua(a,n):
2 if n==1:
3 return a return b*b 4 else:
5
6
7
8
9 b = tinhluythua(a,n//2)
if n%2==0:
else: return b*b*a Đánh giá độ phức tạp thuật toán
Giáo viên giao cho nhóm học sinh giỏi thực hiện, nhóm học sinh khá và - Dòng 2 là điều kiện cơ sở của hàm đệ quy cũng là thiết lập ban đầu cho - Dòng 5 chính là việc chia và trị của kỹ thuật chia để trị. Biến dổi bài toán - Dòng 6, 7, 9 là sự kết hợp kết quả đã có của việc chia và trị tại dòng 5. - Với n =1, ta có đúng 1 lệnh thực hiện tại dòng 3, nên T(1)=1.
- Với n>1 và n chẵn, khi đó dòng 5 mất T(n/2) thời gian, dòng 7 có một trung bình đối chứng, đưa ra kết luận.
hàm lũy thừa.
về dạng với kích thước n/2.
Gọi T(n) là thời gian thực hiện thuật toán trên:
phép nhân, suy ra T(n) = T(n/2) + 1. - Với n>1 và n lẽ, khi đó dòng 9 sẽ mất 2 đơn vị thời gian vì có hai phép nhân, suy ra T(n) = T(n/2) + 2. Tổng quát:
T(1) = 1
T(n) = T(n/2) + O(1) = O(logn)
Kết luậ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 nâng cao hơn kỹ năng lập trình dựa vào năng lực
của bản thân. 2.3.2. Bài toán tìm min, max của dãy
Bài toán: Cho dãy số A gồm n số A[0], A[1], … A[n-1]. Tìm giá trị lớn 21 nhất và nhỏ nhất của dãy đã cho. - Phương pháp dạy học: Làm việc nhóm, dạy học giải quyết vấn đề, dạy
học liên môn. Giáo viên chia lớp thành 3 nhóm với học lực đều ở các nhóm,
nhóm trưởng là học sinh có kỹ năng lập trình tốt. - Tiến trình thực hiện: Giáo viên giao nhiệm vụ cho các nhóm thực hiện.
Sau khi các nhóm hoàn thành nhiệm vụ sẽ đối chứng, giải quyết vấn đề, giáo viên
kết luận, đưa ra thuật toán tốt nhất. Ý tưởng
Giáo viên giao cả 3 nhóm thực hiện; liên hệ với môn Toán để kiểm chứng,
khi có kết quả các nhóm đối chứng, giải quyết vấn đề nảy sinh và đưa ra ý tưởng
tốt nhất. Bài toán đơn giản: nếu n = 1 thì min = a[0], max = a[0]
Bước 1: Chia/ Tách nhỏ:
Chia bài toán đã cho thành bài toán con:
+ Tìm giá trị lớn nhất và nhỏ nhất của dãy A[0],…, A[giữa]
+ Tìm giá trị lớn nhất và nhỏ nhất của dãy A[giữa +1],…, A[n-1]
Thực hiện chia cho đến khi n = 1 (đưa về bài toán đơn giản)
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. Thuật toán
Giáo viên giao cho nhóm 1, 2 thực hiện; nhóm 3 đối chứng; khi có kết quả,
nhóm 3 thực hiện đối chứng với nhóm 1, 2, liên hệ với môn Toán, phát hiện ra lỗi,
giải quyết vấn đề nảy sinh và đưa ra cách viết tốt nhất. Áp dụng mô hình thuật toán theo kỹ thuật chia để trị ta có hàm tính 22 minmax
1 def minmax(a,left,right):
2 if left == right:
3 return a[left],a[left]
4 elif left == right - 1:
5 if a[left]< a[right]:
6 return a[left],a[right]
7 else: 8 return a[right],a[left]
9 else:
10 mid = (left+right)//2
11 min1,max1 = minmax(a,left,mid)
12 min2,max2 = minmax(a,mid+1,right)
13 if min1 < min2:
14 min = min1
15 else:
16 min = min2
17 if max1 < max2:
18 max = max2
19 else:
20 max = max1
21 return min,max Đánh giá độ phức tạp thuật toán
Giáo viên giao giao nhiệm vụ cho 3 nhóm thực hiện, khi có kết quả, các
nhóm đối chứng với nhau, phát hiện lỗi, hoàn thiện bài toán dưới sự hướng dẫn
của giáo viên. - Nếu dãy A ban đầu có 1 phần tử thì đặt min, max = A[0]. Không cần phép - Nếu dãy A ban đầu có hai phần tử A[0], A[1] thì min, max được tính sau + Các lệnh 2,3 là phần cơ sở của thủ tục đệ quy.
+ Dòng 10 là bước chia bài toán ban đầu thành 2 bài toán con, mỗi bài toán + Dòng 11, 12 là bước trị, thực hện gọi đệ quy đến 2 bài toán con.
+ Dòng 13, 17 là bước kết hợp 2 bài toán con để giải quyết bài toán ban 23 so sánh nào.
một phép so sánh.
- Trường hợp tổng quát, chia dãy A thành 2 nửa, đoạn đầu từ phần tử đầu
tiên đến phần tử ở giữa, đoạn sau từ phần tử giữa + 1 đến phần tử cuối. Sử dụng
đệ quy để tính min1, max1 của đoạn đầu, min2, max2 của đoạn sau. Sau đó so
sánh min1, min2 và max1, max2 để tim ra min, max của dãy A.
con có n/2 phần tử.
đầu. (1)
(2) Gọi T(n) là số phép so sánh của thuật toán:
- Dòng 2 cho biết n = 1 không có phép so sánh nào, T(1) = 0
- Dòng 4 cho biết n =2 có 1 phép so sánh, T(2) = 1
- Trường hợp tổng quát, dãy ban đầu A sẽ được chia thành 2 dãy con với
các khoảng [left, mid], [mid+1, right]. Với n chẵn thì 2 dãy con có số phần tử
bằng nhau và bằng n/2. Nếu n lẻ thì hai dãy con có số phần tử lần lượt là ⌊ ⌋ và
⌈ ⌉. Khi kết hợp lại cần 2 phép so sánh tại dòng 13, 17. Ta có: (3) T(n) = T(⌊ ⌋) + T(⌈ ⌉) + 2, n>2
Từ (1), (2), (3) ta có:
Với n chẵn
T(n) = 2 T(n) + 2 = 3n/2 - 2 Kết luận: Sử dụng phương pháp làm việc theo nhóm đại trà kết hợp với
dạy học liên môn, dạy học giải quyết vấn đề đã tạo điều kiện để học sinh khá, giỏi
dìu dắt học sinh trung bình; giúp học sinh trung bình rèn luyện kỹ năng lập trình,
giúp học sinh khá, giỏi phát huy năng lực toán học và kỹ năng lập trình, tăng tình
đoàn kết thân ái, sự tự tin trong học sinh. 2.3.3. Bài toán tìm tổng con lớn nhất
Bài toán: Cho dãy A gồm n số bất kỳ A[0], A[1],…, A[n-1]. Một dãy con
của A được hiểu là dãy liên tục: A(i,j): A[i], A[i+1],…,A[j] với 0 ≤ i ≤ j ≤ n – 1.
Hãy viết chương trình tìm một dãy con có tổng lớn nhất. Ví dụ: Cho dãy 10 số 1, 2, -5, 4, -10, 2, 3, -1, 4, -2 thì dãy con có tổng lớn nhất là 2, 3, -1, 4 có tổng bằng 8. - Phương pháp dạy học: Làm việc nhóm, dạy học phân hóa, dạy học liên
môn và giải quyết vấn đề. Giáo viên chia lớp thành bốn nhóm gồm nhóm 1, 2 đại
trà và nhóm 3,4 có kĩ năng lập trình. 24 - Tiến trình thực hiện: Giáo viên phối hợp nhóm đại trà và nhóm có kĩ năng
để giao nhiệm vụ: nhóm 3 hướng dẫn nhóm 1 thực hiện nhiệm vụ, nhóm 4 hướng
dẫn nhóm 2 thực hiện nhiệm vụ. Sau khi các nhóm có kết quả sẽ đối chứng giữa
nhóm 1, 3 và nhóm 2, 4 để giải quyết các vấn đề nảy sinh, giáo viên kết luận và
chốt thuật toán tốt nhất. Ý tưởng
Giáo viên giao nhóm 1,2 thực hiện, nhóm 3, 4 đối chứng, khi có kết quả các
nhóm 3, 4 đối chứng phát hiện lỗi của nhóm 1,2, giải quyết vấn đề nảy sinh trên
cơ sở nắm vững các công thức Toán học và đưa ra ý tưởng tốt nhất. Chúng ta xét các dãy con trong dãy ban đầu A và cần tìm dãy con có tổng
lớn nhất. Giả sử chúng ta xét các dãy con nằm trong khoảng A[left, right]. Gọi
mid là chỉ số nằm giữa left và right.
Bước 1: Chia/ Tách nhỏ:
Chia dãy gốc ban đầu thành 2 phần bằng nhau, khi đó dãy có tổng con lớn nhất (gọi là dãy max) sẽ chỉ có thể thuộc 3 loại sau: - Loại 1: Dãy max nằm ở phần nửa bên trái.
- Loại 2: Dãy max nằm ở phần nửa bên phải.
- Loại 3: Dãy max là xuyên tâm, nằm trên cả 2 phần nửa trái và phải.
Thực hiện chia cho đến khi mỗi dãy con chỉ có một phần tử (đưa về bài toán đơn giản). Bước 2: Trị/ Giải quyết bài toán con: Để tìm dãy con max loại 1 và 2 cần
gọi đệ quy sử dụng kỹ thuật chia để trị. Dãy con loại 3 sẽ được tìm bởi một hàm
riêng. Bước 3: Kết hợp: Khi đã tìm được cả 3 dãy max trên thì so sánh dãy nào có tổng lớn nhất sẽ là dãy con cần tìm. Thuật toán
.Giáo viên giao cho nhóm 1, 2 thực hiện; nhóm 3 hướng dẫn nhóm 1, nhóm
4 hướng dẫn nhóm 2; khi có kết quả nhóm 1, 3 đối chứng với nhóm 2, 4 giải quyết
vấn đề nảy sinh, đưa ra cách viết tốt nhất. 25 1 def Maxdaycon(A,left,right):
2 if left == right:
3 return left, right, A[left]
4 else:
5 mid = (left + right)//2
6 leftL, rightL, sumL =
Maxdaycon(A,left,mid)
7 leftR, rightR, sumR = Maxdaycon(A,left,mid)
8 leftX, rightX, sumX =
MaxCross(A,left,mid) Đánh giá độ phức tạp thuật toán
Giáo viên giao cho nhóm 2, 4 thực hiện; nhóm 1, 3 đối chứng; khi có kết
quả nhóm 1, 3 đối chứng với nhóm 2, 4 giải quyết vấn đề nảy sinh trên cơ sở nắm
vững thuật toán, đưa ra cách viết tốt nhất và kết luận.
Gọi T(n) là thời gian thực hiện thuật toán:
- Dòng 2 ta có T(1) =1.
- Trong trường hợp tổng quát, dòng 6, 7 cần thời gian 2T(n/2). Dòng 8 là lệnh tìm dãy con xuyên tâm mất O(n) thời gian. Ta có:
T(1) =1
T(n) = 2T(n/2) + O(n) = O(n.logn)
Kết luận: Sử dụng phương pháp làm việc theo nhóm đại trà kết hợp với
nhóm khá, giỏi giúp học sinh đại trà tiếp cận dễ dàng hơn với toán lập trình, bước
đầu hiểu được kỹ thuật chia để trị và làm quen các bước lập trình. Qua việc
hướng dẫn nhóm đại trà, nhóm khá giỏi nâng cao kỹ năng lập trình, chủ động giải
quyết vấn đề nảy sinh, hứng thú hơn trong học tập bộ môn Tin học. 2.3.4. Bài toán tìm kiếm – Thuật toán tìm kiếm nhị phân
Bài toán gốc: Cho trước dãy A các số gồm n phần tử đã được sắp xếp theo thứ tự tăng dần. A[0] ≤ A[1] ≤ … A[n-1]. Cho trước giá trị cần tìm K. Cần tìm chỉ số k của dãy A sao cho A[k] = K. Nếu tìm thấy trả về k, nếu không tìm thấy trả về -1. Bài toán trải nghiệm thực tế: Nhà trường vừa thông báo kết quả thi khảo
sát gồm 3 môn Toán, Văn, Anh của học sinh toàn trường qua danh sách khối 10,
khối 11, khối 12. Bạn Nguyễn Văn Minh học lớp 11A muốn biết kết quả thi của
mình qua số báo danh 11054. Em hãy giúp bạn Minh nhé! 26 - Phương pháp dạy học: Làm việc nhóm, dạy học trải nghiệm thực tiễn,
dạy học giải quyết vấn đề. Giáo viên chia lớp thành bốn nhóm đại trà 1,2,3,4,
nhóm trưởng là học sinh có kĩ năng lập trình tốt. - Tiến trình thực hiện: Giáo viên giao nhiệm vụ cho các nhóm thực hiện
các bước lập trình dưới sự chỉ dẫn của nhóm trưởng. Khi thực hiện xong từng
bước sẽ đối chứng và giải quyết vấn đề gắn liền với trải nghiệm thực tiễn, cuối
cùng giáo viên chốt vấn đề và đưa ra kết luận. Giáo viên phát kết quả thi kết quả thi khảo sát khối 11 cho 4 nhóm, các
nhóm tiến hành giải quyết bài toán thực tế đã cho. (Danh sách có số báo danh
được sắp xếp từ SBD 11001 đến SBD 11100) Chia danh sách cần tìm thành 2 nửa, so sánh SBD cần tìm (11054) với SBD
nằm giữa (11050), SBD cần tìm lớn hơn SBD nằm giữa nên thực hiện so sánh
SBD cần tìm (11154) với SBD nằm giữa của nửa sau (11075), quá trình lặp cho
đến khi tìm được SBD 11054, đối chiếu danh sách để tìm ra kết quả thi của bạn
Nuyễn Văn Minh. Ý tưởng Giáo viên giao nhiệm vụ cho 4 nhóm thực hiện; khi có kết quả các nhóm đối chứng, giải quyết vấn đề, liên hệ với thực tế và đưa ra ý tưởng tốt nhất. Bước 1: Chia/ Tách nhỏ:
Chia danh sách cần tìm thành 2 phần.
Bước 2: Trị/ Giải quyết bài toán con: Trong mỗi bước, so sánh SBD
cần tìm với SBD nằm ở chính giữa danh sách. Nếu bằng nhau thì thuật toán kết
thúc, nếu không bằng nhau thì tùy vào phần tử nào lớn hơn, thuật toán lặp lại bước
so sánh trên với nửa đầu hoặc nửa sau của danh sách. Bước 3: Kết hợp: Bằng việc lặp lại cách giải quyết như bước 2 ta sẽ tìm được kết quả. Thuật toán
Giáo viên giao nhiệm vụ cho nhóm 1, 2 thực hiện; nhóm 3, 4 đối chứng; khi
có kết quả nhóm 3, 4 đối chứng phát hiện lỗi của nhóm 1, 2, giải quyết vấn đề nảy
sinh, liên hệ với thực tế và đưa ra cách viết đoạn chương trình tốt nhất. Sử dụng 3 biến l(left), r (right) và m (mid) để chỉ các chỉ số bên trái, phải 27 và giữa của danh sách đang tìm.
1 def timkiemnhiphan(A,l,r,K):
2 if l<=r:
3 m = (l + r)//2
4 if A[m]=K: 5 return i
6 elif A[m] > K:
7 return timkiemnhiphan(A,l,m-1,K)
8 else:
9 return timkiemnhiphan(A,m+1,p,K)
10 else:
11 return -1 - Dòng 2 là phần cơ sở của thủ tục đệ quy dùng để kiểm soát việc dừng Độ phức tạp thuật toán
Giáo viên giao nhiệm vụ cho nhóm 3, 4 thực hiện; nhóm 1, 2 đối chứng; khi
có kết quả nhóm 1, 2 đối chứng phát hiện lỗi của nhóm 3, 4 và giải quyết những
vấn đề nảy sinh, đưa ra kết luận.
chương trình. - Dòng 3 là bước chia bài toán tìm kiếm thành 2 bài toán con: tìm kiếm nửa bên trái và tìm kiếm nửa bên phải - Dòng 7, 9 thực hiện lệnh gọi đệ quy tương ứng với các nửa bên trái và phải của dãy. Đây là bước trị của kỹ thuật chia để trị. Thời gian của thuật toán trong trường hợp xấu nhất là O(logn). Liên hệ một số bài toán thực tế có thể giải quyết bằng thuật toán tìm kiếm nhị phân: - Nhân viên lễ tân khách sạn tìm một chìa khóa phòng của một phòng trong khách sạn để đưa cho khách. 28 - Thực hiện tìm kiếm họ tên khách hàng trong một danh sách.
- Thực hiện tìm số điện thoại trong danh bạ điện thoại.
- Tra một từ mới trong một quyển từ điển.
Kết luận: Sử dụng phương pháp làm việc theo nhóm kết hợp với dạy học
trải nghiệm thực tiễn, giải quyết vấn đề giúp học sinh rèn luyện kĩ năng giao tiếp,
kĩ năng làm việc nhóm, liên hệ với thực tiễn cuộc sống để thiết kế thuật toán phù
hợp, qua đó phát huy năng lực lập trình cho học sinh, đặc biết là nâng cao kĩ năng
lập trình theo kỹ thuật chia để trị. 2.3.5. Bài toán sắp xếp – Thuật toán sắp xếp trộn
Bài toán: Cho trước dãy A gồm n phần tử là số nguyên A[0] ≤ A[1] ≤ … A[n-1]. Thực hiện sắp xếp dãy theo thứ tự tăng dần. Bài toán trải nghiệm thực tế: Có 5 tấm thẻ, mỗi thẻ ghi một số nguyên (5,
3, 10, 7, 9) được đặt hàng dọc trên bàn. Hãy thực hiện sắp xếp các thẻ theo thứ tự
tăng dần của số ghi trên thẻ. - Phương pháp dạy học: Làm việc nhóm, dạy học trải nghiệm thực tiễn,
liên môn và giải quyết vấn đề. Giáo viên chia lớp thành bốn nhóm 1,2,3,4, nhóm
trưởng là học sinh có kĩ năng lập trình tốt. - Tiến trình thực hiện: Giáo viên giao nhiệm vụ cho các nhóm thực hiện
sắp xếp các thẻ theo thứ tự tăng dần của số ghi trên thẻ sau đó tiến hành đưa ra
các bước thuật toán dưới sự chỉ dẫn của nhóm trưởng. Khi thực hiện xong từng
bước sẽ đối chứng và giải quyết vấn đề gắn liền với trải nghiệm thực tiễn, cuối
cùng giáo viên chốt vấn đề và đưa ra kết luận. Giáo viên phát 4 bộ thẻ cho 4 nhóm nhóm, các nhóm tiến hành giải quyết bài toán thực tế đã cho. 5 3 10 7 9 5 3 10 7 9 5 3 10 7 9 7 9 3 5 10 7 9 3 5 10 3 5 7 9 10 29 Chia 5 tấm thẻ thành 2 dãy con. Từ dãy con thu được lại tiếp tục chia thành
2 dãy con nhỏ hơn nữa. Quá trình phân chia tiếp tục cho đến khi thu được dãy con
chỉ còn duy nhất 1 tấm thẻ. Hòa nhập 2 thẻ con nhỏ nhất thành dãy con lớn hơn
sao cho đúng thứ tự. Từ hai dãy con lớn hơn lại hòa nhập thành 2 dãy con lớn hơn
nữa. Quá trình hòa nhập cứ tiếp tục như vậy cho đến khi thu được 5 tấm thẻ đã
được sắp xếp tăng dần. Ý tưởng
Giáo viên giao cho nhóm 1, 2 thực hiện; nhóm 3,4 đối chứng; khi có kết
quả các nhóm thực hiện đối chứng, liên hệ với môn Toán, liên hệ với thực tiễn
cuộc sống, giải quyết vấn đề nảy sinh và đưa ra ý tưởng tốt nhất. Từ dãy gốc ban đầu tiến hành chia nhỏ thành các dãy con, mỗi lần chia dãy
lớn thành 2 dãy con, mỗi dãy con có kích thước bằng ½ dãy lớn. Quá trình này
được thực hiện đệ quy liên tục cho đến khi tất cả các dãy con đều có số phần tử là
1. Từ các dãy con sẽ thực hiện phép trộn để thu lại được các dãy lớn hơn,
nhưng các dãy đã trộn đều đã được sắp xếp đúng. Khi thu lại được dãy có độ dài
bằng dãy gốc thì quá trình trộn kết thúc và chúng ta thu được dãy gốc nhưng đã
được sắp xếp đúng. Vậy ta có:
Bước 1: Chia/ Tách nhỏ:
Chia mỗi dãy chưa sắp xếp thành 2 dãy con có kích thước bằng ½ dãy ban đầu. Bước 2: Trị/ Giải quyết bài toán con: Tiến hành sắp xếp 2 dãy con bằng
cách gọi đệ quy. Việc gọi đệ quy được dừng lại khi dãy con được chia ra chỉ còn
có 1 phần tử. Bước 3: Kết hợp: Trộn các dãy con đã sắp xếp đúng lại thành dãy lớn cũng được sắp xếp đúng. 30 Thuật toán
Giáo viên giao cho 4 nhóm thực hiện; trong quá trình thực hiện đối chiếu
với Toán học, liên hệ với thực tiễn cuộc sống, khi có kết quả các nhóm thực hiện
đối chứng, giải quyết vấn đề, đưa ra cách viết tốt nhất.
1 def mergeSort(A,left,right):
2 if left < right:
3 mid = (left + right)//2
4 mergeSort(A,left,mid)
5 mergeSort(A,mid+1,right)
6 B = A.copy()
7 i = left 8 j = mid + 1
9 k = left
10 while i<= mid and j <= right:
11 if A[i] < A[j]:
12 B[k] = A[i]
13 i = i + 1
14 else:
15 B[k] = A[j]
16 j = j + 1
17 k = k + 1
18 if i > mid:
19 while j <= right:
20 B[k] = A[j]
21 j = j + 1
22 k = k + 1
23 else:
24 while i <= mid:
25 B[k] = A[i]
26 i = i + 1
27 k = k + 1
28 A[left:right+1] = B[left:right+1] Độ phức tạp thuật toán
Giáo viên giao cho nhóm 1, 2 thực hiện; nhóm 3, 4 đối chứng; khi có kết
quả các nhóm thực hiện đối chứng, giải quyết vấn đề, đưa ra kết luận dưới sự
hướn dẫn của giáo viên. 31 Gọi T(n) là thời gian chạy của thuật toán.
Với n =1, dòng lệnh 2 trả lại ngay dãy gốc ban đầu A, do đó T(1) = 1.
Trường hợp tổng quát:
- Dòng 5: (bước chia) cần O(1) thời gian để thực hiện.
- Dòng 6, 7 mất 2T(n/2) thời gian.
- Dòng 8 thực hiện trộn hai dãy với thời gian O(n). (1) (2) Vậy:
T(1) =1
T(n) = 2T(n/2) + O(n), n > 1
Không mất tổng quát, giả sử tồn tại hằng số C > 0 sao cho:
T(n) = 2T(n/2) + Cn, n > 1
Từ (1), (2) ta có: T(n) = O(nlogn) Liên hệ một số bài toán thực tế có thể giải quyết bằng thuật toán sắp xếp trộn: - Thực hiện sắp xếp các bạn trong tổ em theo thứ tự chiều cao không giảm.
- Thực hiện sắp xếp danh sách kết quả điểm kiểm tra môn Tin học theo thứ tự từ cao xuống thấp. Kết luận: Sử dụng phương pháp làm việc nhóm, dạy học liên môn, trải
nghiệm thực tiễn và giải quyết vấn đề giúp học sinh rèn luyện kĩ năng làm việc
nhóm, nâng cao năng lực Toán học, gắn liền Tin học với cuộc sống thiết kế thuật
toán nhanh gọn và phù hợp, qua đó phát huy năng lực lập trình theo kỹ thuật chia
để trị cho học sinh. 3. Kết quả khảo sát về tính cấp thiết và khả thi của đề tài
3.1. Nội dung khảo sát
Để tiến hành khảo sát về các giải pháp được đề xuất có thực sự cấp thiết và
có khả thi đối với vấn đề nghiên cứu của đề tài Chúng tôi đã xây dựng phiếu khảo
sát theo 2 tiêu chí: tính cần thiết và tính khả thi của các giải pháp. Thực hiện đánh
giá các tiêu chí theo 4 mức độ từ cao đến thấp được lượng hóa bằng điểm số. 3.2. Phƣơng pháp khảo sát và thang đánh giá
Phương pháp được sử dụng để khảo sát là Trao đổi bằng bảng hỏi; với thang đánh giá 04 mức (tương ứng với điểm số từ 1 đến 4): + Tính cấp thiết: Rất cấp thiết (4 điểm), Cấp thiết (3 điểm), Ít cấp thiết (2 điểm), Không cấp thiết (1 điểm). + Tính khả thi: Rất khả thi (4 điểm), Khả thi (3 điểm), Ít khả thi (2 điểm), Sau khi nhận kết quả thu được, chúng tôi tiến hành phân tích, xử lí số liệu 32 Không khả thi (1 điểm).
trên thống kê, tính điểm trung bình của các giải pháp. 3.3. Đối tƣợng khảo sát
Để tiến hành khảo sát về các giải pháp được đề xuất có thực sự cấp thiết và
có khả thi đối với vấn đề đang nghiên cứu, chúng tôi đã tiến hành xây dựng phiếu
khảo sát cho 2 đối tượng. Với phiếu khảo sát về tính cấp thiết đối tượng là giáo
viên đang dạy bộ môn Tin học THPT, với phiếu khảo sát về tính khả thi đối tượng
được khảo sát là giáo viên dạy bộ môn Tin học THPT và học sinh THPT. Tổng hợp các đối tượng khảo sát: TT Đối tượng Số lượng 1 Giáo viên 16 2 Học sinh 45 3.4. Sự cấp thiết của các giải pháp đề xuất
Trong đề tài chúng tôi đề xuất các giải pháp nhằm phát huy năng lực lập trình cho học sinh THPT gồm: (1) Xây dựng bài giảng tốt, hệ thống bài tập phong phú đa dạng
(2) Sử dụng phương pháp giảng dạy và đánh giá phù hợp
(3) Tổ chức cho học sinh học cách giải quyết vấn đề bằng thiết kế thuật toán
(4) Tổ chức cho học sinh đánh giá tính độ phức tạp của thuật toán
(5) Không ngừng trau dồi chuyên môn, cập nhật công nghệ mới
(6) Giúp học sinh nâng cao khả năng tự học
Để đánh giá sự cấp thiết của các giải pháp đề xuất, chúng tôi đã tiến hành Các thông số TT Rất cấp thiết Cấp thiết Ít cấp thiết Không cấp thiết TB Mức Giải
pháp SL Điểm SL Điểm SL Điểm SL Điểm khảo sát giáo viên qua phiếu khảo sát 01 (Phụ lục 1). 14 56 2 6 3.88 Rất cấp thiết (1) 1 0 0 15 60 1 3 3.94 Rất cấp thiết (2) 2 0 0 12 48 4 12 3.75 Rất cấp thiết (3) 3 0 0 11 44 5 15 3.69 Rất cấp thiết (4) 4 0 0 14 56 2 6 0 0 3.88 Rất cấp thiết (5) 5 33 10 40 6 18 0 0 3.63 Rất cấp thiết (6) 6 Kết quả khảo sát tính cấp thiết của các giải pháp cho thấy mức độ cấp thiết
ở các giải pháp là đồng đều, khoảng cách giữa các giá trị điểm trung bình không
quá xa nhau. Nhóm đối tượng được khảo sát đa số đã đánh giá tính cấp thiết của
các giải pháp có mức độ cấp thiết cao, với điểm trung bình chung là 3.79 điểm.
Điều đó cho thấy các giải pháp đặt ra là rất cần thiết. Các thông số TT Rất khả thi Khả thi Ít khả thi Không khả thi TB Mức Giải
pháp SL Điểm SL Điểm SL Điểm SL Điểm 3.5. Tính khả thi của các giải pháp đề xuất
Để đánh giá tính khả thi của các giải pháp đề xuất, chúng tôi đã tiến hành
khảo sát giáo viên qua phiếu khảo sát 01 (Phụ lục 1) và khảo sát học sinh qua
phiếu khảo sát 02 (Phụ lục 2). 45 180 14 42 2 4 0 0 3.70 Rất khả thi (1) 1 35 140 12 36 12 24 2 2 3.31 Rất khả thi (2) 2 46 184 11 33 4 2 2 2 3.66 Rất khả thi (3) 3 23 92 24 72 14 7 7 7 3.03 Rất khả thi (4) 4 38 152 19 57 4 2 2 2 3.52 Rất khả thi (5) 5 5 (6) 34 136 12 36 10 10 10 3.15 Rất khả thi 6 34 Kết quả khảo sát tính khả thi của các giải pháp đề xuất được thể hiện ở bảng
trên cho thấy giáo viên, học sinh tham gia khảo sát đã đánh giá của các giải pháp
tương đối đồng đều, điểm trung bình chung của các giải pháp là 3.40 điểm. Như
vậy có thể thấy đa số ý kiến đều đánh giá các giải pháp đưa ra nhằm phát huy
năng lực lập trình cho học sinh là rất khả thi. Phần ba. KẾT LUẬN 1. Hiệu quả của sáng kiến kinh nghiệm
- Hiệu quả đối với giáo viên
+ Giúp giáo viên linh hoạt hơn trong quá trình giảng dạy, có kinh nghiệm
trong soạn bài và 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 THPT. + Giúp giáo viên 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ị 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. + Qua đề tài, giáo viên cũng tự rèn luyện và nâng cao kỹ năng lập trình, nắm
vững kiến thức và xử lý linh hoạt các bài toán sử dụng kỹ thuật chia để trị, giúp
giáo viên tự tin hơn trong giảng dạy. - Hiệu quả đối với học sinh
+ Qua đề tài, rèn luyện tư duy máy tính, tư duy logic, phản biện, kỹ năng
làm việc nhóm, khả năng tập trung, giao tiếp và giải quyết vấn đề, đặc biệt là phát
huy năng lực lập trình của học sinh. + Đề tài có tác dụng khuyến khích tinh thần học hỏi, khám phá để từng
bước làm chủ khoa học, công nghệ của học sinh, giúp học sinh vận dụng kiến thức
để giải quyết những vấn đề thực tiễn. + Gây hứng thú cho học sinh trong học tập, học sinh thỏa sức sáng tạo, phát
triển năng khiếu và sở thích, hình thành thói quen tự học, tự nghiên cứu, đem lại
sự tự tin cho học sinh trong học tập. + Đề tài góp phần nâng cao chất lượng học tập của học sinh, học sinh yếu
kém bước đầu nắm bắt được cách thức lập trình, học sinh khá và giỏi có điều kiện
rèn luyện, phát huy năng lực của bản thân. 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 - Tính mục đích
Đề tài đã đề ra những giải pháp đúng đắn và hợp lí nhằm nâng cao chất lượng dạy và học môn Tin học theo chương trình giáo dục phổ thông 2018. 35 - Tính khoa học
Đề tài mang tính hệ thống, khoa học và toàn diện. - Tính thực tiễn
Đề tài giúp giáo viên, học sinh có cái nhìn tổng quát về thực hành thiết kế
thuật toán theo kỹ thuật chia để trị của 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 nên mang tính thực tiễn sâu sắc. - Khả năng mở rộng đề tài
Đề tài có thể mở rộng, đi sâu nghiên cứu và bổ sung thêm các bài toán khác
có sử dụng kỹ thuật chia để trị. Đề tài có thể áp dụng rộng rãi trong các trường
THPT nói riêng và các trường trung học nói chung. 3. Bài học kinh nghiệm và đề xuất
- Bài học kinh nghiệm
+ Giáo viên cần chủ động tìm tòi, sáng tạo trong dạy học, lắng nghe học sinh
để tìm ra những phương pháp dạy mới phù hợp với đối tượng học sinh từ đó nâng
cao chất lượng đại trà của bộ môn. + Đổi mới cách ra đề, bài tập, giải bài tập, chú trọng phương pháp dạy học
tích cực, gây hứng thú học tập cho học sinh, khuyến khích học sinh lập trình bằng
thuật toán khác nhau, tìm cách giải mới. + Giáo viên cần soạn giảng tốt, kết hợp với phương pháp dạy học phù hợp
giúp học sinh hứng thú học tập và yêu thích bộ môn Tin học, kỹ thuật lập trình, từ
đó định hướng tốt cho nghề nghiệp tương lai. + Giáo viên cần tự học để nâng cao trình độ chuyên môn, nghiệp vụ, hiểu rõ
tầm quan trọng của lập trình trong đó có lập trình theo kỹ thuật chia để trị nhằm
nâng cao chất lượng dạy học môn Tin học. - Đề xuất
+ Sở Giáo dục và Đào tạo cần tổ chức nhiều đợt tập huấn giúp giáo viên nâng cao
trình độ chuyên môn và hiểu rõ hơn các ngôn ngữ lập trình mới như Python... để
đáp ứng của Chương trình giáo dục phổ thông 2018. 36 + Nhà trường cần đẩy mạnh hơn nữa cuộc vận động: “Mỗi thầy cô giáo là
một tấm gương tự học và sáng tạo”. Tổ chức các buổi thảo luận, sinh hoạt ngoài
giờ lên lớp giúp học sinh nhận thức tầm quan trọng của bộ môn Tin học, tạo hứng
thú cho học sinh học tập và tham gia thi học sinh giỏi. 37 TÀI LIỆU THAM KHẢO
1. Sách Tin học 11 - Cánh Diều của nhà xuất bản Đại học Sư phạm và 02 chuyên đề
Tin học ứng dụng và Khoa học máy tính.
2. Sách Tin học 11 - Kết nối tri thức với cuộc sống của Nhà xuất bản Giáo dục Việt
Nam và 02 chuyên đề Tin học ứng dụng và Khoa học máy tính.
3. Bộ Giáo dục và Đào tạo. Chương trình giáo dục phổ thông - Chương trình tổng
thể. PHỤ LỤC 1. Phụ lục 1 PHIẾU KHẢO SÁT SỐ 01
PHIẾU THU THẬP THÔNG TIN VỀ TÍNH CẤP THIẾT VÀ TÍNH KHẢ THI Kính gửi: Các thầy cô giáo đang giảng dạy bộ môn Tin học ở trường
THPT, để có căn cứ đề xuất giải pháp góp phần phát huy năng lực lập trình cho
học sinh THPT khi 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 là thực sự cấp thiết
và mang tính khả thi, kính mong các thầy cô cho biết một số vấn đề sau: (đánh
dấu X vào ý kiến đồng ý) Họ và tên:…………………………………………………………………
Trường đang công tác:……………………………………………………
Số năm công tác:………………………………………………………… 1. Theo thầy (cô), để nâng cao năng lực lập trình cho học sinh THPT thì các giải
pháp sau đây có thực sự cấp thiết hay không? (1) Xây dựng bài giảng tốt, hệ thống bài tập phong phú đa dạng
(2) Sử dụng phương pháp giảng dạy và đánh giá phù hợp
(3) Tổ chức cho học sinh học cách giải quyết vấn đề bằng thiết kế thuật toán
(4) Tổ chức cho học sinh đánh giá tính độ phức tạp của thuật toán
(5) Không ngừng trau dồi chuyên môn, cập nhật công nghệ mới
(6) Giúp học sinh nâng cao khả năng tự học
c. Ít cấp thiết d. Không cấp thiết b. Cấp thiết a. Rất cấp thiết
2. Theo thầy (cô), để nâng cao năng lực lập trình cho học sinh THPT thì các giải
pháp sau đây có thực sự khả thi hay không? 38 (1) Xây dựng bài giảng tốt, hệ thống bài tập phong phú đa dạng
(2) Sử dụng phương pháp giảng dạy và đánh giá phù hợp
(3) Tổ chức cho học sinh học cách giải quyết vấn đề bằng thiết kế thuật toán
(4) Tổ chức cho học sinh đánh giá tính độ phức tạp của thuật toán b. Khả thi (5) Không ngừng trau dồi chuyên môn, cập nhật công nghệ mới
(6) Giúp học sinh nâng cao khả năng tự học
c. Ít khả thi d. Không khả thi b. Rất ít sử dụng
d. Thường xuyên sử dụng b. Hiệu quả
c. Ít hiệu quả 39 a. Rất khả thi
3. Thầy (cô) có thường xuyên tổ chức các hoạt động dạy học tích cực nằm nâng
cao kỹ năng lập trình cho học sinh không?
a. Không sử dụng
c. Không cần thiết
4. Các giải pháp nhằm phát huy năng lực lập trình cho học sinh THPT mà thầy cô
đang áp dụng là
a. Rất hiệu quả
c. Bình thường
5. Xin thầy (cô) vui lòng cho biết các giải pháp nhằm phát huy năng lực lập trình
cho học sinh THPT mà thầy cô hay sử dụng
…………………………………………………………………………………….
…………………………………………………………………………………… 2. Phụ lục 2 PHIẾU KHẢO SÁT SỐ 02
PHIẾU THU THẬP THÔNG TIN VỀ TÌNH HÌNH HỌC LẬP TRÌNH
HIỆN NAY CỦA HỌC SINH THPT Các em học sinh thân mến!
Các em vui lòng cho cô biết một số vấn đề sau: (đánh dấu X vào ý kiến đồng ý)
Họ và tên:…………………………………………………………………
Lớp:……………………..Trường:….…………………………………… b. Thích
d. Không thích b. khá hấp dẫn
c. nhàm chán 1. Em cảm nhận như thế nào về việc học lập trình ở trường THPT?
a. Rất thích thú
c. Bình thường
2. Theo em cách thức tổ chức dạy học lập trình ở THPT
a. rất hấp dẫn
c. bình thường
3. Theo em, để nâng cao năng lực lập trình cho học sinh THPT thì các giải pháp
sau đây có thực sự cấp thiết hay không? (1) Xây dựng bài giảng tốt, hệ thống bài tập phong phú đa dạng
(2) Sử dụng phương pháp giảng dạy và đánh giá phù hợp
(3) Tổ chức cho học sinh học cách giải quyết vấn đề bằng thiết kế thuật toán
(4) Tổ chức cho học sinh đánh giá tính độ phức tạp của thuật toán
(5) Không ngừng trau dồi chuyên môn, cập nhật công nghệ mới
(6) Giúp học sinh nâng cao khả năng tự học
c. Ít cấp thiết d. Không cấp thiết b. Cấp thiết a. Rất cấp thiết
4. Theo em, các giải pháp sau đây có thực sự khả thi trong việc phát huy năng lực
lập trình cho học sinh THPT hay không? 40 (1) Xây dựng bài giảng tốt, hệ thống bài tập phong phú đa dạng
(2) Sử dụng phương pháp giảng dạy và đánh giá phù hợp
(3) Tổ chức cho học sinh học cách giải quyết vấn đề bằng thiết kế thuật toán
(4) Tổ chức cho học sinh đánh giá tính độ phức tạp của thuật toán (5) Không ngừng trau dồi chuyên môn, cập nhật công nghệ mới
(6) Giúp học sinh nâng cao khả năng tự học b. Khả thi d. Không khả thi c. Ít khả thi a. Rất khả thi
5. Theo em, việc phát huy năng lực lập trình cho học sinh THPT có góp phần
giúp các em giải quyết vấn đề trong cuộc sống thực tiễn và định hướng tốt nghề
nghiệp trong tương lai không? 41 ………………………………………………………………………………….CỦA ĐỀ TÀI “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Ị BẰNG NGÔN
NGỮ LẬP TRÌNH PYTHON THEO CHƢƠNG TRÌNH GIÁO DỤC PHỔ
THÔNG 2018”