转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
计算出用字符串表示的数学表达式的值         ★★★★

计算出用字符串表示的数学表达式的值

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1536 更新时间:2009/4/23 18:39:37
'' then fv:=arcsin(fv) else
                 if Symbol=''''ARCCOS'''' then fv:=arccos(fv) else
                 if Symbol=''''ARCTG'''' then fv:=arctan(fv) else
                 if Symbol=''''ARCTAN'''' then fv:=arctan(fv) else
                 if Symbol=''''LN'''' then fv:=ln(fv) else
                 if Symbol=''''LG'''' then fv:=ln(fv)/ln(10) else
                 if Symbol=''''EXP'''' then fv:=exp(fv) else
                 if Symbol=''''SQR'''' then fv:=sqr(fv) else
                 if Symbol=''''SQRT'''' then fv:=sqrt(fv) else
                 if Symbol=''''NOT'''' then fv:=not(Round(fv)) else
                 if Symbol=''''N!'''' then fv:=CalcN(Round(fv)) else
                    error(symbol);
                 if nextch='''')'''' then readnextch else error(nextch);
               end else begin   // parse constant
                          if Symbol=''''PI'''' then fv:=3.14159265358979324 else
                          if Symbol=''''E'''' then fv:=2.71828182845904523 else error(symbol);
                        end else begin error(Symbol); fv:=1;  end;
  end;
end;
procedure Power_(var pv:extended);
var
  multiop:char;
  fs:extended;
begin
  factor(pv);
  while nextch in [''''^''''] do
    begin
      multiop:=nextch;
      readnextch;
      factor(fs);
      case multiop of
      ''''^'''':if pv<>0.0 then pv:=exp(ln(pv)*fs) else error(multiop);
      end;
    end;
end;
procedure term_(var tv:extended);
var
  multiop:char;
  fs:extended;
begin
  Power_(tv);
  while nextch in [''''*'''',''''/'''',Symbol_Mod,Symbol_Div,Symbol_And,Symbol_Shl,Symbol_Shr] do
    begin
      multiop:=nextch;
      readnextch;
      Power_(fs);
      case multiop of
      ''''*'''':tv:=tv*fs;
      ''''/'''':if fs<>0.0 then tv:=tv/fs else error(multiop);
      Symbol_Mod:tv:=round(tv) mod round(fs);   // prase mod
      Symbol_Div:tv:=round(tv) div round(fs);   // parse div
      Symbol_And:tv:=round(tv) and round(fs);   // parse and
      Symbol_Shl:tv:=round(tv) shl round(fs);   // parse shl
      Symbol_Shr:tv:=round(tv) shr round(fs);   // parse shr
      end;
    end;
end;
procedure expression(var ev:extended);
var
  addop:char;
  fs:extended;
begin
  term_(ev);
  while nextch in [''''+'''',''''-'''',Symbol_Or,Symbol_Xor] do
    begin
      addop:=nextch;
      readnextch;
      term_(fs);
      case addop of
      ''''+'''':ev:=ev+fs;
      ''''-'''':ev:=ev-fs;
      Symbol_Or:ev:=round(ev) or round(fs);     // parse or
      Symbol_Xor:ev:=round(ev) xor round(fs);   // parse xor
      end;
    end;
end;
BEGIN
  inputexp:=ConvertExpression(ExpressionString);
  if pos(''''='''',inputexp)=0 then
     inputexp:=ConvertExpression(ExpressionString);
  position:=0;
  while inputexp[position]<>''''='''' do
    begin
      nextchpos:=0;
      readnextch;
      expression(result);
    end;
END;

function ParseExpressionToStr(ExpressionString:PChar):PChar; stdcall;
var ES:string;
begin
  ES:=ExpressionString;
  if pos(''''='''',ES)=0
     then ES:=ES+''''=''''
     else ES:=Copy(ES,1,Pos(''''='''',ES));
  ES:=ES+FormatFloat(''''0.000000000000'''',ParseExpression(ExpressionString));
  Result:=PChar(ES);
end;

function Version:PChar; stdcall;
begin
  Result:=''''Calculator Dll Build 2001.10.25 Made By Liu Yang All Rights Reserved'''';
end;

Exports
  ConvertExpression, ParseExpression, ParseExpressionToStr, Version;
end.

上一页  [1] [2] 


没有相关教程
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台