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: #Chia

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

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”

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

………………………………………………………………………………….