Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C++ (http://www.go4expert.com/forums/cpp/)
-   -   infix to postfix (http://www.go4expert.com/forums/infix-to-postfix-t14560/)

vg_2007 15Oct2008 21:08

infix to postfix
 
cn some bdy check my program i am getting a small error in it




Code:

#include<stdio.h>
#include<conio.h>
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
const int size=50;
char infix[size],postfix[size],stack[size];
int top=-1;

int precedence(char ch);
char pop();
char topelement();
void push(char ch);
int braces(char *);

void main()
{
 char ele,elem,st[2];
 int prep,pre,popped,j=0,chk=0;
 strcpy(postfix," ");
 clrscr();
 cout<<"ASSUMPTION: the inflix expression contains single letter variables \n\t"<<"\t and single digit constants only \n\n";
 cout<<"\n ENTER INFIX EXPRESSION ....\n" ;
 gets(infix);
 chk=braces(infix);
 if(chk!=0)
 {
 cout<<"UNBALANCED NO. OF BRACES  \n EXTRA ";
 cout<< (chk==1?"right braces ":"left braces ")<<endl;
 getch();
 exit(1);
 }
 for(int i=0;infix[i]!=        NULL;i++)
 {
 if(infix[i]!='('&&infix[i]!=')'&& infix[i]!='^'&& infix[i]!='*' && infix[i]!='/'&& infix[i]!='+'&& infix[i]!='-')
 {
 postfix[j++]=infix[i];
 }
 else if (infix[i]=='(')
 {
 elem=infix[i];
 push(elem);
 }
 else if(infix[i]==')')
 {
 while((popped=pop())!='(')
        {
        postfix[j++]=popped;
        }
 }
else
{
elem=infix[i];
pre=precedence(elem);
ele=topelement();
prep=precedence(ele);
if(pre>prep)
push(elem);
else
{
while(prep>=pre)
{
if(ele=='#')
break;
popped=pop();
ele=topelement();
postfix[j++]=popped;
prep=precedence(ele);
}
push(elem);
}
}
}
while((popped=pop())!='#')
postfix[j++]=popped;
postfix[j]='\0';
cout<<"\n POSTFIX: "<<postfix<<endl;
}


int precedence(char ch)
{
switch (ch)
        {
        case '^':return 5;
        case '/':return 4;
        case '*':return 4;
        case '+':return 3;
        case '-':return 3;
        default :return 4;
        }
        }

char pop()
{
char ret;
if(top!=-1)
{
ret=stack[top];
top--;
return ret;
}
else
return'#';
}

char topelement()
{
 char ch;
 if(top!=-1)
 ch=stack[top];
 else ch='#';
 return ch;
 }

 void push(char ch)
 {
 if(top!=size-1)
 {
 top++;
 stack[top]=ch;
 }
 }

 int braces(char *s)
 {
 int leftbr,rightbr;
 leftbr=rightbr=0;
 for(int i=0;s[i];i++)
 {
 if(s[i]=='(');
 leftbr++;
 if(s[i]==')')
 rightbr++;
 }
 if(leftbr==rightbr)
 return 0;
 else
 if (leftbr<rightbr)
 return 1;
 else
 return -1;
 }


oogabooga 16Oct2008 01:19

Re: infix to postfix
 
Please do two things:
1. Put your code in code blocks so that the indentation is preserved.
2. Be more specific about the error.
Same thing with your other post.

shabbir 16Oct2008 08:47

Re: infix to postfix
 
As already pointed out by oogabooga, Let us know the error and not all of your code with where is the error to find.


All times are GMT +5.5. The time now is 09:19.