【问题标题】:Code for a HP-35 calculator basic functionsHP-35计算器基本功能代码
【发布时间】:2013-09-20 00:06:32
【问题描述】:

您好,我在为 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 */

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

【问题讨论】:

    标签: c++


    【解决方案1】:

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

    您显然还需要完成堆栈的实现。如果您使用的是 C++,并且不打算添加额外的功能,那么只需使用 std::stack&lt;double&gt;

    从维基百科看,它似乎不是 RPN 计算器。我认为您可能必须尝试处理运算符优先级?

    【讨论】:

    • 我真的很困惑除了明显的“+”符号之外的添加代码是什么,我真的不知道如何使用我现在只是猜测的弹出和推送功能
    • “+”符号可能是您真正想要的。因此,代码将类似于stack.push(stack.pop() + stack.pop()); 减法就像我上面提到的那样稍微困难一些。
    • @Brenton:如果这确实是一个 RPN 计算器,您可以按照wikipedia on RPN 上的示例进行操作:弹出 2 个数字,添加,推回结果。对其他运营商做同样的事情;如果输入正确,您将得到一个仅包含结果的堆栈。
    【解决方案2】:

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

    原话

    ( ( 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。由于堆栈上只有一个值,这就是答案。

    所以,这显示了堆栈表示的外观,以及如何处理堆栈以获得答案。它没有显示如何解析文本表达式以便最初设置堆栈(我不知道那一点!)。

    【讨论】:

    猜你喜欢
    • 2016-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    相关资源
    最近更新 更多