版本更新内容

最新版介绍在这里

介绍

个人设计的一个表达式计算器,支持以下功能

  • 带关系运算和逻辑运算的数学表达式解析与计算
  • 支持常见数学函数
  • 表达式带变量运算,变量赋值运算
  • 支持简单求导(实现十分简单,所以支持的函数很少,但很多函数可以使用伪求导),定积分求值等运算
  • 简单逻辑表达式的解析与计算
  • 绘制函数图象
  • 打印真值表
  • 使用编程方式进行一些复杂运算

系统要求:Windows 10 秋季创意者更新(16299)

制作目的为对已学习知识的实践,以使用的方便灵活为主要目标。
由于制作时间短,本程序仍存在不少Bug,详情请见备注。
目前版本仍为测试版本,稳定性不足,还请注意程序得到的结果是否正确。
如果您想反馈Bug,我是非常欢迎的,邮箱为 stardustdl@outlook.com
但由于是个人业余开发者,更新周期不定,Bug修复时间不定。

外观

数学表达式

逻辑表达式

函数绘图

编程页面

下载在这里

以下为使用说明。

iExpr 使用说明

  • 本说明版本:2017.12.9
  • 适用软件版本:iExpr 1.3 (很快就会发布,请关注软件设置页的版本信息)
  • 下载在这里

界面介绍

iExpr 分为四个页面,分别为数学表达式,逻辑表达式,数学表达式图像,编程页面。

表达式页面头部有表达式编辑框(回车解析,Esc取消运算),其下有两栏,

  • 第一栏会显示表达式计算结果(如果解析失败也会将提示信息显示在这里)。
  • 第二栏会显示表达式解析结果,可以在这里检查系统解析的表达式是否符合预期。

表达式页面主体部分会提供相关扩展功能。

您切换页面时原页面中的信息会被清空,所以请保留好您需要的信息(如输入表达式)。

表达式 基本语法

  • ()

小括号用于区分优先级与包围函数参数

  • @"abc"

表示其中的内容(abc)为一个整体,常用来表示预定义常量(不同表达式系统中可能有不同的预定义常量表示),有时也用于被运算者独立解析的函数参数或指定变量名。

  • F(arg1,arg2,...)

函数格式(F 在这里包含自定义的函数以及 Lambda 表达式,关于自定义的函数 具体请见编程部分)。注:函数的运算优先级最高

  • a b c d

表达式支持变量表示,首字符不为数字或运算符(函数)关键字的一般都会解析为变量,但仍强烈建议使用纯字母字母+数字的方式表示变量。

  • (v1,v2,...)=>(expr)

Lambda 表达式,可以理解为自己定义的一个自变量为 v1,v2,v3,…v1,v2,v3,\dots 的函数

  • x.func(args)

调用函数,对于部分支持前置参数的函数,可以这样调用,其等价于 func(x,args)

集合类型表示

  • [1,2,a^2,5]

列表,用 [] 包围表示这是一个列表,其中元素以 , 分隔

  • {1,2,a^2,5}

无序不重集合,用 {} 包围表示这是一个集合,其中元素以 , 分隔

  • (1,2,a^2,5)

定长元组,用 () 包围表示这是一个元组,其中元素以 , 分隔

基础表达式系统

为各表达式系统的基础

运算符

  • => Lambda 表达式定义
  • . 层级调用

函数

  • list(l1,l2,...)

生成列表,参数中的单层集合会被展开。

  • tuple(l1,l2,...)

生成元组,参数中的单层集合会被展开。

  • set(l1,l2,...)

生成集合,参数中的单层集合会被展开。

  • len(l1,l2,...)

统计元素数目,参数中的单层集合会被展开。

  • val(l,index)

获取列表 l 中的第 index 项(从0开始计数)

  • val(l,index,newval)

将列表 l 中的第 index 项(从0开始计数)设为 newval

数学表达式系统

以下变量除特殊标明外都默认为实数类型。

基本部分

运算符(优先级从低到高)

  • +
  • - 减,包含取负,注意这里优先级较低,使用x^-1时请写成x^(-1)
  • *
  • /
  • % 取模
  • ^ 指数

函数

  • sin(x) 正弦函数
  • cos(x) 余弦函数
  • tan(x) 正切函数
  • arcsin(x) 反正弦函数
  • arccos(x) 反余弦函数
  • arctan(x) 反正切函数
  • log(base,val) 对数
  • ln(val) 自然对数
  • abs(x) 绝对值
  • round(x) 舍入到最精确的整数
  • ceil(x) 大于等于x的最小整数
  • floor(x) 小于等于x的最小整数
  • exp(x) e的幂次
  • sign(x) x的符号

常量值

  • e 自然对数的底数
  • pi 圆周率

扩展部分

运算符

这里主要扩展了关系运算和简单逻辑运算,它们的结果为0或1。

  • |
  • &
  • == 相等
  • != 不等
  • > 大于
  • < 小于
  • >= 大于等于
  • <= 小于等于

函数

  • eval(expr,v1,v2,...)

将expr中的变量按给出的值依次赋值(字典序),然后求值

  • sum(expr,l,r)
∑lrexpr

\sum_l^r{expr}
变量自l到r(会自动转换为整数)遍历,带入expr求值(expr中应只含有一个变量),然后累加。

  • prod(expr,l,r)
∏lrexpr

\prod_l^r{expr}
变量自l到r遍历(会自动转换为整数),带入expr求值(expr中应只含有一个变量),然后累乘。

微积分部分

  • diff((vid)=>(expr))
dexprdvid

\frac{\mathrm{d}\,expr}{\mathrm{d}\,vid}

初等函数求导

  • diffi((vid)=>(expr),x0)
f(x0+step)−f(x0)step

\frac{f(x_0+step)-f(x_0)}{step}

使用差分计算 x0x_0 处切线斜率。默认 step=0.001

  • integ((x)=>(expr),l,r)
∫rlexprdx

\int_l^r{expr}\,\mathrm{d}\,x

expr(单变量函数,变量名会自动选择)在 [l,r][l,r] 上的定积分模拟:精度默认值为 10−610^{-6}

数论部分

  • gcd(int x,int y)

最大公因数

  • lcm(int x,int y)

最小公倍数

统计部分

  • min(v1,v2,...)

最小值,其中参数可以为集合类型,嵌套集合类型会被展开

  • max(v1,v2,...)

最大值,其中参数可以为集合类型,嵌套集合类型会被展开

  • total(v1,v2,...)

总和,其中参数可以为集合类型,嵌套集合类型会被展开

  • mean(v1,v2,...)

平均值,其中参数可以为集合类型,嵌套集合类型会被展开

集合部分

  • cup(v1,v2,...)
⋃vi

\bigcup v_i

并集,其中参数必须为集合类型

  • cap(v1,v2,...)
⋂vi

\bigcap v_i

交集,其中参数必须为集合类型

  • dif(v1,v2,...)
v1∖v2∖v3∖…

v_1 \setminus v2 \setminus v3 \setminus \dots

差集(v1-v2-v3-…),其中参数必须为集合类型

求值

在代值页面点击刷新会加载当前表达式所有有意义变量(部分变量可能会在计算中被化简掉),设置变量值后点击计算会在计算结果区显示结果。

绘图

对于单变量表达式,在图像页面可以绘制其图像。

可以使用右侧按钮或鼠标滚轮放大缩小。拖动界面可移动绘图区域。

示例

  • 1+(2*3-5^2)/4
  • sum((x%2==0)*x,1,10)
  • diffi(x=>abs(x),2)

绘图例子:

  • x^3
  • diffi(x=>abs(x),x)
  • integ(x=>e^(-x^2),0,x)

逻辑表达式

运算符(优先级从低到高)

  • -> 推出
  • <-> 等价
  • |
  • ^ 异或
  • &
  • !

常量

  • true,True
  • false,False

求值

在代值页面点击刷新会加载当前表达式所有有意义变量(部分变量可能会在计算中被化简掉),设置变量值后点击计算会在计算结果区显示结果。

数学表达式图像部分

界面类似数学表达式部分的图像页面,但这里支持多个函数图像绘制。

解析器将会把每行解析为一个单变量函数,可以接受以下表达式
+ 普通单变量表达式 x^2
+ 单变量 Lambda 表达式 x=>x^2 x=>func(return=x^2)

这里的表达式解析基于下面将要提到的编程表达式,所以您可以使用丰富的编程函数构建复杂的函数。

左栏下方会显示所画的函数与颜色的对于关系,拖动右侧图像区域可以移动,支持滚轮缩放,但这会导致重新绘图,对于复杂函数可能需要等待绘图完成。

编程部分

此部分还不是很成熟,使用时请适当注意

支持数学表达式的代码式运算。点击上方按钮(或F5)即可运行,Esc键取消运行。如果有错误会在下方显示错误信息。

请使用如下语法(其中expr1,expr2,…是语句,注意用逗号分隔):

此版本不再需要输入 exec 函数

expr1,
expr2,
...

语句语法

  • 赋值
x=1,
v=[1,2,3]

将指定名称变量赋值成右侧表达式的值,这里要求右侧表达式的值必须是能计算出确定值的表达式。

  • 独立赋值
x:=1,
v:=[1,2,3]

功能和赋值语句相同,但他会在当前环境新建变量,从而隐藏掉父级的同名变量。

  • 弱声明
def(id,expr)

将指定名称的变量赋成右侧的表达式,这里要求右侧表达式的值必须是常量(即可以是类似x^2这样的含变量表达式。

  • 函数块
func(expr1,expr2,...)

函数块会自动新定义一个名为 return 的变量(初值为 Null ),函数块的结果为依次执行 exprreturn 的值。

  • 过程块
action(expr1,expr2,...)

过程块会依次执行 expr ,然后返回空值。

  • 运行时函数
id=(v1,v2,...)=>(expr)

构建一个运行时函数,其参数名为 v1,v2,... 。内部代码为 expr,结果为计算 expr 后的结果(这里可以用 func 构建 expr )(这里运行时函数的本质就是一个 Lambda 表达式)

与赋值类似,def 也有相对应的 redef 独立声明

  • 调用运行时函数
id(args)

和调用预定义函数的用法相同。

以下用法已弃用
call(fid,arg1,arg2,…)

程序控制函数

  • 循环
for(begin,cond,step,expr)
while(cond,expr)
do(expr,cond)
foreach(list,varName,expr)
  • 条件
if(cond,then-expr,else-expr)

更多函数

  • array(n,defaultVal)

生成 nn 个元素的元组,初始值为 defaultVal (可省略,默认为空值)

  • range(l,r)

生成 [l,r][l,r] 的整数序列

  • random(l,r)

生成 [l,r)[l,r) 范围内的随机整数

  • sort(list,cmpFunc)

升序排序,cmp 转换函数(Lambda 表达式)

  • select(list,transFunc)
  • where(list,condFunc)
  • zip(list,zipFunc)

这几个函数和函数式编程中常用的三个同名函数意义相同,具体使用请参见 更多算法和例子

例子

更多算法和例子请见 这里

  • 基本计算
exec(
list=[1,2,3],
def(f,x^2),
s=total(list),
s,
diff(f,@"x")
)

其结果为

6
(2*(x^1))*1
  • 简单算法

快速幂计算模意义下的幂(模数较大且幂次较高时会有较大精度误差)

exec(
mod=13331,
def(qpow,(a,n),func(return=1,while(n>=1,[if(n%2==1,return=return*a%mod),a=a*a%mod,n=floor(n/2)]))
),
call(qpow,2,15)
)

备注

仍为测试版本,正在收集各式各样的Bug,已知Bug如下

  • 绘图部分不稳定,尤其是复杂函数绘制和极大极小缩放场景
  • 变量识别有漏洞

部分Bug将在下一版本中修复。

编程部分将有较大改动,将支持自定义函数:

表达式计算器-iExpr相关推荐

  1. 字符串得结果!Java数组模拟栈以实现中缀表达式综合计算器,字符串表达式计算器

    文章目录 数组模拟栈类 中缀表达式计算器类(测试类) 数组模拟栈类 主要实现栈的一些基本功能,以及在该场景下的功能. //先创建一个栈 class AStack {private int maxSiz ...

  2. 表达式计算器类的设计4(面向对象的表达式计算器7)

    计算器的github下载地址:https://github.com/ljian1992/calculator 概述 把符号表和变量表中的内容保存到一个文件中,通过IO文件流,来把符号表和变量表存储到文 ...

  3. 安卓案例:表达式计算器

    安卓案例:表达式计算器 一.运行效果 如果没有输入表达式或输入表达式有误,会弹出警告对话框:

  4. 基于C#语言的可编程表达式计算器设计

    1. 说明: 先看看我们的成果:      网上的表达式计算器有很多,但这次我们来点,不同的,有两点:    1)用户可以编程以扩充计算器的函数      即右下角那个"添加函数按钮&quo ...

  5. 表达式计算器 java代码_Java实现简单的表达式计算器功能示例

    本文实例讲述了Java实现简单的表达式计算器功能.分享给大家供大家参考,具体如下: 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例 ...

  6. Qt实战项目:高精度表达式计算器Qt

    高精度表达式计算器Qt 表达式计算器是一个由C++ with QT编写的应用程序.这个计算器旨在通过引入表达式计算的概念解决Windows默认计算器显示不直观的问题,提供了普通型计算器.科学型计算器的 ...

  7. WPF实现一个简单的多运算符表达式计算器

    标题:WPF实现一个简单的多运算符表达式计算器 1.先看下效果图 首先外围给了一个grid 把他分成了两行 第一行用来显示文本框给了一个低于第二行的高度 第二行用来存按钮 窗体的大小自己去调就好了 我 ...

  8. 线性栈实现中缀表达式计算器

    前缀表达式转后缀表达式,及后缀表达式计算器 线性栈实现中缀表达式计算器 空格插入和弹栈计算 总体源代码 线性栈实现中缀表达式计算器 方法代码: 以(10+20/2*3)/2+8为例(计算结果为28): ...

  9. Iphone表达式计算器

    下面是用OC写的一个表达式计算器:(思路跟Android表达式计算器差不多.) 1.中缀表达式转后缀表达式 //convert infix Expression into Posfix Express ...

  10. 牛客 五子棋 逆波兰表达式计算器

    五子棋题目 牛客上一个比较有意思的思路,只需要判断四个方向 代码 import java.util.*; public class Main{public static boolean is(char ...

最新文章

  1. 使用SSH连接CentOS步骤
  2. xcode中用pods管理第三方库转
  3. Resources.getResourceAsStream用法
  4. oracle配置ipv6_pl/sql developer通过IPV6连接oracle-阿里云开发者社区
  5. 服务器项目怎么连接数据库,服务器项目连接数据库配置
  6. docker-compose教程(安装,使用, 快速入门)
  7. Springboot的web开发-静态资源
  8. 莫比乌斯反演习题总结
  9. Ubuntu 16.04 安裝chrome
  10. 征信报告 加密文档_Secret Folder for Mac(文件加密隐藏软件)
  11. 将文件上载到服务器是包含本地路径,2020年初级会计师考试照片审核通过但是上传不了是怎么回事?...
  12. MFC控件 --- 旋转控件
  13. 高考全国卷导数题分类
  14. HashMap 与 TreeMap
  15. 期权希腊字母更多的含义和解释
  16. 着色器Encoding floats to RGBA
  17. Leetcode 414
  18. C++OpenCV去除发票中红色的印章部分实战
  19. 彻底解决快播不可点播方法
  20. 高通android逆向分析,浅谈Android高通(Qualcomm)和联发科(MTK)平台

热门文章

  1. 机器学习虾扯淡之线性回归No.39
  2. 英语语法(简单句型篇)
  3. python安装结巴_python jieba(结巴)小模块精讲
  4. ARPG游戏开发知识整理。
  5. 论文阅读:Which Has Better Visual Quality: The Clear BlueSky or a Blurry Animal?
  6. contiki 学习资料
  7. 大数据常见面试题总结,有问必答
  8. 电子邮件客户端java实现_java电子邮件客户端软件
  9. 微商必看:快速加微信好友的技巧
  10. 北师大网络教育计算机基础考试题,北京师范大学网络教育中国书法简史入学考试模拟题(单选)...