首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算用户在visual basic6exe中输入的任意数学函数?

如何计算用户在visual basic6exe中输入的任意数学函数?
EN

Stack Overflow用户
提问于 2017-05-06 00:05:55
回答 1查看 469关注 0票数 1

我已经编写了一个程序来绘制给定函数的斜率场。

如果我在源代码中插入函数,它就可以正常工作。

但是我想把这个vb6项目转换成一个exe文件。

因为我之前知道会发生这种情况,所以我之前做了一个用于输入函数的字段。该函数将以特殊形式输入。受AutoCAD中一些插件中使用的语言的启发,我创建了这种语言,并将其命名为DiffSol。

所以用户要做的是使用DiffSol语言在字段中编写一个函数。

问题是,它需要是vb中的一个真正的数学函数,才能对不同的x和y进行求值。但我找不到一个策略来将该语言转换为一个可以求值的vb数学函数。

我要做的就是对输入的函数求值15*31次。

这项工作看起来像是做一个编译器。这对我来说似乎真的是一件很难的工作。

有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2017-05-06 21:17:11

简单的方法是将其转换为VBScript或JScript。

创建一个包含用VB编写的函数的类:

代码语言:javascript
运行
复制
' +(a,b)
public function ADD(a as double, b as double) as double
    add = a + b
end function

'/(a,b)
public function DIV(a as double, b as double) as double
    div = a / b
end function

添加对Microsoft脚本控件的引用,然后:

代码语言:javascript
运行
复制
Dim scr As ScriptControl: Set scr = New ScriptControl
scr.Language = "VBScript"

'// allow the script access to the class with the functions
scr.AddObject "DS", new diffsolClass

expr = " +(200, c(/(+(2,6), 2))) "

'//parse with simple substitution
parsed = expr
parsed = Replace$(parsed, "/", "DS.DIV")
parsed = Replace$(parsed, "+", "DS.ADD")
parsed = Replace$(parsed, "c", "cos") '//built in already

'//for some valid VB: DS.ADD(200, cos(DS.DIV(DS.ADD(2,6), 2))) 

'//run it
MsgBox scr.Eval(parsed)

返回199.346356379136

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43809383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档