Question

Write in C++ Implement a program that can input an expression in postfix notation (see Exercise...

Write in C++

Implement a program that can input an expression in postfix notation (see Exercise C-5.8) and output its value. As you can see, you will need to read Exercise C-5.8 to complete this programming task.

Exercise C-5.8

Postfix notation is an unambiguous way of writing an arithmetic expression without parentheses. It is defined so that if “(exp1) o (exp2)” is a normal fully parenthesized expression whose operation is “o”, then the postfix version of this is “pexp1pexp2o”, where pexp1 is the postfix version of exp1 and pexp2 is the postfix version of exp2. The postfix version of a single number or variable is just that number or variable. So, for example, the postfix version of “((5 + 2) * (8 − 3))/4” is “5 2 + 8 3 −* 4 /”. Describe a nonrecursive way of evaluating an expression in postfix notation.

0 0
Add a comment Improve this question Transcribed image text
Answer #1

C++ Code :

#include<iostream>
#include<stack>               // for using stack
using namespace std;
int precedence(char ch)            // for getting precedence of operators
{
   if(ch=='+' || ch=='-')           // higher precedence for higher operators
   return 1;
   if(ch=='/' || ch=='*')           // highest precedence for highest operators
   return 2;  
   return 0;           // lowest precedence for non-operators ( means for operands )
}
string Solve(string exp)           // this function will return the required postfix notation of the input arithmetic expression
{
   string postfix="";           // for storing required postfix notation ( our result )
   stack<char> s;               // stack will be used here
   for(int i=0;i<exp.length();i++)               // for each character of the input arithmetic expression
   {
       if(exp[i]=='(')           // we'll simply push the opening parenthesis into the stack
       {
           s.push(exp[i]);
           continue;
       }
       // if we found a closing parenthesis, we'll pop all the elements and append it to our result ( postfix expression ) until
       // we get any opening parenthesis. And then at last , we'll pop out the opening paranthesis too.
       if(exp[i]==')')          
       {
           while(!s.empty() && s.top() != '(')
           {
   postfix += s.top();
   s.pop();
           }
   if(!s.empty())       // At last , we are poping out the opening paranthesis too
   s.pop();
   continue;
       }
      
       // if we found any non-operator ( operand ), we'll simply append that to our result ( postfix expression )
       if(precedence(exp[i])==0)  
           postfix += exp[i];
       else
       {
    if(!s.empty())
           {
               // we'll pop out all the operators from the stack and append it to our result ( postfix expression ) until we get
               // a lower precedence operator than the current operator
   while( s.top() != '(' && (!s.empty()) && ( precedence(s.top()) >= precedence(exp[i]) ) )
               {
   postfix += s.top();
   s.pop();
   }
   s.push(exp[i]);           // at last , we'll simply push the current operator into stack
   }
   else           // if stack is empty and we encounter and operator , then we'll simply push that operator into stack
           s.push(exp[i]);
       }
   }
   // Now after iterating the complete input arithmetic expression , we'll have some operators left into the stack , so what we need
   // to do is to pop out all the remaining operators from the stack and we'll simply append them all to our required result
   while(!s.empty())
   {
       postfix += s.top();
       s.pop();
   }
   return postfix;               // returing our required result ( postfix expression )
}
int main()
{
   string exp;               // it will store the arithmetic expression input by the user
   cout<<"Enter an arithmetic expression : ";
   cin>>exp;           //   taking input of arithmetic expression from the user
   string result = Solve(exp);               // calling Solve() method which would return our required result ( postfix expression )
   cout<<" Postfix expression = "<<result;       // printing required result ( postfix expression )
}

Output 1:

nter an arithmetic expression <<5+2>*<8-3>/4 ostfix expression52+83-*4/ rocess exited after 22.73 seconds with return value 0 ress any key to continue -. .

Output 2:

Enter an arithmetic expression5+4*7 Postfix expre s s ion = 547*+ Process exited after 7.507 seconds with returnvalue 0 Press any key to continue - -

Add a comment
Know the answer?
Add Answer to:
Write in C++ Implement a program that can input an expression in postfix notation (see Exercise...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
  • In C programming Language Write a version of the infix-to-postfix conversion algorithm. Write a program that converts an...

    In C programming Language Write a version of the infix-to-postfix conversion algorithm. Write a program that converts an ordinary infix arithmetic expression (assume a valid expression is entered) with single-digit integers For Example: Infix expression (6 + 2) * 5 - 8 / 4 to a postfix expression is  62+5*84/- The program should read the expression into character array infix and use the stack functions implemented in this chapter to help create the postfix expression in character array postfix. The...

  • Write a program in c++ to convert an expression written in infix notation to be converted...

    Write a program in c++ to convert an expression written in infix notation to be converted to postfix notation. The program must do the following: a. Read a string of characters representing an expression in infix notation. The '$' is to be added at the end of the string to mark its ending. Each character is a letter, digit, +,-,*, or /. If a character is any other character an error must be signaled and the program is terminated b....

  • The second project involves completing and extending the C++ program that evaluates statements of an expression...

    The second project involves completing and extending the C++ program that evaluates statements of an expression language contained in the module 3 case study. The statements of that expression language consist of an arithmetic expression followed by a list of assignments. Assignments are separated from the expression and each other by commas. A semicolon terminates the expression. The arithmetic expressions are fully parenthesized infix expressions containing integer literals and variables. The valid arithmetic operators are +, –, *, /. Tokens...

  • Programming Assignment 2 – RPN Calculator – Infix to Postfix Conversion and The Evaluations of the Postfix Expression. You are to design and implement and algorithm in Java, to input an Infix expressi...

    Programming Assignment 2 – RPN Calculator – Infix to Postfix Conversion and The Evaluations of the Postfix Expression. You are to design and implement and algorithm in Java, to input an Infix expression , convert to a postfix expression and finally evaluate the postfix expression… Follow the examples done during class lectures… We are used to infix notation - ”3 + 4” - where the operator is between the operands. There is also prefix notation, where the operand comes before...

  • (1) (50%) Write a C program that takes as input a fully parenthesized, arithmetic expression of...

    (1) (50%) Write a C program that takes as input a fully parenthesized, arithmetic expression of binary operators +, -,*,/, and converts the expression into a binary expression tree. Your program should take input from the command line. The entire expression should be in a character string without any space in it An input string only includes floating numbers in the format of Y.YY, that is, one digit to the left of the decimal point and two digits to the...

  • Stacks are used by compilers to help in the process of evaluating expressions and generating machine...

    Stacks are used by compilers to help in the process of evaluating expressions and generating machine language code.In this exercise, we investigate how compilers evaluate arithmetic expressions consisting only of constants, operators and parentheses. Humans generally write expressions like 3 + 4and 7 / 9in which the operator (+ or / here) is written between its operands—this is called infix notation. Computers “prefer” postfix notation in which the operator is written to the right of its two operands. The preceding...

  • You are to write a program that implements a Reverse Polish Notation Calculator in C using...

    You are to write a program that implements a Reverse Polish Notation Calculator in C using BISON and FLEX, You only have to edit the BISON and FLEX files. Link to the files to start and have a general view of the program: https://www.dropbox.com/sh/83yzs66jhftqj5b/AABZcY9Qwl84JdUFnYpQaZk9a?dl=0 Reverse Polish Notation is a mathematical notation in which every operator follows all of its operands. It is sometimes called postfix notation, and does not require any parentheses as long as each operator has a fixed...

  • In c++ Section 1. Stack ADT – Overview  Data Items The data items in a stack...

    In c++ Section 1. Stack ADT – Overview  Data Items The data items in a stack are of generic DataType. This means use should use templating and your Node class. Structure  The stack data items are linearly ordered from the most recently added (the top) to the least recently added (the bottom). This is a LIFO scheme. Data items are inserted onto (pushed) and removed from (popped) the top of the stack.  Operations  Constructor. Creates an empty stack.  Copy constructor....

  • Infix Expression Evaluator For this project, write a C program that will evaluate an infix expression. The algorithm REQ...

    Infix Expression Evaluator For this project, write a C program that will evaluate an infix expression. The algorithm REQUIRED for this program will use two stacks, an operator stack and a value stack. Both stacks MUST be implemented using a linked list. For this program, you are to write functions for the linked list stacks with the following names: int isEmpty (stack); void push (stack, data); data top (stack); void pop (stack); // return TRUE if the stack has no...

  • Infix Expression Evaluator For this project, write a C program that will evaluate an infix expression. The algorithm REQ...

    Infix Expression Evaluator For this project, write a C program that will evaluate an infix expression. The algorithm REQUIRED for this program will use two stacks, an operator stack and a value stack. Both stacks MUST be implemented using a linked list. For this program, you are to write functions for the linked list stacks with the following names: int isEmpty (stack); void push (stack, data); data top (stack); void pop (stack); // return TRUE if the stack has no...

ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT