`
yueguangyuan
  • 浏览: 337203 次
  • 性别: Icon_minigender_1
  • 来自: 新加坡
社区版块
存档分类
最新评论

JavaScript 实现的科学计算器,支持四则运算和函数,采用Postfix Notation算法

阅读更多

居然距离上次更新博客有两年时间,说明这段时间我真的是非常非常忙,且没有什么新的知识学到?忙是真的,但是两年来学到很多很多东西,但多数都是软件工程方面或者其他的而不是开发技术上的,希望以后能有更多时间来更新自己的技术博客。

 

这也是我做软件民工多年来难得一次机会去考虑一个算法的实现,最后由于能力不济改为改写别人写好的代码,原文请见:http://vvggsky.iteye.com/blog/290540。但是仍然很有帮助,所以把整个代码(HTML/JavaScript)贴上来,也许会对其他童鞋也有帮助。

 

由于不是科班出身,以前我并不知道有这么一个后置算法(Postfix Notation),自己摸索着按照简单计算器的思路先做了一个,但是做到后面发现解析复杂表达式比如ABC/A*(C + X) + CDE*F 这种就捉襟见肘,最后完全败下阵来,打掉重做。

 

在解析这种表达式的时候有这样一个固定算法来解决,才会保证任意复杂度的表达式都可以得到预想的结果,它甚至支持sqrt(AB*C)/F这样的含有函数的表达式。

 

思路(好像这个东西让我来说有点班门弄斧,各位看官见谅:P):

1. 这个算法的核心就是把中置表达式(运算符处于运算子中间)转移到后面,与此同时,根据操作符的优先级将运算符和运算子按照一定顺序压入一个栈。这样做的好处之一就是让括号失效,而使得注意力集中在操作顺序上(计算顺序是解析表达式的关键)。

2. 真正的计算,因为在前面的后缀转换过程中,已经将运算符和运算子按照操作顺序压入栈,计算时仅仅需要将栈内元素按照顺序弹出,遇到运算子压入另外一个栈stack2,遇到运算子则将stack2栈顶两个运算子拿出来与这个运算符做计算即可。

3. 对于函数,需要一些特定的处理,因为函数是接受不同长度的参数,比如sqrt(x), pow(x,y),我并没有想出一个通用解析方法,在处理函数的时候是对函数名最为一个特殊的操作符(留意','的处理),由于后置算法的健壮度,这种函数得到了良好的支持,扩展性也比较好

4. 定义操作符优先级比较重要:+/- 为1,*// 为2,函数则为3最高,括号比较特殊为0,因为要将括号作为计算边界

对于具体思路,参考http://www.google.com.sg/url?sa=t&source=web&cd=1&ved=0CBcQFjAA&url=http%3A%2F%2Fwww.eel.tsint.edu.tw%2Fteacher%2Fthjean%2Fmultimedia%2Fc12.ppt&ei=GC3OTe0Cy8utB8TTzcIK&usg=AFQjCNG3WfJcyFAJgPyUzkzuVYgPzol1-Q&sig2=-HQ6M1QxfNAP71TcuSlqVQ,是一个台湾人写的算法PPT,提供具体的算法解释甚至包括插图解说,实属入门新手利器,推荐。

 

为方便起见,我选择JavaScript/HTML来制作这个小实现,包含算法实现、测试和一定的介绍(英文)你可以直接下载运行,因为时间比较仓促,还有很多地方可以改善

 

  • 大小: 38.6 KB
0
2
分享到:
评论

相关推荐

    利用栈原理实现简易四则运算计算器

    在本计算器的实现中,栈用于存储运算符和数字,以便进行正确的四则运算。 2. **链式栈(Linked Stack)**:不同于数组实现的栈,链式栈通过链表来存储元素,具有动态扩展的优势,不会受到固定容量的限制。每个节点...

    QT-科学计算器-可视化-逆波兰算法

    在这个项目中,“QT-科学计算器-可视化-逆波兰算法”显然是一个使用QT框架构建的高级计算器应用,它提供了丰富的数学功能,如处理括号表达式、解决二元一次方程、执行指数和对数运算等。 首先,让我们深入了解一下...

    加减乘除四则混合运算计算器-java

    在本项目中,我们主要探讨的是如何利用Java编程语言设计一个具有加减乘除四则混合运算功能的GUI(图形用户界面)计算器。这个计算器旨在模拟Windows操作系统中的标准计算器,提供用户友好的交互方式,使得非程序员也...

    四则运算表达式的求值

    在计算机科学中,四则运算表达式的求值是计算科学中的基本问题,它涉及到解析、处理和计算包含加法、减法、乘法和除法的数学表达式。本问题中,我们关注的是如何实现一个算法来正确地计算给定的类似“1+2*(3+5)-7”...

    数据结构与算法课程设计计算器实现

    在本项目中,“数据结构与算法课程设计计算器实现”是一个基于数据结构和算法的实践项目,目的是帮助学生理解和应用这些核心计算机科学概念。这个计算器的实现主要涉及到了栈这一数据结构,以及相关的算法来处理计算...

    用栈实现四则运算

    在计算机科学中,四则运算(加法、减法、乘法和除法)是基本的数学操作,而栈(Stack)是一种常见的数据结构,它遵循“后进先出”(LIFO)的原则。本话题将详细介绍如何使用栈来实现四则运算的计算过程,并涉及调试...

    四则运算c语言

    在计算机科学中,四则运算(加法、减法、乘法、除法)是基本的算术操作,而C语言是一种广泛使用的编程语言,它提供了处理这些运算的强大功能。后缀表达式,也称为逆波兰表示法,是一种在没有括号和运算符优先级的...

    四则运算(中缀表达式到后缀表达式)

    在计算机科学领域,四则运算通常涉及到加法(+)、减法(-)、乘法(*)和除法(/)这些基本算术操作。在处理这类运算时,表达式的表示方式有多种,其中最常见的是中缀表达式(Infix notation)和后缀表达式...

    四则运算(中缀转后缀)

    在计算机科学领域,中缀表达式是我们日常生活中最常见的数学计算表达方式,比如 \(2 + 3 \times 4\)。然而,在计算机内部处理时,后缀表达式(也称为逆波兰表示法)更为方便,因为它不需要括号来明确运算顺序,如 \...

    数据结构科学计算器.pdf

    在这个“数据结构科学计算器”的实现中,我们看到了如何结合数据结构来设计一个简单的科学计算器,主要涉及到栈(Stack)的数据结构以及后缀表达式(Postfix Notation)的转换。 首先,栈是一种具有“后进先出”...

    类似windows自带的计算器 C#计算器(逆波兰式实现)

    这个C#项目是基于逆波兰式算法实现的一个计算器,与Windows操作系统内置的标准计算器类似。下面将详细讨论逆波兰式、C#编程语言、Visual Studio .NET 2005开发环境以及如何实现这样的计算器。 1. **逆波兰式...

    支持表达式的计算器

    这个项目旨在设计和实现一个可以处理基本算术运算、括号以及等式结尾的计算器。下面将详细介绍这个计算器的工作原理及其相关的编程知识。 首先,我们要理解"支持表达式的计算器"意味着它可以解析和计算包含加法(+...

    Postfix-notation-calculator:Postfix表示法计算器(堆栈算法)

    这种表示法常用于计算机科学,特别是算法设计和计算器实现,因为它简化了表达式的计算过程,通常通过使用堆栈数据结构来实现。在这个名为"Postfix-notation-calculator"的项目中,Vivekraj创建了一个基于Java的...

    c#实现四则混合运算

    在C#中,实现四则混合运算通常需要理解算法和数据结构,特别是二叉树和栈的概念。下面将详细阐述如何使用C#来实现这一功能。 首先,四则混合运算是基于算术运算符的优先级进行的,例如乘法和除法的优先级高于加法和...

    infix转POSTFIX算法

    infix转POSTFIX算法 infix转POSTFIX算法

    866008266581147四则运算表达式求值.zip

    在IT领域,四则运算表达式求值是一个基础但重要的概念,它涉及到计算机科学中的算法设计和编程语言处理。在日常编程中,我们经常需要计算包含加法(+)、减法(-)、乘法(*)和除法(/)的数学表达式。这些表达式...

    简单的计算器(用VC++)编写的小程序!

    在计算机科学中,计算器程序是一种实现基本算术运算的软件应用。在本案例中,"简单的计算器(用VC++)编写的小程序!" 是一个使用Microsoft Visual C++(简称VC++)开发环境创建的计算器程序。VC++是微软公司推出的...

Global site tag (gtag.js) - Google Analytics