找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1278|回复: 10

[求助]:数学公式解析的方法

[复制链接]
发表于 2004-12-4 12:12:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我想用vba解析数学公式,也就是用户输入类似a+b/c-(e/(f*g))这样的公式(公式只包含加减乘除和小括号、负号、小数点),我的程序能识别这个公式并当用户输入a,b,c,d,e,f,g的数值时,我能给出结果。这里强调公式由用户输入,是因为我的程序写完后,用户有可能新增公式,而此时我的程序无需修改。
请高手给个算法说明或是vba代码示例,万分感谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-12-4 16:30:57 | 显示全部楼层
有一些控件可以实现你搜索搜索看,你也可以自己编写代码实现,我以前编写过的,因为你的计算类型不多,仅有加减乘除和小括号,完全可以实现。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-5 14:58:01 | 显示全部楼层
Dim a As Object
Set a = CreateObject("ScriptControl")
a.language = "vbs"
a.ExecuteStatement "a=1"
a.ExecuteStatement "b=2"
MsgBox a.eval("a+b")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-13 11:53:28 | 显示全部楼层
我记得清华出的那本《数据结构 C++版》上有上述算法的伪码和算法设计思想。你可以找一下修改修改。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-14 09:09:10 | 显示全部楼层
我发现了3楼的办法不能完全实现我的功能,我的公式长度是变化的,也就是abcd不是固定的,用户如果已经有了一个公式,运算项是abcd,他新加的公式可能不是4个运算项了,也许是abcdef,你提供的这方法实现就不容易了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-16 17:59:23 | 显示全部楼层
可以试试 Class Math Expression Parser
v. 4.0.0  by Leonardo Volpi, Michael Ruder, Thomas Zeutschler, Lieven Dossche.

A nice class for parsing and evaluating math expressions in Visual Basic  and VBA.


http://digilander.libero.it/foxe ... pressionsParser.htm
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-16 19:55:26 | 显示全部楼层
谢谢,我先看看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-1-27 10:38:17 | 显示全部楼层
dashan:
    不知你知不知道,你给出的网页可能有问题,我打开你给出的网页时,系统警告说,网页中有恶意代码,我不能确定你给出的网页一定有恶意代码,但我希望大家不要在这里给出有恶意代码的网页,保持一片净土,让大家能在这里放心里讨论,放心地获取知识、资料。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-1-27 17:28:56 | 显示全部楼层
我刚又试了一下那个连接,但没有“恶意代码”的提示,机器装的是Norton 9.0企业版,而且病毒定义是2005年1月26日的。
到现在我也不知道那里面到底有没有病毒,而且从网址的后缀上可以看出那是一个意大利的网址,跟我一点关系都没有,如果出于什么不好的目的的话也不用跑到那么远的一个地方。纯粹是觉得是除了用ScriptControl以外,还可以有其它的方法可以解决,才把它贴出来的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-1-28 10:53:20 | 显示全部楼层
我打开时出现的提示:
我用的是端星2005,2005.1.27.更新。
我不是讲你做这样的事,只是提醒大家,给出连接时,要注意所给的连接是安全的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-2-1 11:18:45 | 显示全部楼层
解析公式的 基本原理就是《编译原理》方面的课程, 当然如果你用3楼的方法,不如调用 lisp扩展函数 (cal   expresstion ) 非常简单。

lisp的例子可见
http://www.mingsoft.net/bbs/dispbbs.asp?boardid=5&id=27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-28 15:18 , Processed in 0.440303 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表