HP-35计算器基本功能代码

时间:2013-09-19 15:04:11

标签: c++

嗨我在为HP-35型计算器实现基本功能时遇到一些麻烦我是初学者而且我把代码放在一起有很多麻烦,基本功能是加法,减法,乘法和除法我需要帮助。

以下是我的主要文件:

/* 
* 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.cpp
* Author: Brenton
* 
* Created on 20 September 2013, 12:07 AM
*/

#include "HPStack.h"

HPStack::HPStack() {
}

HPStack::HPStack(const HPStack& orig) {
}

HPStack::~HPStack() {
}

以下是头文件的代码:

/* 
* 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 */

我知道这似乎是一个愚蠢的问题,但我真的不知道我在用数学代码做什么,但我正在努力。 任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

这可能无法完全回答您的问题,但可能会通过一个示例为您提供粗略的轮廓。

原始表达

( ( 1 + 2) * 3 ) + 4 )

树形表示

      +
     / \
    *   4
   / \
  +   3
 / \
1   2

堆叠表示(从顶部推/弹):

1
2
+
3
*
4
+

处理堆栈

您可以逐步处理此堆栈。目的是将堆栈减少到单个值,这就是答案。在每一步中,您检查堆栈顶部的三个值 - 前两个应该是数值,第三个应该是应用于两个的运算符。

步骤1:将1,2,+替换为3,将堆栈保留为:

3
3
*
4
+

步骤2:将3,3,*替换为9,将堆栈保留为:

9
4
+

步骤3:将9.,4,+替换为13.由于堆栈上只有一个值,这就是答案。

因此,它显示了堆栈表示应该如何显示,以及如何处理堆栈以获得答案。它没有说明如何解析文本表达式以便最初设置堆栈(我不知道那个位!)。

答案 1 :(得分:0)

这是一个非常通用的问题,但假设HP35是RPN计算器,那么添加代码只会从堆栈中弹出两个值,将它们加在一起,然后将结果推回堆栈。减法函数类似,只需确保以正确的顺序减去它们。

你显然也需要完成堆栈的实现。如果您使用的是C ++而您并不打算添加额外的功能,那么只需使用std::stack<double>

从维基百科看,它似乎不是RPN计算器。我想你一定要尝试处理运算符优先级吗?