1、常用算法总结算法是对某个问题求解过程的描述,一、基本算法 1.累加、连乘,1100的5或7的倍数的和 Sum = 0For i = 1 To 100If i Mod 5 = 0 Or i Mod 7 = 0 ThenSum = Sum + iEnd IfNext iPrint Sum,310的乘积 t = 1For i =3 To 10t = t * iNext iPrint t,思考:若把循环体前面置各变量初值的语句放在循环体内,程序运行时会产生什么情况?,例求自然对数e的近似值,要求其误差小于0.00001,近似公式为:该例题涉及两个问题:(1)用循环结构求级数和的问题。本例根据某项值的精
2、度来控制循环的结束与否。(2)累加:e=e+t 循环体外对累加和的变量清零 e=0连乘:n=n*i 循环体外对连乘积变量置1 n=1Private Sub Form_Click()Dim i%,n e End Sub,2.求素数判别某数m是否为素数最简单的方法是:对于m 从i=2,3,m-1判别m能否被i整除,只要有一个能整除,m不是素数,否则m是素数。For m = 2 To 100For i = 2 To m - 1If (m Mod i) = 0 Then exit forNext iif Im-1 thenmsgbox str(m)+”是素数” Elsemsgbox str(m)+”不
3、是素数” End IfNext m,m是否为素数,求100以内的素数,3.穷举法 “穷举法”也称为“枚举法”或“试凑法”, 即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。 例百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。设母鸡、公鸡、小鸡各为x、y、z只,根据题目要求,列出方程为: x+y+y=1003x+2y+0.5z=100 三个未知数,两个方程,此题有若干个解。 解决此类问题采用“试凑法”,把每一种情况都考虑到。方法一:最简单三个未知数利用三重循环来实现。方法二:从三个未知数的关系,利用
4、两重循环来实现。,方法一: Private Sub Form_click() Dim X%,y%,z% For X=0 To 100For Y=0 To 100For Z= 0 To 100If X+y+z=100 And 3*x+2*y+.5*z=100 ThenPrint X,y,zEnd If Next ZNext Y Next X End sub,方法二: For X= 0 To 33For Y= 0 To 50Z=100-x-yIf 3*x+2*y+.5*z=100 ThenPrint X, Y, ZEnd IfNext Y Next X,4.递推法“递推法”又称为“迭代法”,其基本
5、思想是把一个复杂的计算过程转化为简单过程的多次重复。每次重复都从旧值的基础上递推出新值,并由新值代替旧值。 例 猴子吃桃子。小猴在一天摘了若干个桃子,当天吃掉一半多一个;第二天接着吃了剩下的桃子的一半多一个;以后每天都吃尚存桃子的一半零一个,到第7天早上要吃时只剩下一个了,问小猴那天共摘下了多少个桃子? 分析:这是一个“递推”问题,先从最后一天推出倒数第二天的桃子,再从倒数第二天的桃子推出倒数第三天的桃子。 设第n天的桃子为xn,那么它前一天的桃子数是xn -1。,已知:当N=7第7 天的桃子数为1,则第6天的桃子数由公式得4个,依次类推,可求得第1 天的桃子数。 程序如下: Private
6、sub form_click()Dim I as integerx=1print “第7 天的桃子数为:1只”for I=6 to 1 step 1x=(x+1)*2print “第”; I; ” 天的桃子数为:” ; x ; ”只”next I End sub,5.最小、最大值 在若干个数中求最大值,一般先假设一个较小的数为最大值的初值,若无法估计较小的值,则取第一个数为最大值的初值;然后将每一个数与最大值比较,若该数大于最大值,将该数替换为最大值;依次逐一比较。例随机产生10个100200之间的数,求最大值。,Private Sub Command1_Click()Max = 100For
7、 i = 1 To 10x = Int(Rnd * 101) + 100Print x;If x Max Then Max = xNext iPrintPrint “最大值=“; Max End Sub,6、求最大公约数,Private Sub Command1_Click()Dim m, n, r As Longm = Val(Text1.Text) 取数据Mn = Val(Text2.Text) 取数据N If m Int(m) or m Int(n) or n 1 Then Text3.Text = “数据错误!“ElseDo 求最大公约数r = m Mod nm = nn = rLoo
8、p Until r = 0Text3.Text = CStr(m) 输出最大公约数End If End Sub,判断数据是否合法,Private Sub Form_Click()For i = 1 To 9For j = 1 To 9 Print i; “*“; j; “=“; i * j;Next jPrintNext i End Sub 执行本程序,窗体上将显示九九乘法表。,For j = 1 To i,7、关于循环嵌套(一个循环体内又包含了一个完整的循环结构称为循环的嵌套.),换行!,作用?,例:xh2.vbp Ssfrm.frm,思考:打印上三角或下三角程序如何改动?要打印下三角? 8
9、. 打印图形 见下页,编写程序打印如右边图形: Private Sub Form_Click()For i = 1 To 4Print Space(5 - i);For j = 1 To 2 * i - 1Print “*“;Next jPrintNext iPrint End Sub,*,* *,外循环用来控制输出的行数及每行第一个字符的输出位置,内循环用来控制每行输出的字符个数。,例:xh2.vbp shjs.frm,9.判断同构数(复习材料 P39 第7题),10.找亲密对数 P111 例5-10 11.判断完数 实验P55 实验7-2 12.计算多项式 的和 实验P51 实验6-3 1
10、3.求一个正整数K的各位数字之和复习材料P33 4.4练习题 第1题 14.报数问题 P114 例5-12 15.判断回文数 复习材料 P41 第10题或P81 习题4,16.求自然数的因子 P81 习题5,Private Sub Command1_Click()Dim a As Integer, I%a = InputBox(“输入一个自然数“)Label1.Caption = Str(a) + “的所有因子:“For I = 1 To a-1If a Mod I = 0 ThenList1.AddItem (Str(I)End IfNext End Sub,二、数组的算法,1. 数组元素的
11、赋初值 (1)用循环For i = 1 To 10 A(i)=0Next i for I=1 to 10 for J=1 to 10B(I,J)=0next Jnext i,(2) Array函数 Dim ib As Variant ib = Array(“abc“, “def“, “67“) For i = 0 To UBound(ib)Picture1.Print ib(i); “ “; Next i,注意:(1)利用Array对数组各元素赋值,声明的数组是可调数组或连圆括号都可省,并且其类型只能是Variant。(2)数组的下阶为零,上界由Array函数括号内的参数个数可决定,也可通过函
12、数Ubound获得。,2数组的赋值在VB6.0中,提供了数组直接对数组的赋值。 例如: Dim a( ) As Variant, b( ) As Variant, i%a = Array(1, 2, 3, 4, 5)ReDim b(UBound(a)b = a,For i = 0 To UBound(a)b(i) = a(i) Next i,相当于,注意:赋值号左边的数组只能声明为 Variant的可调数组或简单变量。,3. 数组的输出 输出方阵SC中的下三角元素 For i = 0 To 4For j = 0 To I j=0 to 4 则输出整个数组sc(i, j) = i * 5 + j
13、Print sc(i, j); “ “;Next jPrint 换行Next I,4. 将数组中各元素交换(P115习题1) For i =1 To 152t=A(i)A(i)=A(10-i+1)A(10-i+1)=t Next i,5、对数组的行/列操作(行、列的和),P115习题3:求二维数组每行的和数与每列的和数,数组元素为19之间的随机数。,Option explicit Option base 1 生成数组 Private Sub Command1_Click()For I = 1 To 4For J = 1 To 5A(I, J) = Int(9 * Rnd) + 1Picture
14、1.Print A(I, J);Next JPicture1.PrintNext I End Sub,求列和 Private Sub Command2_Click() For J = 1 To 5L(J) = 0For I = 1 To 4L(J) = L(J) + A(I, J)Next IText2 = Text2 & Str(L(J)Next J End Sub,Private Sub Command3_Click() For I = 1 To 4H(I) = 0For J = 1 To 5H(I) = H(I) + A(I, J)Next JText1 = Text1 & Str(H(
15、I) & vbCrLfNext I End Sub,清除图片框和文本框 Private Sub Command4_Click()Picture1.ClsText1 = “Text2 = “ End Sub,求行和,6、同维数组对应元素的算术运算(+、-、*、/),Option explicit Option base 1 Private sub form_click() Dim X%(5,5), Y%(5,5), Z%(5,5) For I=1 to 5for j=1 to 5x(I,j)=int(100*rnd)+1y(I,j)=int(100*rnd)+1next j Next i For
16、 I=1 to 5for J=1 to 5Z(I,J)=X(I,J) Y(I,J)next j Next i,可改为减法、乘法,存放结果数组也必须定义,For I=1 to 5for J=1 to 5print Z(I,J); next jprintNext I End sub 除法:除法操作必须先判别分母不为零,然后再进行对应元素的除法操作。,7、求数组靠边元素之和, 不靠边元素之和 P115习题6,Option base 1 Private sub form_click() Dim X%(4,5), s%(4), sum% For I=1 to 4s(I)=0for j=1 to 5x(I
17、,j)=inext j Next i For J=1 to 5S(1)=S(1)+X(1,J)S(4)=S(4)+X(4,J) Next j,1 1 1 1 12 2 2 2 23 3 3 3 34 4 4 4 4,For I=2 to 3S(2)=S(2)+X(I,1)S(3)=S(3)+X(I,5) Next i for I=1 to 4SUM=SUM+S(I) Next iprint SUM End sub,8,求数组对角线元素之积或 和,Option base 1 Private sub form_click() Dim X%(4,4), S1&,S2& S=1:S2=1 For I=
18、1 to 4for j=1 to 4x(I,j)=inext j Next i For i=1 to 4S1=s1*X(i,i) Next I print S End sub,1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4,若为“+”,则为对角线的和,但S1,S2初值为0,For I = 1 To 4For J = 1 To 4If I + J = 5 ThenS2 = S2 + A(I, I)End IfNext JNext IText3 = “两条对角线的积 _分别是:“ & S1 & “ “ & S2 End Sub,P115习题6,9.求二维数组中每行/列元素的最大/最
19、小,Option Explicit Option Base 1 Private Sub Form_Click()Dim A%(5, 8), I%, J%Dim MAXI%(5), MAXJ%(8)For I = 1 To 5For J = 1 To 8A(I, J) = Int(90 * Rnd) + 10Print A(I, J);Next JPrintNext IFor I = 1 To 5MAXI(I) = A(I, 1)For J = 1 To 8If MAXI(I) A(I, J) Then MAXI(I) = A(I, J)Next JPrint “第“; I; “行的最大值是:“
20、; MAXI(I),Next IPrint,生成数组并输出,求每行最大 并输出,9.求二维数组中每行/列元素的最大/最小,For J = 1 To 8MAXJ(J) = A(1, J)For I = 1 To 5If MAXJ(J) A(I, J) Then MAXJ(J) = A(I, J)Next IPrint “第“; J; “列的最大值是:“; MAXJ(J),If J Mod 5 = 0 Then PrintNext J End Sub,求每列最大 并输出,10求鞍点元素,该元素所在行为最大,所在列为最小,P115 习题7 生成数组 Private Sub Command1_Clic
21、k()Dim I%, J%M = InputBox(“请输入数组的行数“)N = InputBox(“请输入数组的列数“)ReDim A(M, N)For I = 1 To MFor J = 1 To NA(I, J) = Int(90 * Rnd) + 10Picture1.Print A(I, J);Next JPicture1.PrintNext I End Sub,10求鞍点元素,该元素所在行为最大,所在列为最小,P115 习题7 找鞍点数 Private Sub Command2_Click()Dim I%, J%, Max%, Col%, Flg%For I = 1 To MMax
22、 = A(I, 1)Col = 1For J = 2 To NIf Max A(J, Col) Then Exit ForNext JIf J N ThenText1.Text = “鞍点元素是“ & “A(“ & I & “,“ & Col & “)=“ & A(I, Col)Flg = 1End IfIf Flg = 0 Then Text1 = “鞍点元素不存在“Next I End Sub,找每行最大值,并记下最在值所在的列,将该行最大值,与所在列的各元素比较,是否为该列最小,11、矩阵乘法P107 例5-6,Option base 1 Private sub form_click()
23、 Dim X%(4,5),Y%(5,3),Z%(4,3) For I=1 to 4for j=1 to 5x(I,j)=int(100*rnd)+1print x(I,j);next jprint Next i For I=1 to 5for j=1 to 3y(I,j)=int(100*rnd)+1print y(I,j)next jprint Next i,11、矩阵乘法,For L=1 to 4for J=1 to 3Z(L,J)=0.0for I=1 to 5Z(L,J)=Z(L,J)+X(L,I)*Y(I,J)next inext j Next L For I= 1 to 4for
24、j=1 to 3print z(I,j);next jprint Next i End sub,12、矩阵转置 P116 习题10/复习资料P60 第5题,Option Explicit Option Base 1 Dim A() As Integer, B() As Integer, N% Private Sub Command1_Click() 生成数组Dim I%, J%N = InputBox(“)ReDim A(N, N)For I = 1 To NFor J = 1 To NA(I, J) = Int(Rnd * 100) + 1Text1 = Text1 & Str(A(I, J
25、)Next JText1 = Text1 & vbCrLfNext I End Sub,12、矩阵转置 P116 习题10/复习资料P60 第5题,Private Sub Command2_Click()成 矩阵转置Dim I%, J%ReDim B(N, N)For I = 1 To NFor J = 1 To NB(J, I) = A(I, J)Next JNext IFor I = 1 To NFor J = 1 To NText2 = Text2 & Str(B(I, J)Next JText2 = Text2 & vbCrLfNext I End Sub,13.数组排序P103例5-
26、3 对已知存放在数组中的n个数,用选择法按递增顺序排序。(1) 从n个数的序列中选出最小的数(递增),与第1个数交换位置;(2)除第1个数外,其余n-1个数再按(1)的方法选出次小的数,与第2个数交换位置;(3)重复(1)n-1遍,最后构成递增序列。,Private Sub Command1_Click()Dim Sort(10) As Integer, temp%Dim i As Integer, j%RandomizeFor i = 1 To 10Sort(i) = Int(Rnd * 99) + 1Text1 = Text1 & Str(Sort(i)Next iFor i = 1 To
27、 9For j = i + 1 To 10If Sort(i) Sort(j) Thentemp = Sort(i)Sort(i) = Sort(j)Sort(j) = tempEnd IfNext jText2 = Text2 & Str(Sort(i)Next iText2 = Text2 & Str(Sort(i) 书上少此语句 End Sub,14.冒泡法排序实验P62 ,实验7-4,与选择排序的区别在于:只对相邻两数进行比较,使之大数沉底,小数象气泡一样“冒”上来,所以称为“冒泡法”。 例如对8,3,5,2,1,9排序:第一轮的排序是 第1次比较:8,3,5,2,1,9 第2次比较:
28、3,8,5,2,1,9 第3次比较:3,5,8,2,1,9 第4次比较:3,5,2,8,1,9 第5次比较:3,5,2,1,8,9 第6次比较:3,5,2,1,8,9 第一轮的排序结果;3,5,2,1,8,9 第一轮需排序5次,第二轮需排序4次, 第三轮需排序3次,第四轮需排序2次, 第五轮需排序1次。,Private Sub Command1_Click() 冒泡法排序过程 Dim i %, j %, temp%For I = 1 To UBound(a) - 1For J = 1 To UBound(a) - IIf a(J) a(J + 1) Thentemp = a(J): a(J)
29、= a(J + 1): a(J + 1) = tempEnd IfNextNext For i = 1 To UBound(a)Print a(i); Next i End Sub,例: 排序运动员的成绩,已知8名运动员100米成绩,请排出他们的名次(成绩相同名次相同,成绩由键盘输入),本题的难点并不在排序,可以很轻松地用冒泡法或选择法排序进行成绩从小(快)到大(慢)的排列。问题是排序后的成绩对应于哪一个运动员,一维数组是无法记录的。因此就要定义一个二维数组,其中第一列放运动员的成绩,第二列存放成绩对应的运动员号。按二维数组的第一列排序后,产生交换不仅要交换第一列的数组元素,还要交换第二列的数
30、组元素,这样运动员的编号就能跟着成绩“跑了”。在输出名次时,也要注意成绩相同、名次相同的问题。,排序过程(选择法排序) Private Sub sort(cj() As Single)Dim temp As SingleFor i = 1 To 7For j = i + 1 To 8If cj(i, 1) cj(j, 1) Thentemp = cj(i, 1): cj(i, 1) = cj(j, 1): cj(j, 1) = temptemp = cj(i, 2): cj(i, 2) = cj(j, 2): cj(j, 2) = tempEnd IfNextNext End Sub,输出名次
31、过程 Private Sub output(cj() As Single)Dim j As Integer, p As Integerp = 1Print “第“; 1; “名是“; cj(1, 2); “号运动员,成绩是:“; cj(1, 1)For j = 2 To 8If cj(j, 1) = cj(j - 1, 1) ThenPrint “第“; p; “名是“; cj(j, 2); “号运动员,成绩是:“; cj(j, 1)ElsePrint “第“; j; “名是“; cj(j, 2); “号运动员,成绩是:“; cj(j, 1)p = jEnd IfNextPrint End S
32、ub,窗体事件过程 输入运动员成绩 Private Sub Form_Click() Dim i As Integer Dim pro As String, cj(8, 2) As SingleRandomizeFor i = 1 To 8pro = “请输入第“ + Str(i) + “位运动员的成绩:“cj(i, 1) = InputBox(pro)cj(i, 2) = iPrint cj(i, 1);NextPrintPrint Call sort(cj)Call output(cj) End Sub,15.数组元素的插入与删除(1) 插入 排序 复习材料 P50 第23在有序数组a(1
33、 to n)(原有n-1个元素)插入一个值Key元素, 算法:查找要插入的位置k(1=k=n-1),腾出位置,把最后一个元素开始到第K个元素往后移动一个位置, 第k个元素的位置腾出,就可将数据Key插入,Private sub command1_click Dim a%( 11), I%,J% ,X% For I= 1 to 10a(I)=I*5+1 通过程序自动生成有规律的数组 Next I X=Inputbox(“输入任意数X:”) For I= 1 to 10 查找欲插入数X在数组中的位置if Xa(I) then exit for 找到插入的位置下标为I Next I For J=11
34、 to I+1 step 1 从最后元素开始往后移,腾出位置a(J)=a(J-1) Next J A(I)=X End sub,(2) 删除重复元素见 P113 例5-11首先也是要找到欲删除的元素的位置k;然后从k+1到n个位置开始向前移动;最后将数组元素减1。例如,要将值为13的元素删除的过程为:,Dim a() as integer 声明为动态数组 Redim a( 1 to n) 声明为有N个元素的数组 查找到要删除的元素下标为K For I=k+1 to N 从K+1个元素开始往前移A(I-1)=a(I) Next I最后一个元素的位置空出,利用数组重新声明减少一个元素,但要保留原来
35、值 Redim preserve a( 1 to n-1),排序法有:选择、冒泡、插入法排序及合并排序等。前两种排序欲排序的数据全部输入后,再进行排序;插入法排序每输入一项,马上插入到数组应在的位置,数组始终有序。用插入排序法输入不多于20个数,使数组保持递增的序列。对数组中已有N-1个有序数,当输入某数X时,插入排序法实现的步骤:(1)输入欲排序的数据项x;在数组a中找x应所处的位置j;(2)从数组的最后一个元素开始到下标j依次往后移,使j位置空出;(3)将x放入位置j处,一个数据插入完成;(4)有若干个数重复(1)(3)。 对于若干个数输入,只要调用插入排序过程即可。,Dim n As I
36、nteger Sub insert(a() As Single, ByVal x!)Dim i%, j%j = 1Do While j a(j)j = j + 1LoopFor i = n - 1 To j Step -1a(i + 1) = a(i)Next ia(j) = x End Sub,Private Sub Text1_KeyPress(KeyAscii As Integer)Static bb!(1 To 20)Dim i%If n = 20 ThenMsgBox “数据太多!“, 1, “警告“EndEnd IfIf KeyAscii = 13 Thenn = n + 1Cal
37、l insert(bb(), Val(Text1)Picture1.Print Text1For i = 1 To nPicture2.Print bb(i);Next iPicture2.PrintText1 = “End If End Sub,数组的合并排序,从键盘读取数组a和b(各5个元素),a,b都是严格递增的(即元素从小到大排列,且无重复元素),将a,b合并成c数组,使C也严格递增。 若a,b中有相同的元素只保留一个,最后输出数组C。编写通用过程OutPut,在窗体上打印数组。,Option Explicit Dim a(5) As Integer, b(5) As Integer,
38、 c() As Integer Private Sub output(d() As Integer) 输出数组的通用过程Dim i As IntegerFor i = 1 To UBound(d)Print d(i);Next iPrint End Sub,Private Sub Command1_Click() 数组输入Dim i As IntegerFor i = 1 To 5a(i)=InputBox(“输入数组a(“+str(I)+”)”)Next iPrint “数组A:“Call output(a)For i = 1 To 5b(i)=InputBox(“输入数组b(“+str(I
39、)+”)”)Next iPrint “数组B:“Call output(b) End Sub,Private Sub Command2_Click() 数组合并输出Dim p As Integer, q As Integer, r As IntegerDim i As Integerp = 1: q = 1: r = 1Do While p b(q) Thenc(r) = b(q)r = r + 1q = q + 1ElseIf a(p) b(q) Thenc(r) = a(p)r = r + 1: p = p + 1Elsec(r) = a(p)r = r + 1: p = p + 1: q
40、 = q + 1End IfLoop,If p = 5 ThenReDim Preserve c(r)For i = q + 1 To 5c(r) = b(i): r = r + 1Next iEnd IfIf q = 5 ThenReDim Preserve c(r)For i = p + 1 To 5c(r) = a(i): r = r + 1Next iEnd IfCall output(c) End Sub,16、查找: (1).顺序查找 P104例5-4 顺序捡索 捡索(search):又称为查找,就是从一组数据中找出所需的具有某种特征的数据项。 它是数据处理中应用很广泛的一种操作,
41、最简单的检索方法是顺序捡索。其方法是从一组数据的第一项开始逐个比较,直到找到该数据项,或全部数据都比较完也没找到该数据为止。,Option Explicit Private Sub Form_Click() Dim Search(10) As Integer, I As Integer Dim S As Integer For I = 1 To 10 Search(I) = Int(Rnd * 100) + 1 Print Search(I) Next I S = Val(InputBox(“输入要查找的数“) For I = 1 To 10 If Search(I) = S Then Exi
42、t For Next I If I = 10 Then Print “要找的数是 Search(“; I; “)“ Else Print “没找到 !“ End If End Sub,(2)二分查找 P106 例5-5 其方法是: 1)、找出中间位置Mid,判断查找数椐K与A(Mid) 是否相等,若相等则已找到。 (2)、如果KA(Mid)则表明K可能在A(Mid)与A(Bot)区间内,因此重新设置: TopMid1 (3)、如果KA(Mid)则表明K可能在A(Top)与A(Mid)区间内,因此重新设置: BotMid1 重复以上步骤,每次查找区间减少一半,如此反复,其结果是查到此数,或查不到
43、此数。,Private Sub Cmd生成数组_Click()Dim V As VariantSearch = Array(12, 17, 23, 28, 30, 39,_ 41, 46, 57, 61, 78, 83, 85, 89, 93)For Each V In SearchText1 = Text1 & Str(V)Next V End Sub,Private Sub Cmd二分法查找_Click()Dim Left As Integer, Right As IntegerDim Mid As Integer, Flg As BooleanDim Find As IntegerFin
44、d = InputBox(“输入要查找的数“)Left = 1: Right = UBound(Search)Flg = FalseDo While Left Search(Mid) ThenLeft = Mid + 1ElseRight = Mid - 1End IfLoopIf Flg ThenText2 = “要查找的数“ & Str(Find) & “在Search(“ & Str(Mid) & “)中“ElseText2 = Str(Find) & “不在数组中“End If End Sub,(1).数制转换例 将一个十进制整数m转换成 r (216)进制字符串。方法:将m不断除 r
45、 取余数,直到商为零,以反序得到结果。,三、字符算法,把一个任意十进制正整数转换成N 进制数(N=16),1使用的对象:,2,15,1111,N,Num,Ch,Dim N As Integer, Num As Long Private Sub Cmd1_Click() Dim Ch As String, I As Integer Dim Char(15) As String Dim Bin() As String For I = 0 To 9 Char(I) = Str$(I) Next I For I = 0 To 5 Char(10 + I) = Chr$(Asc(“A“) + I) Ne
46、xt I Print ReDim Bin(1) Call Trans(Bin, Char) For I = UBound(Bin) To 1 Step -1 Ch = Ch + Bin(I) Next I Text3.Text = Ch End Sub,Private Sub Cmd2_Click() End End Sub Private Sub Text1_Change() N = Val(Text1.Text) Lab4.Caption = Str$(N) + “进制数“ End Sub Private Sub Text2_Change() Num = Val(Text2.Text) E
47、nd Sub,Private Sub Trans (Vary() As String, St() As String) Dim R As Integer Dim K As Integer K = 0 Do Until Num = 0 R = Num Mod N K = K + 1 ReDim Preserve Vary(K) Vary(K) = St(R) Num = Num N Loop End Sub,(2).加密和解密 简单加密的思想是:将每个字母C加一序数K,式子 c=chr(Asc(c)+k),例如序数k为5,这时 “A”“F”, “a”“f”,“B”“G”当加序数后的字母超过“Z”
48、或“z”则 c=hr(Asc(c)+k -26)。解密为加密的逆过程。,Private Sub Command1_Click() 加密Dim strinput$, code$, record$, c As String * 1Dim i%, length%, iasc%strinput = Text1length = Len(RTrim(strinput) 去掉字符串右边空格,求真正的长度code = “For i = 1 To lengthc = Mid$(strinput, i, 1) 取第I个字符Select Case cCase “A” To “Z“ 大写字母加序数5加密iasc = Asc(c) + 5If iasc Asc(“Z”) Then iasc = iasc 26 加密后字母超过Zcode = code + Chr$(iasc),Case “a” To “z“ 小写字母加序数5加密iasc = Asc(c) + 5If iasc Asc(“z“) Then iasc = iasc - 26code = code + Chr$(iasc)Case Else 当第I个字符为其他字符时不加密code = code + cEnd SelectNext iText2 = code 显示加密后的字符串 End Sub,