Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

evaluation of a postfix expression

anish444anish444 Posts: 18Member
hi
i am havng a few problems with this program of evaluation of a postfix expression using the concept of stacks.this is d code i made but it is not working for all inputs.If any1 has d working code plz post it as i am in urgent need as my xams r coming up shortly..


// Program to evaluate postfix expression
#include
#include
#include
#include
#include
#include
#include


// Evaluates postfix exp.
const max_num=100;
int top=-1;
float stck[100];
void push(float val)
{
if(top>=max_num)
{
cout<<"
Stack Overflow";
}
else
{
top++;
stck[top]=val;
}
}
float pop()
{
float res;
if(top<0)
{
cout<<"
Stack Underflow";
return(0);
}
else
{
res=stck[top];
top--;
return(res);
}
}
float operate(float op1,float op2,char oprtr)
{
float temp;
switch(oprtr)
{
case '+': temp = op1 + op2;
break;
case '-': temp = op1-op2;
break;
case '*': temp = op1*op2;
break;
case '/': if( op1 !=0)
{
temp= op2/op1;
break;
}
if( op1 ==0) {cout<<"
Division not possible....exiting";
getch();
exit(0); }
case '^': temp=pow(op2,op1);
break;
}
return(temp);
}
float evaluate(char suffix[],float vals[])
{
int i=0,j=0,temp;
int l=strlen(suffix);
char ch;
float op1,op2;
while(i<l)
{
ch=suffix[i];
if(suffix[i]>='a' && suffix[i]<='z')

{
push(vals[j]);
j++;
}
else
{
op1=pop();
op2=pop();
op1=operate(op1,op2,ch);
push(op1);
}
i++;
};
temp=pop();
return(temp);
}
void main()
{
clrscr();
cout<<"
This program works only for small case letters. Plz. enter the alphabets in the lower case";
char suffix[max_num];
int j=0;
float result,vals[max_num];
gets(suffix);
puts(suffix);
int l=strlen(suffix);
for(int i=0;i<l;i++)
{
if(suffix[i]>='a' && suffix[i]<='z')
{
cout<<"
Enter the value of "<<suffix[i]<<"
";
cin>>vals[j];
j++;
}
}

result=evaluate(suffix,vals);
cout<<"
result = "<<result<<"
";
getch();
}

Comments

  • IDKIDK Posts: 1,784Member
    Please use code tags and don't double, tripple or quadruple post.

    What inputs aren't working?
    When you know that, simply debug your program with them to see where the error lies.

    [code]
    : // Program to evaluate postfix expression
    : #include
    : #include
    : #include
    : #include
    : #include
    : #include
    : #include
    :
    :
    : // Evaluates postfix exp.
    : const max_num=100;
    : int top=-1;
    : float stck[100];
    : void push(float val)
    : {
    : if(top>=max_num)
    : {
    : cout<<"
    Stack Overflow";
    : }
    : else
    : {
    : top++;
    : stck[top]=val;
    : }
    : }
    : float pop()
    : {
    : float res;
    : if(top<0)
    : {
    : cout<<"
    Stack Underflow";
    : return(0);
    : }
    : else
    : {
    : res=stck[top];
    : top--;
    : return(res);
    : }
    : }
    : float operate(float op1,float op2,char oprtr)
    : {
    : float temp;
    : switch(oprtr)
    : {
    : case '+': temp = op1 + op2;
    : break;
    : case '-': temp = op1-op2;
    : break;
    : case '*': temp = op1*op2;
    : break;
    : case '/': if( op1 !=0)
    : {
    : temp= op2/op1;
    : break;
    : }
    : if( op1 ==0) {cout<<"
    Division not possible....exiting";
    : getch();
    : exit(0); }
    : case '^': temp=pow(op2,op1);
    : break;
    : }
    : return(temp);
    : }
    : float evaluate(char suffix[],float vals[])
    : {
    : int i=0,j=0,temp;
    : int l=strlen(suffix);
    : char ch;
    : float op1,op2;
    : while(i<l)
    : {
    : ch=suffix[i];
    : if(suffix[i]>='a' && suffix[i]<='z')
    :
    : {
    : push(vals[j]);
    : j++;
    : }
    : else
    : {
    : op1=pop();
    : op2=pop();
    : op1=operate(op1,op2,ch);
    : push(op1);
    : }
    : i++;
    : };
    : temp=pop();
    : return(temp);
    : }
    : void main()
    : {
    : clrscr();
    : cout<<"
    This program works only for small case letters. Plz. enter the alphabets in the lower case";
    : char suffix[max_num];
    : int j=0;
    : float result,vals[max_num];
    : gets(suffix);
    : puts(suffix);
    : int l=strlen(suffix);
    : for(int i=0;i<l;i++)
    : {
    : if(suffix[i]>='a' && suffix[i]<='z')
    : {
    : cout<<"
    Enter the value of "<<suffix[i]<<"
    ";
    : cin>>vals[j];
    : j++;
    : }
    : }
    :
    : result=evaluate(suffix,vals);
    : cout<<"
    result = "<<result<<"
    ";
    : getch();
    : }
    :
    [/code]
  • anish444anish444 Posts: 18Member
    : Please use code tags and don't double, tripple or quadruple post.
    :
    : What inputs aren't working?
    : When you know that, simply debug your program with them to see where the error lies.
    :
    : [code]
    : : // Program to evaluate postfix expression
    : : #include
    : : #include
    : : #include
    : : #include
    : : #include
    : : #include
    : : #include
    : :
    : :
    : : // Evaluates postfix exp.
    : : const max_num=100;
    : : int top=-1;
    : : float stck[100];
    : : void push(float val)
    : : {
    : : if(top>=max_num)
    : : {
    : : cout<<"
    Stack Overflow";
    : : }
    : : else
    : : {
    : : top++;
    : : stck[top]=val;
    : : }
    : : }
    : : float pop()
    : : {
    : : float res;
    : : if(top<0)
    : : {
    : : cout<<"
    Stack Underflow";
    : : return(0);
    : : }
    : : else
    : : {
    : : res=stck[top];
    : : top--;
    : : return(res);
    : : }
    : : }
    : : float operate(float op1,float op2,char oprtr)
    : : {
    : : float temp;
    : : switch(oprtr)
    : : {
    : : case '+': temp = op1 + op2;
    : : break;
    : : case '-': temp = op1-op2;
    : : break;
    : : case '*': temp = op1*op2;
    : : break;
    : : case '/': if( op1 !=0)
    : : {
    : : temp= op2/op1;
    : : break;
    : : }
    : : if( op1 ==0) {cout<<"
    Division not possible....exiting";
    : : getch();
    : : exit(0); }
    : : case '^': temp=pow(op2,op1);
    : : break;
    : : }
    : : return(temp);
    : : }
    : : float evaluate(char suffix[],float vals[])
    : : {
    : : int i=0,j=0,temp;
    : : int l=strlen(suffix);
    : : char ch;
    : : float op1,op2;
    : : while(i<l)
    : : {
    : : ch=suffix[i];
    : : if(suffix[i]>='a' && suffix[i]<='z')
    : :
    : : {
    : : push(vals[j]);
    : : j++;
    : : }
    : : else
    : : {
    : : op1=pop();
    : : op2=pop();
    : : op1=operate(op1,op2,ch);
    : : push(op1);
    : : }
    : : i++;
    : : };
    : : temp=pop();
    : : return(temp);
    : : }
    : : void main()
    : : {
    : : clrscr();
    : : cout<<"
    This program works only for small case letters. Plz. enter the alphabets in the lower case";
    : : char suffix[max_num];
    : : int j=0;
    : : float result,vals[max_num];
    : : gets(suffix);
    : : puts(suffix);
    : : int l=strlen(suffix);
    : : for(int i=0;i<l;i++)
    : : {
    : : if(suffix[i]>='a' && suffix[i]<='z')
    : : {
    : : cout<<"
    Enter the value of "<<suffix[i]<<"
    ";
    : : cin>>vals[j];
    : : j++;
    : : }
    : : }
    : :
    : : result=evaluate(suffix,vals);
    : : cout<<"
    result = "<<result<<"
    ";
    : : getch();
    : : }
    : :
    : [/code]
    :
    well i cant seem to use two digit numbers or 3 digit nos for that matter.i need code so that my program works 4 more than 1 digit calculations
Sign In or Register to comment.