- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的
服务器维护
,企业网站维护
,网站维护
服务 - (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
作者:黑客防线网安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个元素,则矩阵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
我要申请本站:N点 | 黑客防线官网 | |
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |