Question in polish Notation example infix notation 15841 po
Question in polish Notation.
example:
infix notation : (1+5)*(8-(4-1))
postix notation : 15+841--*
Given a consant string:
1. Write a function in C and the program in MIPS assembly that converts with the help of stack, the given string and makes it postfix.
Then write another function in C and then the program in MIPS assembly that calculates the result of the converted(postix) function.
Solution
#include<stdio.h>
char stack[50];
int top = -1;
void push(char x){
stack[++top] = x;
}
char pop(){
if(top == -1)
return -1;
else
return stack[top--];
}
int priority(char x){
if(x == \'(\')
return 0;
if(x == \'+\' || x == \'-\')
return 1;
if(x == \'*\' || x == \'/\')
return 2;
}
main(){
char exp[20];
char *e, x;
char post[50] = \"\";
int n1,n2,n3,num;
printf(\"Enter the expression :: \");
scanf(\"%s\",exp);
e = exp;
while(*e != \'\\0\'){
if(isalnum(*e))
printf(\"%c\",*e);
else if(*e == \'(\')
push(*e);
else if(*e == \')\'){
while((x = pop()) != \'(\')
printf(\"%c\", x);
}
else{
while(priority(stack[top]) >= priority(*e)){
printf(\"%c\",pop());
}
push(*e);
}
e++;
}
while(top != -1){
printf(\"%c\",pop());
}
getch();
}
#include<stdio.h>
int stack[20];
int top = -1;
void push(int x){
stack[++top] = x;
}
int pop(){
return stack[top--];
}
int main(){
char exp[20];
char *e;
int n1,n2,n3,num;
printf(\"Enter the expression :: \");
scanf(\"%s\",exp);
e = exp;
while(*e != \'\\0\'){
if(isdigit(*e)){
num = *e - 48;
push(num);
}
else{
n1 = pop();
n2 = pop();
switch(*e){
case \'+\':{
n3 = n1 + n2;
break;
}
case \'-\':{
n3 = n2 - n1;
break;
}
case \'*\':{
n3 = n1 * n2;
break;
}
case \'/\':{
n3 = n2 / n1;
break;
}
}
push(n3);
}
e++;
}
printf(\"\ The result of expression %s = %d\ \ \",exp,pop());
return 0;
}


