VB编程经常要要用到的算法(经典)(4)_VB.net_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

VB编程经常要要用到的算法(经典)(4)

作者:黑客防线网安VB教程基地 来源:黑客防线网安VB教程基地 浏览次数:0

本篇关键词:算法经典编程经常
黑客防线网安网讯:  End Sub  八、矩阵(二维数组)运算  (1)矩阵的加、减运算  C(i,j)=a(i,j)+b(i,j) 加法  C(i,j)=a(i,j)-b(i,j) 减法  (2)矩阵相乘  (矩阵A有M*L个元素,矩阵B有L*N个元素,则...

  End Sub

  八、矩阵(二维数组)运算

  (1)矩阵的加、减运算

  C(i,j)=a(i,j)+b(i,j) 加法

  C(i,j)=a(i,j)-b(i,j) 减法

  (2)矩阵相乘

  (矩阵A有M*L个元素矩阵B有L*N个元素则矩阵C=A*B有M*N个元素)矩阵C中任一元素 (i=1,2,…,m; j=1,2,…,n)

  For i = 0 To m

  For j = 0 To n

  c(i, j) = 0

  For k = 0 To l

  c(i, j) = c(i, j) + a(i, k) * b(k, j)

  Next k

  Next j

  Next i

  (3)矩阵传置

  例:有二维数组a(5,5),要对它实现转置,可用下面两种方式:

  For i=1 to 5 (2) For i=2 to 5

  For j=i+1 to 5 For j=1 to i

  t=a(i,j) t=a(i,j)

  a(i,j)= a(j,i) a(i,j)= a(j,i)

  a(j,i)=t a(j,i)=t

  Next j Next j

  Next i Next i

  (4)求二维数组中最小元素及其所在的行和列

  基本思路同一维数组,可用下面程序段实现(以二维数组a(2,3)为例):

  ‘变量max中存放最大值,row,column存放最大值所在行列号

  Max = a(1, 1): row = 1: Column = 1

  For i = 1 To 2

  For j = 1 To 3

  If a(i, j) > a(row, Column) Then

  Max = a(i, j)

  row = i

  Column = j

  End If

  Next j

  Next i

  Print "最大元素是"; Max

  Print "在第" & row & "行,"; "第" & Column & "列"

  九、迭代法

  算法思想:
  
  
  对于一个问题的求解x,可由给定的一个初值x0,根据某一迭代公式得到一个新的值x1,这个新值x1比初值x0更接近要求的值x;再以新值作为初值,即:x1→x0,重新按原来的方法求x1,重复这一过和直到|x1-x0|<ε(某一给定的精度)此时可将x1作为问题的解。

  例:用迭代法求某个数的平方根。 已知求平方根的迭代公式为:

  Private Function Fsqrt( a As single ) AS single

  Dim x0 As Single, x1 As Single

  x0 =a/2 '迭代初值

  x1 = 0.5*(x0 + a/x0)

  Do

  x0 = x1 '为下一次迭代作准备

  x1 = 0.5*(x0 + a/x0)

  Loop While Abs(x1 - x0) > 0.00001

  Fsqrt=x1

  End Function

  十、数制转换

  将一个十进制整数m转换成 →r(2-16)进制字符串。

  方法:将m不断除 r 取余数,直到商为零,以反序得到结果。下面写出一转换函数,参数idec为十进制数,ibase为要转换成数的基(如二进制的基是2,八进制的基是8等),函数输出结果是字符串。

  Private Function TrDec(idec As Integer, ibase As Integer) As String

  Dim strDecR$, iDecR%

  strDecR = ""

  Do While idec <> 0

  iDecR = idec Mod ibase

  If iDecR >= 10 Then

  strDecR = Chr$(65 + iDecR - 10) & strDecR

  Else

  strDecR = iDecR & strDecR

  End If

  idec = idec ibase

  Loop

  TrDec = strDecR

  End Function

  十一、字符串的一般处理

  1.简单加密和解密

  加密的思想是:

  将每个字母C加(或减)一序数K,即用它后的第K个字母代替,变换式公式: c=chr(Asc(c)+k)

  例如序数k为5,这时 "A"→ "F", "a"→?"f","B"→?"G"…

  当加序数后的字母超过"Z"或"z"则 c=Chr(Asc(c)+k -26)

  例如:You are good→ Dtz fwj ltti

  解密为加密的逆过程

  将每个字母C减(或加)一序数K,即 c=chr(Asc(c)-k),

  例如序数k为5,这时 "Z"→"U", "z"→"u","Y"→"T"…
  
  
  当加序数后的字母小于"A"或"a"则 c=Chr(Asc(c)-k +26)

  下段程序是加密处理:

  i = 1: strp = ""

  nL = Len(RTrim(strI))

  Do While (i <= nL)

  strT = Mid$(strI, i, 1) '取第i个字符

  If (strT >= "A" And strT <= "Z") Then

  iA = Asc(strT) + 5

  If iA > Asc("Z") Then iA = iA - 26

  strp = strp + Chr$(iA)

  ElseIf (strT >= "a" And strT <= "z") Then

  iA = Asc(strT) + 5

  If iA > Asc("z") Then iA = iA - 26

  strp = strp + Chr$(iA)

  Else

  strp = strp + strT

  End If

  i = i + 1

  Loop

  Print strp

  2.统计文本单词的个数

  算法思路:

  (1)从文本(字符串)的左边开始,取出一个字符;设逻辑量WT表示所取字符是否是单词内的字符,初值设为False

  (2)若所取字符不是“空格”,“逗号”,“分号”或“感叹号”等单词的分隔符,再判断WT是否为True,若WT不为True则表是新单词的开始,让单词数Nw=Nw+1,让WT=True;

  (3)若所取字符是“空格”,“逗号”,“分号”或“感叹号”等单词的分隔符, 则表示字符不是单词内字符,让WT=False;

  (4) 再依次取下一个字符,重得(2)(3)直到文本结束。

  下面程序段是字符串strI中包含的单词数

  Nw = 0: Wt = False

  nL = Len(RTrim(strI))

  For i = 1 To nL

  strT = Mid$(strI, i, 1) '取第i个字符

  Select Case strT

  Case " ", ",", ";", "!"

  Wt = False

  Case Else

  If Not Wt Then

  Nw = Nw + 1
  
  
  Wt = True

  End If

  End Select

  Next i

  Print "单词数为:", Nw

  十二、穷举法

  穷举法(又称“枚举法”)的基本思想是:一一列举各种可能的情况,并判断哪一种可能是符合要求的解,这是一种“在没有其它办法的情况的方法”,是一种最“笨”的方法,然而对一些无法用解析法求解的问题往往能奏效,通常采用循环来处理穷举问题。

  例: 将一张面值为100元的人民币等值换成100张5元、1元和0.5元的零钞,要求每种零钞不少于1张,问有哪几种组合?

  Dim i%, j%, k%

  Print "5元 1元 0.5元"

  For i = 1 To 20

  For j = 1 To 100 - i

  k = 100 - i - j

  If 5.0 * i + 1.0 * j + 0.5 * k = 100 Then

  Print i, j, k

  End If

  Next j

  Next i

  十三、递归算法

  用自身的结构来描述自身,称递归

  VB允许在一个Sub子过程和Function过程的定义内部调用自己,即递归Sub子过程和递归Function函数。递归处理一般用栈来实现,每调用一次自身,把当前参数压栈,直到递归结束条件;然后从栈中弹出当前参数,直到栈空。

  递归条件:(1)递归结束条件及结束时的值;(2)能用递归形式表示,且递归向终止条件发展。

  例:编fac(n)=n! 的递归函数

  Function fac(n As Integer) As Integer

  If n = 1 Then

  fac = 1

  Else

  fac = n * fac(n - 1)

  End If

  End Function

 

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-14805-1.html
网站维护教程更新时间:2012-04-03 01:14:45  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer