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

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

This topic contains 3 replies, has 4 voices, and was last updated by  HubertK7641 7 years, 1 month ago.

  • Author
    Posts
  • #2244

    #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

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

  • #3643

    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
    Member

    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.

You must be logged in to reply to this topic.

0 Shares
Share
Tweet
Share
Pin
+1