支持算术表达式求解的计算器

简单计算器的实现

项目功能:

                进行简单的四则运算,支持括号,支持复数运算和极坐标转换。

                支持运算符:+、-、*、/、括号、复数、极坐标、复数和极坐标之间的转换以及历史记录的查看。

开发技术:

                C++、Qt5

实现方法:

                符号运算顺序处理方法:采用符号等级制,不同的符号有不同的优先级。

                运算表达式处理方法:采用前缀表达式法。

                前缀表达式获取:运用栈将中缀表达式转换为前缀表达式。

                数据结构栈的应用。

各模块说明:

                calculator.cpp、calculator.h:对表达式进行计算并输出结果。

                element.cpp、element.h:抽象数据结构。

                main.cpp、mainwindow.cpp、mainwindow.h、mainwindow.ui:计算器界面设计。

设计内容:

calculator.h:

#ifndef CALCULATOR_H
#define CALCULATOR_H
#include "element.h"
#include <string>
#include <stack>
#include <vector> 
using namespace std;


class calculator
{
    //static const int MAX_NUM = 10086;
    //假设最多100086个操作数或操作符

private:
    //各运算符优先级
    static const int priority[6];

    //原始字符串
    string original_string;

    //下标[0,element_num)middel_order_expression[MAX_NUM];	//中序表达式
    vector<Element> all_element;

    //先序表达式
    vector<Element> preorder_expression;

    //有多少个元素
    int element_num;
    //先序表达式有多少个元素
    int p_o_e_num;


    //转换过程所需的栈
	stack<Element> mystack;
	
    //该计算式的答案
    Number ans;

    //得到先序表达式
    void get_p_o_e();

    //得到以i为开头的数字,处理完成后i指向数字最后一位,bool == true => 正數
    Number get_num(int &i, string &,bool);

public:
    //默认构造函数
    calculator();

    //接受一个计算表达式并保存为中序表达式,如果表达式有语法错误,则返回false
    bool set(string);

    //打印计算表达式(0 为原字符串,1为中序, 2为前序)
    strin
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值