怎样做函数发生器? 各位高手,本人现在做一个项目,牵涉一些行业运算,其运算公式比较复杂,鉴于我们对运算公式的不熟悉,且客户要求可以自定义计算公式,现在客户要求我们做一个函数发生器,客户使用自定义函数来完成数据之间的复杂运算后将结果输出。该函数发生器会要完成类似微分、积分等运算,而输入又是不确定的,请问有没有好的解决办法。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用ms script 控件,允许嵌入代码,不过没使用过。 就是函数转发器嘛很简单的把处理运算的操作转发给客户自己的DLL函数处理是这个意思吧? 你的什么微分、积分熟不熟啊? 不熟,那就~~~~~ 给你点建议,客户的运算应该无非就 + - * / 微分 积分 固定的算法吧。用stack原理处理运算法则,如下:当程序遇到同级别的运算符时就把运算数和运算符PUSH到Stack中。遇到级别比Stack最高的运算符的级别低的运算符时就Pop Stack中所有运算数和运算符进行计算得到的结果与级别低的运算符的一同放入Stack中。遇到级别高的运算符就Pop Stack中最后进来的运算数与新运算符进行计算得结果Push到Stack直到公式毕以后,Pop Stack所有的运算数和运算符进行最后运算。例子:7 + 2 - 3 * 8 -1 / 7 = ????7 -> Push Stack + -> Push Stack2 -> Push Stack- -> Push Stack3 -> Push Stack* -> Pop Stack 出 33 * 8 = 24 -> Push Stack - -> Push Stack1 -> Push Stack/ -> Pop Stack 出 11 / 7 = 0.14285714285714285714285714285714最后Pop 所有运算数和运算符一一进行计算。7 + 2 - 24 - 0.14285714285714285714285714285714 = ????原理比较粗略, 大概就这个意思。 微分积分,难我做过类似的,稍简单些1,直接表达式解析并求值,如采用逆波兰式2,将用户需求改写成VC表达式,用VC编译器编成DLL中的一个函数再调用。常用函数均可应付。 嵌入matlab吧,很通用的做法,需matlab引擎,可以处理普通的微积分 JJONY()你所说的stack肯定会要用的;zady(森林木)能讲得更明白些吗?wacky(我爱我家)matlab是控件吧,VB本身就带了吗?如果没有,哪里可以找到呢? l_agang(阿刚):须装matlab,用vc调用其引擎须libeng.lib和libmx.lib两个库。用vb也是同样的吧。仅供参考 wacky(我爱我家)在哪里有matlab的安装程序? 方法1,直接表达式解析并求值,如采用逆波兰式很多编程教材有,参考例子http://lsyz.3322.net/article.html方法2,将用户需求改写成VC表达式,用VC编译器编成DLL中的一个函数再调用。首先保留一个最小的VC编译内核(大概有7,8个文件),再让程序根据用户需求动态生成CPP(或C)源码,并调用命令行进行编译,生成dll,例:(假设用户定义新函数为输入参数的3次方)...#define FUNCTION(n, a) extern "C" __declspec( dllexport ) long fnMyFun##n(long lParam) {return long(a);}...//动态添加下行FUNCTION(101,pow(lParam,3))...上述代码生成一个DLL,包含一个fnMyFun101的函数。其它程序通过动态加载DLL,并调用该函数long lResult=fnMyFun101(200);就可获得预定的函数功能。这里仅仅是抛砖引玉,详细内容还需仔细实践。 http://www.csdn.net/cnshare/soft/4/4589.shtm这是一个算法解析器,一般常用的表达式它都能求解你去下载一下把!! http://www.csdn.net/cnshare/soft/4/4589.shtm这是一个算法解析器,一般常用的表达式它都能求解你去下载一下把!! 第一次遇到这样的问题,大家帮忙看看~ 关于一个网关登陆程序的实现 vc dll 窗体 在串口传输的一个问题(急) 100分求教如何将CRichEdit滚动到指定位置! ??伤脑子 如何从串口读取数据(vc6.0) 怎样改点Combo Box中每一行的字体? 如何控制CDialogBar中的按钮的使能状态?难道就没人知道吗? 请大家帮忙看看 GDI 内存泄露 (CDC & CBitmap) 在线等候:VC中要得到键盘输入的字符,怎么得到?最好给的详细一点.
是这个意思吧?
7 + 2 - 3 * 8 -1 / 7 = ????7 -> Push Stack
+ -> Push Stack
2 -> Push Stack
- -> Push Stack
3 -> Push Stack
* -> Pop Stack 出 3
3 * 8 = 24 -> Push Stack
- -> Push Stack
1 -> Push Stack
/ -> Pop Stack 出 1
1 / 7 = 0.14285714285714285714285714285714最后Pop 所有运算数和运算符一一进行计算。7 + 2 - 24 - 0.14285714285714285714285714285714 = ????原理比较粗略, 大概就这个意思。
我做过类似的,稍简单些
1,直接表达式解析并求值,如采用逆波兰式
2,将用户需求改写成VC表达式,用VC编译器编成DLL中的一个函数再调用。
常用函数均可应付。
zady(森林木)能讲得更明白些吗?
wacky(我爱我家)matlab是控件吧,VB本身就带了吗?如果没有,哪里可以找到呢?
用vc调用其引擎须libeng.lib和libmx.lib两个库。
用vb也是同样的吧。仅供参考
很多编程教材有,参考例子
http://lsyz.3322.net/article.html
方法2,将用户需求改写成VC表达式,用VC编译器编成DLL中的一个函数再调用。
首先保留一个最小的VC编译内核(大概有7,8个文件),再让程序根据用户需求动态生成CPP(或C)源码,并调用命令行进行编译,生成dll,例:(假设用户定义新函数为输入参数的3次方)
...
#define FUNCTION(n, a) extern "C" __declspec( dllexport ) long fnMyFun##n(long lParam) {return long(a);}
...
//动态添加下行
FUNCTION(101,pow(lParam,3))
...
上述代码生成一个DLL,包含一个fnMyFun101的函数。其它程序通过动态加载DLL,并调用该函数
long lResult=fnMyFun101(200);
就可获得预定的函数功能。
这里仅仅是抛砖引玉,详细内容还需仔细实践。
这是一个算法解析器,一般常用的表达式它都能求解
你去下载一下把!!
这是一个算法解析器,一般常用的表达式它都能求解
你去下载一下把!!