VISUALBASIC常用算法汇总
VB常用算法介绍

VB常用算法介绍在VB程序开发中,常常需要使用各种算法来处理数据和解决问题。
下面将介绍几种常用的VB算法,包括排序算法、算法和图算法等。
1.排序算法排序算法用来将一组数据按照一定的规则进行排列。
常见的排序算法包括冒泡排序、选择排序、插入排序、归并排序和快速排序等。
冒泡排序(Bubble Sort)是一种交换排序算法,通过不断地相邻元素比较和交换,将较大的元素逐渐交换到末尾,从而实现排序。
冒泡排序的时间复杂度为O(n^2)。
选择排序(Selection Sort)是一种排序算法,每次从待排序的数据元素中选择最小(或最大)的一个元素,放到已排序的序列的末尾。
选择排序的时间复杂度为O(n^2)。
插入排序(Insertion Sort)是一种排序算法,将数组元素分为已排序和未排序两部分,每次从未排序的部分中取出一个元素,插入到已排序的部分的适当位置。
插入排序的时间复杂度为O(n^2)。
归并排序(Merge Sort)是一种分治排序算法,将待排序的数据分为两个子序列,然后递归地对子序列进行排序,并将两个已排序的子序列合并成一个有序序列。
归并排序的时间复杂度为O(nlogn)。
快速排序(Quick Sort)是一种分治排序算法,通过一次划分将待排数据分成左右两个子序列,然后递归地对子序列进行排序。
快速排序的时间复杂度为O(nlogn)。
2.算法算法用来在一个数据集合中查找一些元素或满足特定条件的元素。
常见的算法包括线性、二分和深度优先。
线性(Linear Search)是一种简单的算法,从数据集合的第一个元素开始逐个比较,直到找到目标元素或遍历完整个集合。
线性的时间复杂度为O(n)。
二分(Binary Search)是一种在有序数据集合中查找目标元素的算法,通过每次将范围缩小一半来快速定位目标元素。
二分的时间复杂度为O(logn)。
深度优先(Depth-First Search,DFS)是一种用来在图或树结构中遍历所有节点的算法,从一个起始节点开始,先遍历一个邻接节点,然后再递归地遍历该邻接节点的邻接节点。
Visual_Basic基本函数大全

Abs
函数
返回数的绝对值。
And
运算符
执行两个表达式的逻辑连接。
Array
函数
返回含一数组的变体。
Asc
函数
返回字符串首字母的ANSI字符代码。
赋值运算符
(=)
给变量或属性赋值。
Atn
函数
返回数的反正切值。
调用语句
将控制移交
Sub或Function过程。
CBool
函数
返回已被转换为Boolean子类型的变体的表达式。
Value
属性
返回在搜索字符串中已发现匹配的值或正文。
VarType
常数
定义变体子类型的常数列表。
VarType
函数
返回标识变体子类型的数值。
VBScript
常数
在VBScript中提供不同种类的常数。
Weekday
函数
返回表示星期几的数值。
WeekdayName
函数
返回表示星期几的字符串。
While...Wend
杂项常数
不能纳入任何其他类的常数列表。
Mod
运算符
两数相除,只返回余数。
Month
函数
返回月份,取值围为1至12。
MonthName
函数
返回表示月份的字符串。
MsgBox
常数
与MsgBox函数一起使用的常数列表。
MsgBox
函数在对话框中显示消息,等待用户单击按钮,并返回表示用户所击按钮的数值。
乘法运算符
LoadPicture
函数
返回图片对象。仅用于32位平台。
Log
函数
返回数的自然对数。
VisualBasic技巧集锦(附示例源码)

VisualBasic技巧集锦(附示例源码)静态变量 iLeftOff 指定了字符长度。
自动选择 Te某t 的内容在使用VFP的应用进行录入时,每进入一个录入框,就自动选择该框中的所有内容。
利用以下的代码,也可实现类似的功能。
Private Sub MyTe某tBo某_GotFocus( AutoSelect MyTe某tBo某End SubSub AutoSelect(SelObject As Control) SelObject.SelStart = 0 If TypeOf SelObject Is MaskEdBo某 ThenSelObject.SelLength = Len(SelObject.FormattedTe某t) ElseIf TypeOf SelObject Is Te某tBo某 Then SelObject.SelLength = Len(SelObject.Te某t) End If End If End Sub捕捉 MouseE某it 事件MouseDown、MouseUp、MouseMove。
VB 似乎提供了很好的 Mouse 事件。
但好象还缺少什么!对!还差 MouseE某it(鼠标移出)事件。
在VB 中,我们要捕捉 MouseE某it 事件,必须用 API 函数:Private Declare Function SetCapture Lib \As LongPrivate Declare Function ReleaseCapture Lib \ 然后,我们可以在控件(以 Picture1 为例)的 MouseMove 事件上加上以下代码:Dim MouseE某it As BooleanMouseOver = (0 <= X) And (X <=\<=\........SetCapture Picture1.hWnd Else ........ReleaseCapture End If如何让文本框输入完后,直接跳入下一行?我们在编制程序的时候,特别是数据库软件,经常会遇到这样一个问题:在文本框中输入完后,用户习惯性的按下回车键。
vb常用算法

1、主次对角线求和(可以写成过程的形式)Private Function SumMain(a() as integer) For i = 1 To Ubound(a,1)s = s + a(i, i)Next isumMain=sEnd FunctionPrivate Function SumFu(a() as integer) For i = 1 To Ubound(a,1)s = s + a(i, Ubound(a,1) + 1 - i)Next isumFu=sEnd Sub2、斐波那锲数列(后一项为前面两项之和) Private sub Fib(n as Integer)Dim a() as Integera(1) = 1: a(2) = 1redim preserve a(n)For i = 3 To na(i) = a(i - 1) + a(i - 2)redim preserve a(i)Next iEnd Sub3、冒泡法排序Private Sub Sort(a() as Integer)For i = 1 To Ubound(a) - 1For j = i + 1 To Ubound(a)If A(i) > A(j) Then '''判断a(i)与a(j+1)谁大,把大的放到前边t = A(i)A(i) = A(j)A(j) = tEnd IfNext jNext i''如果要从小到大排就把"A(j) > A(j - 1)"改称"A(j) < A(j - 1)" End Sub4、求和和周边元素的和Private Function Sum(a() as Integer)as integerFor i = 1 To Ubound(a,1)For j = 1 To Ubound(a,2)s = s + a(i, j)Next jNext iSum=sEnd FunctionPrivate Function ZhouBianSum(a() as Integer)as Integer For j = 1 To Ubound(a,1)s = s + a(1, j) + a(3, j)Next jFor i = Lbound(a,1) + 1 To 3 – Lbound(a,1)s = s + a(i, 1) + a(i, 3)Next iZhouBianSum=sEnd Function5、删除一项Private Sub Del(a() as Integer, n as Integer )For i = n To 9a(i) = a(i + 1)Next iEnd Sub6、选择法排序Private Sub ChoicePX(a() as Integer )For i = 1 To Ubound(a)-1k = iFor j = i + 1 To Ubound(a)If a(k) > a(j) Thenk = jEnd IfNext jIf k <> i Thentemp = a(i)a(i) = a(k)a(k) = tempEnd IfNext iEnd Sub7、增加一项Private Sub Add(a() as Integer ,n as Integer) For i = 10 To n Step -1a(i + 1) = a(i)Next ia(n) = mEnd Sub8、转置数列Dim a(3, 4) As Integer, b(4, 3) As Integer Private Sub ZhuanZhi()For i = 1 To 4For j = 1 To 3b(i, j) = a(j, i)Next jNext iEnd Sub9、最小公倍数Private Function GongBeishu(m As Integer, n As Integer) As Integer If n <> 0 And m <> 0 Thenk = nDo While k Mod m <> 0k = k + nLoopEnd IfGongBeishu = kEnd Function10、十六进制转化为十进制Private Function ST(strz As String) As StringFor i = Len(strz) To 1 Step -1strg = Mid(strz, i, 1)If Asc(strg) >= 65 And Asc(strg) <= 70 Thena = Asc(strg) - 55ElseIf Asc(strg) >= 97 Thena = Asc(strg) - 87Elsea = strgEnd Ifs = s + a * 16 ^ (Len(strz) - i) Next iST = sEnd Function。
VB常用算法总结大全

VB常用算法总结大全VB(Visual Basic)是一种对初学者友好的编程语言,因其简单易学的特点而受到很多人的喜爱。
在VB中,算法是编程过程中非常重要的一部分,它们用来解决各种问题,从简单的数学计算到复杂的数据处理。
本文将总结一些常用的算法,帮助VB程序员更好地应用于实际项目中。
一、排序算法1.冒泡排序冒泡排序是一种简单的排序算法,它通过不断地交换相邻的元素来对数据进行排序。
它的基本思想是从列表的第一个元素开始,依次比较相邻的两个元素,如果顺序不正确,则交换它们的位置。
重复这个过程,直到整个列表都已经排序。
2.快速排序快速排序是一种高效的排序算法,它通过选择一个基准元素,将列表分为两部分,一部分小于基准元素,一部分大于基准元素。
然后对这两部分分别进行快速排序,最后将它们合并在一起。
3.插入排序插入排序是一种简单直观的排序算法,它将列表分为已排序和未排序两部分,每次选择未排序部分的第一个元素,并插入到已排序部分的适当位置。
重复这个过程,直到整个列表都已经排序。
二、查找算法1.顺序查找顺序查找是一种简单的查找算法,它从列表的第一个元素开始,依次比较每个元素,直到找到目标元素或者遍历完整个列表。
2.二分查找二分查找是一种高效的查找算法,它要求列表已经排序。
它通过比较目标元素与列表中间元素的大小关系来确定要的部分,并缩小范围。
重复这个过程,直到找到目标元素或者确定列表中没有目标元素。
三、图算法1.深度优先(DFS)深度优先是一种用于图遍历的算法,它从一个起始点开始,沿着一个路径尽可能深地访问节点,直到遇到一个没有未访问过的相邻节点为止。
然后回溯到前一个节点,寻找其他路径。
2.广度优先(BFS)广度优先也是一种用于图遍历的算法,它从一个起始点开始,依次访问所有与起始点相邻的节点,然后再依次访问这些节点的相邻节点,直到遍历完图中的所有节点。
四、动态规划动态规划是一种解决多阶段决策问题的方法,它将问题分解为若干个阶段,并定义状态和决策。
VB常用算法总结

VB常用算法总结在VB(Visual Basic)编程中,常用的算法有很多。
下面将对其中一些常见和重要的算法进行总结。
请注意,由于篇幅限制,这只是一个简要总结,无法涵盖所有算法的细节。
1.排序算法:排序算法是计算机科学中最基本和常见的算法之一、在VB中,常用的排序算法包括冒泡排序、插入排序、选择排序、快速排序和归并排序等。
排序算法通过比较和交换来对一组数据进行重新排列,使其按照指定的顺序排列。
2.查找算法:查找算法用于在一个数据集中寻找特定的值或元素。
在VB中,常用的查找算法有二分查找和线性查找等。
二分查找是一种高效的算法,可以在有序数组中快速地找到目标元素。
3.图算法:图算法是用于解决与图相关的问题的算法。
在VB中,常用的图算法包括广度优先(BFS)和深度优先(DFS)等。
这些算法可以用于寻找图中的路径、检测环和遍历图等操作。
4.动态规划:动态规划是一种用于解决最优化问题的算法。
在VB中,常用的动态规划算法有背包问题、最长公共子序列和最短路径等。
动态规划算法通过拆解问题为子问题,并保存子问题的解来避免重复计算,从而提高算法的效率。
5.字符串匹配:字符串匹配算法用于在一个字符串中查找另一个字符串。
在VB中,常用的字符串匹配算法有暴力匹配算法、KMP算法和Boyer-Moore算法等。
这些算法通过比较字符来确定字符串的匹配位置。
6.线性代数:线性代数是数学的一个分支,用于解决线性方程组和向量空间等问题。
在VB中,常用的线性代数算法有矩阵运算、向量运算和线性方程求解等。
这些算法可以应用于计算机图形学、数据分析和机器学习等领域。
7.数学运算:数学运算在VB编程中非常常见。
常用的数学运算算法包括求和、平均值、最大值、最小值和中值等。
这些算法可以通过循环和条件判断来实现。
8.加密与解密:加密和解密算法用于保护数据的安全性。
在VB中,常用的加密算法有对称加密算法(如DES和AES)和非对称加密算法(如RSA和ECC)等。
VB常用算法总结大全详细版.ppt

m=n
n=r
Loop Until r = 0
Text3.Text = CStr(m) ‘输出最大公约数
End If
10End Sub
.精品课件.
7、关于循环嵌套(一个循环体内又包含了一个
个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚 存桃子的一半零一个,到第7天早上要吃时只剩下一个了,问小 猴那天共摘下了多少个桃子?
分析:这是一个“递推”问题,先从最后一天推出倒数第二天的 桃子,再从倒数第二天的桃子推出倒数第三天的桃子……。
设第n天的桃子为xn,那么它前一天的桃子数是xn -1。
.精品课件.
3.穷举法
“穷举法”也称为“枚举法”或“试凑法”, 即将可能出 现的各种情况一一测试,判断是否满足条件,一般采用循环来 实现。
例百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每 只3元。现在有100元钱要求买100只鸡,编程列出所有可能的 购鸡方案。
设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方 程为: x+y+y=100
End sub
7
.精品课件.
5.最小、最大值
在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若 无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与 最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较
。例随机产生10个100~200之间的数,求最大值。
Private Sub Command1_Click() Max = 100 For i = 1 To 10
x = Int(Rnd * 101) + 100 Print x; If x > Max Then Max = x Next i Print Print "最大值="; Max End Sub
VB基本算法

Next i
(3) 求n! (求累乘积)
fact=1
For i=1 to n
fact=fact * i
Next i
(4) 求斐波那契数列
Dim fib( ) As Integer ’数组声明
N=InputBox (“请输入要求的项数:”)
Redim fib(n)
fib(1)=1:fib(2)=1
for j=I+1 to n
if a(j)<a(point) then
point=j
end if
next j
if I<>poຫໍສະໝຸດ nt thent=a(I)
a(I)=a(point)
a(point)=t
end if
next I
For I=1 to n
print a(I);
Next I
max=a(1,1)
Print “n=”; n Print “m=”; m
(方法一)
Dim i as integer, L as integer
Dim n as integer, m as integer
Dim s as integer
N=InputBox(“input a number”)
S=n
L=len(trim(str(n)))
(8) 求两个数的最小公倍数
t=m
do while t mod n < > 0 ’判断t是n的倍数?
t = t +m ’保证t是m的倍数
loop
print m ;”和”; n ; “的最小公倍数是:”; t
(9)求无穷级数的近似值
关键是找出通项表达式,例如: 利用 级数公式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VB常用算法(1):累加和连乘1、算法说明累加形式:V=V+e连乘形式:V=V*e其中:V是变量,e是递增表达式。
累加和连乘一般通过循环结构来实现。
注意:需在执行循环体前对变量V赋初值。
一般的,累加时置初值0;连乘时置初值为1.举例求N!的结果。
Private Sub Command1_Click()Dim n%,i%,s&n=Val(InputBox("输入n"))s=1For i=1To ns=s*iNext iPrint sEnd Sub 错误的写法:Private Sub Command1_Click()Dim n%,i%,s&n=Val(InputBox("输入n"))For i=1To ns=1‘赋初值语句位置不对!s=s*iNext iPrint s‘输出s的值为n,而不是n!End Sub应用举例根据下列公式,求自然对数e的的近似值。
要求:误差小于0.00001Private Sub Command1_Click()Dim i%,n&,t!,e!e=2i=1t=1Do While t>0.00001i=i+1t=t/ie=e+tLoopPrint"计算了";i;"项目和是:";ePrint Exp(1)‘与上句输出值进行对比以证明算法的正确性End Sub解题技巧1)由于这类题目往往是根据精度要求来求值,因此我们不能预知具体循环次数,所以这类题目一般用Do循环,很少用For循环。
设定循环变量和通项变量,注意各变量的初值;2)分解通项表达式中各因子,并分别将各因子用循环变量表示;3)如果步骤2中有的因子比较复杂,难以直接用变量表示,此时可以考虑使用Function过程;4)根据步骤1、2、3,写出通项表达式;5)根据精度要求(往往是通项小于10负多少次方这样一个关系表达式),写出一条满足精度要求后跳出循环的语句。
通常是用:if通项表达式>10^(-N)then exit do,注意这句话一般需放在累加或者连乘式之前。
实例说明根据X值计算:要求:n项绝对值小于等于10-6为止。
1、由于循环次数不确定,因此确定用Do循环结构并定义循环变量用n表示(初值1);用户输入的值用x表示;通项用dblCos表示;累加值用sum表示,初值为0;2、分解通项式的组成于是有:private Function comp(n as long)as longdim I as longdim result as longresult=1‘此处注意,由于是连乘,初值为1for I=1to2*(n-1)result=result*Inext Icomp=resultEnd Function注意:由于是参数按地址传递,因此对于本题,实参的值不能在过程中被改变!(也是改错题常考的地方!!)4、根据步骤1、2、3,写出通项dblCos的表达式:dblCos=(-1)^(n+1)*x^(2*(n-1))/comp(n)5、根据精度要求知:If abs(dblCos)<=10^(-6)then exit do最后程序为:Private Sub Command1_Click()Dim n As Long,dblCos As Double,x As Doublex=Val(Text1.Text)n=1DodblCos=(-1)^(n+1)*x^(2*(n-1))/comp(n)If Abs(dblCos)<=10^(-6)Then Exit DoSum=Sum+dblCosn=n+1LoopPrint SumEnd SubPrivate Function comp(n As Long)As LongDim I As LongDim result As Longresult=1'此处注意,由于是连乘,初值为1For I=1To2*(n-1)result=result*INext Icomp=resultEnd Function常用算法(2):最值问题算法说明:在若干数中求最大值,一般先取第一个数为最大值的初值(即假设第一个数为最大值),然后,在循环体内将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值,直到循环结束。
(求最小值的方法类同。
)求若干数平均值,实质上就是先求和,再除以这些数的个数。
应用举例随机产生n个1-100(包括1和100)的数,求它们的最大值、最小值和平均值。
Private Sub Command1_Click()Dim n As Integer,i As Integer,min As Integer,max As Integer,aver As Single,s As Integer n=Val(InputBox("输入个数:"))s=Int(Rnd*100)+1max=smin=saver=sPrint"第1个数是:"&sFor i=2To ns=Int(Rnd*100)+1Print"第"&i&"个数是:"&sIf s>max Then max=sIf s<min Then min=saver=aver+sNext iaver=aver/nPrint"max=";max;"min=";min;"aver=";averEnd Sub解题技巧:最大值、最小值、平均值类型题目往往和数组放在一起考!有的不仅求这些值,还要对具有最大值或者最小值的行或列或者某个元素进行处理,这时就要在记录最大、最小值时,同时记录该值所在的行号和列号。
常用算法(3):素数1、算法说明素数(质数):就是一个大于等于2的整数,并且只能被1和本身整除,而不能被其他整数整除的数。
判别某数m是否是素数的经典算法是:对于m,从I=2,3,4,……,m-1依次判别能否被I整除,只要有一个能整除,m就不是素数,否则m是素数。
Private Function sushu(ByVal n As Long)As BooleanDim i As LongFor i=2To n-1If(n Mod i)=0Then Exit ForNext IIf I=n then sushu=TrueEnd Function很显然,实际上,我们可以改进上面For i=2To n–1为:For i=2To int(sqr(m))这样可以很好的提高效率。
以上判断是否为素数的代码务必识记!应用举例求100-200之内素数。
Private Sub Command1_Click()Dim j As IntegerFor j=100To200If sushu(j)=True ThenPrint jEnd IfNext jEnd Sub解题技巧识记判断素数的算法过程,根据题意,灵活调用!实例说明编程题(2002年春上机试卷04)找出10000以内所有可以表示为两个平方数和的素数。
思路:首先找10000以内的所有素数,对于每个素数判断其是否可以表示为两个平方数之和(即对于任意小于该素数shu的数I,如果I和shu-I均为平方数,则说明其可以表示为两个平方数之和。
)判断数I是否为平方数的方法:sqr(i)=int(sqr(i))Private Sub Command1_Click()Dim j As IntegerDim m As Long,n As LongFor j=2To10000If sushu(j)=True ThenIf pf(j,m,n)=True ThenList1.AddItem j&"="&m&"+"&nEnd IfEnd IfNext jEnd SubPrivate Function pf(ByVal shu As Long,m As Long,n As Long)As BooleanDim i As LongFor i=1To shu-1If(Sqr(i)=Int(Sqr(i)))And(Sqr(shu-i)=Int(Sqr(shu-i)))Thenpf=Truem=in=shu-iExit FunctionEnd IfNextEnd Function常用算法(4):进制转化1、算法说明1)十进制正整数m转换为R(2-16)进制的字符串。
思路:将m不断除r取余数,直到商为0,将余数反序即得到结果。
算法实现:Private Function Tran(ByVal m As Integer,ByVal r As Integer)As String Dim StrDtoR As String,n As IntegerDo While m<>on=m Mod rm=m\rIf n>9ThenStrDtoR=Chr(65+n-10)&StrDtoRElseStrDtoR=n&StrDtoREnd IfLoopTran=StrDtoREnd Function2)R(2-16)进制字符串转换为十进制正整数。
思路:R进制数每位数字乘以权值之和即为十进制数。
算法实现:Private Function Tran(ByVal s As String,ByVal r As Integer)As integer Dim n As Integer,dec As Integers=UCase(Trim(s))For i%=1To Len(s)If Mid(s,i,1)>="A"Thenn=Asc(Mid(s,i,1))-Asc("A")+10Elsen=Val(Mid(s,i,1))End Ifdec=dec+n*r^(Len(s)-i)Next iTran=decEnd Function常用算法(5):约数因子1、算法说明1)最大公约数:用辗转相除法求两自然数m、n的最大公约数。
(1)首先,对于已知两数m、n,比较并使得m>n;(2)m除以n得余数r;(3)若r=0,则n为求得的最大公约数,算法结束;否则执行步骤(4)(4)mßn nßr再重复执行(2)譬如:10与5分析步骤:m=10n=5r=m mod n=0所以n(n=5)为最大公约数24与9分析步骤:m=24n=9r=m mod n=6r≠0m=9n=6r=m mod n=3r≠0m=6n=3r=m mod n=0所以n(n=3)为最大公约数算法实现1、循环实现Private Function GCD(ByVal m As Long,ByVal n As Long)As Long Dim temp As LongIf m<n Then temp=m:m=n:n=tempDim r As LongDor=m Mod nIf r=0Then Exit Dom=nn=rLoopGCD=nEnd Function2、递归实现Private Function GCD(ByVal m As Long,ByVal n As Long)As Long Dim temp As LongIf m<n Then temp=m:m=n:n=tempDim r As Longr=m Mod nIf r=0ThenGCD=nElsem=nn=rGCD=GCD(m,n)End IfEnd Function2)最小公倍数m×n÷最大公约数3)互质数最大公约数为1的两个正整数解题技巧该算法需要识记!这种类型题目的扩展是约数和因子题型。