Question

implement a class of infix calculators (Using C++). Consider a simple infix expression that consist of...

implement a class of infix calculators (Using C++).

Consider a simple infix expression that consist of single digit operands; the operators +, -, *, and / ; and parentheses. Assume that unary operators are illegal and that the expression contains no embedded spaces.

Design and implement a class of infix calculators. Use the algorithms given in the chapter 6 to evaluate infix expressions as entered into the calculator. You must first convert the infix expression to postfix form and then evaluate the resulting postfix expression. You need to implement a driver function that takes one line of infix expression either from console or an input file infix.dat, and print out the post fix expression and calculated result to the console.

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

CODE

/* C++ implementation to convert infix expression to postfix*/

// Note that here we use std::stack for Stack operations

#include<bits/stdc++.h>

using namespace std;

//Function to return precedence of operators

int prec(char c)

{

  if(c == '^')

  return 3;

  else if(c == '*' || c == '/')

  return 2;

  else if(c == '+' || c == '-')

  return 1;

  else

  return -1;

}

// The main function to convert infix expression

//to postfix expression

string infixToPostfix(string s)

{

  std::stack<char> st;

  st.push('N');

  int l = s.length();

  string ns;

  for(int i = 0; i < l; i++)

  {

    // If the scanned character is an operand, add it to output string.

    if((s[i] >= 'a' && s[i] <= 'z')||(s[i] >= 'A' && s[i] <= 'Z')||(s[i] >= '0' && s[i] <= '9'))

    ns+=s[i];

    // If the scanned character is an ‘(‘, push it to the stack.

    else if(s[i] == '(')

    

    st.push('(');

    

    // If the scanned character is an ‘)’, pop and to output string from the stack

    // until an ‘(‘ is encountered.

    else if(s[i] == ')')

    {

      while(st.top() != 'N' && st.top() != '(')

      {

        char c = st.top();

        st.pop();

      ns += c;

      }

      if(st.top() == '(')

      {

        char c = st.top();

        st.pop();

      }

    }

    

    //If an operator is scanned

    else{

      while(st.top() != 'N' && prec(s[i]) <= prec(st.top()))

      {

        char c = st.top();

        st.pop();

        ns += c;

      }

      st.push(s[i]);

    }

  }

  //Pop all the remaining elements from the stack

  while(st.top() != 'N')

  {

    char c = st.top();

    st.pop();

    ns += c;

  }

  

  return ns;

}

// Stack type

struct Stack

{

  int top;

  unsigned capacity;

  int* array;

};

// Stack Operations

struct Stack* createStack( unsigned capacity )

{

  struct Stack* stack = (struct Stack*) malloc(sizeof(struct Stack));

  if (!stack) return NULL;

  stack->top = -1;

  stack->capacity = capacity;

  stack->array = (int*) malloc(stack->capacity * sizeof(int));

  if (!stack->array) return NULL;

  return stack;

}

int isEmpty(struct Stack* stack)

{

  return stack->top == -1 ;

}

char peek(struct Stack* stack)

{

  return stack->array[stack->top];

}

char pop(struct Stack* stack)

{

  if (!isEmpty(stack))

    return stack->array[stack->top--] ;

  return '$';

}

void push(struct Stack* stack, char op)

{

  stack->array[++stack->top] = op;

}


// The main function that returns value of a given postfix expression

int evaluatePostfix(string exp)

{

  // Create a stack of capacity equal to expression size

  struct Stack* stack = createStack(exp.size());

  int i;

  // See if stack was created successfully

  if (!stack) return -1;

  // Scan all characters one by one

  for (i = 0; exp[i]; ++i)

  {

    // If the scanned character is an operand (number here),

    // push it to the stack.

    if (isdigit(exp[i]))

      push(stack, exp[i] - '0');

    // If the scanned character is an operator, pop two

    // elements from stack apply the operator

    else

    {

      int val1 = pop(stack);

      int val2 = pop(stack);

      switch (exp[i])

      {

      case '+': push(stack, val2 + val1); break;

      case '-': push(stack, val2 - val1); break;

      case '*': push(stack, val2 * val1); break;

      case '/': push(stack, val2/val1); break;

      }

    }

  }

  return pop(stack);

}

//Driver program to test above functions

int main()

{

  string exp;

cout << "Enter an infix expression: ";

cin >> exp;

  string postfix = infixToPostfix(exp);

cout << "Postfix expression: " << postfix << endl;

cout<<"postfix evaluation: " << evaluatePostfix(postfix);

  return 0;

}

NOTE: Due to lack of time(we get only 2 hours), I could only implement the code which could accept only single digit as operands.

Add a comment
Know the answer?
Add Answer to:
implement a class of infix calculators (Using C++). Consider a simple infix expression that consist of...
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
  • For this project you will implement a simple calculator. Your calculator is going to parse infix...

    For this project you will implement a simple calculator. Your calculator is going to parse infix algebraic expressions, create the corresponding postfix expressions and then evaluate the postfix expressions. The operators it recognizes are: +, -, * and /. The operands are integers. Your program will either evaluate individual expressions or read from an input file that contains a sequence of infix expressions (one expression per line). When reading from an input file, the output will consist of two files:...

  • We as humans write math expression in infix notation, e.g. 5 + 2 (the operators are...

    We as humans write math expression in infix notation, e.g. 5 + 2 (the operators are written in-between the operands). In a computer’s language, however, it is preferred to have the operators on the right side of the operands, i.e. 5 2 +. For more complex expressions that include parenthesis and multiple operators, a compiler has to convert the expression into postfix first and then evaluate the resulting postfix. Write a program that takes an “infix” expression as input, uses...

  • 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...

  • Using ADT Stack: Evaluating infix expressions by converting them to postfix expressions Postfix notation: In a...

    Using ADT Stack: Evaluating infix expressions by converting them to postfix expressions Postfix notation: In a postfix expression, a binary operation follows its two opperands. The order of the operands in a infix expression is the same as in the corresponding postfix expression but the order of the operators might change based on the precedence of the operators and the existing of paranthses. Infix Postfix a + b a b + (a + b) * c a b + c...

  • Write a java program for the following: Your program reads an infix expression represented by a...

    Write a java program for the following: Your program reads an infix expression represented by a string S from the standard input (the keyboard). Then your program converts the infix expression into a postfix expression P using the algorithm. Next, your program evaluates the postfix expression P to produce a single result R. At last, your program displays the original infix expression S, the corresponding postfix expression P and the final result R on the standard output ( the screen...

  • write a program in c++ Read an infix expression from an input file and convert to...

    write a program in c++ Read an infix expression from an input file and convert to postfix. Instead of displaying directly on the screen, first place in a queue, and then display the contents of the queue on the screen. Precondition: The expression will be read from a file (input.txt) that contains a single line. There will be no spaces between the operands and the operators. The following operators are allowed: ( ) + - * / The normal rules...

  • 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...

  • This project is designed to practice with OOP, stack data structure, its applications, and C++/Java programming...

    This project is designed to practice with OOP, stack data structure, its applications, and C++/Java programming language. You will write a program that reads an infix expression, converts it to a postfix expression, evaluates the postfix expression, and prints out the answer. You must define and implement your own Stack class and a Calculator class. Your Stack class supports standard basic stack operations and you can implement it with an array or a linked list. You should create a class...

  • Total point: 15 Introduction: For this assignment you have to write a c program that will...

    Total point: 15 Introduction: For this assignment you have to write a c program that will take an infix expression as input and display the postfix expression of the input. After converting the postfix expression, the program should evaluate the expression from the postfix and display the result. What should you submit? Write all the code in a single file and upload the .c file. Problem We as humans write math expression in infix notation, e.g. 5 + 2 (the...

  • You are to write a program name expressionTree.java that evaluates an infix expression entered by the...

    You are to write a program name expressionTree.java that evaluates an infix expression entered by the user. The expression may contain the following tokens: (1) Integer constants (a series of decimal digits). (2)   One alphabetic character - "x" (representing a value to be supplied later). (3)   Binary operators (+, -, *, / and % (modulo)). (4)   Parentheses          You will parse the input expression creating an expression tree with the tokens, then use the postOrder tree traversal algorithm to extract...

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