回 帖 发 新 帖 刷新版面

主题:(急)09年3月二级VB的最后一题

题目如下:
本程序实现文本加密。先给定序列:a1, a2,…,an,  `它们的取值范围是1~ n,且互不相同。加密算法是:把原文本中第k个字符放到加密后文木的第ak个位置处。若原文本长度大于n,则只对前n个字符加密,后面的字符不变:若原文本长度小于n,则在后面补字符“*”使文本长度为n后再加密。
    例如:若给定序列a1,a2,…,a7分别为2,5,3,7,6,1,4
    当文本为“PROGRAM”时,加密后的文本为“APOMRRG”
    当文本为“PROGRAMMING”时,加密后的文本为“APOMRRGMING”
    当文本为“THANK”时,加密后的文本为,“*TA*HKN”
    下面的过程code实现这一算法。其中参数数组a()中存放给定序列(个数与数组a的元素个数相等)a1,  a2,  a3,…的值,要加密的文本放在参数变量mystr中。过程执行完毕,加密后的文本仍放在变量mystr中。请填空。
 
Option Base 1
 Private Sub code(a() As Integer, mystr As String)
    Dim ch As String, cl As String
    n = UBound(a) - Len(mystr)
    If n > 0 Then
        mystr = mystr + String$(n, "*")
    End If
    ch = mystr
    For k = [14]  To UBound(a)
       cl = Mid(mystr, k, 1)
       n =  [15]
       Mid$(ch, n) = c1
    Next k
    mystr = ch
 End Sub正确答案为:[14]:1    [15]:a(k)
但是我有好多不懂的地方:
1、 循环结构中的 Mid$(ch,n)=c1这条语句怎么能这样写?赋值语句的左边怎么能是一个函数呢?n定下来后,这个函数的值就能求出来了,也就是是一个常量了,c1如何赋值给一个常量?
2、如何调用这个子过程呀?我自己写了一个command1_click事件来调用它,好象不行。代码如下:
Private Sub Command1_Click()
    Dim x(7) As Integer
    Dim s As String
    x(1) = 2
    x(2) = 5
    x(3) = 3
    x(4) = 7
    x(5) = 6
    x(6) = 1
    x(7) = 4
    s = "PROGRAM"
    Call code(x(), s)
    Print "s=", s
End Sub
还请大家指正!谢谢![em18]

回复列表 (共9个回复)

沙发

Mid$(ch,n)=c1 这种语句我也是第一次见到,试了一下,确实能行,又长知识了!它的运行结果是把字符串ch中的第n个字符替换为c1,实际上相当于替换语句

板凳

另外,你的代码有问题:

For k=【14】   'To  Ubound(a)

循环初值能这样表述吗:【14】?
To 的前面为何会有个注释符?

再就是,你调用代码时,如果 k=14,而 Ubound(a)=7,初值>终值,根本不会进入循环

3 楼

[quote]另外,你的代码有问题:

For k=【14】   'To  Ubound(a)

循环初值能这样表述吗:【14】?
To 的前面为何会有个注释符?

再就是,你调用代码时,如果 k=14,而 Ubound(a)=7,初值>终值,根本不会进入循环[/quote]
前辈呀前辈,终于有马失前蹄的时候了吧?嘻嘻~~~这个[14]和[15]是表示这是填空题的第14个空和第15个空呀,呵呵!注释符也是这个意思,表示得让做题的人去掉哦[em57]

4 楼

这个代码中的循环结构我还是不太明白,请指正!(我已经调用成功了!没有成功的原因是有一处的c1写成了cl)

5 楼

为什么不能这样给数组赋初值?
Private Sub Command1_Click()
    Dim s As String
    dim x
    x = Array(2, 5, 3, 7, 6, 1, 4)
    s = "PROGRAM"
    Call code(x, s)
    Print "s=", s
End Sub

6 楼

好多年没做作业了,还真的不知道【14】表示第14个空!
Array 返回的一般是字符串数组。
你在 Mid$(ch, n) = c1 这一句后面加上一句 Debug.Print n, c1, ch ,就能清楚地看到循环所引起的变化

7 楼

[quote]好多年没做作业了,还真的不知道【14】表示第14个空!
Array 返回的一般是字符串数组。
你在 Mid$(ch, n) = c1 这一句后面加上一句 Debug.Print n, c1, ch ,就能清楚地看到循环所引起的变化[/quote]
试了一下,没有什么效果出来。[em17]

8 楼


前一个 “cc = Mid(mystr, k, 1)” 中 Mid是函数,返回 字符串中指定数量的字符;后一个 “Mid$(ch, n) = cc”是语句,在一 字串变量中以另一个字符串中的字符替换其中指定数量的字符。

9 楼

由于“ x = Array(2, 5, 3, 7, 6, 1, 4)” 中,Array 返回的是一个包含数组的 Variant,故 自定义函数code的第一个参数也要定义为 Variant即可!

我来回复

您尚未登录,请登录后再回复。点此登录或注册