Delphi多功能计算器(一): 表达式计算

  这几天看到一个关于表达式计算的题目,于是想做一个多功能计算器。  首先,我们的计算器要能处理一般的算式和括号,例如(1+2)*3,其次也应该支持函数,例如1+abs(-100)。  程序的主要思路如下:

1.  解释算式中的所有函数,例如将abs(-100)替换为100

2.  处理括号,截取出括号里的内容并递归求值

3.  计算表达式为了实现第一步,我们先定义一个类型记录函数的名称和处理函数

  TFn = function(param1: integer; param2: integer): string;
  TFunc = record
    name: string;
    fn: TFn;
  end;

并对其初始化

function _abs(param1: integer; param2: integer): string;
begin
  _abs := intToStr(abs(param1));
end;
…..
Procedure init;
begin
  funcs[1].name := 'abs';
  funcs[1].fn := _abs;
  funcs[2].name := 'acos';
  funcs[2].fn := _acos;
  funcs[3].name := 'asin';
  funcs[3].fn := _asin;
  funcs[4].name := 'atan';
  funcs[4].fn := _atan;
  funcs[5].name := 'atan2';
  funcs[5].fn := _atan2;
  funcs[6].name := 'ceil';
  funcs[6].fn := _ceil;
  funcs[7].name := 'cos';
  funcs[7].fn := _cos;
  funcs[8].name := 'exp';
  funcs[8].fn := _exp;
end;

开始处理

 for i := 1 to funcCount do  //对所有的函数逐一扫描
  begin
    while pos(funcs[i].name, formula)<>0 do  //如果扫描到了,就开始处理
    begin
      position := pos(funcs[i].name, formula);
      delete(formula, position, length(funcs[i].name));
      if formula[position] <> '(' then //假如函数名后面不是’(‘, 则报错
      begin
        outMsg('''('' not found');
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值