您现在的位置:首页 >> 实验指导 >> 内容

实验八 过程

时间:2009-11-16 11:21:23 点击:1199

 

一、实验目的

 1.掌握函数过程和子过程的定义和调用方法;

 2.掌握形参与实参的定义和对应关系;

3.掌握值传递和地址传递的传递方式;

4.掌握变量和过程的作用域;

5.熟悉递归算法的程序设计。

二、实验内容

1.用函数过程完成将一个十进制整数m转换成 r (2--16)进制数。

2.编写一个子过程DelStr(S1S2),若在S1中能找到与S2相匹配的字符串,则将S1中与S2相匹配的字符串删除,得到一个新的字符串。

3利用递归求8418最大公约数。

实验步骤

实验内容1

1)在窗体中创建三个标签,分别为Label1Label2Label3,创建三个文本框Text1Text2Text3,创建一个“转换”按钮Command1

2)程序运行后,界面如图25所示,在第一个文本框(Text1)中输入待转换的十进制数,第二个文本框(Text2)输入要转换的进制,单击“转换”按钮,第三个文本框(Text3)中将显示转换后的结果。

25 程序运行后的界面

3)十进制数转换成R进制数采用“除R倒取余”的方法,即:用列除式将十进制数不断地除以R并得到余数,直到商为0时结束,将所得到的一连串余数用倒序方法连在一起,即得到了相应的R进制数。由此,程序代码如下:

‘以下是函数过程

Function TranDec$(ByVal m%, ByVal r%)

    Dim strBase As String * 16, StrDtoR$

    Dim imr(60) As Integer

    Dim iB%, i%

    strBase = "0123456789ABCDEF"

    i = 0

    Do While m <> 0

      imr(i) = m Mod r

      m = m \ r

      i = i + 1

    Loop

    StrDtoR = ""

    i = i - 1

    Do While i >= 0

      iB = imr(i)

      StrDtoR = StrDtoR + Mid$(strBase, iB + 1, 1)

      i = i - 1

    Loop

    TranDec = StrDtoR

End Function

‘以下是事件过程

Private Sub Command1_click()

    Dim m0%, r0%, i%

    m0 = Val(Text1.Text)

    r0 = Val(Text2.Text)

    If r0 < 2 Or r0 > 16 Then

      i = MsgBox("输入的R进制数超出范围", vbRetryCancel)

      If i = vbRetry Then

        Text2.Text = ""

        Text2.SetFocus

      Else

        End

      End If

    End If

    Label3.Caption = "转换成" & r0 & "进制数"

    Text3.Text = TranDec(m0, r0)

End Sub

实验内容2

1)创建一个窗体界面,并在窗体中创建三个标签,分别为Label1Label2Label3,创建三个文本框Text1Text2Text3,创建一个“删除子串”按钮Command1

2)定义一个DelStr( )的子过程,用于删除字符串S1中包含的S2子串,为了降低难度,在子过程中直接调用了内部函数Replace( )

3)本例中采用地址传递的方法,因此,只要在子过程中将处理后的字符串赋给形参即可改变实参的值;

4)程序运行后,在第一个文本框中输入字符串,如“abcdebcdf”,接着在第二个文本框中输入前一个字符串的子串“bcd”,单击“删除子串”按钮,在第三个文本框中将出现“aef”的值,运行结果如图26所示。

如图26 “删除子串”运行结果

代码如下:

‘事件过程

Private Sub Command1_Click()

  Dim s1 As String, s2 As String

  s1 = Text1

  s2 = Text2

  Call DelStr(s1, s2)

  Text3 = s1

End Sub

‘以下是子过程

Private Sub DelStr(x$, y$)

  Dim z As String

  z = ""

  x = Replace(x, y, z)

End Sub

实验内容3

分析略。代码如下:

‘函数过程

Public Function gcd(m As Integer, n As Integer) As Integer

    If (m Mod n) = 0 Then

      gcd = n

    Else

      gcd = gcd(n, m Mod n)        ‘递归调用

    End If

End Function

‘以下是事件过程

Private Sub Form_Click()

  Print gcd(84,18)

End Sub

作者:Admin  
  • VB程序设计学习网站(赣南师范学院) © 2008 版权所有 All Rights Reserved.
  • 地址:江西省赣州市经济技术开发区 赣南师范学院数学与计算机科学学院 邮政编码:341000
    Email:ZQ188@163.com 技术支持QQ:87319633 移ICP备10086号
  • GnsySjxy! V2.4