4.3查找算法设计(二)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Private Sub Command3_Click() If i = 0 Then Text1.Text = "没有单词,请首先输入单词。" Else Randomize j = Int(i * Rnd + 1) Text1.Text = Text1.Text & vbCrLf & words(j) End If End Sub
五、对半查找算法
对已经有顺序的资料:
我们首先在查找对象的中间位置取出一个元素来与目标元素对比,如果目标 元素较小,那么,我们在查找对象的上半部分继续进行查找就可以了。相反, 如果目标元素较大,则在查找对象的下半部分继续进行查找。
问题:在D:\PRIME.DAT列 出了20000000以内的全 部素数共1270607个,请 查找指定的值是否在其 中。
从String1的第n个位置开始搜索有没有String2, 有就是找到的第一个位置,没有值为0 例:L=InStr(4,”ABCDEABCDEF”,”CDE”)则L的值为8 K=InStr(1,”欢欢喜喜”,”欢喜”)
问题:运用InStr函数,在《红楼梦》第三回中查 找“黛玉”出现的次数,并把每个出现点输出。
4.3查找算法设计(二)
寿光胡玉清
三、数组
1、数组的概念:数组就是把有限个类型相同的变量用同一个名字命名,然后用编号 区分它们的变量的集合。这个名字称为数组名,编号为下标。组成数组的各个变量 称为数组的分量,也称为数组的元素,有时也称为下标变量。 例如:如果高二(1)班有40位同学,1号的名字叫陈婷,用字符串类型数组G21NAME来 记录这个班学生的名字,就应该当有G21NAME(1)=”陈婷”。 对于VB的数组,表示数组元素时应注意: ①下标要紧跟在数组名后,而且用圆括号括起来(不能用其他括号); ②下标可以是常量、变量或表达式,但其值必须是整数(如果是小数将四舍五入为 整数); ③下标必须为一段连续的整数,其最小值称为下界,其最大值称为上界。不加说明 时下界值默认为0。
3、数组元素的输入Байду номын сангаас输出:
(1)输入:可以使用赋值语句、文本框、InputBox函数等等。 (2)输出:
①用PRINT方法直接输出到窗体,但当数据大时难以实现数据的滚动。 ②使用控件,如标签、文本框等,并且设置滚动。
问题:设计一个“背单词”的程序。在学习英语时经常把一些单词 反复背诵,现设计一个程序,输入一些单词,然后打乱输出,以训 练记忆。
Dim y As Long, D(2000000) As Long, n As Long Private Sub Form_Activate() Open "d:\PRIME.DAT" For Input As #3 n=0 Do Until EOF(3) n = n + 1: Input #3, y: D(n) = y Loop Close 3 End Sub
Private Sub Command1_Click()
Dim Texts As String, Point(1 To 100000) As Long
Dim Total As Long, i As Long, L As Long Open "d:\hongloumeng.txt" For Input As #5 Do Until EOF(5) Line Input #5, a$ Texts = Texts & a$ Loop
Private Sub Text1_Click() Text2.Text = "" End Sub Private Sub Command2_Click() End End Sub
Close 5
i=1 L=1 While L > 0 L = InStr(i, Texts, "黛玉") If L > 0 Then i=L+1 Total = Total + 1 Point(Total) = L End If Wend Print "出现总数:"; Total Print "位置:" For i = 1 To Total Print Point(i), If i Mod 8 = 0 Then Print Next i End Sub
四、顺序查找的思路和解决方法:
当查找对象排列没有规律时可用顺序查找方法。顺序查找就是一 个一个地按照对象的元素往下找,直到全部元素都查一遍。如果要 查找的目标只是单个的元素,那么查找的过程就显得特别简单,即 把查找对象中的每个元素逐一与目标元素对照就可以了。 InStr(位置n,对象字符串String1,目标字符串String2)
Private Sub Command2_click() Text1.Text = "单词输出" For j = i To 1 Step -1 Text1.Text = Text1.Text & vbCrLf & words(j) Next j End Sub
i=i+1
words(i) = c End If Loop Until c = "-" End Sub
Private Sub Command1_Click() Dim b As Long, e As Long, m As Long, v As Long Text2.Text = "" b = 0: e = n + 1: v = Val(Text1.Text) If v > 20000000 Or v < 1 Then Text2.Text = "数据不在检测范围!" Else Do m = (b + e) \ 2 If D(m) < v Then b = m Else e = m Loop Until D(m) = v Or e - b <= 1 If D(m) = v Then Text2.Text = "它是素数" Else Text2.Text = "它 非素数" End If End Sub
• 注意:将textbox的 Multiline属性设为 true
Dim words(1 To 1000) As String Dim i As Integer, c As String Private Sub Command1_Click()
Do
c = InputBox("请输入第" + Str(i + 1) + "个单词:") If c <> "-" Then
2、数组的维数和定义:
如果数组只有一个下标则称为一维数组,但有许多场合一个下标是 不够的。例如,在电影院确定位置,要有行数和位数,如果要用一 个数组来记录这种位置就得有两个下标。有几个下标的数组称为几 维数组。 如:Dim Cscore(1 to 40) As Single,K(20,30) As Long K(14,8)=688 ‘就可以表示高二14班8号的总成绩为688分