Board logo

标题: calcu.exe 表达式计算器,Pascal语言,原创 [打印本页]

作者: dengyuli    时间: 2015-4-18 21:14     标题: calcu.exe 表达式计算器,Pascal语言,原创

源代码如下:
  1. program expression_calculator;
  2. uses windows,dos;
  3. label calc,head;
  4. var
  5. a,r:string;
  6. f,n:array [1..100] of string;
  7. i,j,k,l,lqu,rqu:integer;
  8. t,u:real;
  9. fl1,fl2:text;
  10. p:boolean;
  11. begin
  12. a:=paramstr(1);
  13. a:='('+a+')';
  14. p:=false;
  15. if paramstr(2)='/p' then p:=true;
  16. head:write('');
  17. assign(fl1,'calc.mfc');
  18. assign(fl2,'calc.mfc');
  19. for i:=1 to 100 do begin
  20. f[i]:='';
  21. n[i]:='';
  22. end;
  23. lqu:=0;
  24. rqu:=length(a);
  25. for i:=1 to length(a) do begin
  26. if a[i]='(' then lqu:=i;
  27. if a[i]=')' then begin rqu:=i;goto calc end;
  28. end;
  29. calc:j:=1;
  30. for i:=lqu to rqu do
  31. case a[i] of
  32.   '1','2','3','4','5','6','7','8','9','0','.':n[j]:=n[j]+a[i];
  33.   '+','-','*','/':begin j:=j+2;f[j-1]:=a[i] end;
  34. end;
  35. for i:=2 to j do
  36. for k:=i-1 downto 1 do
  37.   if n[k]<>'' then
  38.    for l:=i+1 to j do
  39.     if n[l]<>'' then begin
  40.      val(n[k],t);
  41.      val(n[l],u);
  42.      case f[i] of
  43.       '*':begin rewrite(fl1);t:=t*u;write(fl1,t:0:5);close(fl1);reset(fl2);read(fl2,n[i]);close(fl2);n[k]:='';n[l]:='';f[i]:='' end;
  44.       '/':begin rewrite(fl1);t:=t/u;write(fl1,t:0:5);close(fl1);reset(fl2);read(fl2,n[i]);close(fl2);n[k]:='';n[l]:='';f[i]:='' end;
  45.      end;
  46.     end;
  47. for i:=2 to j do
  48. for k:=i-1 downto 1 do
  49.   if n[k]<>'' then
  50.    for l:=i+1 to j do
  51.     if n[l]<>'' then begin
  52.      val(n[k],t);
  53.      val(n[l],u);
  54.      case f[i] of
  55.       '+':begin rewrite(fl1);t:=t+u;write(fl1,t:0:5);close(fl1);reset(fl2);read(fl2,n[i]);close(fl2);n[k]:='';n[l]:='';f[i]:='' end;
  56.       '-':begin rewrite(fl1);t:=t-u;write(fl1,t:0:5);close(fl1);reset(fl2);read(fl2,n[i]);close(fl2);n[k]:='';n[l]:='';f[i]:='' end;
  57.      end;
  58.     end;
  59. r:='';
  60. for i:=1 to j do
  61. if n[i]<>'' then r:=n[i];
  62. delete(a,lqu,rqu+1-lqu);
  63. insert(r,a,lqu);
  64. if p then writeln(a);
  65. if not((pos('+',a)=0) and (pos('-',a)=0) and (pos('*',a)=0) and (pos('/',a)=0)) then goto head;
  66. if not(p) then writeln(a);
  67. exec('C:\Windows\system32\cmd.exe','/c del /f /q calc.mfc >nul 2>nul');
  68. end.
复制代码
使用方法:calcu [表达式]
支持多重括号,如:(((32-5)*2)-65)+3,实数运算保留5位小数。请确保输入的表达式格式正确,否则会发生不可预料的错误。
目前仅支持四则运算。
更新:增加/p开关,/p开关必须在表达式后面,若有/p开关,则给出计算过程。
Bug:不能处理负数,将会尽快修复。
链接: https://pan.baidu.com/s/1LHxoZW6rL1jNxisiMxApVw?pwd=wit7




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2