首页 > 范文大全 > 正文

对分搜索法动态演示程序设计

开篇:润墨网以专业的文秘视角,为您筛选了一篇对分搜索法动态演示程序设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:算法是程序设计的灵魂,也是语言课教学的难点,在教学法过程中,如果能加以计算机辅助教学,可以提高教学效果,同时编写这样的程序可大大增强学生的学习兴趣,提高学生的编程能力。由于算法比较抽象,因此要理解和掌握其中的原理就比较困难。通过对二分查找法的动态演示,让学生能更好地了解算法的来龙去脉,抓住算法的本质,从而激发了对程序设计这门课的学习兴趣。

关键词:对分查找法;动态演示;控件移动

对于抽象的、难以理解的算法单纯地靠老师在讲台上讲和在黑板上画图,很难讲清楚,学生也似懂非懂。如果制成动画,动态地,一步一步地演示,将深奥理论和逻辑推理的内容,直观、形象、清晰地展现在学生面前,使学生在头脑中产生一个深刻的印象,就会起到事半功倍的效果,使得本来索然无味的计算机编程课变得生动有趣、高效而又充满活力。

1.对分查找法的基本思想

对分查找法又称折半查找,它的基本思路是:首先取有序数列的中间数据,与查找值C进行比较。如果正好是要查找的数据,则查找成功,结束查找。如果中间数据大于要查找的值C,则将小于中间数据的(即左半部分)一半对分,找出其中间值再与比较;如果中间数据小于要查找的值C,则将大于中间数据的(即右半部分)一半对分,再次进行比较。根据比较结果,再对分相应的数据段。如此对分比较下去,直找到要查找的数或当左端点L>R(右端点)为止。

其具体方法是:设置三个位置指针,即左端点指针L,中间位置指针M,右端点指针R,

假设有序数列为A(1 TO 12)

左端点指针L=1,右端点指针R=12,中间位置指针M=INT((L+R)/2)

1.1判断待查数X是否等于A(M)(中间数),如果是,则已找到,查找停止,否则继续下去;

1.2判断待查数X是否小于A(M)(中间数),如果是,则必定落在左端点指针L和中间位置指针M-1的范围之内,下一步查找只需在这个范围内进行,左端点指针L指向不变,右端点指针R=M-1;

1.3如果X大于A(M)(中间数),X必定落在右端点指针R和中间位置指针M+1的范围之内,下一步查找只需在这个范围内进行,右端点指针R指向不变,左端点指针L=M+1。

在确定了新的查找范围之后,重复上述比较,直到找到该数或者没有找到该数,都应退出循环。对于这样的算法如何能生动、直观、形象地展现在学生面前,这就是动态演示程序的设计的目的。

2.动态演示程序的设计

2.1界面的设计:依据上述算法,首先随机产生一组数据,我们将这批数据放入一个数组中,数组的每个元素为TEXTBOX控件,这就要求动态产生控件数组。再用跳动的箭头来指示左端点、中间点、右端点,为此在界面上放入三个Frame1框架,框架的底部放一个标签框用以显示左中右哪个端点,中间放一个文本框用以存放指针值(即指示数组中的第几个数据),框架的顶部是一个图形框用以存放箭头,这样当左、中、右三个指针移动时,我们只移动框架。动态产生N个文本框控件的主要代码如下:

Dim TXT1(1 To 14)As TextBox ’声明控件数组

For intX = 1 To N ’ 动态产生N个文本框控件,用于存放数据

Set TXT1(intX)= Me.Controls.Add(“VB.TextBox”,“Cmd”& intX)

TXT1(intX).Move 1200 * intX, 1600, 800, 500 ’将文本框控件均匀分布在窗体内

TXT1(intX).Visible = True

TXT1(intX)= Int(Rnd * 100)

Next intX

2.2左、中、右三个指针移动的计算

窗体是一个容器,所有的控件都分布窗体内,每个容器都有一个坐标系,构成一个坐标系,需要三个元素:坐标原点、坐标度量单位、坐标轴的长度与方向。在VB中,当新建一个窗体时,新窗体采用默认坐标系,坐标原点在窗体的左上角,横向向右为X轴的正方向,纵向向下为Y轴的正向,单位为twip。指针移动时一般是改变控件的左上角的坐标位置即控件的LEFT和TOP属性或者是用控件的MOVE方法将控件移到指定的位置,这就要求我们熟悉对坐标的计算。下面是指针移动及改变指针值的代码:

Frame1(0).Left = 1000: Frame1(0).Top = 2100 ’左端点的初始位置

Text1(0)=1’左端点的初始指针值

Frame1(1).Left= 1200 * Int(N+1)/2):Frame1(1).Top = 2100 ’ 中间端点的初始位置

Text1(1)= Int((N+1)/ 2) ’中间端点的初始指针值

Frame1(2).Left = 1200 * N: Frame1(2).Top = 2100或 ’ 右端点的初始位置

Text1(2)= N ’ 右端点的初始指针值

如果要查找的数据在数组的左半部,则右指针移动,左指针不动。

Text1(2).Text =(Val(LTrim$(Text1(1).Text)) -1 ’先改变右指针的值,等于中点值减1

Frame1(2).Left = 1200 *(Val(Text1(2).Text):Frame1(2).Top = 2100 ’再移动右指针

如果要查找的数据在数组的右半部,则左指针移动,右指针不动。

Text1(0).Text = Val(LTrim$(Text1(1).Text)+1 ’先改变左指针的值,等于中点值加1。

Frame1(0).Left = 1200 * Val(Text1(0).Text):Frame1(0).Top = 2100 ’再移动左指针。

2.3控件移动及程序执行速度的控制

为了使演示更清晰,程序的执行及控件移动必须有合适的速度,速度的控制通常采用如下两种方式:

A.在适当的位置插入调用API延时的函数SLEEP,格式如下:

API Private Declare Sub Sleep Lib “kernel32.dll”(ByVal yssj As Long) ’先在程序的开头声明API函数。

Sleep N ’然后在适当位置插入调用API延时的函数,延时时间的长短靠参数N控制,单位为毫秒。

B.在适当的位置插入对话框,采用人机交互方式,程序执行到此会停下来,并提示是否继续,若继续单击“确定”。通常采用如下两种方式对话框。

STR1 = InputBox(“请继续”,“6”, 500,7000)

MsgBox“继续,单击确定”。

方便、快捷、高效的多媒体教学通过演示课件,使授课方式变得方便、快捷,节省了教师授课时的板书时间,提高了教学效率,使课堂教学活动变得活泼、生动有趣,富有启发性、真实性,可以从根本上改变传统上单调的教学模式,从而活跃学生的思维,激发学生的学习兴趣。

参考文献:

[1]龚沛曾.VISUAL BASIC 程序设计简明教程.高教出版社,2003-3.

[2]刘炳文.精通VISUAL BASIC6.0中文版.电子工业出版社,1999.

(作者单位 湖北省十堰职业技术学院)