Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Please use C or C++! For this assignment, you are to write a program, which will

ID: 3782832 • Letter: P

Question

Please use C or C++!

For this assignment, you are to write a program, which will calculate the results of Reverse Polish expressions that are provided by the user.

You must use a linked list to maintain the stack for this program (array implementations of the stack will not receive full credit).

You must handle the following situations (errors):
Too many operators (+ - / *)
Too many operands (doubles)
Division by zero

The program will take in a Polish expression that separates the operators and operands by a single space, and terminates the expression with an equals sign.

The program will continue to take and evaluate expressions until the user enters a zero (0) on a line by itself followed by a new line.

Your sample output should show the handling of all the error conditions as well as make use of all of the operators.

Sample IO: (note: formatting of output isnt a critical issue)
Input Output
10 15 + = 25
10 15 - = -5
2.5 3.5 + = 6 (or 6.0)
10 0 / = Error: Division by zero
10 20 * / = Error: Too many operators
12 20 30 / = Error: Too many operands
-10 -30 - = 20
100 10 50 25 / * - -2 / = -40

The code needs to be correct to recieve points!

Explanation / Answer

#include #include #include #include using namespace std; struct NODE { float num; NODE *next; }; class stack { private: NODE *head; public: stack(); void push(float); float pop(); int nElements(); float display(); }; class RPN: public stack { public: void add(); void subtract(); void multiply(); void divide(); }; stack::stack() { head = NULL; } void stack::push(float a_number) { NODE *temp = new NODE; if (temp) { temp->num = a_number; temp->next = head; head = temp; } } float stack::pop() { float number = 0; if (!head) { return 0; } else { NODE *temp = head; number = head->num; head = temp->next; delete temp; } return number; } int stack::nElements() { int counter=0; for (NODE *node = head; node; node=node->next) { counter++; } return counter; } float stack::display() { //ERROR CHECKING TOO MANY OPERANDS??? PRINTING TOO MANY OPERANDS FOR : 100 10 50 25 / * - -2 / = , but still giving correct output && WILL NOT ALLOW ME TO DO A SECOND CALCULATAION , OUTPUT WILL BE TOO MANY OPERANDS if(nElements() !=1) { cout