一个实用的公式计算器

      说明:已经把下载文件转移到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) 可以这样输入 33+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 可以计算一般代数式,比如“1 + cos(2)”。 2 可在表达式中使用变量,包括中文变量名,比如“电压=电阻*电流”。在 求值时,软件自动提示输入变量的值并进行计算。 3 支持常用函数如三角函数、对数、乘方等,及逻辑函数如>, 大于 (1>0 )=1 < 小于 (1<0 )=0 <= 不大于 (1= 不小于 (1>=0)=1 == 等于 (1==0)=0 不等于 (10)=1 5 逻辑运算符 &或and 字节与 8 and 7 =7 |或or 字节或 8 or 7 =15 !或not 逻辑非 not 1 =0 6 补充公式 max max(a,b) 求a,b两数较大值 min min(a,b) 求a,b两数较小值 T2E_S(T) 已知温度T,求S型热电偶热电势(单位:mV) T2E_N(T) 已知温度T,求N型热电偶热电势(单位:mV) T2E_R(T) 已知温度T,求R型热电偶热电势(单位:mV) T2E_E(T) 已知温度T,求E型热电偶热电势(单位:mV) T2E_B(T) 已知温度T,求B型热电偶热电势(单位:mV) T2E_J(T) 已知温度T,求J型热电偶热电势(单位:mV) T2E_K(T) 已知温度T,求K型热电偶热电势(单位:mV) T2E_T(T) 已知温度T,求T型热电偶热电势(单位:mV) T2E_WRE325(T) 已知温度T,求WRE-325型热电偶热电势(单位:mV) T2E_WRE526(T) 已知温度T,求WRE-526型热电偶热电势(单位:mV) E2T_S(E) 已知热电势E,求S型热电偶温度(单位:℃) E2T_N(E) 已知热电势E,求N型热电偶温度(单位:℃) E2T_R(E) 已知热电势E,求R型热电偶温度(单位:℃) E2T_E(E) 已知热电势E,求E型热电偶温度(单位:℃) E2T_B(E) 已知热电势E,求B型热电偶温度(单位:℃) E2T_J(E) 已知热电势E,求J型热电偶温度(单位:℃) E2T_K(E) 已知热电势E,求K型热电偶温度(单位:℃) E2T_T(E) 已知热电势E,求T型热电偶温度(单位:℃) E2T_WRE325(E) 已知热电势E,求WRE-325型热电偶温度(单位:℃) E2T_WRE526(E) 已知热电势E,求WRE-526型热电偶温度(单位:℃) T2R_PT10(T) 已知温度T,求PT10型热电阻电阻值(单位:Ω) T2R_PT100(T) 已知温度T,求PT100型热电阻电阻值(单位:Ω) T2R_PT1000(T) 已知温度T,求PT1000型热电阻电阻值(单位:Ω) T2R_CU50(T) 已知温度T,求CU50型热电阻电阻值(单位:Ω) T2R_CU100(T) 已知温度T,求CU100型热电阻电阻值(单位:Ω) T2R_PT10(R) 已知电阻R,求PT10型热电阻温度(单位:℃) T2R_PT100(R) 已知电阻R,求PT100型热电阻温度(单位:℃) T2R_PT1000(R) 已知电阻R,求PT1000型热电阻温度(单位:℃) T2R_CU50(R) 已知电阻R,求CU50型热电阻温度(单位:℃) T2R_CU100(R) 已知电阻R,求CU100型热电阻温度(单位:℃) 【四 补充说明】 1 计算按钮快捷键为 ALT+ENTER ,在无变量情况下便于全键盘操作 2 计算结果 出现"INF"表示溢出 出现"Invalid" 表示无意义结果 出现"公式错误" 请检查您的公式 3 关于优先级 扩展数学运算符,三角函数,负>逻辑非>乘方 >数学运算符>关系运算符>逻辑运算符...... 如碰到不确定优先级的情况下,请用括码()来确保优先顺序。 4 数值格式 如需输入二进制,请以0b开头,中间不能有空格。举例:0b11 即为3 如需输入十六进制,请以0x开头。举例:0x11即为17 科学计数法,中间的'e'表示阶数,如12e-3为0.012,而12e3为12000 5 鼠标中键最小化到托盘,WIN+C唤醒。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值