In this exercise we have to use the knowledge of computational language in C++ to write a code that program to evaluate the following postfix expression. the value of each variable must be asked from the user during the execution time.
<h3>Writting the code:</h3>
<em>#include <bits/stdc++.h></em>
<em>using namespace std;</em>
<em>// CREATED A </em><em>CLASS </em><em>STACK</em>
<em>class Stack</em>
<em>{</em>
<em>public:</em>
<em> int top;</em>
<em> unsigned sz;</em>
<em> int* ar;</em>
<em>};</em>
<em>// VARIOUS STACK </em><em>FUNCTIONS</em>
<em>Stack* makeStack( unsigned sz )</em>
<em>{</em>
<em> Stack* stack = new Stack();</em>
<em> // BASE </em><em>CONDITION</em>
<em> if (!stack) return NULL;</em>
<em> stack->top = -1;</em>
<em> stack->sz = sz;</em>
<em> stack->ar = new int[(stack->sz * sizeof(int))];</em>
<em> if (!stack->ar) return NULL;</em>
<em> // RETURNING THE STACK</em>
<em> return stack;</em>
<em>}</em>
<em>// CHECKING IF THE STACK IS </em><em>EMPTY</em>
<em>int isEmpty(Stack* stack)</em>
<em>{</em>
<em> return stack->top == -1 ;</em>
<em>}</em>
<em>// CHECKING THE TOP OF THE STACK</em>
<em>int whatAtTop(Stack* stack)</em>
<em>{</em>
<em> return stack->ar[stack->top];</em>
<em>}</em>
<em>// </em><em>POPPING </em><em>OUT OF A STACK</em>
<em>int pop(Stack* stack)</em>
<em>{</em>
<em> if (!isEmpty(stack))</em>
<em> return stack->ar[stack->top--] ;</em>
<em> return '$';</em>
<em>}</em>
<em>// PUSHING IN THE STACK</em>
<em>void push(Stack* stack, int op)</em>
<em>{</em>
<em> stack->ar[++stack->top] = op;</em>
<em>}</em>
<em>// EVALUATING </em><em>POSTFIX </em><em>STARTS HERE</em>
<em>int postfixEvaluator(string res)</em>
<em>{</em>
<em> // CREATING STACK</em>
<em> Stack* stack = makeStack(res.length());</em>
<em> int i;</em>
<em> // BASE </em><em>CONDITION</em>
<em> if (!stack) return -1;</em>
<em> for (i = 0; res[i]; ++i)</em>
<em> {</em>
<em> // CHECK FOR SPACES</em>
<em> if (res[i] == ' ')continue;</em>
<em> // CHECK FOR THE DIGIT</em>
<em> else if (isdigit(res[i]))</em>
<em> {</em>
<em> int N = 0;</em>
<em> // EXTRACT THE </em><em>NUMBER </em><em>OUT OF STACK</em>
<em> while (isdigit(res[i]))</em>
<em> {</em>
<em> N = N * 10 + (int)(res[i] - '0');</em>
<em> i++;</em>
<em> }</em>
<em> i--;</em>
<em> // </em><em>PUSH </em><em>THE NUMBER IN STACK</em>
<em> push(stack, N);</em>
<em> }</em>
<em> // POPPING AND </em><em>ARITHMETIC </em><em>OPERATIONS</em>
<em> else</em>
<em> {</em>
<em> int pos1 = pop(stack);</em>
<em> int pos2 = pop(stack);</em>
<em> switch (res[i])</em>
<em> {</em>
<em> case '+': push(stack, pos2 + pos1); break;</em>
<em> case '-': push(stack, pos2 - pos1); break;</em>
<em> case '*': push(stack, pos2 * pos1); break;</em>
<em> case '/': push(stack, pos2 / pos1); break;</em>
<em> }</em>
<em> }</em>
<em> }</em>
<em> return pop(stack);</em>
<em>}</em>
<em>// MAIN CODE</em>
<em>int main()</em>
<em>{</em>
<em> string tes;</em>
<em> getline(cin, tes);</em>
<em> string tmp = "";</em>
<em> string res = "";</em>
<em> for (int i = 0; i < tes.length(); i++) {</em>
<em> if (tes[i] <= 'z' and tes[i] >= 'a') {</em>
<em> tmp += tes[i];</em>
<em> } else if (tes[i] == ' ' and (tes[i - 1] <= 'z' and tes[i - 1] >= 'a')) {</em>
<em> cout << "Enter the value of " << tmp << ": ";</em>
<em> int x; cin >> x;</em>
<em> res += (to_string(x));</em>
<em> res += ' ';</em>
<em> tmp = "";</em>
<em> } else {</em>
<em> res += tes[i];</em>
<em> }</em>
<em> }</em>
<em> cout << "\nThe postfix expression is : " << res;</em>
<em> cout << "\nThe result is : " << postfixEvaluator(res);</em>
<em> return 0;</em>
<em>}</em>
See more about C++ at brainly.com/question/19705654
#SPJ1