plzzz help…….it doesn’t evaluate right……!

Home Forums C Programming plzzz help…….it doesn’t evaluate right……!

Viewing 3 reply threads
  • Author
    Posts
    • #2244
      WeldonGarrison
      Participant

      #include
      #include

      #define MAX 50
      #define EMPTY -1

      struct stack
      {
      int data[MAX];
      int top;
      };

      int isempty(struct stack *s)
      {
      return (s->top == EMPTY) ? 1 : 0;
      }

      void emptystack(struct stack* s)
      {
      s->top = EMPTY;
      }

      void push(struct stack* s,int item)
      {
      if(s->top == (MAX-1))
      {
      printf(“nSTACK FULL”);
      }
      else
      {
      ++s->top;
      s->data[s->top]=item;
      }
      }

      int pop(struct stack* s)
      {
      int ret=EMPTY;
      if(s->top == EMPTY)
      printf(“nSTACK EMPTY”);
      else
      {
      ret= s->data[s->top];
      –s->top;
      }
      return ret;
      }

      void display(struct stack s)
      {
      while(s.top != EMPTY)
      {
      printf(“n%d”,s.data[s.top]);
      s.top–;
      }
      }

      int isoperator(char e)
      {
      if(e == ‘+’ || e == ‘-‘ || e == ‘*’ || e == ‘/’ || e == ‘%’)
      return 1;
      else
      return 0;
      }

      int priority(char e)
      {
      int pri = 0;

      if(e == ‘*’ || e == ‘/’ || e ==’%’)
      pri = 2;
      else
      {
      if(e == ‘+’ || e == ‘-‘)
      pri = 1;
      }
      return pri;
      }

      int evaluate(char *postfix)
      {
      char *p;
      struct stack stk;
      int op1,op2,result;

      emptystack(&stk);
      p = &postfix[0];

      while(*p != ‘’)
      {
      /* removes tabs and spaces */
      while(*p == ‘ ‘ || *p == ‘t’)
      {
      p++;
      }
      /* if is digit */
      if(isdigit(*p))
      {
      push(&stk,*p – 48);
      }
      else
      {
      /* it is an operator */
      op2 = pop(&stk);
      op1 = pop(&stk);

      switch(*p)
      {
      case ‘+’:
      result = op1 + op2;
      break;

      case ‘-‘:
      result = op1 – op2;
      break;

      case ‘/’:
      result = op1 / op2;
      break;

      case ‘*’:
      result = op1 * op2;
      break;

      case ‘%’:
      result = op1 % op2;
      break;

      default:
      printf(“nInvalid Operator”);
      return 0;
      }
      push(&stk,result);
      }
      p++;
      }
      result = pop(&stk);
      return result;
      }

      void infix2postfix(char* infix, char * postfix, int insertspace)
      {
      char *i,*p;
      struct stack X;
      char n1;
      emptystack(&X);
      i = &infix[0];
      p = &postfix[0];

      while(*i)
      {
      while(*i == ‘ ‘ || *i == ‘t’)
      {
      i++;
      }

      if( isdigit(*i) || isalpha(*i) )
      {
      while( isdigit(*i) || isalpha(*i))
      {
      *p = *i;
      p++;
      i++;
      }
      /*SPACE CODE*/
      if(insertspace)
      {
      *p = ‘ ‘;
      p++;
      }
      /*END SPACE CODE*/
      }

      if( *i == ‘(‘ )
      {
      push(&X,*i);
      i++;
      }

      if( *i == ‘)’)
      {
      n1 = pop(&X);
      while( n1 != ‘(‘ )
      {
      *p = n1;
      p++;
      /*SPACE CODE*/
      if(insertspace)
      {
      *p = ‘ ‘;
      p++;
      }
      /*END SPACE CODE*/
      n1 = pop(&X);
      }
      i++;
      }

      if( isoperator(*i) )
      {
      if(isempty(&X))
      push(&X,*i);
      else
      {
      n1 = pop(&X);
      while(priority(n1) >= priority(*i))
      {
      *p = n1;
      p++;
      /*SPACE CODE*/
      if(insertspace)
      {
      *p = ‘ ‘;
      p++;
      }
      /*END SPACE CODE*/
      n1 = pop(&X);
      }
      push(&X,n1);
      push(&X,*i);
      }
      i++;
      }
      }
      while(!isempty(&X))
      {
      n1 = pop(&X);
      *p = n1;
      p++;
      /*SPACE CODE*/
      if(insertspace)
      {
      *p = ‘ ‘;
      p++;
      }
      /*END SPACE CODE*/
      }
      *p = ‘’;
      }

      int main(void)
      {
      char infix[MAX], postfix[MAX], result[MAX];
      printf(“Enter expression: “);
      fflush(stdin);
      gets(infix);
      infix2postfix(&infix[0],&postfix[0],1);
      printf(“nPostfix expression is: %s”,&postfix[0]);
      result[0]=postfix[0];
      printf(“n %s = %d.”,&infix[0],evaluate(&result[0]));
      return 0;
      }

      Code:

    • #3642
      GWILouisaxwzkla
      Participant

      Heres a postfix to infix program I have on my drive ( hope this helps….. ):

    • #3643
      PSBMaira490593
      Participant

      Hi,
      please run it again in new window and check the variable that you have declared are right or not.
      thanks.



      Debra Fine

    • #3644
      HubertK7641
      Participant

      Provide some sun glasses combined in your sport fishing excursion. A higher-high quality pair of polarized lenses will help you prohibit natural sunlight and they may also help you to see gagner argent casino
      deeper into your normal water so you’re able to locate the fish. This can assist you to make all those crucial attracts and the eyes risk-free, while you’re from the lake.

Viewing 3 reply threads
  • You must be logged in to reply to this topic.