/* INFIX TO PREFIX AND EVALUATION */
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
#define MAX 100
char st[MAX];
char st1[MAX];
int top=-1;
int top1=-1;
void reverse(char str[]);
void push(char st[],char);
char pop(char st[]);
void infixtopostfix(char source[],char target[]);
int getpriority(char);
char infix[100],postfix[100],temp[100],a[100],ev[100];
void evalpre(char st[]);
void main()
{
clrscr();
printf("\nEnter Infix Expression ");
gets(infix);
reverse(infix);
strcpy(postfix,"");
infixtopostfix(temp,postfix);
printf("\nThe Corresponding Postfix Expression is ");
puts(postfix);
strcpy(temp,"");
reverse(postfix);
printf("\nThe Prefix Expression is ");
puts(temp);
strcpy(a,temp);
strrev(a);
evalpre(a);
printf("\nResult=%d",ev[0]);
getch();
}
//-------REVERSE-------
void reverse(char str[])
{
int len=0,i=0,j=0;
len=strlen(str);
j=len-1;
while(j>=0)
{
if(str[j]=='(')
temp[i]=')';
else if(str[j]==')')
temp[i]='(';
else
temp[i]=str[j];
i++,j--;
}
temp[i]='\0';
}
//-------INFIX TO POSTFIX-------
void infixtopostfix(char source[],char target[])
{
int i=0,j=0;
char temp;
strcpy(target,"");
while(source[i]!='\0')
{
if(source[i]=='(')
{
push(st,source[i]);
i++;
}
else if(source[i]==')')
{
while(top!=-1 && st[top]!='(')
{
target[j]=pop(st);
j++;
}
if(top==-1)
{
printf("\nInvalid Expression");
}
temp=pop(st);
i++;
}
else if(isdigit(source[i]) || isalpha(source[i]))
{
target[j]=source[i];
i++;
j++;
}
else if(source[i]=='+' || source[i]=='-' || source[i]=='*' ||source[i]=='/' ||source[i]=='%' || source[i]=='^')
{
while(top!=-1 && (st[top]!='(') && getpriority(st[top])>getpriority(source[i]))
{
target[j]= pop(st);
j++;
}
push(st,source[i]);
i++;
}
else
{
printf("Invalid Expression\n");
}
}
while((top!=-1) && (st[top]!='('))
{
target[j]=pop(st);
j++;
}
target[j]='\0';
}
//-------GET PRIORITY-------
int getpriority(char op)
{
if(op=='^')
return 3;
else if(op=='/'|| op=='%'|| op=='*')
return 1;
else if(op=='+' || op=='-')
return 0;
}
//-------PUSH-------
void push(char st[],char val)
{
if(top==MAX-1)
{
printf("Stack Overflow\n");
}
else
{
top++;
st[top]=val;
}
}
//-------POP-------
char pop(char st[])
{
char val=' ';
if(top==-1)
{
printf("Stack Underflow\n");
}
else
{
val=st[top];
top--;
}
return val;
}
//-------EVALUATE PREFIX-------
void evalpre(char str[])
{
int i=0,result;
int op1,op2,res;
while(str[i]!='\0')
{
if(isdigit(str[i]))
{
ev[++top1]=(int)str[i]-48;
}
else
{
op1=ev[top1--];
op2=ev[top1];
switch(str[i])
{
case '+':
res=op1+op2;
break;
case '-':
res=op1-op2;
break;
case'*':
res=op1*op2;
break;
case'/' :
res=op1/op2;
break;
}
ev[top1]=res;
}
i++;
}
}
/* OUTPUT
Enter Infix Expression 2*3+1
The Corresponding Postfix Expression is 132*+
The Prefix Expression is +*231
Result=7 */
Comments
Post a Comment