Sunday, August 29, 2010

C Program to evaluate Prefix Expression

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<string.h>

#define MAX 30
#define OPERAND 10
#define OPERATOR 20

typedef struct prexp
{
  int top;
  int stack[MAX];
}stck;

void init(stck*);
void push(stck*,int);
int pop(stck*);
void eval(stck*,char,int,int);
int gettype(char);
void main()
{
     char pre[MAX];
     int num1,num2,item,l,i,pr;
     stck stk;

     fflush(stdin);
     clrscr();

     init(&stk);
     printf(" ENTER THE PREFIX EXPRESSION ");
     gets(pre);
     l=strlen(pre);

     for(i=l-1;i>=0;i--)
     {
        if(pre[i]==' ' || pre[i]=='\0')
        continue;
        switch(gettype(pre[i]))
        {
          case OPERAND : item=pre[i]-'0';
          push(&stk,item);
          break;
          case OPERATOR : num1=pop(&stk);
          num2=pop(&stk);
          eval(&stk,pre[i],num1,num2);
        }
     }
 printf("%d",stk.stack[0]);
 getch();
}

void init(stck *st )
{
  st->top=-1;
}

void push(stck *st,int num)
{
    st->top++;
    st->stack[st->top]=num;
}

int pop(stck *st)
{
    int num;
    num=st->stack[st->top];
    st->top--;
    return num;
}

void eval(stck *st,char op,int num1,int num2)
{
  int res;
     switch(op)
     {
      case '+': res=num1+num2;
      break;
      case '-': res=num1-num2;
      break;
      case '*': res=num1*num2;
      break;
      case '/': res=num1/num2;
      break;
      case '%': res=num1%num2;
      break;
      case '$': res=pow(num1,num2);
      break;
     }
  push(st,res);
}

int gettype(char c)
{
      switch(c)
      {
         case '+':
         case '-':
         case '*':
         case '/':
         case '$':
         case '%': return OPERATOR;
         default : return OPERAND;
        }
}

3 comments:

  1. Thank you very much.. Please help me out some another program in C....

    ReplyDelete
  2. thanks alot
    but include your output also

    ReplyDelete