标题:vb过程太大,一下代码能否得到简化,谢谢
只看楼主
向光前进
Rank: 1
等 级:新手上路
帖 子:16
专家分:7
注 册:2011-11-10
结帖率:100%
已结贴  问题点数:40 回复次数:4 
vb过程太大,一下代码能否得到简化,谢谢
过程太大,能否简化此代码,谢谢
Private Sub Command2_Click()
    Pic1.Cls
    Dim y() As single
    l = Val(Text3.Text)
    ReDim y(l * 1000)
    Max = 0
    Maxx = 0
    Min = 0
    Minx1 = 0
If Combo1.Text = "简支梁" Then
                p1 = Arr(1)  '这个要用到调用不同窗体的数组,不知这个能否用for循环简化??
                xp1 = Brr(1)
            For i = 0 To l * 1000
            x = i / 1000
                If x < xp1 Then
                  y(i) = Mp11(l, xp1, p1, x)
                Else
                  y(i) = Mp12(l, xp1, p1, x)
                End If

                If y(i) > Max Then
                  Max = y(i)
                  Maxx = x
                End If
            Next i
            坐标系1 l, Max, Maxx  '调用的上面的建坐标系的函数,很好
            For i = 0 To l * 1000
                x = i / 1000
                Pic1.PSet (x, y(i))
                If i Mod (50 * l) = 0 Then Pic1.Line (x, y(i))-(x, 0), vbBlack
            Next i
                Max = 0
                Maxx = 0
                Min = 0
                Minx1 = 0
                For i = 0 To l * 1000
                x = i / 1000
                  Select Case x
                    Case Is <= xp1
                        y(i) = Fp11(l, xp1, p1, x)
                    Case Else
                        y(i) = Fp12(l, xp1, p1, x)
                   End Select

                   If y(i) > Max Then
                    Max = y(i)
                    Maxx = x
                   ElseIf y(i) < Min Then
                    Min = y(i)
                    Minx1 = x
                   End If
              Next i

                 If Abs(Max) > Abs(Min) Then
                    坐标系3 l, Max, Maxx
                 Else
                    坐标系4 l, Min, Minx1
                 End If
          For i = 0 To l * 1000
          x = i / 1000
                If i = 0 Then
                    Pic2.PSet (x, y(i))
                Else
                    Pic2.Line (x, y(i))-(x - 1 / 1000, y(i - 1)), vbBlack
                    If i = l * 1000 Then Pic2.Line (x, y(i))-(x, 0), vbBlack
                End If
                If i Mod (50 * l) = 0 Then Pic2.Line (x, y(i))-(x, 0), vbBlue
           Next i
高手们这段代码能否简化为一个函数过程呢?     
                 If y(i) > Max Then
                    Max = y(i)
                    Maxx = x
                   ElseIf y(i) < Min Then
                    Min = y(i)
                    Minx1 = x
                   End If
for循环能否简化为一个过程呢?请高手们指点我这个菜鸟新手,谢谢您们
搜索更多相关主题的帖子: single 
2011-12-02 15:32
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
你这些代码是让人无法回答。
1、变量定义问题。你这里面的变量,不知道在什么地方定义的,不知道是模块变量,也不知道是全局变量。
2、函数功能问题,不知道你这个过程最终达到的目的是什么,那些变量是临时变量,那些变量是需要保留的变量。
3、函数功能混乱,在一个函数里,以一个功能为主,不要混杂二个或以上的功能进入。
   在你的代码里,有计算过程,又有 绘图过程 。

分拆的重点:按功能分拆各个模块。数据定义需要定义清楚,哪些变量是需要定义为全局变量的,然后把各个计算功能分解来。
   各个模块中的数据传递,可以使用全局变量来传递。

授人于鱼,不如授人于渔
早已停用QQ了
2011-12-02 19:32
向光前进
Rank: 1
等 级:新手上路
帖 子:16
专家分:7
注 册:2011-11-10
得分:0 
以下是引用风吹过b在2011-12-2 19:32:06的发言:

你这些代码是让人无法回答。
1、变量定义问题。你这里面的变量,不知道在什么地方定义的,不知道是模块变量,也不知道是全局变量。
2、函数功能问题,不知道你这个过程最终达到的目的是什么,那些变量是临时变量,那些变量是需要保留的变量。
3、函数功能混乱,在一个函数里,以一个功能为主,不要混杂二个或以上的功能进入。
   在你的代码里,有计算过程,又有 绘图过程 。
 
分拆的重点:按功能分拆各个模块。数据定义需要定义清楚,哪些变量是需要定义为全局变量的,然后把各个计算功能分解来。
   各个模块中的数据传递,可以使用全局变量来传递。
高手,因为代码太多,且用到四个窗体,不好叙述,但这里有说明和压缩文件,高手请您下载一下看看一下,看能否给我举个具体的例子可以吗?麻烦您了,万分感激
2011-12-02 21:47
向光前进
Rank: 1
等 级:新手上路
帖 子:16
专家分:7
注 册:2011-11-10
得分:0 
求教高手.zip (1.44 MB)
2011-12-02 21:47
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:40 
dage.rar (1.39 MB)


Private Sub Command2_Click()
'    Pic1.Cls       '移到画坐标系时清屏
'    Dim y()                                  '定义一个数组为了后面的绘图
'    l = Val(Text3.Text)
'    Dim t As Integer
'    ReDim y(l * 1000)
'    Max = 0                                       '比较大小,根据得出的最值来建立坐标系,使绘制的函数图象不致超出
'    Maxx = 0
'    Min = 0
'    Minx1 = 0
'    t = 0
 If Combo1.Text = "简支梁" Then   '这只是其中的一种类型,还有悬臂梁,外伸梁,怕代码太多,没给高手加
    If Val(Text1.Text) = 1 Then    '这是昨晚和您说的要分很多情况,您在上输入对应的数字就可以绘制这种情况的图像了
        Call 简支梁1
    ElseIf Val(Text1.Text) = 2 Then '这又是简支梁的一种情况              两个集中力
        Call 简支梁2
    Else
        MsgBox "暂不支持多个集中荷载与均布荷载共存计算。", vbInformation
    End If
            
Else
      MsgBox "1。", vbInformation
End If
     
End Sub

然后把

    If Val(Text1.Text) = 1 Then    '这是昨晚和您说的要分很多情况,您在上输入对应的数字就可以绘制这种情况的图像了
这后面的代码放到一个 sub 过程中,
再把你的变量初始化的部分放到 SUB 的前面就可以了。

授人于鱼,不如授人于渔
早已停用QQ了
2011-12-03 20:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-356775-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.381706 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved