向各位大哥请教一个计算算术表达式的问题。(50分)

  • 主题发起人 主题发起人 chll
  • 开始时间 开始时间
C

chll

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位大哥,在Delphi中,如何实现计算一个带变量的算术表达式的算法??
是不是要用到栈??
 
或者你也可以将表达式中的各个变量值存入一个表的一条记录中,然后用SQL语句进行计算。
 
楼上大哥,我很菜,你能否给出具体代码??谢谢先!!
 
没有必要用到栈的,你可以在计算的时候建一张temp表,把变量的值存入表中,随时调用!
 
如果变量的个数已知,就可以用数组分别保存变量名和变量的值,如果未知,也可用动态数组.
 
楼上各位大哥,你们能说的详细点吗?
 
比如计算A+B*C
a=1, b=2, c=3;
先把值代入,将表达式变为 1+2*3;

with Query do
begin
Close;
SQL.Clear;
SQL.Append('select '+express/*1+2*3*/);
Open;
Return:=Fields[0].AsFloat
end
 
现在是要用户自己输入带变量的算术表达式,并能计算结果。具体怎么实现??
我记得《数据结构》中,有这么一算法,是用栈实现的,我不记得了,哪位兄弟还记得??
帮帮我好吗???
 
"要用户自己输入带变量的算术表达式"难度比较大吧
看下面的思路对你有没有帮助:
1.为用户定制好变量,如:x,y,z等;
2.如何处理各种运算符号?
 
to chll:
数据结构中是用两个栈的,一个放变量,一个放运算符.
编译原理中是用逆波兰表达式做的,要构造二叉树.
但为了实现结果,最简单的办法就是用select语句.
 
如果是用户的算式是任意的,就是设计一个计算器。或查找有关数据结构与算法的书。
如楼上说采用逆波兰表达式。
如果算式是固定的,可以设计一个数据库表。
如算式 (a*b*c-d+e)/2
可以用一个或下结构的数据库表
算式编号 算式名称 数字a 数字b 数字c 数字d 数字e 结果
1
2
如果算式只有一个可以用一个带参数的sql语句实现
 
请看 http://www.delphibbs.com/delphibbs/dispq.asp?lid=1190390
其中 floweasy2001 的帖子——详细的源代码!
 
SQL.Append('select '+express/*1+2*3*/);
怎么可能?解决了值的问题,运算符呢?
算法实现比较困难。
可以找个delphi的控件。
 
to Crosman:
您老会用SQL语句吗?
 
我做过表达式/公式解析器,支持自定义变量,
如果支持自定义函数就更高级了,甚至流程控制控制。。。现在我用的控件是一个
Pascal 脚本解析器(支持函数,数组,循环,伪编译,甚至 Form,整个一虚拟机),很舒服。
 
to 轻松虎:
能不能给我一份:wb_l@eyou.com
 
楼上老兄,你说的那东西能不能给小弟我发一个,无论什么要求都行,我现在正急需。
我的邮箱:ling99313@sina.com
 
已经给你们发了:)

另外参考:其他一些相对较小也不错的公式解析和脚本控件:

http://www.torry.net/scripts.htm

 
多人接受答案了。
 
后退
顶部