郭亞慶
(十堰職業(yè)技術(shù)學(xué)院 電子工程系,湖北 十堰 442000)
對(duì)于抽象的,難以理解的算法單純地靠老師在講臺(tái)上講和在黑板上畫(huà)圖,很難講清楚,學(xué)生也似懂非懂。如果制成動(dòng)畫(huà),動(dòng)態(tài)的,一步一步的演示,將深?yuàn)W理論和邏輯推理的內(nèi)容,直觀、形象、清析地展現(xiàn)在學(xué)生面前,使學(xué)生在頭腦中產(chǎn)生一個(gè)深刻的印象,就會(huì)起到事半功倍的效果。使得本來(lái)索然無(wú)味的計(jì)算機(jī)編程課變得生動(dòng)有趣,高效而又充滿活力。
對(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(1TO 12)
左端點(diǎn)指針L=1:右端點(diǎn)指針R=12:中間位置指針 M=INT((L+R)/2)
(1)判斷待查數(shù)X是否等于A(M)(中間數(shù))。如果是,則已找到,查找停止,否則繼續(xù)下去。
(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。
(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[1]。
在確定了新的查找范圍之后,重復(fù)上述比較;直到找到該數(shù)或者沒(méi)有找到該數(shù),都應(yīng)退出循環(huán)。對(duì)于這樣的算法如何能生動(dòng)、直觀、形象地展現(xiàn)在學(xué)生面前,就是動(dòng)態(tài)演示程序設(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è)文本框控件的主要代碼如下:
窗體是一個(gè)容器,所有的控件都分布窗體內(nèi)。每個(gè)容器都有一個(gè)坐標(biāo)系。構(gòu)成一個(gè)坐標(biāo)系,需要三個(gè)元素:坐標(biāo)原點(diǎn)、坐標(biāo)度量單位、坐標(biāo)軸的長(zhǎng)度與方向。在VB中,當(dāng)新建一個(gè)窗體時(shí),新窗體采用默認(rèn)坐標(biāo)系,坐標(biāo)原點(diǎn)在窗體的左上角,橫向向右為X軸的正方向,縱向向下為Y軸的正向,單位為twip。指針移動(dòng)時(shí)一般是改變控件的左上角的坐標(biāo)位置即控件的LEFT和TOP屬性或者是用控件的MOVE方法將控件移到指定的位置,這就要求我們熟悉對(duì)坐標(biāo)的計(jì)算。下面是指針移動(dòng)及改變指針值的代碼:
為了使演示更清晰,程序的執(zhí)行及控件移動(dòng)必須有合適的速度,速度的控制通常采用如下兩種方式:
(1)在適當(dāng)?shù)奈恢貌迦胝{(diào)用API延時(shí)的函數(shù)SLEEP,格式如下:
API Private Declare Sub Sleep Lib“kernel32.dll”(ByVal yssj As Long)’先在程序的開(kāi)頭聲明API函數(shù)
Sleep N’然后在適當(dāng)位置插入調(diào)用API延時(shí)的函數(shù),延時(shí)時(shí)間的長(zhǎng)短靠參數(shù)N控制,單位為毫秒[2]。
(2)在適當(dāng)?shù)奈恢貌迦雽?duì)話框,采用人機(jī)交互方式,程序執(zhí)行到此會(huì)停下來(lái),并提示是否繼續(xù),若繼續(xù)單擊“確定”。通常采用如下兩種方式對(duì)話框。
STR1 = InputBox(“請(qǐng)繼續(xù)”,,“6”,500,7000)
MsgBox“繼續(xù),單擊確定”
方便、快捷、高效多媒體教學(xué)通過(guò)演示課件,使授課方式變得方便、快捷,節(jié)省了教師授課時(shí)的板書(shū)時(shí)間,提高了教學(xué)效率,使課堂教學(xué)活動(dòng)變得活潑、生動(dòng)有趣,富有啟發(fā)性、真實(shí)性,可以從根本上改變傳統(tǒng)上單調(diào)的教學(xué)模式,從而活躍學(xué)生的思維,激發(fā)學(xué)生的學(xué)習(xí)興趣。
附主要代碼如下:
[1]龔沛曾.VISUAL BASIC程序設(shè)計(jì)簡(jiǎn)明教程[M].北京:高等教育出版社,2006:115.
[2]劉炳文.精通 VISUAL BASIC6.0中文版[M].北京:電子工業(yè)出版社,2010:442.