Khi giảng dạy thực tế ở trường tôi thấy học sinh khi học phần thuật toán hay gặp khó khăn khi tiếp cận một thuật toán mới do khả năng tư duy, hình dung của các em còn hạn chế. Trong khi đó với trình độ của giáo viên và các công cụ hỗ trợ thì hoàn toàn có thể làm các chương trình mô phỏng thuật toán cho học sinh có thể tìm hiểu một các trực quan hơn.
Trang 1SỞ GDĐT BÀ RỊA VŨNG TÀU TRƯỜNG THCS CHU VĂN AN
NĂM HỌC 20…-20…
SỬ DỤNG FLASH
MÔ PHỎNG MỘT SỐ
THUẬT TOÁN CƠ BẢN
LĨNH VỰC TIN HỌC
TÁC GIẢ ………
GIÁO VIÊN BỘ MƠN TIN HỌC
Trang 2MỤC LỤC
II Mục đích và phương pháp nghiên cứu Trang 3
II Các biện pháp giải quyết vấn đề Trang 6
II Bài học kinh nghiệm, hướng phát triển Trang 13
Trang 3A PHẦN MỞ ĐẦU
I Lí do chọn đề tài
Những năm gần đây, ở Việt Nam môn Tin học đã được đưa vào chương trình của học sinh trung học cơ sở và trung học phổ thông như là một môn học chính thức Trong đó nội dung dạy học về lập trình là rất quan trọng, nó đòi hỏi học sinh cần nắm chắc kiến thức cơ bản về Tin học Trong đó, việc nắm vững các thuật toán
từ cơ bản đến phức tạp là rất quan trọng tốn nhiều thời gian và công sức rất lớn Hiện nay, việc truyền đạt các thuật toán dù là cơ bản cho học sinh mới học còn gặp rất nhiều khó khăn Có nhiều rất nhiều lý do: Học sinh khó hình dung, thời gian giảng dạy trên lớp có hạn, tài liệu tham khảo có thể tự đọc, tự học vẫn còn ít
Vì vậy để học sinh hiểu rõ hơn một số thuật toán cơ bản tôi xây dựng đề tài này mô phỏng hoạt động của một số thuật toán giải cơ bản để học sinh có thể dễ dàng nắm bắt tư tưởng cũng như từng bước hoạt động cụ thể của các thuật toán, để giáo viên có thể làm cho bài giảng về các thuật toán này trở nên dễ hiểu, dễ tiếp thu hơn
II Mục đích và phương pháp nghiên cứu
1 Mục đích nghiên cứu
Đề tài được nghiên cứu nhằm mục đích giúp cho học sinh có thể nắm vững các thuật toán cơ bản một cách trực quan, chi tiết từng bước một
Đồng thời giúp cho giáo viên có một công cụ giảng dạy lập trình tốt hơn
2 Phương pháp nghiên cứu
Phương pháp nghiên cứu, phân tích tổng hợp tài liệu
Phương pháp điều tra, thống kê
Phuương pháp khảo nghiệm, thử nghiệm
III Giới hạn đề tài
Đề tài phục vụ cho việc giảng dạy phần lập trình môn tin học THCS và THPT
Trang 4IV Các giả thiết nghiên cứu
Cách đây gần ba thập kỉ (khoảng những năm 80 của thế kỉ XX), ở nhiều nước trên thế giới mô phỏng thuật toán đã được sử dụng trong việc giảng dạy các môn Khoa học máy tính như một công cụ hữu hiệu để mô tả thuật toán một cách trực quan, khoa học Không những vậy nó còn cho người học biết chi tiết từng bước hoạt động của thuật toán cùng với cấu trúc dữ liệu đi kèm thông qua việc mô
tả bằng đồ họa
Trong quá trình tìm hiểu một thuật toán, học sinh sẽ hiểu sâu hơn và dễ dàng nắm bắt hơn nếu được quan sát các bước của thuật toán một cách trực quan Điều này sẽ gây hứng thú và kích thích khả năng tu duy của các em hơn
V Cơ sở lý luận, cơ sở thực tiễn
1 Cơ sở lí luận
Một chương trình lập trình trên máy tính sẽ chứa các cấu trúc dữ liệu của thuật toán mà nó sẽ thực hiện Trong khi thực hiện chương trình đó, giá trị thực của cấu trúc dữ liệu thay đổi dựa trên từng bước hoạt động của thuật toán Mô phỏng thuật toán sử dụng đồ hoạ để biểu diễn sự thay đổi trạng thái của cấu trúc dữ liệu cho từng bước hoạt động của nó một cách trực quan, khoa học Trong suốt quá trình biểu diễn, người dùng có thể quan sát việc thực thi thuật toán theo từng bước
để có thể biết chi tiết về thuật toán cũng như hiểu một cách tường tận về thuật toán đó
Trên thế giới, hệ thống mô phỏng đã được sử dụng rộng rãi trong việc dạy học ngành khoa học máy tính Đã có một số lượng các học sinh, sinh viên được đào tạo bằng các chương trình mô phỏng để thấy được hiệu quả của nó trong giảng dạy với kết quả rất khả quan
2 Cơ sở thực tiễn
Khi giảng dạy thực tế ở trường tôi thấy học sinh khi học phần thuật toán hay gặp khó khăn khi tiếp cận một thuật toán mới do khả năng tư duy, hình dung của các em còn hạn chế
Trang 5Trong khi đó nếu muốn các em hiểu được giáo viên phải thêm bước mô tả một ví dụ thực tế của thuật toán bằng tay ( viết lên bảng với các số liệu đầu vào này thì thuật toán sẽ chạy các bước như sau ) Trong khi đó với trình độ của giáo viên
và các công cụ hỗ trợ thì hoàn toàn có thể làm các chương trình mô phỏng thuật toán cho học sinh có thể tìm hiểu một các trực quan hơn
VI Kế hoạch thực hiện
Đề tài được thực hiện qua các bước :
1 Nghiên cứu và phân tích giải thuật
Bước đầu tiên trong quá trình giải một bài toán Tin học là xác định bài toán
Ở bước này, dựa trên phát biểu của bài toán ta phải xác định rõ Input (dữ liệu đầu vào) và Output (kết quả) của bài toán là gì và mối quan hệ giữa chúng Thông tin
đó cần được nghiên cứu một cách cẩn thận để có thể lựa chọn thuật toán, cách thể hiện các đại lượng đã cho, các đại lượng phát sinh trong quá trình giải toán và lựa chọn ngôn ngữ lập trình thích hợp
2 Đề xuất lựa chọn công cụ để phát triển chương trình mô phỏng thuật toán
Trong mục này, chúng ta sẽ phân tích các cách tiếp cận để xây dựng hệ thống mô phỏng và tính khả thi của chúng Ta sẽ xem xét một vài công cụ mô phỏng thuật toán để xây dựng hệ thống mô phỏng phù hợp Có nhiều công cụ để
mô phỏng thuật toán như : C#, Java, Flash trong khuôn khổ đề tài này tôi chọn công cụ Flash để thực hiện đây là một công cụ rất mạnh về thiết kế đồ họa và có ngôn ngữ kịch bản AS 3.0 hỗ trợ lập trình
3 Thực hiện viết chương trình mô phỏng và đưa vào sử dụng giảng dạy
Phần này đòi hỏi giáo viên phải nắm vững được các công cụ để mô phỏng
và đầu tư thời gian, công sức để viết chương trình mô phỏng sau đó kiểm tra tính đúng đắn và đưa vào sử dụng
Trang 6B PHẦN NỘI DUNG
I Thực trạng và những mâu thuẫn
Khi giảng dạy thực tế ở trường tôi thấy học sinh khi học phần thuật toán hay gặp khó khăn khi tiếp cận một thuật toán mới do khả năng tư duy, hình dung của các em còn hạn chế Trong khi đó với trình độ của giáo viên và các công cụ hỗ trợ thì hoàn toàn có thể làm các chương trình mô phỏng thuật toán cho học sinh có thể tìm hiểu một các trực quan hơn
II Các biện pháp giải quyết vấn đề
Sau đây tôi xin trình bày cách viết chương trình mô phỏng 4 thuật toán cơ bản : sắp xếp đổi chỗ trực tiếp, tìm giá trị lớn nhất, tìm kiếm nhị phân, tìm kiếm tuần tự Trong đó thuật toán sắp xếp đổi chỗ trực tiếp được minh họa chi tiết, các thuật toán còn lại cách làm tương tự (Ngoài ra còn một số chương trình mô phỏng các thuật toán khác tất cả có file mã nguồn trong CD)
1 Mô phỏng thuật toán sắp xếp đổi chỗ trực tiếp
a Thuật toán :
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then begin
tmp:=a [i]; a[i] :=a [j] ; a[j]: =tmp ; end;
b Thiết kế chương trình mô phỏng
Giao diện :
Trang 7Đầu vào :
Nhấn nút để chọn file input.txt
Nhấn nút để load giá trị từ file vào chương trình
Thiết kế chương trình
Đầu tiên tạo các layer và các frame như hình dưới Sau đó thiết kế như giao diện ở trên Trong đó các node chứa số và mũi tên là MovieClip
Tại layer action gồm hàm khoitao(e:MouseEvent) được gọi khi nhấn nút cập
nhật, hàm này sẽ đọc giá trị từ file input và hiển thị node thông tin trên màn hình
Hàm set_muiten(i,j) để thiết lập mũi tên theo các node Hàm hoandoi(i,j) để hoán đổi giá trị 2 node Hàm pressNext01(e:MouseEvent) được gọi khi nhấn nút Play để chạy tự động Hàm pressNext(e:MouseEvent) được gọi khi nhấn nút Next để chạy
từng bước
Tại frame 1(b1) : ta thiết kế phần nhập số liệu Sau đó nhảy đến frame 10(b2)
bằng câu lệnh gotoAndStop(“b2”)
Tại frame 10 (b2) : ta kiểm tra xem có cấn đổi giá trị hay không :
if (A[di]>A[dj]) {
txt_tt.text="A[i] > A[j] đổi chỗ";
}else {
txt_tt.text="A[i] < A[j] không đổi chỗ";
}
Trang 8Sau đó nhảy đến frame 20(b3) bằng câu lệnh gotoAndStop(“b3”)
Tại frame 20 (b3) : ta thực hiện việc hoán đổi giá trị bằng hàm hoandoi(i,j):void
if (A[di]>A[dj])
{
hoandoi(di,dj);
txt_khoa.text="A[i] = " + A[di] + " ; " + "A[i] = " + A[dj] ; }
Sau đó nhảy đến frame 20(b3) bằng câu lệnh gotoAndStop(“b3”)
Tại frame 30 (b4) : ta kiểm tra các gái trị của i và j để quyết định
if(dj<N-1)
{
dj=dj+1;
gotoAndStop("b3") } else
{
if (di<N-2) {
di=di+1;
dj=di+1;
gotoAndStop("b3") }else
{
gotoAndStop("b5");
} }
Trang 9Tại frame 50 (b5) : là frame kết thúc, có nút trở về để làm lại từ đầu
btn_reset.addEventListener(MouseEvent.CLICK,reset);
function reset(e:MouseEvent):void
{
for(var j:int=0;j<N;j++) {
stage.removeChild(boxs[j]);
} stage.removeEventListener(Event.ENTER_FRAME,pressNext01); gotoAndStop(1);
}
Ta thiết kế 3 nút điều khiển : Play, Next, Stop.
- Nút Play để chương trình chạy tự động với biến cố Event.ENTER_FRAME
btn_play.addEventListener(MouseEvent.CLICK,pressPlay);
function pressPlay(e:MouseEvent):void
{
stage.addEventListener(Event.ENTER_FRAME,pressNext01);
}
- Nút Next để chương trình chạy từng bước với biến cố MouseEvent.CLICK
- Nút Sop để chương trình dừng chạy với biến cố MouseEvent.CLICK
btn_stop.addEventListener(MouseEvent.CLICK,pressStop);
function pressStop(e:MouseEvent):void
{
stage.removeEventListener(Event.ENTER_FRAME,pressNext01); stop();
}
Trang 102 Mô phỏng thuật toán tìm kiểm nhị phân
a Thuật toán :
while L < H do
begin
mid := (L + H) div2;
if (a[mid] = X) then exit(mid);
if (a[mid] < X) then L := mid + 1
else H := mid - 1;
end;
b Thiết kế chương trình mô phỏng
Giao diện :
Đầu vào : giống phần trước
Thiết kế chương trình : giống phần trước
Tại frame 1 (b1) : ta thiết kế phần nhập số liệu
Tại frame 10 (b2) : ta kiểm tra :
if (dau>cuoi)
gotoAndStop("b5")
else
gotoAndStop("b3");
Tại frame 20 (b3) : ta kiểm tra các giá trị của A[giua], dau, cuoi để quyết định:
Trang 11- A[giua]=K thì kết thúc tìm thấy (tới b5)
- dau > cuoi thì kết thúc không tìm thấy (tới b5)
- dau < cuoi thì tìm tiếp (quay lại b2)
Tại frame 50 (b5) : ta thiết kế phần kết quả có nút trở về để làm lại từ đầu
Ta thiết kế 3 nút điều khiển : Play, Next, Stop : Giống như phần trước
3 Mô phỏng thuật toán tìm kiếm tuần tự
a Thuật toán :
for i:=1 to n do
if a[i]=K then exit(i);
b Thiết kế chương trình mô phỏng
Giao diện :
Đầu vào : giống phần trước
Thiết kế chương trình : giống phần trước
Tại frame 1 (b1) : ta thiết kế phần nhập số liệu
Tại frame 10 (b2) : ta kiểm tra :
if (di>N)
gotoAndStop("b5")
else
gotoAndStop("b3");
Tại frame 20 (b3) : ta kiểm tra xem A[di]=K hay không để quyết định tìm tiếp
(quay lại b2) hoặc kết thúc (tới b5)
Trang 12Tại frame 50 (b5) : ta thiết kế phần kết quả có nút trở về để làm lại từ đầu
Ta thiết kế 3 nút điều khiển : Play, Next, Stop : Giống như phần trước
4 Mô phỏng thuật toán tìm giá trị lớn nhất
a Thuật toán :
for i:=1 to n do
if a[i]>max then max:=a[i];
b Thiết kế chương trình mô phỏng
Giao diện :
Đầu vào : giống phần trước
Thiết kế chương trình : giống phần trước
Tại frame 1 (b1) : ta thiết kế phần nhập số liệu
Tại frame 10 (b2) : ta kiểm tra :
if (di>N)
gotoAndStop("b5")
else
gotoAndStop("b3");
Tại frame 20 (b3) : ta kiểm tra xem A[di]>K hay không để quyết định cập nhật giá
trị max hay không
Tại frame 50 (b5) : ta thiết kế phần kết quả có nút trở về để làm lại từ đầu
Ta thiết kế 3 nút điều khiển : Play, Next, Stop : Giống như phần trước
Trang 13III Hiệu quả áp dụng
Qua quá trình thực hiện, tôi đã rút được rất nhiều kinh nghiệm cho bản thân trong việc tiến hành các bước viết chương trình cũng như ứng dụng vào giảng dạy đạt hiệu quả Về phía học sinh việc các em hứng thú học tập hơn và nắm bắt được các thuật toán dễ dàng hơn, sâu sắc hơn
C PHẦN KẾT LUẬN
I Ý nghĩa của đề tài với công tác
Việc áp dụng đề tài đã góp phần nâng cao chất lượng học sinh thông qua việc rèn luyện khả năng tư duy và giải quyết vấn đề cho các em Đồng thời đề tài cũng góp phần nâng cao tính sáng tạo, tìm tòi học hỏi của giáo viên để có thể tìm ra cách
mô phỏng các thuật toán đơn giản mà hiệu quả, vừa góp phần tiết kiệm cho nhà trường và xã hội
II Bài học kinh nghiệm, hướng phát triển
Để có thể áp dụng tốt giáo viên cần đầu tư công sức thường xuyên nâng cao trình độ chuyên môn và cập nhật công nghệ mới Giáo viên có thể phát triển từ mô phỏng các thuật toán từ đơn giản sang phức tạp đặc biệt là các thuật toán đồ thị
III Đề xuất kiến nghị
- Nhà trường và cấp trên nên tạo điều kiện cho giáo viên được nâng cao nghiệp vụ
để phục vụ trong giảng dạy tốt hơn
Xác nhận, đánh giá, xếp loại của đơn vị :
………
………
………
………
………
………
………
Sông xoài, ngày 24 tháng 2 năm 201
Tôi cam đoan đây là SKKN của bản thân tôi viết, không sao chép nội dung của người khác
(Ký và ghi rõ họ tên)