说明:已经把下载文件转移到http://www.shaohui.org/exprcalc.html了.

两年以前在学校的时候,做了一个表达式求解的程序,是用C写的DOS环境下运行的程序,而现在用DOS的人在这个世界上已经差不多绝迹了。所以,实际上这个程序已经失去 了它的意义.最近,由于需要做一个计算器,而我发现以前的程序功能已经足够强大了,我把以前的代码做了一个小小的改动,用BCB做了一个图形界面,于是现在你所看到的公式计算器就诞生了。

由于各种实际的原因,我不便于公布该程序现在的源代码.如果确实需要,请参考http://blog.csdn.net/shaohui/archive/2004/11/05/168323.aspx, 核心的代码我没有作一行改动,只是做了个图形界面,增加使用变量的功能.

该软件为绿色软件,不需要安装,也不会修改你的注册表。

你可以到以下地址下载该软件

http://www.freewebs.com/zhengsh/download/ExprCalc.rar
http://geostar.3322.org/soroc/downloads/ExprCalc.rar

公式计算器使用说明

1         该程序能够识别大多数数学运算符号

+ 加

- 减

* 乘

/ 除

^ 乘方开方

% 取余

注意:绝对值符号||不能够使用,有专门的函数fabs或者abs求绝对值

    不能够用点号代替乘号例如1*2不能够写成1.2

2. 该程序能够识别大多数数学函数(29个)

函数名称

内部表示

说明

arcsin

A

反正弦

arccos

B

反余弦

arctan

C

反正切

arcctg

D

反余切

arcsec

E

反正割

arccsc

F

反余割

arctg

C

反余切

asin

A

arcsin

acos

B

arccos

atan

C

反正切

actg

D

反余切

asec

E

反正割

acsc

F

反余割

fabs

G

绝对值

exp

H

指数函数

cos

I

余弦

ctg

J

余弦

tan

K

正切

sec

L

正割

csc

M

余割

cth

N

双曲正割

sin

O

正弦

abs

G

绝对值

tg

K

正切

ln

P

自然对数

sh

Q

双曲正弦

th

R

双曲余弦

ch

S

双曲余割

log

T

对数

3  。 可以识别常数e和圆周率pi

不区分大小写,也就是说你写成pi,PI,pI,Pi都是等效果的

4 .可以识别省略的乘号

乘号在大多数情况下都可以省略.

列如:3*(3+4) 可以这样输入 3(3+4)

3*sin(pi/4) 可以这样输入 3sin(pi/4);

(3+4)*(3+4) 可以这样输入(3+4)(3+4)

5.函数的输入可以象数学上一样省略括号(以任意数为底数的对数函数除外)

列如:sin(pi) 可以这样输入 sinpi

6.小于1的小数可以省略小数点前的0

列如:0.123 可以这样输入 .123

0.2 * 0.3 可以这样输入 .2*.3

7.对数函数的输入格式log(底数,真数),ln真数

如:log(e,3.3)

lne

8.可以识别正负号(不是加减)

如:-3+4

+4+(-4+4)

9.能够识别几乎所有的合法的运算符号的函数的组合

如:sin cos tan sin(pi/4)

log(e,cos(pi/4))

log(lne^2,log(10,log(e,e^100)))

10.支持用户自定义变量(新功能)

注意

为了便于和函数相互区别,用户自己定义的变量都要求以下划线‘_’开头。

变量只能够包含下划线和字母,不能够有数字和其它字符.

变量的长度至少是2,以免变量名称重复。

变量名称不能够相互包含:例如你已经定义了一个叫_varible的变量,你就不能够再定义一个变量叫_var

使用举例

求方程ax2+bx+c=0的解

利用公式

X1=(-b+(b^2 -4ac )^(1/2))/( 2a )

首先定义变量

_a,_b,_c(因为变量必须以_开头)

然后可以这样

(-_b+(_b^2-4_a_c)^(1/2))/(2_a)

OK! 功能很强大,也很简单吧。

11.括号

括号包括大中小3种,它们的功能一样,可以混用,根据个人不同的习惯自己选用,但是在使用的时候请注意要配对使用。

括号内部必须要有表达式,像下面这样的式子是不对的

(1+2)*((+3+4)()(6))

括号可以多重嵌套,例如下面的式子是合法的

(1+2)((((((((((((1))))))))))))

    在以下情况你需要使用括号

a.改变运算顺序

b.使用函数时候

c.当你不确定各种运算符号的优先级的时候,可以使用括号改变优先级

例如2*30%4,当你不确定计算机是先计算那一个的时候,可以加上括号

(2*30)%4,或者是这样2*(30%4)

    在以下情况你可以省略括号

a.函数的表达式很简单

如ln(1)可以写成ln1, sin(pi)可以写成sinpi

PS:当发布完了这个程序了以后我才发现有些不妥当,因此再补充一些,这些都不是什么新的东西,都可以在以前的程序的说明中能够找到,但是这里再次说明一下我觉得还是有必要的。
按照重要与否的顺序来,有的部分可能你不是很感兴趣。
该软件现在存在的问题
1.对于错误的表达式的处理还需要更一步改进
对于表达式的语法识别上还没有发现什么问题,但是在处理具体表达式的内容的时候,程序还不够健全。没有对所有的错误都做处理。这并不难,但是麻烦了点。
例如:
arcsin100
没有任何语法错误,但是对于函数arcsin的自变量的值应该在[-1,1].这样的情况我并没有全部都去仔细的去判断。这不是太大的问题,知道有这个问题就可以了。
 
    2.提示信息有时候还不够准确
如果你输入 *9   (这当然是不合法的输入)
系统虽然能够检查出语法错误,但是提示信息不正确.
提示信息: 左括号后(不能有运算符号
显然你没有输入左括号,出现该提示的原因是:为了能够正确处理诸如+3+4,-3*5的表达式,程序对于你输入的表达式都默认地加上了左括号.
  
3.个别表达式不能够正确识别
尽管已经做了很多的努力,但是还是不能识别形如下列的表达式
sin-3
系统认为这是错误输入,可以改成sin(-3)输入
 
4.数的表示范围固定
由于计算的时候是采用系统的double类型,所以范围就固定了,8个字节。这也就决定了这个计算器对于计算超大和超小的数的时候,计算精度不能够自己指定。这个问题是比较致命的,要解决这个问题,必须自己定义一种新的数据类型来表示任意精度的数。不过满足我们常用的计算还是绰绰有余的。
 
 
关于变量定义
1.  变量定义中可以是表达式
用户定义的变量中可以是任何合法的表达式
比如说,我可以定义一个变量 _var = log(lne^2,log(10,log(e,e^100)))
这依然是合法的
2. 不可以用一个变量去定义另外一个变量
尽管要做到一点并不难,但是如果用户用变量相互定义,或者定义的变量形成一个环的话不容易处理,所以干脆就不提供这个功能。
例如:用户如果这样定义变量是比较麻烦的事情
_a = 2*_b
_b = 2*_c
_c = _a
这其实就相当于一个变量都没有定义,有点像操作系统里面的进程死锁了哈。
 
工作原理
其实表达式的计算就是堆栈操作,很简单的,到数据结构的教材上都可以找到现成的答案,有兴趣回去慢慢研究吧。
 
表达式的语法检查
依据:
根据表达式中任意两个字符的位置关系来判断表达式的合法性,也就是说根据他们那些能够出现在一起,那些不能出现在一起。
如(* 的组合永远都不可能出现在一个合法的表达是中,但 *( 可以
为了判定表达式的合法性,我们把表达式的字母表中的字母分了以下几个类别
1.  数字(包括小数点)
2.  ( 左括号
3.  )右括号
4.  运算符号(包括对数,)
5.  函数
下面给出了它们合法性的判定表
程序中的SyntasCheck就是按照这个表而写的
T代表合法, F代表不合法
数字
运算符号)
(左括号
右括号
函数
数字
T
T
T
T
T
运算符号)
T
F
T
F
T
(左括号
T
F
T
F
T
)右括号
T
T
T
T
T
函数
T
F
T
F
T
当一个数中有多个小数点的时候(如3.3.4.4),上表不能识别出,因此另外写了一个函数pointCheck();

一个实用的公式计算器相关推荐

  1. oracle 计算平方,次方,一个实用的Excel函数,Power函数公式完成平方、立方及N次方运算...

    一个实用的Excel函数,Power函数公式完成平方.立方及N次方运算 今天我们来学习如何利用Excel函数,进行数据的平方.立方等数据运算.相信对于许多同学来讲,这样的数据运算一般都是用电脑计算器来 ...

  2. 计算器算贝塞尔公式_一个强大的高等数学计算器

    学过高等数学的你... 是否苦于复杂的积分不会算?级数不会算?极限不会求? 说到数学软件,你只能想到Matlab?或者Mathematica? 当然,会这些软件你也很牛了! 可是...大多数人记不清相 ...

  3. 一个实用的实时毛发渲染及着色方法

    一个实用的实时毛发渲染及着色方法 Thorsten scheuermann ATI Resarch,Inc. 翻译:潘曦 (译文里的(pancy:XXX)为译者注) 介绍: 我们提出了一个使用多边形模 ...

  4. 勾股定理用计算机怎用,勾股定理公式计算器

    勾股定理公式计算器最新版是一款十分出色的勾股定理计算器,勾股定理公式计算器最新版界面简洁,功能出众,支持两种计算器模式,基本模式和批量计算模式,此外勾股定理公式计算器官方版的计算方法非常的简单,在批量 ...

  5. 作业1开发一个简单的python计算器

    开发一个简单的python计算器 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568 ...

  6. 练习:Python 的字符串处理, 一个朴实无华的四则运算计算器,批量计算小学生四则运算表达式

    Python 官网:https://www.python.org/ Free:大咖免费"圣经"教程< python 完全自学教程>,不仅仅是基础那么简单-- My CS ...

  7. 趣味三角——第11章——一个著名的公式

    目录 1. 著名无限积公式简述及证明 2. Jules Lissajous 和他的图形(Jules Lissajous and His Figures) 11章 一个著名的公式 The prototy ...

  8. 一个实用的试题库组卷策略和算法

    随着计算机信息技术在教育教学中应用的深入,建立课程教学考试的试题库系统的需求多了起来.组卷是试题库系统的重要组成部分,而组卷策略(算法)是试题库系统的核心.许多文献[1]-][7]对计算机自动组卷策略 ...

  9. java 百亿计算器_设计一个一百亿的计算器

    .补码(负数在计算机中的存储) .百亿计算器 负数在计算机中以补码的形式存储. 负数的补码表示方法是:将负数表示成二进制原码(负数最高位是1,正数最高位是0)然后将原码取反(1变0,0变1),即反码, ...

最新文章

  1. scvmm2008R2创建委派管理员角色
  2. post提交,WPF,Silverlight(加深记忆写一遍)
  3. git 拉取远端仓库_git命令-远程仓库拉取、本地仓库更新、工作空间提交等等
  4. sql:数据定义语言ddl
  5. python 知乎关系图谱_5000行python代码+可视化60W数据,告诉你知乎用户不为人知的事...
  6. [APIO2009]抢掠计划
  7. 机械专业中的计算机应用系统,计算机在机械行业中的应用
  8. 错误处理与调试[下]
  9. abb变频器如何拷贝_关于ACS800变频器拷贝参数.pdf
  10. 解决Server2008下远程桌面连接“由于没有终端服务器许可证服务器可以提供许可证”
  11. python打开网页后点击网页按钮_单击网页按钮的Python脚本
  12. Obsidian 插件安装
  13. 不同坐标系下角速度_悠悠球的物理学原理(下)
  14. 听趣拍云产品经理剖析视频基础知识
  15. 基于机器学习的恶意软件检测(二)
  16. 如何管理归档文件和归档目录
  17. mysql wal_我所理解的MySQL之一:基础架构
  18. EasyExcel 自定义LocalDate类型转换器Converter
  19. 今天小鱼搬家,简单说说Gazebo
  20. android检测usb存储,android 监听检测USB存储设备

热门文章

  1. 记cinder-volume服务down的解决方法
  2. 冰糖心苹果营养价值 冰糖心苹果的功效与作用
  3. PyMySQL设计-进销存系统-完整版-
  4. java实现微信支付与支付宝支付接口
  5. java-多文件边压缩边下载
  6. Linux dd与cp区别
  7. 安卓学习布局篇 Android studio(二)
  8. ofdm 误码率 matlab,OFDM不同信噪比下的误码率matlab源码
  9. 电商订单提交后的基本处理
  10. 向量夹角顺时针或逆时针,交叉口向左拐向右拐的问题