返回列表

计算器 abacus 1.0 发布

本帖最后由 都市侠影 于 2012-9-29 23:09 编辑

abacus.jpg

(80.29 KB)
2012-9-29 22:45

一、简介

        abacus 是一个功能强大,扩展性良好的小型开源计算器,得名于中国古代著名的
    计算工具----算盘,目前版本 1.0。

        软件维护地址:

                http://www.oschina.net/code/snippet_736932_13725

        欢迎使用并报告问题或者提出建议,联系方式:

                E-mail: zhoucosin@163.com
                QQ    : 532319166

二、使用方法

    + Windows系统:
      双击解压出来的 abacus_1.0\windows\vs2008\abacus\Debugabacus.exe 即可运行,
      推荐把此文件放到 C:\WINDOWS\system32 目录中去,便可以在命令行终端中直接
      通过程序名字 abacus 运行此程序。
      【编译】压缩包目录 abacus_1.0\windows\vs2008\abacus 中包含一个windows 下
      的 visual studio 2008 的解决方案,可以直接编译。
   
    + linux系统:
      【编译】需要自己编译后使用,src 是源文件存放目录,在 linux 目录下有一个
      makefile 文件,在终端中切换到此目录,执行如下两条命令:
           
            make
            sudo make install
   
      即可完成编译,将在 abacus_1.0/linux/bin 中生成可执行文件,同时复制到了系
      统目录 /bin 下,可以直接作为系统程序运行。

三、功能

    1. 支持常规四则混合运算.
    2. 支持众多的数学函数,例如三角函数与组合函数,关于函数的列表,请查看软件帮助.
    3. 支持符号常量,如圆周率 pi 与自然对数的底数 e.
    4. 设计良好,便于添加新的运算符和新的数学函数
    5. 帮助信息完善,程序运算时,随时可以输入 h 或者 help 查看帮助
    6. 在接下来的 2.0 版本中将支持宏定义功能,例如,用户可以像这样定义一个宏来求解
       一元二次方程:

                #define  slove(a,b,c)  (-b+sqrt(b^2-4*a*c))/(2*a)

       之后,要求解方程 x^2-3x+2=0,可以直接调用此宏:

                slove(1,-3,2)
       
       程序将输出:

                result=
                        2

       此外,还将提供对宏的管理功能,即可以自由查看、增删、修改已经定义的宏。

四、设计特色

    1. 统一处理运算符和函数,两者在本质上是相同的,即都能对给定的若干个参数求出一
       个结果来,例如 2+3 可以写成 +(2,3) 的函数调用形式。
    2. 使用运算符前置表达式,常规的数学表达式是很不规范的,比如二元运算符通常是置
       于两个操作数之间的,而这对于非二元运算符都不适用,又比如负号是放在被操作数
       之前的,而同样作为一元运算符的阶乘符号却是放在被操作数之后的,而函数又采用
       了 fun(parm1,parm2,....) 这样的形式,因此,本程序采用运算符前置表达式来规
       范数学表达式的形式,例如数学表达式

                2*(3+8)

       在规范后将成为

                (* 2 (+ 3 8))


       而数学表达式

                (-3+sqrt(3^2-4*1*2))/(2*1)

       在规范后将成为

                (/ (+ (- 3) (sqrt (- (^ 3 2) (* (* 4 1) 2)))) (* 2 1))





========== 最近更新: 2012-09-29 ==========

    软件维护地址 http://www.oschina.net/code/snippet_736932_13725

    E-mail:    zhoucosin@163.com

    QQ:        532319166

下载地址:
windows: abacus_1.0_for_windows.rar (68.03 KB)
下载次数: 11
2012-9-29 19:22

linux : abacus_1.0_for_linux.tar.gz (16.12 KB)
下载次数: 8
2012-9-29 19:22


软件截图:
abacus.png
(5.4 KB)
2012-9-20 16:28

恭喜恭喜
等我能用电脑上再下来玩玩。
基本信息:kuing,GG,19880618~?,地道广州人,高中毕业,无业游民,不等式爱好者,论坛混混;
现状:冇钱又冇样、冇型又冇款、冇身材又冇文采、冇学历又冇能力、冇高度冇速度冇力度兼夹冇野做!(粤语)

本帖最后由 都市侠影 于 2012-9-20 19:18 编辑

更新了下,增强了用户体验,允许在表达式中任意使用空格以改良表达式结构层次,但计算器会忽略这些空格。
消除了一个 bug,在只输入一个运算符的情况,程序会给出出错提示而不是直接崩溃掉。

1# 都市侠影


没有abacus.tar.gz吗?

4# 叶剑飞Victor
需要的话我可以发给你,这个论坛里的人绝大多数都用的 windows,所以..............

本帖最后由 叶剑飞Victor 于 2012-9-23 00:53 编辑

5# 都市侠影


运行了make.sh
结果,编译错误。

error.jpg
(344.25 KB)
2012-9-23 00:53

本帖最后由 都市侠影 于 2012-9-24 10:45 编辑

在 includes.h 文件中加上头文件:
#include <stdio.h>
#include <typeinfo>
#include <cstring>
我是在 windows 7 下面用 mingw 编译的,gcc 版本是 3.4.5,估计是因为 mingw 自带的 gcc 默认就加入了这些头文件。待我在 linux 下试试..............
加了上述头文件后,linux 下通过编译:
abacus.jpg
(38.61 KB)
2012-9-24 10:45

7# 都市侠影


话说怎么用make.sh了呢?怎么不写Makefile呢?

本帖最后由 都市侠影 于 2012-9-25 16:35 编辑

8# 叶剑飞Victor
话说以我目前的水平,还不足以写出一个好的 makefile, 所以将就写了个 make.sh 以解燃眉之急,过几天写一个 makefile,就不用忍受只更新一个文件也不得不全部重新编译的痛苦了。

9# 都市侠影


话说你的make.sh其实可以这么写的
  1. g++   *.cpp  -lm   -o   abacus   -Wall
复制代码

本帖最后由 叶剑飞Victor 于 2012-9-25 17:43 编辑

9# 都市侠影



写个简单的Makefile给你吧
  1. abacus:  Express.o  ExpressPart.o  ExpOperator.o  ExpNumber.o  ExpIdentifier.o  ExpBracket.o  SyntaxParseProcessor.o  WordParseProcessor.o  OperatorFunction.o  Computor.o  demo.o
  2.         g++  *.o  -lm  -o  abacus  -Wall

  3. Express.o:  Express.cpp
  4.         g++  -c  Express.cpp  -Wall

  5. ExpressPart.o:  ExpressPart.cpp
  6.         g++  -c  ExpressPart.cpp  -Wall

  7. ExpOperator.o:  ExpOperator.cpp
  8.         g++  -c  ExpOperator.cpp  -Wall

  9. ExpNumber.o:  ExpNumber.cpp
  10.         g++  -c  ExpNumber.cpp  -Wall

  11. ExpIdentifier.o:  ExpIdentifier.cpp
  12.         g++  -c  ExpIdentifier.cpp  -Wall

  13. ExpBracket.o:  ExpBracket.cpp
  14.         g++  -c  ExpBracket.cpp  -Wall

  15. SyntaxParseProcessor.o:  SyntaxParseProcessor.cpp
  16.         g++  -c  SyntaxParseProcessor.cpp  -Wall

  17. WordParseProcessor.o:  WordParseProcessor.cpp
  18.         g++  -c  WordParseProcessor.cpp  -Wall

  19. OperatorFunction.o:  OperatorFunction.cpp
  20.         g++  -c  OperatorFunction.cpp  -Wall

  21. Computor.o:  Computor.cpp
  22.         g++  -c  Computor.cpp  -Wall

  23. demo.o:  demo.cpp
  24.         g++  -c  demo.cpp  -Wall

  25. clean:
  26.         rm  *.o
复制代码

本帖最后由 都市侠影 于 2012-9-25 19:12 编辑

10# 叶剑飞Victor
这样的 makefile 我也可以写,只是我不满意这样的方式,因为经常对头文件包含依赖修改的话,反复的修改 makefile 会让人不舒服,我想要的是在 makefile 中自动推导源文件所需的头文件,这样的 makefile 简单的多,只是我还没有去看如何写,这个正是接下来的工作。

demo.cpp 源文件中的 void showOperatorsInfo() 函数

cout<<" <5> a \% b \treturn the remainder of a divided by b."<<endl;

“%”不用转义,直接“%”就行了,“\%”是错误的。不过如果用g++编译,如果不加上“-ansi -pedantic-errors”参数,编译也能通过。

本帖最后由 都市侠影 于 2012-9-26 09:01 编辑

13# 叶剑飞Victor
刚测试了下,无论是在 win7 下的 MinGW 环境,还是 linux 环境,这个百分号转义与不转义都能正确显示,当然推荐不转义的方式,C 代码写多了的后遗症

[i=s] 本帖最后由 都市侠影 于 2012-9-29 11:22 编辑 [/i]

写了个 makefile,是自动推导头文件依赖的。
1.jpg
(92.37 KB)
2012-9-29 11:22

2.jpg
(8.6 KB)
2012-9-29 11:22

本帖最后由 叶剑飞Victor 于 2012-9-27 23:49 编辑

百度贴吧C++吧的吧主御坂美琴みさか也做了一个,现在她在召唤你过去讨论。


这里是链接
http://tieba.baidu.com/f?ct=3356 ... 7502425#24649725417


御坂美琴.jpg
(28.33 KB)
2012-9-27 23:48

本帖最后由 都市侠影 于 2012-9-28 09:50 编辑

16# 叶剑飞Victor
=====================================

关于对变量以及宏的支持的说明


设计的时候没有考虑变量参与运算,当时只想着为一个数学式子计算值,这个式子都提供了,各个变量的值应该都确定了吧,那就不需要变量了。
在什么情况下需要变量呢?我可以把一个含变量的式子存为一个模式,比如把圆的面积公式存起来,以后要求一个圆的面积的时候,我直接调用这个公式就可以了,这本质上是一个用户定义宏的功能(不是在代码中加入函数),这样的话,它就更像是解释器了,这个有意思,待我研究下这个功能,实现这功能之后,用户就可以像下面这样定义宏:
#define    AreaOfCycle(r)    pi*r*r
然后就可以在表达式中这样求一个圆环的面积:
AreaOfCycle(3)-AreaOfCycle(2)
最后,还要提供对用户自定义宏的管理功能,可以查看、增删、修改已经定义的宏。
感谢网友叶剑飞一直以来的关注,这个计算器必将添加越来越多的功能,越来越完善,特此感谢。
=====================================
话说,那个链接里面,我只看到一片评论,没看到他写的计算器在哪呀?

本帖最后由 叶剑飞Victor 于 2012-9-28 14:47 编辑

17# 都市侠影



源代码在三楼的链接中
http://ideone.com/o2Ag4

calc.jpg
(19.11 KB)
2012-9-28 14:43


那个之所以写成[dot]是因为百度贴吧会自动吞链接,所以用了这种“反和谐”手段。

本帖最后由 都市侠影 于 2012-10-7 11:12 编辑

又有新的想法了,宏这个东西我不是很满意,一是它只是一个单纯的字符串替换,难以进行语法检查,二是它对功能的扩展比较有限,说白了就是已有功能的缩写。现在想实现一种简单的类似 C 语言的编程语言,无须有多少编程知识就能上手,适合于没有计算机编程基础的数学爱好者使用 abacus 编程实现自己的计算需求,具体的想法还不成熟,我打算不区分整数与实数,直接提供一个数类型,具备简单的控制结构等等,使得用户专注于自己的算法,而不是语言的细节。用户只要在配置文件中写上自己的函数,就可以在 abacus 中直接使用这个函数,比如,如果用户可以定义一个分段函数,他就可以在配置文件中加入下面的函数定义:(这里例子是个绝对值函数)
num    myfun(num    x)
{
         num y;
         if(x>0 and x<1)   y=sqrt(1-x^2);
         else if(x<0 and x>-1)       y=-sqrt(1-x^2);
         else y=0;
         return y;
}
然后在 abacus 中直接输入 sqrt(3)/2+myfun(-19) 即可使用它参与运算。
但目前正在学习编译原理,这个功能是个远期目标,近期还是集中精力实现宏的功能。

19# 都市侠影


楼主的意思是要搞一个类似MatLab的语言吗?

返回列表