SỞ GD&ĐT THANH HÓATRƯỜNG THPT MAI ANH TUẤN SÁNG KIẾN KINH NGHIỆM Tên đề tài: CÁCH ĐƠN GIẢN ĐỂ ĐỊNH GIÁ BIỂU THỨC TRONG PYTHON, SỬ DỤNG TRONG VIỆC MÔ PHỎNG CẤU TRÚC LẬP TRÌNH ĐỂ GIÚP HỌC
Trang 1SỞ GD&ĐT THANH HÓA
TRƯỜNG THPT MAI ANH TUẤN
SÁNG KIẾN KINH NGHIỆM
Tên đề tài:
CÁCH ĐƠN GIẢN ĐỂ ĐỊNH GIÁ BIỂU THỨC TRONG PYTHON, SỬ DỤNG TRONG VIỆC MÔ PHỎNG CẤU TRÚC LẬP TRÌNH ĐỂ GIÚP HỌC SINH HIỂU SÂU CẤU TRÚC LẬP TRÌNH NGAY TRÊN LỚP
Trang 2MỤC LỤC
A ĐẶT VẤN ĐỀ 3
I.LỜI MỞ ĐẦU 3
II- MỤC ĐÍCH NGHIÊN CỨU: 3
III- NHIỆM VỤ NGHIÊN CỨU: 3
1 Nhiệm vụ một: 3
2 Nhiệm vụ hai: 4
3 Nhiệm vụ ba: 4
IV-PHƯƠNG PHÁP NGHIÊN CỨU: 4
V-ĐỊA ĐIỂM NGHIÊN CỨU VÀ ÁP DỤNG ĐỀ TÀI: 4
VI-ĐÓNG GÓP CỦA ĐỀ TÀI 4
B NỘI DUNG 5
I- CƠ SỞ LÝ LUẬN CỦA VẤN ĐỀ NGHIÊN CỨU: 5
1- Cơ sở lý luận 5
2- Cơ sở thực tiễn 5
II-VẤN ĐỀ LUYỆN THI HSG MÔN TIN HỌC NHÀ CỦA TRƯỜNG 5
1 Những thuận lợi và khó khăn trong công tác luyện thi học sinh giỏi bộ môn tin học 5
2 Nội dung 6
2.1 Ý tưởng chung: 6
2.2 Thiết kế một số chương trình con thực hiện tô màu, đặt đường viền, chọn Font chữ, In mảng 6
*Chương trình tạo đường viền cho ô 6
*Chương trình tô màu Cell 7
*Chương trình tô màu chữ 8
*Chương trình tạo màu chữ, tạo khung, chọn màu cho ô 8
*Chương trình in mảng trước và sau khi thực hiện thuật toán với các tùy chọn đã được quy định trước 8
*Một số chương trình con thực hiện tráo đổi biến, reset trang tính về mặc định 8
2.3.Chương trình mô phỏng thuật toán 9
2.3.1.Thuật toán sắp xếp 9
*Thuật toán sắp xếp nổi bọt 9
*Thuật toán sắp xếp Quick sort 11
2.3.2.Thuật toán tìm kiếm: 13
*Thuật toán tìm kiếm tuần tự 13
* Thuật toán tìm kiếm nhị phân 14
2.3.3.Thuật toán sàng nguyên tố 17
2.4 Một số hình ảnh mô phỏng khi chạy chương trình và cách thực hiện chương trình mô phỏng 19
2.4.1 Thuật toán sắp xếp 19
2.4.2 Thuật toán tìm kiếm 21
2.4.3 Thuật toán sàng nguyên tố 22
C - KẾT LUẬN 24
I- Kết quả nghiên cứu: 24
II- KIẾN NGHỊ ĐỀ XUẤT: 24
Trang 3A ĐẶT VẤN ĐỀ I.LỜI MỞ ĐẦU
Hiện nay trong vấn đề luyện thi học sinh giỏi môn tin học cấp trung học phổthông, mà cụ thể là ngôn ngữ lập trình pascal thuộc chương trình tin học 11, chươngtrình tin học 11 sách giáo khoa chỉ cung cấp một số kiểu dữ liệu và một số các thuậttoán cơ bản Đối với các em học sinh việc tiếp cận với NNLT là một vấn đề khó, việctiếp thu và hiểu các thuật toán cơ bản lại là một việc khó hơn rất nhiều Bởi vậy việclàm như thế nào để giúp các em học sinh đặc biệt là học sinh đội tuyển hiểu cặn kẽ vềcác thuật toán cơ bản là một vấn đề mà tất cả các giáo viên đứng đội tuyển thườngtrăn trở, trong những SKKN trước cá nhân tôi đã trình bày về cách mô phỏng thuậttoán dùng VBA trên Powerpoint, tuy nhiên đối với các thuật toán sử dụng mảng 1chiều, 2 chiều một cách đơn giản hơn ta có thể sử dụng VBA trên Excel để đơn giảnquá trình mô phỏng, bởi vì vốn dĩ mỗi ô của bảng tính chính là một phần tử của mảng
Tôi chọn đề tài: “CÁCH ĐƠN GIẢN ĐỂ ĐỊNH GIÁ BIỂU THỨC TRONG
PYTHON, SỬ DỤNG TRONG VIỆC MÔ PHỎNG CẤU TRÚC LẬP TRÌNH
ĐỂ GIÚP HỌC SINH HIỂU SÂU CẤU TRÚC LẬP TRÌNH NGAY TRÊN LỚP HỌC” để giúp các em có thể tiếp cận các thuật toán tốt hơn, và hiểu được các thuật
toán sử dụng kiểu dữ liệu mảng 1 chiều, 2 chiều Giúp cho các giáo viên trung họcphổ thông làm nhiệm vụ như tôi có thêm một tư liệu để tham khảo Trên cơ sở đócùng nghiên cứu và phát triển rộng hơn các chuyên đề về luyện thi học sinh gỏi cấptrung học phổ thông
II- MỤC ĐÍCH NGHIÊN CỨU:
- Để làm tốt công tác luyện thi học sinh giỏi môn tin học cấp trung học phổthông
- Về nội dung: Mô phỏng một số thuật toán cơ bản sử dụng VBA trên Excel
III- NHIỆM VỤ NGHIÊN CỨU:
Trang 42 Nhiệm vụ hai:
Mô phỏng một số thuật toán trên cơ sở các chương trình con đã được xây dựng
3 Nhiệm vụ ba:
Một số ý kiến đề xuất
IV-PHƯƠNG PHÁP NGHIÊN CỨU:
- Kinh nghiệm giáo dục của bản thân trong quá trình giảng dạy, luyện thi họcsinh giỏi môn tin học
- Trao đổi với các chuyên môn với đồng nghiệp
- Nghiên cứu tài liệu liên quan
V-ĐỊA ĐIỂM NGHIÊN CỨU VÀ ÁP DỤNG ĐỀ TÀI:
- Trường THPT Mai Anh Tuấn
VI-ĐÓNG GÓP CỦA ĐỀ TÀI
Góp phần làm phong phú thêm tư liệu luyện thi học sinh giỏi môn tin học củacác trường THPT tỉnh Thanh Hóa
Trang 5B NỘI DUNG I- CƠ SỞ LÝ LUẬN CỦA VẤN ĐỀ NGHIÊN CỨU:
1- Cơ sở lý luận
- Một số cấu trúc lập trình như: Biểu thức, câu lệnh gán, cấu trúc rẽ nhánh,
cấu trúc lặp,là tiền đề cho việc nghiên cứu các thuật toán nâng cao hơn.
2- Cơ sở thực tiễn.
- Đối với các em học sinh việc bước đầu tiếp thu các kiến thức về thuật toán cơbản là vô cùng khó khan, việc tường minh các bước thuật toán sẽ giúp các em hiểusâu sắc thuật toán và có tiền đề cho việc nghiên cứu các thuật toán nâng cao sau này
II-VẤN ĐỀ LUYỆN THI HSG MÔN TIN HỌC NHÀ CỦA TRƯỜNG.
1 Những thuận lợi và khó khăn trong công tác luyện thi học sinh giỏi bộ môn tin học.
*Khó khăn:
- Đa số các em mới được làm quen với tin học, đặc biệt về học lập trình
PASCAL các em mới chỉ thực sự tiếp xúc từ đầu năm lớp 11 Việc nắm bắt các thuậttoán khó nằm ngoài sách giáo khoa là một việc rất khó do kiến thức của các em đangcòn rất hạn chế
- Bộ môn tin học được coi là môn phụ nên việc tiến hành giảng dạy cho đội
tuyển thường phải học vào ca tối Do đó không thuận tiện cho học sinh trong vấn đề
Trang 62 Nội dung
2.1 Ý tưởng chung: Phần mềm bảng tính điện tử Microsoft Excel sử dụng các
hàng, các cột Giao nhau giữa các hàng và cột ta có các ô (Cells) Bản thân Cells là một đối tượng có các thuộc tính cơ bản như:
+ Giá trị trong ô (cell value)
+ Màu ô (Cell color)
+ Đườn viền quanh ô ( Cell boder)
+ Font chữ trong ô ( Cell font)
*Chương trình tạo đường viền cho ô.
Sub createFrame(row, col As Long)
Cells(row, col).Borders(xlDiagonalDown).LineStyle = xlNone
Cells(row, col).Borders(xlDiagonalUp).LineStyle = xlNone
With Cells(row, col).Borders(xlEdgeLeft)
LineStyle = xlContinuous
ColorIndex = xlAutomatic
TintAndShade = 0
Weight = xlThin
Trang 7Cells(row, col).Borders(xlInsideVertical).LineStyle = xlNone
Cells(row, col).Borders(xlInsideHorizontal).LineStyle = xlNone
End Sub
*Chương trình tô màu Cell.
Sub fillColorCell(row, col, clr As Long)
With Cells(row, col).Interior
Pattern = xlSolid
PatternColorIndex = xlAutomatic .color = clr
.TintAndShade = 0 PatternTintAndShade = 0 End With
End Sub
Trang 8*Chương trình tô màu chữ.
Sub fillColorWord(row, col, clr As Long)
With Cells(row, col).Font
color = clr
TintAndShade = 0
End With
End Sub
*Chương trình tạo màu chữ, tạo khung, chọn màu cho ô.
Sub FormatCell(row, i As Long, value)
Trang 92.3.Chương trình mô phỏng thuật toán.
Quy ước dùng trong lập trình mô phỏng:
+ Các phần tử thỏa mãn yêu cầu bài toán sẽ được tô màu vàng hoặc màu xanhlá
Một số chương trình mô phỏng bài toán như sau:
Trang 10Dim arrayResult As Variant
Dim i, j, row, vbtemp As Long
If IsEmpty(arrayInput) = True Then Exit Sub
If lLower = -1 Then lLower = LBound(arrayInput, 1)
If lUpper = -1 Then lUpper = UBound(arrayInput, 1)
For j = (i + 1) To lUpper Step 1
If (arrayResult(i) > arrayResult(j)) Then
Cells(row, i + 4) = "|" & str(i + 1) & "|" & str(j + 1) & "|"
Call Library.Swap(arrayResult(i), arrayResult(j))
Call Library.FormatCell(row, i + 5, arrayResult(i))
Call Library.FormatCell(row, j + 5, arrayResult(j))
row = row + 1
End If
Trang 11*Thuật toán sắp xếp Quick sort.
Private Sub QuickSort(ByRef arrayInput As Variant, ByVal low As Long, ByValhigh As Long)
Dim pi As Long
If (low < high) Then
pi = Partition(arrayInput, low, high)
Call QuickSort(arrayInput, low, pi - 1)
Call QuickSort(arrayInput, pi + 1, high)
While (left <= right)
If (left > high) Then
Trang 12Call Library.Swap(arrayInput(left), arrayInput(right))
Cells(row, 4) = "|" & left + 1 & "|" & right + 1 & "|"
Call Library.FormatCell(row, left + 5, arrayInput(left))
Call Library.FormatCell(row, right + 5, arrayInput(right))
row = row + 1
left = left + 1
right = right - 1
Loop
Call Library.Swap(arrayInput(left), arrayInput(high))
Cells(row, 4) = "|" & left + 1 & "|" & high + 1 & "|"
Call Library.FormatCell(row, left + 5, arrayInput(left))
Call Library.FormatCell(row, high + 5, arrayInput(high))
Call Library.printArray(arrayInput, arrayColor, row + 1, 5)
row = row + 3
Partition = left
End Function
Trang 132.3.2.Thuật toán tìm kiếm:
Thuật toán tìm kiếm điển hình được dùng để mô phỏng là: Tìm kiếm tuần tự; Tìm kiếm nhị phân.
*Thuật toán tìm kiếm tuần tự.
Trang 14Dim i, j, typeArray As Long
Dim arrayValueInput As Variant
Trang 15Dim privot, i As Long
If left = right Then
Trang 17Call Library.printArray(arrayInput, arrayColor, row, LBound(arrayInput) + 5) row = row + 2
Call BinarySearch(arrayInput, x, privot + 1, right, typeArray)
2.3.3.Thuật toán sàng nguyên tố.
Public arrayColor() As Long
Public arrayCheck(150) As Boolean
Public x As Long
Public row As Long
Public Const maxValue = 149
Trang 19Các bước thực hiện chương trình:
Bước 1: Nhập giá trị đầu vào cho bài toán.
- Tại ô B6 ta nhập giá trị cho các phần tử của mảng Mỗi phần tử của mảng
phần cách nhau bởi ký tự “;”.
Bước 2: Đưa thiết lập các ô trong bảng tính dùng trong việc mô phỏng thuật toán về
mặc định bằng cách nháy chuột vào nút lệnh
trên sheet(“Sắp xếp”)
Bước 3: Thực hiện chức năng mô phỏng thuật toán:
+ Nháy chuột vào nút lệnh nếu muốn môphỏng thuật toán sắp xếp nổi bọt
Hình ảnh mô phỏng với dãy A: 9;8;7;4;3;2;1
Và kết quả sắp xếp và mô phỏng như sau:
Trang 20+ Nháy chuột vào nút lệnh nếu muốn môphỏng thuật toán sắp xếp quick sort.
Hình ảnh mô phỏng với dãy A: 9;8;7;4;3;2;1
Và kết quả sắp xếp và mô phỏng như sau:
Trang 212.4.2 Thuật toán tìm kiếm.
Bước 1: Nhập giá trị đầu vào cho bài toán.
- Tại ô B6 ta nhập giá trị cho các phần tử của mảng Mỗi phần tử của mảng
phần cách nhau bởi ký tự “;”.
- Nhập giá trị cho khóa tìm kiếm tại ô “B7”
Bước 2: Đưa thiết lập các ô trong bảng tính dùng trong việc mô phỏng thuật toán về
mặc định bằng cách nháy chuột vào nút lệnh
trên sheet(“Tìm kiếm”)
Bước 3: Thực hiện chức năng mô phỏng thuật toán:
+ Nháy chuột vào nút lệnh nếu muốn môphỏng thuật toán tìm kiếm tuần tự
Hình ảnh mô phỏng với dãy A: 1;2;3;4;5;6;8;9;10;11 và khóa K = 10
Và kết quả mô phỏng thuật toán như sau (vị trí tìm thấy được tô màu xanh lá):
Trang 22+ Nháy chuột vào nút lệnh nếu muốn môphỏng thuật toán tìm kiếm tuần tự.
Hình ảnh mô phỏng với dãy A: 1;2;3;4;5;6;8;9;10;11 và khóa K = 10
Và kết quả mô phỏng thuật toán như sau (vị trí tìm thấy được tô màu xanh lá):
2.4.3 Thuật toán sàng nguyên tố.
- Thuật toán mô phỏng chạy với N lớn nhất là 150
Bước 1: Nhập giá trị cần kiểm tra nguyên tố.
hiện thuật toán và kiểm tra
Hình ảnh mô phỏng với giá trị X cần kiểm tra là 149:
Trang 23Kết quả: X=149 là số nguyên tố.
Hình ảnh mô phỏng với giá trị X cần kiểm tra là 148:
Kết quả X=148 không là số nguyên tố
Do thời gian có hạn, cá nhân tôi không xây dựng kịp thêm một số các thuậttoán cơ bản khác Tôi sẽ xây dựng thêm các giải thuật cơ bản tại địa chỉ:
https://1drv.ms/u/s!AplRVRhD64SEaaEEjQ033gown1Q?e=cg6sGP
Mong rằng sẽ nhận được ý kiến đóng góp xây dựng từ quý bạn đồng nghiệp để tôi cóthể xây dựng chương trình mô phỏng tốt hơn
Trang 24C - KẾT LUẬN
I- Kết quả nghiên cứu:
Qua quá trình dạy đội tuyển học sinh giỏi môn tin học THPT từ năm 2008 chotới nay Tôi đã tiến hành dạy qua các năm:
Năm 2009: Vấn đề mô phỏng thuật toán đang sử dụng phương pháp thuyết trình.
Các em khó hình dung về hoạt động của thuật toán Nên vì đó kết quả không cao lắm.Kết quả: 1 giải khuyến khích
Năm 2010 trở đi: Bước đầu mô phỏng các thuật toán sử dụng VBA trên Power
point, và VBA trên Excel Các bước xây dựng mô phỏng cũng tiết kiệm được thờigian công sức và chủ động hơn trong ý đồ muốn đưa ra cho học sinh
Kết quả:
Năm 2010: 1 giải ba, 1 giải khuyến khích
Năm 2011: Hai giải ba
Năm 2013: 1 giải ba
Năm 2021: 1 giải ba
Mặc dù kết quả qua các năm chưa được cao Đó là đặc thù của các trường THPT.Các em có rất ít thời gian học tập môn tin học vì phải chuyên tâm vào việc học tập cácmôn Toán, Lý, Hóa Việc học tập môn tin học phải tiến hành vào ca tối Vì vậy nếucác em được tiếp thu đầy đủ các chuyên đề lập trình nâng cao thì kết quả sẽ cao hơnrất nhiều
II- KIẾN NGHỊ ĐỀ XUẤT:
Qua quá trình giảng dạy đội tuyển học sinh giỏi từ năm 2009 đến nay Rút ra từkinh nghiệm bản thân tôi có một số đề xuất sau:
- Nên có hệ thống chuyên đề luyện thi học sinh giỏi cho giáo viên có nguồn
tư liệu tham khảo
- Hệ thống đề thi học sinh giỏi không nên vượt quá xa chương trình THPT
- Tổ chức các chuyên đề bồi dưỡng cho giáo viên Vì đa số giáo viên đềuchưa được đào tạo bài bản về các chuyên đề lập trình nâng cao
Trang 25- Chương trình mới luyện thi học sinh giỏi sử dụng C++ hoặc phython Bảnthan đa số giáo viên chưa hiểu sâu về các NNLT này Nên sở Giáo dục cần có nhữnglớp tập huấn về các NNLT mới này Để đa số giáo viên đang có lối tư duy kiểu NNLTtruyền thống sẽ dễ dàng tiếp thu về lối tư duy lập trình hiện đại ngày nay.
Tôi xin cam đoan sáng kiến kinh nghiệm này là của tôi, nếu không phải tôi xinhoàn toàn chịu trách nhiệm
Tôi xin chân thành cảm ơn!
Xác nhận của hiệu trưởng
Nga sơn, ngày 23 tháng 05 năm 2021 Người thực hiện
Phạm Quang Thắng