宏代换(200分)

  • 主题发起人 主题发起人 zhangxh
  • 开始时间 开始时间
Z

zhangxh

Unregistered / Unconfirmed
GUEST, unregistred user!

S:='A*0.32+B*0.45+C*1.68-D*99';
A:=100;
B:=400;
C:=800;
D:=10;
现求表达式A*0.32+B*0.45+C*1.68-D*99的值?

我知道在VFP中通过 &S 即可得到答案?在DELPHI中有类似的函数吗?
请赐教!!! (急!!!)
 
Delphi不支持宏,但是你的问题可以换用其他角度解决啊?
 
如何解决?请详细!!!
 
>>现求表达式A*0.32+B*0.45+C*1.68-D*99的值?
x:=A*0.32+B*0.45+C*1.68-D*99;

(但我觉得你的问题没有表述清楚,不知道你具体要实现什么功能。)
 
I c I c
var
a,b,c,d:integer;
s:real;
....
A:=100;
B:=400;
C:=800;
D:=10;
S:=A*0.32+B*0.45+C*1.68-D*99;



 
表达式S为一数据库字段GS(STRING)的值(在录入时所输的计算公式),
另一字段DATA(REAL)需根据GS的表达式计算的结果!清楚吗?
 
如果你的计算公式结构固定
s='k1*A+k2*B+k3*c+k4*D' 这个形式,你直接调整系数k1,k2,k3,k4就可以,
这样可以固定几个结构让用户输入系数。
如果是任意形式,即由用户来输入k1*A+k2*B*k3*C/(k4*D)甚至更恶心的形式,
嘿嘿,那你麻烦了,我就不会了。
 
Delphi不支持宏,用函数实现.
 
wumeng 请问用什么函数?
 
自己写解释器或者找个第三方控件(网上大把大把有)
 
请问哪里有控件?
 
去http://www.torry.ru/找, 很多, 而且都有原代码
 
属于词法分析类的,找本编译原理的书看看就可以了。
 
可自行编写解释函数。
由于表达式是让用户输入的,那么一定注意不允许出现非法情况
这样你就可以将所有的运算符(包括括号)都放在一个集合中,
通过循环分析表达式中的每一个字符,根据情况组合成真正的表达式
 
A B C D 设为变量就行了, 同意千中元
 
用Format函数可以解决如:
Format('There are now %d records in the table',[DataSet.RecordCount]);
可将%d处替换成数据记录行数

你的问题可如下解决
var
s:string;
total:double;
begin
s:=Format('%d*0.32+%d*0.45+%d*1.68-%d*99',[A,B,C,D]);
然后分析这个字串就行了,具体是判断运算符的位置,然后切开,分别转化成浮点数
然后计算
 
这里使用字符串分析器很简单的
 
将该表达式生成逆波兰表达式,然后再解释,太麻烦!!!
有更简单的方法吗?
 
Another_eYes:
我在WWW.TORRY.RU上找了,没找到?
我英文不太好,且不知道其被归到哪一类,
您能否告知具体的文件名???
不胜感谢!!!
 
to zhangxh:
收到您的邮件了,我说的有两种方法.
1.在程序中写死,这适用于公式定了的情况.
2.自已判断公式中的运算符号,生成表达式.这比较难些.
 
后退
顶部