• 大小: 139KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: 其他
  • 标签: 计算器  Qt  

资源简介

该计算器可以计算一般的加减乘除括号,也能计算n*n阶矩阵,还能计算非齐次线性方程组的解,同时也能计算一元多次方程(2、3、4)的解,注意事项在帮助文档里,程序可以打开

资源截图

代码片段和文件信息

#include“calculate.h“
#include
bool is_operator(string op)//判断是否运算符
{
    return (op == “+“ || op == “-“
            || op == “*“ || op == “/“
            || op == “(“ || op == “)“);
}

int get_priority(string op)//比较运算符号的优先级
{
    if (op == “+“ || op == “-“)
        return 1;
    if (op == “*“ || op == “/“)
        return 2;
    else return 0;
}

string get_result(string val1 string val2 string op)
{
    double v1 = atof(val1.c_str());
    double v2 = atof(val2.c_str());// 转化为double型
    double result;
    if (op == “+“)
        result = v1 + v2;
    if (op == “-“)
        result = v2 - v1;
    if (op == “*“)
        result = v1 * v2;
    if (op == “/“)
        result = v2 / v1;

    ostringstream os;
    os << result;
    return os.str(); //将double型的数据送入输出流并转化为string型
}

stack transform(string input) //逆波兰表达式转换
{
    stack converted; //定义一个数字栈用于存放转换成的逆波兰表达式
    stack op; //定义一个运算符栈字符型
    size_t i = 0; //依次读取输入的字符串字符
    string digit_node = ““; //用于连接一个完整的数字

    while(i < input.length()) {
        char c = input[i];///获取当前字符
        string read_char = ““;///
        read_char += c;///这三行怪怪的要这么写能通过不能将这行和上一行写成:string read_char = string(&c); 不知道为什么

        if (is_operator(read_char)) { //判断是否运算符
            if (digit_node != ““) { //如果当前读取到运算符则表示之前数字的读取结束
                    converted.push(digit_node); //将之前读取到的数字字符串存入数字栈
                    digit_node = ““; //将数字字符串置空
            }

            if (op.empty()) { //当前读取到的是运算符栈的第一个操作符则直接将操作符进栈
                op.push(read_char);
            }
            else {

                if (read_char == “(“)//读取到左括号 直接进栈
                    op.push(read_char);
                else if (read_char == “)“) { //读取到右括号则将上一个左括号之前的运算符全部出栈
                    while (op.top() != “(“) {
                        converted.push(op.top()); //
                        op.pop();
                    }
                    op.pop(); // 将上一个左括号出栈
                }
                else if (get_priority(read_char) > get_priority(op.top()))//比较运算符级别
                    op.push(read_char); //若高于上一个运算符则直接入运算符栈
                else {//否则弹出两个数字和一个符号将运算结果再次压入数字栈
                    converted.push(op.top());
                    op.pop();
                    op.push(read_char);
                }
            }
        } else
            digit_node += read_char;//将每次读取的单个数字字符相加
        i++;
    }

    if (digit_node != ““)
        converted.push(digit_node); //入栈最后一个数字

    while (!op.empty()) {//将剩余的运算符栈所有元素压入栈
        converted.push(op.top());
        op.pop();
    }

    stack stk;
    while (!converted.empty()){ //颠倒逆波兰表达式的入栈顺序送入另一个栈
        stk.push(converted.top());
        converted.pop();
    }
    return stk;
}

string rpn(string input)
{
    stack stk1 = transform(input);
    stack rs;
    while (!stk1.empty()) {
        if (is_operator(stk1.top())) {//每遇

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4171  2018-01-07 20:06  calculator\calculate.cpp
     文件         393  2018-01-07 08:31  calculator\calculate.h
     文件         746  2018-01-07 20:16  calculator\calculator.pro
     文件       18202  2018-06-15 19:38  calculator\calculator.pro.user
     文件       18191  2018-01-07 21:15  calculator\calculator.pro.user.577c26e
     文件         688  2018-01-07 10:05  calculator\choose.cpp
     文件         629  2018-01-07 10:05  calculator\choose.h
     文件        2064  2018-01-07 08:29  calculator\choose.ui
     目录           0  2018-01-07 20:05  calculator\debug\
     文件        1582  2018-01-07 20:15  calculator\equation.cpp
     文件         504  2018-01-07 10:12  calculator\equation.h
     文件        1769  2018-01-07 10:12  calculator\equation.ui
     文件        1445  2018-01-07 20:15  calculator\equationset.cpp
     文件         534  2018-01-07 10:12  calculator\equationset.h
     文件        1787  2018-01-07 10:12  calculator\equationset.ui
     文件        1813  2018-01-07 17:09  calculator\fangchengzu.cpp
     文件         257  2018-01-07 09:41  calculator\fangchengzu.h
     目录           0  2018-01-07 20:15  calculator\help\
     文件         213  2018-06-15 19:38  calculator\help\Equationhelp.txt
     文件         203  2018-06-15 19:37  calculator\help\EquationSet_Help.txt
     文件         168  2018-06-15 19:37  calculator\help\MatrixHelp.txt
     文件         918  2018-01-07 19:17  calculator\main.cpp
     文件        3092  2018-01-07 09:06  calculator\mainwindow.cpp
     文件        1022  2018-01-07 09:06  calculator\mainwindow.h
     文件        7398  2018-01-07 09:06  calculator\mainwindow.ui
     文件       19054  2018-06-15 19:22  calculator\Makefile
     文件       69719  2018-06-15 19:22  calculator\Makefile.Debug
     文件       69935  2018-06-15 19:22  calculator\Makefile.Release
     文件        1932  2018-01-07 20:15  calculator\matrix.cpp
     文件         492  2018-01-07 10:12  calculator\matrix.h
     文件        1771  2018-01-07 10:12  calculator\matrix.ui
............此处省略32个文件信息

评论

共有 条评论