Tải bản đầy đủ (.docx) (25 trang)

(SKKN 2022) 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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (198.04 KB, 25 trang )

SỞ 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 HỌC.

Người thực hiện:

Phạm Quang Thắng.

Chức vụ:

Giáo viên.

Đơn vị công tác:

Trường THPT Mai Anh Tuấn.

SKKN thuộc môn: Tin học.

Thanh hóa, năm 2021
1


MỤ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 tốn sắp xếp Quick sort...........................................................................................11
2.3.2.Thuật tốn tìm kiếm:......................................................................................................13

*Thuật tốn tìm kiếm tuần tự..............................................................................................13
* Thuật tốn tìm kiếm nhị phân..........................................................................................14
2.3.3.Thuật tốn sàng ngun 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 tốn sắp xếp.........................................................................................................19
2.4.2. Thuật tốn tìm kiếm......................................................................................................21
2.4.3. Thuật tố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

2


A. ĐẶ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ương
trì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ật
toá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ệc
tiếp thu và hiểu các thuật tốn cơ bản lại là một việc khó hơn rất nhiều. Bởi vậy việc
là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ường
trăn trở, trong những SKKN trước cá nhân tơi đã trình bày về cách mơ phỏng thuật
tốn dùng VBA trên Powerpoint, tuy nhiên đối với các thuật toán sử dụng mảng 1
chiề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ản
q 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ọc
phổ 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ấp
trung 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 tốn cơ bản sử dụng VBA trên Excel.
III- NHIỆM VỤ NGHIÊN CỨU:
1. Nhiệm vụ một:
- Chọn ra các đặc trưng tương đồng của các phần tử của mảng 1 chiều hoặc 2
chiều với các Cell trong bảng tính. Từ đó xây dựng một số chương trình con cơ bản
để đánh dấu các Cell trong bảng tính tương ứng với các phần tử của mảng.
3


2. Nhiệm vụ hai:
Mơ phỏng một số thuật tố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ọc
sinh 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ủa các
trường THPT tỉnh Thanh Hóa.

4


B. 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 tốn cơ
bản là vơ cùng khó khan, việc tường minh các bước thuật tốn sẽ giúp các em hiểu
sâu sắc thuật tố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.
*Thuận lợi:
Được sự quan tâm của ban giám hiệu nhà trường đã tạo mọi điều kiện cho cả
thầy và trò trong học tập.
Có nhiều em học sinh có khả năng tư duy rất tốt. Có khả năng nắm bắt các
thuật tốn cơ bản. Vận dụng các thuật toán cơ bản để giải quyết các bài tập một cách
linh hoạt.
*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ật
tốn khó nằm ngồi sách giáo khoa là một việc rất khó do kiến thức của các em đang
cị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 đề.

5


2. 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).
+…
Đối với thuật toán sử dụng mảng 1 chiều, hoặc 2 chiều ta có thể dùng các thuộc
tính trên để đánh dấu các phần tử đã về đúng vị trí, hay đã được tìm thấy,…Trên cơ sở
đó NNLT VBA trên Excel sẽ là một cơng cụ tuyệt vời để có thể lập trình mơ phỏng
các thuật tốn trên mảng 1 chiều, 2 chiều.
Một số thuật tốn được lấy làm ví dụ cho việc mơ phỏng trong SKKN của tơi
là:
+ Thuật tốn sắp xếp:
+ Thuật tốn tìm kiếm:
+ Sàng ngun tố:
+….
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.
*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
6


End With
With Cells(row, col).Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With Cells(row, col).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
With Cells(row, col).Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = xlAutomatic
.TintAndShade = 0
.Weight = xlThin
End With
Cells(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
7


*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)
Call fillColorCell(row, i, 100)
Call createFrame(row, i)
Call fillColorWord(row, i, 255)
Cells(row, i) = value
End Sub
*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.
Sub printArray(ByRef arrayInput As Variant, arrayColorInput() As Long, i, j As

Long)
Dim k As Long
For k = LBound(arrayInput) To UBound(arrayInput) Step 1
Cells(i, j + k) = k + 1
Cells(i + 1, j + k) = arrayInput(k)
Call fillColorCell(i + 1, j + k, arrayColorInput(k))
Call createFrame(i + 1, j + k)
Next k
End Sub
*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.
------------------------------------------------------------------------------------------------------Sub Swap(ByRef value_1, ByRef value_2)
Dim tmp As Long
tmp = value_1
8


value_1 = value_2
value_2 = tmp
End Sub
------------------------------------------------------------------------------------------------------Sub ResetSpaceWork()
Range("D4:BU500").Clear
With Range("d4:BU500").Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End Sub
2.3.Chương trình mơ phỏng thuật tố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 tốn sẽ được tơ màu vàng hoặc màu xanh
lá.
Một số chương trình mơ phỏng bài tốn như sau:
2.3.1.Thuật tốn sắp xếp.
*Thuật toán sắp xếp nổi bọt.
Sub Algorithm_BubbleSort()
Call Library.ResetSpaceWork
Dim i, j, k As Long
Dim arrayValueInput As Variant
arrayValueInput = Split(Cells(6, 2), ";")
If UBound(arrayValueInput) = -1 Then
MsgBox "Nhap input ? "
Exit Sub
End If
9


cd = LBound(arrayValueInput)
cc = UBound(arrayValueInput)
For i = cd To cc Step 1
Cells(4, i + 5) = i + 1
Cells(6, i + 5) = arrayValueInput(i)
Call Library.createFrame(6, i + 5)
Next i
ReDim arrayColor(cd To cc), arrayValue(cd To cc) As Long
For i = cd To cc Step 1
arrayValue(i) = Val(arrayValueInput(i))
arrayColor(i) = 255
Next i

Call BubbleSort(arrayValue)
End Sub
------------------------------------------------------------------------------------------------------Sub BubbleSort(ByRef arrayInput As Variant, Optional ByVal lUpper As Long = -1,
_ Optional ByVal lLower As Long = -1)
Dim 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)
'Algorithm 1
arrayResult = arrayInput
row = 6
For i = lLower To (lUpper - 1) Step 1
row = row + 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))
10


row = row + 1
End If
Next j
arrayColor(i) = 65535
Call Library.printArray(arrayResult, arrayColor, row, 5)
row = row + 1
Next i

arrayInput = arrayResult
End Sub
*Thuật toán sắp xếp Quick sort.
Private Sub QuickSort(ByRef arrayInput As Variant, ByVal low As Long, ByVal high
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)
End If
End Sub
Private Function Partition(ByRef arrayInput As Variant, ByVal low As Long, ByVal
high As Long) As Long
Dim privot, left, right, vbtemp As Long
privot = arrayInput(high)
left = low
right = high - 1
Do While True
While (left <= right)
If (left > high) Then
Exit Do
End If
If arrayInput(left) < privot Then
left = left + 1
Else
11


GoTo EndWhile_1

End If
Wend
EndWhile_1:
While (right >= left)
If (right < 0) Then
Exit Do
End If
If arrayInput(right) > privot Then
right = right - 1
Else
GoTo EndWhile_2
End If
Wend
EndWhile_2:
If (left > right) Then
Exit Do
End If
Call 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
12


End Function
2.3.2.Thuật tốn tìm kiếm:
Thuật tố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 tốn tìm kiếm tuần tự.
Sub Algorithm_Search_Sequentially()
Dim i, j, k As Long
Dim arrayValueInput As Variant
Call Library.ResetSpaceWork
arrayValueInput = Split(Cells(6, 2), ";")
If UBound(arrayValueInput) = -1 Then
MsgBox "Nhap input ? "
Exit Sub
End If
cd = LBound(arrayValueInput)
cc = UBound(arrayValueInput)
For i = cd To cc Step 1
Cells(4, i + 5) = i + 1
Cells(6, i + 5) = arrayValueInput(i)
Call createFrame(6, i + 5)
Next i
ReDim arrayColor(cd To cc), arrayValue(cd To cc) As Long
For i = cd To cc Step 1
arrayValue(i) = Val(arrayValueInput(i))
arrayColor(i) = 255

Next i
x = Val(Cells(7, 2))
row = 7
Call Search_Sequentially(arrayValue, x)
End Sub
---------------------------------------------------------------------------------------Sub Search_Sequentially(ByRef arrayInput As Variant, ByRef x As Long)
13


Dim i As Long
For i = LBound(arrayInput) To UBound(arrayInput) Step 1
If arrayInput(i) <> x Then
arrayColor(i) = 65535
Call Library.printArray(arrayInput, arrayColor, row, LBound(arrayInput)
+ 5)
row = row + 2
Else
arrayColor(i) = 570672
Call Library.printArray(arrayInput, arrayColor, row, LBound(arrayInput)
+ 5)
row = row + 2
Exit For
End If
Next i
End Sub
* Thuật tốn tìm kiếm nhị phân.
Sub Algorithm_BinarySearch()
Dim i, j, typeArray As Long
Dim arrayValueInput As Variant
Call Library.ResetSpaceWork

arrayValueInput = Split(Cells(6, 2), ";")
If UBound(arrayValueInput) = -1 Then
MsgBox "Nhap input ? "
Exit Sub
End If
cd = LBound(arrayValueInput)
cc = UBound(arrayValueInput)
For i = cd To cc Step 1
14


Cells(4, i + 5) = i + 1
Cells(6, i + 5) = arrayValueInput(i)
Call createFrame(6, i + 5)
Next i
ReDim arrayColor(cd To cc), arrayValue(cd To cc) As Long
For i = cd To cc Step 1
arrayValue(i) = Val(arrayValueInput(i))
arrayColor(i) = 255
Next i
typeArray = checkArrayInput(arrayValue)
If typeArray = -1 Then
MsgBox "Error. Mang A gom cac phan tu tang dan hoac giam dan."
Exit Sub
End If
x = Val(Cells(7, 2))
row = 7
Call BinarySearch(arrayValue, x, LBound(arrayValue), UBound(arrayValue),
typeArray)
End Sub

Sub BinarySearch(ByRef arrayInput, ByRef x As Long, left, right, typeArray As
Long)
Dim privot, i As Long
If left = right Then
If x = arrayInput(left) Then
arrayColor(left) = 570672
Else
arrayColor(left) = 65535
MsgBox "Khong ton tai x trong mang A"
15


End If
Call Library.printArray(arrayInput, arrayColor, row, LBound(arrayInput) + 5)
row = row + 2
Exit Sub
End If
privot = Int((left + right) / 2)
If x = arrayInput(privot) Then
arrayColor(privot) = 570672
Call Library.printArray(arrayInput, arrayColor, row, LBound(arrayInput)
+ 5)
row = row + 2
Exit Sub
End If
If typeArray = 1 Then
' tang dan
If x > arrayInput(privot) Then
For i = left To privot Step 1
arrayColor(i) = 65535

Next i
Call Library.printArray(arrayInput, arrayColor, row, LBound(arrayInput) + 5)
row = row + 2
Call BinarySearch(arrayInput, x, privot + 1, right, typeArray)
Else
For i = privot To right Step 1
arrayColor(i) = 65535
Next i
Call Library.printArray(arrayInput, arrayColor, row, LBound(arrayInput) + 5)
row = row + 2
Call BinarySearch(arrayInput, x, left, privot - 1, typeArray)
End If
Else
' giam dan
If x < arrayInput(privot) Then
16


For i = left To privot Step 1
arrayColor(i) = 65535
Next i
Call Library.printArray(arrayInput, arrayColor, row, LBound(arrayInput) + 5)
row = row + 2
Call BinarySearch(arrayInput, x, privot + 1, right, typeArray)
Else
For i = privot To right Step 1
arrayColor(i) = 65535
Next i
Call Library.printArray(arrayInput, arrayColor, row, LBound(arrayInput) + 5)
row = row + 2

Call BinarySearch(arrayInput, x, left, privot - 1, typeArray)
End If
End If
End Sub
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
Sub Not_ElementSieve(i, j)
Call Library.fillColorCell(i, j, 65535)
End Sub
Sub Is_ElementSieve(i, j)
Call Library.fillColorCell(i, j, 7093125)
Call Library.fillColorWord(i, j, 16777215)
End Sub
Sub correct(i, j)
Call Library.fillColorCell(i, j, 570672)
End Sub
17


Sub wrong(i, j)
Call Library.fillColorCell(i, j, 255)
Call Library.fillColorWord(i, j, 16777215)
End Sub
Sub Algorithm_ElementSieve()
Dim i, j, k, m, ii, jj As Long
Call Library.resetSpaceWork_2

x = Int(Val(Cells(6, 2)))
If x < 1 Or x > maxValue Then
MsgBox "Error. X thuoc [1; " & maxValue & " ]"
Exit Sub
End If
For k = 1 To maxValue Step 1
arrayCheck(k) = True
Next k
For k = 1 To maxValue Step 1
i = Int(k / 10)
j = k Mod 10
If x = k Then
Call correct(i + 6, j + 4)
Exit Sub
End If
If arrayCheck(k) = True Then
If k = 1 Then
Call Not_ElementSieve(6, 5)
GoTo ContinueLoop
Else
Call Is_ElementSieve(i + 6, j + 4)
m=2
While (k * m) < maxValue
ii = Int((k * m) / 10)
jj = (k * m) Mod 10
If (k * m) = x Then
18


Call wrong(ii + 6, jj + 4)

Exit Sub
End If
Call Not_ElementSieve(ii + 6, jj + 4)
arrayCheck(k * m) = False
m=m+1
Wend
End If
End If
ContinueLoop:
Next k
End Sub
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.
2.4.1. Thuật tốn sắp xếp.
Các bước thực hiện chương trình:
Bước 1: Nhập giá trị đầu vào cho bài tố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 tố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
phỏng thuật toán sắp xếp nổi bọt.

nếu muốn mơ

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:

19


+ Nháy chuột vào nút lệnh
phỏng thuật toán sắp xếp quick sort.

nếu muốn mơ

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:

20


2.4.2. Thuật tốn tìm kiếm.
Bước 1: Nhập giá trị đầu vào cho bài tố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 tố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 tốn:
+ Nháy chuột vào nút lệnh
phỏng thuật tốn tìm kiếm tuần tự.

nếu muốn mơ

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 tốn như sau (vị trí tìm thấy được tơ màu xanh lá):

21


+ Nháy chuột vào nút lệnh
phỏng thuật tốn tìm kiếm tuần tự.

nếu muốn mơ

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 tố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ố.
Bước 2: Nháy chuột vào nút lệnh
hiện thuật tốn và kiểm tra.

để thực

Hình ảnh mô phỏng với giá trị X cần kiểm tra là 149:

22


Kết quả: X=149 là số ngun 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ố ngun 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ật
tố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ỉ:
/>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.

23


C - 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 cho tớ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 tố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 tố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 tố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ời
gian 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 chun tâm vào việc học tập các
mơn Tố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ếu
cá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ơn
rấ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 đều
chưa được đào tạo bài bản về các chuyên đề lập trình nâng cao.
24


Chương trình mới luyện thi học sinh giỏi sử dụng C++ hoặc phython. Bản
than đ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ững

lớ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 NNLT
truyề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 xin
hồn tồ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

25


×