C++ HP-35计算器基本功能的代码
您好,我在为HP-35型计算器实现基本函数时遇到了一些问题。我是一名初学者,在编写代码时遇到了很多问题。基本函数是加法、减法、乘法和除法,我需要帮助 以下是我的主要文件:C++ HP-35计算器基本功能的代码,c++,C++,您好,我在为HP-35型计算器实现基本函数时遇到了一些问题。我是一名初学者,在编写代码时遇到了很多问题。基本函数是加法、减法、乘法和除法,我需要帮助 以下是我的主要文件: /* * File: main.cpp * Author: Brenton * * Created on 20 September 2013, 12:10 AM */ #include <cstdlib> #include "HPStack.h" #include <iostream> #inc
/*
* File: main.cpp
* Author: Brenton
*
* Created on 20 September 2013, 12:10 AM
*/
#include <cstdlib>
#include "HPStack.h"
#include <iostream>
#include <sstream>
using namespace std;
/*
*
*/
int main(int argc, char** argv) {
HPStack stack;
string line;
while (getline(cin, line)) {
stringstream expression(line);
string token;
while (expression >> token) {
if (isdigit(token[0])) {
stack.push(atof(token.data()));
//From here I am having trouble, I don't know what the code is.
} else if (token == "+") { // Addition code
} else if (token == "-") { // Subtraction code
} else if (token == "/") { // Division code
} else if (token == "*") { // Multiplication code
double x = stack.pop();
double y = stack.pop();
stack.push(y + x);
}
}
cout << stack.peek();
}
return 0;
}
下面是我的头文件代码:
/*
* File: HPStack.h
* Author: Brenton
*
* Created on 20 September 2013, 12:10 AM
*/
#ifndef HPSTACK_H
#define HPSTACK_H
class HPStack {
public:
HPStack();
void push(double);
double pop();
private:
double stack;
double x, y, z, t;
};
#endif /* HPSTACK_H */
我知道这似乎是一个愚蠢的问题,但我真的不知道我在用数学代码做什么,但我正在尝试。
任何帮助都将不胜感激这是一个非常普通的问题,但是假设HP35是RPN计算器,那么加法代码只需从堆栈中弹出两个值,将它们相加,然后将结果推回到堆栈中。减法功能类似,只需确保按正确的顺序进行减法即可 显然,您还需要完成堆栈的实现。如果你正在使用C++,并且你不打算增加额外的功能,那么只需使用<代码> STD::Stase,
从维基百科上看,它似乎不是RPN计算器。我想您一定是在尝试处理运算符优先级问题吧?这可能无法完全回答您的问题,但通过一个示例,可能会为您提供大致的轮廓 原始表达式:
( ( 1 + 2) * 3 ) + 4 )
树表示法:
+
/ \
* 4
/ \
+ 3
/ \
1 2
堆栈表示法(从顶部推动/弹出):
处理堆栈:
( ( 1 + 2) * 3 ) + 4 )
您可以一步一步地处理此堆栈。其目的是将堆栈减少到一个值,这就是答案。在每一步中,检查堆栈顶部的三个值-顶部的两个值应为数值,第三个值应为应用于这两个值的运算符
步骤1:将1,2+替换为3,使堆栈保持为:
3
3
*
4
+
9
4
+
步骤2:将3,3、*替换为9,这将使堆栈保持为:
3
3
*
4
+
9
4
+
步骤3:将9,4+替换为13。因为堆栈上只有一个值,这就是答案
因此,这显示了堆栈表示的外观,以及如何处理堆栈以获得答案。它没有显示如何解析文本表达式以便最初设置堆栈(我不知道这一点!)。除了明显的“+”符号之外,我真的不知道添加代码是什么,&我真的不知道如何使用弹出和推送函数,我只是猜测“+”符号可能是您实际想要的。因此,代码类似于
stack.push(stack.pop()+stack.pop())正如我上面提到的,代码>减法稍微有点困难。@Brenton:如果这确实是一个RPN计算器,你可以按照下面的例子:POP2数字、加法、返回结果。对其他运营商也要这样做;如果输入是正确的,您将得到一个只包含结果的堆栈。显然,这种方法可以将其转换为正确的反向波兰符号形式,以便在堆栈上继续: