VB程序设计的常用算法4 下载本文

内容发布更新时间 : 2024/5/19 10:05:56星期一 下面是文章的全部内容请认真阅读。

VB程序设计的常用算法4

十、数制转换

将一个十进制整数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,这时 \→ \, \\,\\ 当加序数后的字母超过\或\则 c=Chr(Asc(c)+k -26)

例如:You are good→ Dtz fwj ltti 解密为加密的逆过程

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

例如序数k为5,这时 \→\, \→\,\→\ 当加序数后的字母小于\或\则 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 >= \ iA = Asc(strT) + 5

If iA > Asc(\ strp = strp + Chr$(iA)

ElseIf (strT >= \ iA = Asc(strT) + 5

If iA > Asc(\ 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 \单词数为:\

十二、穷举法穷举法(又称“枚举法”)的基本思想是:一一列举各种可能的情况,并判断哪

一种可能是符合要求的解,这是一种“在没有其它办法的情况的方法”,是一种最“笨”的方法,然而对一些无法用解析法求解的问题往往能奏效,通常采用循环来处理穷举问题。

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

Print \元 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