摘 要:算法是程序設(shè)計(jì)的靈魂,也是語(yǔ)言課教學(xué)的難點(diǎn),在教學(xué)法過(guò)程中,如果能加以計(jì)算機(jī)輔助教學(xué),可以提高教學(xué)效果,同時(shí)編寫這樣的程序可大大增強(qiáng)學(xué)生的學(xué)習(xí)興趣,提高學(xué)生的編程能力。由于算法比較抽象,因此要理解和掌握其中的原理就比較困難。通過(guò)對(duì)二分查找法的動(dòng)態(tài)演示,讓學(xué)生能更好地了解算法的來(lái)龍去脈,抓住算法的本質(zhì),從而激發(fā)了對(duì)程序設(shè)計(jì)這門課的學(xué)習(xí)興趣。
關(guān)鍵詞:對(duì)分查找法;動(dòng)態(tài)演示;控件移動(dòng)
對(duì)于抽象的、難以理解的算法單純地靠老師在講臺(tái)上講和在黑板上畫圖,很難講清楚,學(xué)生也似懂非懂。如果制成動(dòng)畫,動(dòng)態(tài)地,一步一步地演示,將深?yuàn)W理論和邏輯推理的內(nèi)容,直觀、形象、清晰地展現(xiàn)在學(xué)生面前,使學(xué)生在頭腦中產(chǎn)生一個(gè)深刻的印象,就會(huì)起到事半功倍的效果,使得本來(lái)索然無(wú)味的計(jì)算機(jī)編程課變得生動(dòng)有趣、高效而又充滿活力。
1.對(duì)分查找法的基本思想
對(duì)分查找法又稱折半查找,它的基本思路是:首先取有序數(shù)列的中間數(shù)據(jù),與查找值C進(jìn)行比較。如果正好是要查找的數(shù)據(jù),則查找成功,結(jié)束查找。如果中間數(shù)據(jù)大于要查找的值C,則將小于中間數(shù)據(jù)的(即左半部分)一半對(duì)分,找出其中間值再與比較;如果中間數(shù)據(jù)小于要查找的值C,則將大于中間數(shù)據(jù)的(即右半部分)一半對(duì)分,再次進(jìn)行比較。根據(jù)比較結(jié)果,再對(duì)分相應(yīng)的數(shù)據(jù)段。如此對(duì)分比較下去,直找到要查找的數(shù)或當(dāng)左端點(diǎn)L>R(右端點(diǎn))為止。
其具體方法是:設(shè)置三個(gè)位置指針,即左端點(diǎn)指針L,中間位置指針M,右端點(diǎn)指針R,
假設(shè)有序數(shù)列為A(1 TO 12)
左端點(diǎn)指針L=1,右端點(diǎn)指針R=12,中間位置指針M=INT((L+R)/2)
1.1判斷待查數(shù)X是否等于A(M)(中間數(shù)),如果是,則已找到,查找停止,否則繼續(xù)下去;
1.2判斷待查數(shù)X是否小于A(M)(中間數(shù)),如果是,則必定落在左端點(diǎn)指針L和中間位置指針M-1的范圍之內(nèi),下一步查找只需在這個(gè)范圍內(nèi)進(jìn)行,左端點(diǎn)指針L指向不變,右端點(diǎn)指針R=M-1;
1.3如果X大于A(M)(中間數(shù)),X必定落在右端點(diǎn)指針R和中間位置指針M+1的范圍之內(nèi),下一步查找只需在這個(gè)范圍內(nèi)進(jìn)行,右端點(diǎn)指針R指向不變,左端點(diǎn)指針L=M+1。
在確定了新的查找范圍之后,重復(fù)上述比較,直到找到該數(shù)或者沒(méi)有找到該數(shù),都應(yīng)退出循環(huán)。對(duì)于這樣的算法如何能生動(dòng)、直觀、形象地展現(xiàn)在學(xué)生面前,這就是動(dòng)態(tài)演示程序的設(shè)計(jì)的目的。
2.動(dòng)態(tài)演示程序的設(shè)計(jì)
2.1界面的設(shè)計(jì):依據(jù)上述算法,首先隨機(jī)產(chǎn)生一組數(shù)據(jù),我們將這批數(shù)據(jù)放入一個(gè)數(shù)組中,數(shù)組的每個(gè)元素為TEXTBOX控件,這就要求動(dòng)態(tài)產(chǎn)生控件數(shù)組。再用跳動(dòng)的箭頭來(lái)指示左端點(diǎn)、中間點(diǎn)、右端點(diǎn),為此在界面上放入三個(gè)Frame1框架,框架的底部放一個(gè)標(biāo)簽框用以顯示左中右哪個(gè)端點(diǎn),中間放一個(gè)文本框用以存放指針值(即指示數(shù)組中的第幾個(gè)數(shù)據(jù)),框架的頂部是一個(gè)圖形框用以存放箭頭,這樣當(dāng)左、中、右三個(gè)指針移動(dòng)時(shí),我們只移動(dòng)框架。動(dòng)態(tài)產(chǎn)生N個(gè)文本框控件的主要代碼如下:
Dim TXT1(1 To 14)As TextBox ’聲明控件數(shù)組
For intX = 1 To N ’ 動(dòng)態(tài)產(chǎn)生N個(gè)文本框控件,用于存放數(shù)據(jù)
Set TXT1(intX)= Me.Controls.Add(“VB.TextBox”,“Cmd”& intX)
TXT1(intX).Move 1200 * i