编程论坛's Archiver

seaisland 发表于 2008-4-20 19:12

能计算数学函数的计算器

花了几个月时间断断续续的终于将这个有一千多行代码的程序写完了,这个计算器可用 set 命令自定义变量,也可以用 view 今天查看变量的值,在程序里有一个设置小数显示数度的全局变量 prec 可以用 set 对它重新赋值,值的范围是 0 - 100 的整数,默认是 6 ,将 sin arcsin tan ln 等数学函数转换成内部表示,以便于将之与一般的运算符统一处理。程序还对小数和整数加以了区别,增加了求余去处符 ‘\’、百分符‘%’。功能还算比较完善。
    程序主要采用了链表、栈等常用数据结构,其中链表用来将表达式字符串格式化为一连串的项和实现对常量、自定义变量的存储;栈用以实现程序的核心问题--计算。程序主要分为三大部分:输入与命令解释、输出与命令执行和表达式计算。主程序如下:

int main ()
{
    logo ();           //输出程序的说明
    while (true) {
        Input ();      //输入与命令解释
        Output ();     //输出与命令执行   
    }
    return 0;
}

    程序的主程序很简单,将计算模块封装成一个没有参数的函数:void Calculator (void); 它从全局变量 expString 获得表达式字符串,进行一系列的分析处理后,得到一个标准表达式(一个表达式链表)。然后交由只进行计算的模块:void Calculate (void); 进行计算。
    至于输入与输出两部分由于技术还不成熟,只能提及一下,命令解释的主要思想想先将字符串格式化为至多有三个参数的命令行,与命令列表进行逐一匹配,如果解释成功就利用全局变量产生相应的信息,传递给命令执行函数;命令执行函数根据命令解释的信息决定是否调用计算模块 Calculator (); 控制是否显示结果等等。
    程序还有一个比较完善的地方就是有比较全面的错误报告机制,能对大多数出现的错误进行准确的报告,错误报告机制的主要思想是通过全局错误标志变量 error ,在出现错误的地方将 error 赋予不同值,最后在输出与命令执行部分对错误进行报告,没有错误用 error = NULL; 表示。   
    由于程序比较长,这里不方便直接给出,所有程序全部放在附件里。
    很希望与大家一起讨论程序设计的问题,邮箱: cainsea@126.com  QQ: 120206592。

[[it] 本帖最后由 seaisland 于 2008-4-21 12:26 编辑 [/it]]

雨中飛燕 发表于 2008-4-20 21:32

貌似非常的牛的样子

[img]http://blog.programfan.com/upfile/200804/2008040611237.gif[/img]

sunkaidong 发表于 2008-4-20 21:35

不错..至少可以安静写那么长的程序心态就值得学习...

moonwalker 发表于 2008-4-20 21:35

我就不客气的收藏了。

pen_xian 发表于 2008-4-20 22:16

好象没人顶啊!这样的帖应该顶啊!我顶顶顶顶.........

seaisland 发表于 2008-4-20 22:21

刚测试了一下,还有一些错误

对 % 的计算有错误,比如输入15%3 结果是 0.03
对常量能重新赋值 如 set pai 1 或者 set e 0.5 都成功执行
这些错误,会很快改正

记忆项链 发表于 2008-4-20 22:36

很是不容易,顶你

seaisland 发表于 2008-4-20 22:48

对发现的错误已经修改了

已经把发现的错误修改了,另外还有一些错误,比如对常量重新赋值,这属于命令解释与执行的部分了,由于对这部分没有充足的经验,不能用系统的、有效的方法解决这个问题,对于这类错误就不予以修改了。
   
    希望对命令解释程序感兴趣的网友,不吝赐教,

永夜的极光 发表于 2008-4-20 22:53

很好和强大,我顶

ll431 发表于 2008-4-21 14:15

丁丁  收藏

ll431 发表于 2008-4-21 14:15

守常

fangfangff 发表于 2008-5-10 17:58

支持一个~~~~~~~~~~

HK小雨 发表于 2008-5-11 22:57

定!!!!!!!

非常好呀,顶顶!!!!!!!!!!

司徒静云 发表于 2008-5-12 20:38

不错!收藏了

daijia 发表于 2008-5-13 16:28

佩服楼主高人啊

justding 发表于 2008-5-13 22:03

顶,还有别的好程序吗?全收![tk12]

zhuwei168 发表于 2008-5-14 18:03

收藏来看看
呵呵
难得有精华帖不来看看不成撒

flyue 发表于 2008-5-14 18:57

前段时间看到一个网友做了个用按扭的,但是不能计算表达式。
如果你这个程序用MFC写那简直是完美

seaisland 发表于 2008-5-22 12:42

程序里面有一个计算模块模块,只要稍加修改,就可以直接拿到 MFC 里面用,目前对 MFC 还不熟悉,所以只能以控制台的程序显现出来

sloveffl 发表于 2008-7-1 10:17

顶下,里海

页: [1] 2

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.