In c++, I need to write reverse postfix calculator using a stack. Postfix notation, and is parenthesis-free as long as operator arities are fixed.
Here is the program logic:
read in a string
while the string is not “stop”
if the string is +, pop the last 2 values from the stack and push back their sum
else if the string is *,pop the last 2 values from the stack and push back their
product
else if the string is -, pop the last 2 values from the stack and push back the second
– the first
else if the string is /, pop the last 2 values from the stack and push back the second
/ the first
else if string is =, print the top of the stack and pop the stack
else ( //the string is a number), convert to a double and push it on the stack;
read the next string
Here is some example input and output:
type in a postFix express or stop to stop
1 3 + =
4.00000
10 5 / =
2.00000
10 6 2 + 3 - / =
2.00000
1.1 2.2 * =
2.42000
stop
Here are some extra hints:
To convert a string word into a double use
double num = atof(word.c_str());
For nicer output include <iomanip>
And in the string put fixed<<showpoint<<setprecision(5)
In c++, I need to write reverse postfix calculator using a stack. Postfix notation, and is parenthesis-free as long as operator arities are fixed.
Here is the program logic:
read in a string
while the string is not “stop”
if the string is +, pop the last 2 values from the stack and push back their sum
else if the string is *,pop the last 2 values from the stack and push back their
product
else if the string is -, pop the last 2 values from the stack and push back the second
– the first
else if the string is /, pop the last 2 values from the stack and push back the second
/ the first
else if string is =, print the top of the stack and pop the stack
else ( //the string is a number), convert to a double and push it on the stack;
read the next string
Here is some example input and output:
type in a postFix express or stop to stop
1 3 + =
4.00000
10 5 / =
2.00000
10 6 2 + 3 - / =
2.00000
1.1 2.2 * =
2.42000
stop
Here are some extra hints:
To convert a string word into a double use
double num = atof(word.c_str());
For nicer output include <iomanip>
And in the string put fixed<<showpoint<<setprecision(5)
In c++, I need to write reverse postfix calculator using a stack. Postfix notation, and is parenthesis-free as long as operator arities are fixed.
Here is the program logic:
read in a string
while the string is not “stop”
if the string is +, pop the last 2 values from the stack and push back their sum
else if the string is *,pop the last 2 values from the stack and push back their
product
else if the string is -, pop the last 2 values from the stack and push back the second
– the first
else if the string is /, pop the last 2 values from the stack and push back the second
/ the first
else if string is =, print the top of the stack and pop the stack
else ( //the string is a number), convert to a double and push it on the stack;
read the next string
Here is some example input and output:
type in a postFix express or stop to stop
1 3 + =
4.00000
10 5 / =
2.00000
10 6 2 + 3 - / =
2.00000
1.1 2.2 * =
2.42000
stop
Here are some extra hints:
To convert a string word into a double use
double num = atof(word.c_str());
For nicer output include <iomanip>
And in the string put fixed<<showpoint<<setprecision(5)
#include <iostream>
#include <iomanip>
#include <string>
#include <stdlib>
using namespace std;
int main() {
int continue_input = 1;
string str;
double op1, op2, store;
stack<double> s;
while(continue_input) {
cin >> str;
if(str.compare(\"stop\") == 0) {
continue_input = 0;
continue;
} else if(str.compare(\"+\") == 0) {
op1 = s.pop();
op2 = s.pop();
s.push(op1 + op2);
} else if(str.compare(\"*\") == 0) {
op1 = s.pop();
op2 = s.pop();
s.push(op1 * op2);
} else if(str.compare(\"-\") == 0) {
op1 = s.pop();
op2 = s.pop();
s.push(op2 - op1);
} else if(str.compare(\"/\") == 0) {
op1 = s.pop();
op2 = s.pop();
s.push(op2 / op1);
} else if(str.compare(\"=\") == 0) {
cout << fixed << showpoinnt << setprecision(5) << s.pop();
} else {
s.push(atof(str));
}
}
return 0;
}