比如自变量都定义成 x1、x2、x3...xi 的形式,函数的形式为f(x)。
在一个文本框内输入 f(x)=2*sqr(2)*(x1)+(x2)^2+3*pi*(x3) 
点击命令按钮,怎么样把里面的x1、x2、x3读成变量,
即把f(x)=2*sqr(2)*(x1)+(x2)^2+3*pi*(x3) 的表达式读取出来,因为后面的计算中是用其他方法求极值,不是简单的数值代入计算。顺便说一下,表达式里面含有sin、cos之类的函数,哪位帮忙把函数功能识别,那更是万分感激了。(怎么给不了300分?奇怪,没有办法,谁解决了,我会另外开贴给分)

解决方案 »

  1.   

    如果是做语法分析,那你应该为变量设置一个标识,比如两个%中间的就是变量:%variant%
    如果是分析你写的那些,你就读括号吧,读到一对然后取出来中间的内容,判断是不是需要的。如果只是想要一个执行结果,你可以在窗口上放一个Microsoft Script Control,然后你试试这样:Private Sub Command2_Click()ScriptControl1.ExecuteStatement "msgbox ""this is a msgbox"""End SubExecuteStatement后面只能用VBS
      

  2.   

    '在工程中添加Microsoft Script Control 1.0控件Option Explicit
    Private Sub Command1_Click()
        Dim f As Single
        Script.AddCode "x1 = " & Text1.Text
        Script.AddCode "x2 = " & Text2.Text
        Script.AddCode "x3 = " & Text3.Text
        Script.AddCode "pi = 3.14157"
        Text4.Text = "2*sqr(2)*(x1)+(x2)^2+3*pi*(x3)"
        f = Script.Eval(Text4.Text)
        MsgBox f
    End Sub
      

  3.   

    用 ScriptControl控件
    可参考:
    http://rookscape.com/vbgaming/tutBQ.php
      

  4.   

    谢谢各位的及时回复。
    请问 sxs69() ,你的代码是用来求值的吧,不是用来求表达式的。因变量xi有其取值范围,故无法直接求解出表达式的值的,我需要的是读出那个表达式即可。我的目的是使用者在界面上给出变量个数(x1...xi共i个)及其取值范围,在界面上输入表达式(而不是到代码里面给出,这是我想解决的问题),然后点击命令按钮就可以读出那个表达式,最后使用里面的算法进行求解表达式的极值。希望各位帮忙。
      

  5.   

    在TEXT1中输入X1值
    在TEXT2中输入X2值
    在TEXT3中输入X3值
    在TEXT4中输入表达式f = Script.Eval(Text4.Text)就是表达式的极值
      

  6.   

    首先扫描表达式,碰到左括号(征对楼主的公式,当然可以包括其它运算符)开始取字符,再碰到右括号,停止,开始新的操作,这样现将公式分成多个token,(同时去掉了括号和运算符)。然后分析这些token。
    1。数字:if(str(val(token))=token,肯定是数字(当然要考虑数字的精度,以免出现错误,其实你可以判断里面是否只有数字或小数点来判断)。2。后面直接带右括号的肯定是函数名。(如果保证常数和变量都在括号里,则在扫描语句的过程中可以直接过滤调函数名)这其实就是编译系统的词法分析
      

  7.   

    对于函数功能的识别,只有取得函数名,然后用
    select token
      case "sin"
         y=sin(x)
      case "cos"
         y=cos(x)
    .......
    end select我曾经写过一个公式翻译的模块的,不过后来用VC重写,VB代码丢弃了。
    加入还有括号嵌套,真的很复杂。VB的这方面的代码很少见,可以找个C语言的参考一下。
      

  8.   


     谢谢sxs69() 的解答,不过可能我没有表达清楚,举一个简单的例子吧:  y=2*(x1)^2+5(x2) 其中 0<x1<1, 0<X2<1, x1+x2<1.5, 2*(x1)+5*(x2)<2 求min(y),这样的例子不能用你的方法求解吧。 lazycat818(lazycat818) 说的正是我想要搞明白的,可惜编程懂的较少。不知道哪位兄弟有公式翻译的模块,C语言也行,帮忙贴出来,先谢谢了。