Board logo

标题: 结果出乎意外啊 [打印本页]

作者: tkgg6034    时间: 2005-12-3 14:59     标题: 结果出乎意外啊

Private Type fs
fz As Variant
fm As Integer
End Type

Dim sz() As fs

Public Function gesuo(text As String) As Integer
Dim i, n As Integer
Dim fh As String
n = 1
For i = 1 To Len(text)
fh = Mid(text, i, 1)
Select Case fh
Case Is = "+"
n = n + 2

Case Is = "-"
n = n + 2

Case Is = "*"
n = n + 2

Case Is = "/"
n = n + 2

Case Is = "^"
n = n + 2

Case Is = "("
n = n + 2

Case Is = ")"
n = n + 2
End Select
Next i
gesuo = n + 2
End Function


Private Sub Command1_Click()
Static temp As String
Dim m As Variant
Static i As Integer
Dim b, x As Integer
b = 1
temp = ""
y = gesuo(Text1.text)
For x = 1 To y - 1
n = Len(Text1.text)
For i = 1 To n
  m = Mid(Text1.text, i, 1)
  If IsNumeric(m) Then
  temp = temp + m
  ElseIf m = "." Then
  b = b * 10
  Else
  ReDim Preserve sz(x) As fs
   sz(x).fz = Val(temp)
  sz(x).fm = b
  temp = ""
  b = 10
  Text2.text = Text2.text & Str(sz(x).fz) + "/" & Str(sz(x).fm)
  x = x + 1
  ReDim Preserve sz(x) As fs
  sz(x).fz = m
     Text2.text = Text2.text & sz(x).fz
End If
    Next i
    Next x
End Sub


这次能看懂了吧
当text1.text=2.5+3.6时
结果等于25/10+3625/1000+
为什么啊
本来应该等25/10+36/10啊
最后那个+是怎么出来的
temp我以经清空了,为什么36后面还有一个25啊
b的值在运行一次后,我也恢复在b=1了,为什么还会有1000啊
哪错了啊,这一个地方我以经用了三天了,还是过不去,我是不是真的好笨
唉,
作者: Nothing    时间: 2005-12-3 18:58

如果你的目的只是将2.5+3.6替换成25/10+36/10
没有必要这复杂,整这么多循环。这么多循环应当是里面设置的问题。
你看一下下面的代码

[code:9800a89dc3]
Private Sub Command1_Click()
    b = 0
    s = Text1.text & " "
    For i = 1 To Len(s)
        m = Mid(s, i, 1)
        Select Case Asc(m)
        Case 48 To 57
            Text2.text = Text2.text + m
            If b > 0 Then b = b + 1
        Case 46
            b = 1
        Case Else
            If b > 0 Then
                Text2.text = Text2.text & "/" & 10 ^ (b - 1)
            End If
            Text2.text = Text2.text + m
            b = 0
        End Select
        
    Next
    Text2.text = Trim(Text2.text)
End Sub

[/code:9800a89dc3]
作者: tkgg6034    时间: 2005-12-4 13:29

目的就是把text1.text里的字符串中的数字变成分数的形式付给一个自定义动态数组,也许会有很多个小数
两个问题,一个是B的值,再一个是for 好像运行了两次
作者: tkgg6034    时间: 2005-12-4 14:17

行了,小数的问题好了
下面就是分数的提取了
作者: Nothing    时间: 2005-12-4 14:47

希望我上面的代码能对你有所帮助
作者: tkgg6034    时间: 2005-12-4 15:11

班主,你不是说把函数写在模块里就可以在全局内使用吗
怎么我在运行时,提示末定义的函数啊
我定义的方法是:
在工程窗口里的空白处点右键,选添加,再选添加模块后,就开始写函数了,写完后在运行时,系统说函数末定义,没办法只能再copy到通用过程后运行,我应该怎么办啊
作者: Nothing    时间: 2005-12-4 19:20

我服了你了,你在函数的声明上需要加上public
即Public function 函数名(参数)
作者: tkgg6034    时间: 2005-12-5 08:57

不好意思。我好像就是用public定义的函数
msdn说什么引用什么的,不明白啊
作者: tkgg6034    时间: 2005-12-5 09:08

好了,不是函数不能用,是自定义的动态数组不能用,还要在通用过程里定义一下才行,不好意思啊
作者: tkgg6034    时间: 2005-12-5 09:45

只有在公共对象模块中定义的公共用户定义类型可以被使用为类模块公共过程的参数或返回类型、或作为公共用户定义类型的字段
以上是错误提示,问题是什么是公共对象模块啊,自定义类形我以在标准模块定义了啊,后来我又在通用过程中定义了,为什么还要在公共对象模块中定义。怎样在公共模块中定义啊
作者: Nothing    时间: 2005-12-5 09:55

因为类型在公共范围内使用,必需要公共范围内定义。
作者: tkgg6034    时间: 2005-12-5 09:58

怎么在公共范围内定义啊
作者: Nothing    时间: 2005-12-5 10:05

在模块中 使用Public
作者: Nothing    时间: 2005-12-5 10:12

例如在模块中
[code:30ba443891]Public Type myType
    a As String
    b As String
End Type

Public Function bbb(a As myType)
'
End Function[/code:30ba443891]
在窗体中就可以这样用了
[code:30ba443891]Private Sub Command1_Click()
Dim c As myType
bbb c
End Sub[/code:30ba443891]
作者: tkgg6034    时间: 2005-12-5 10:22

明白了,谢谢




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0