Jump to content
xisto Community

vIp3rS

Members
  • Content Count

    1
  • Joined

  • Last visited

  1. #include <stdio.h>#include <conio.h>#include <ctype.h>#define MAX 100#define EMPTY -1struct 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) { 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 != '\0') { /* removes tabs and spaces */ while(*p == ' ' || *p == '\t' ) { p++; } if(*p == '\0') break; /* if is digit */ if(isdigit(*p)) { push(&stk,*p - 48); } else { /* it is an operator */ op1 = pop(&stk); op2 = pop(&stk); switch(*p) { case '+': result = op2 + op1; break; case '-': result = op2 - op1; break; case '/': result = op2 / op1; break; case '*': result = op2 * op1; break; case '%': result = op2 % op1; 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); } if(n1!=-1) 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 = '\0';}int main(void){ char infix[MAX], postfix[MAX], choice, option; printf("\t\tMISSION-RIVERA's CALCULATOR PROGRAM!"); printf("\n\nDo you want to use our calculator program?<Y/N>"); scanf("%c",&option); if(option=='y' || option=='Y') { do { clrscr(); printf("Enter expression: "); fflush(stdin); gets(infix); infix2postfix(&infix[0],&postfix[0],1); printf("\n\nPostfix expression is: %s",&postfix[0]); printf("\n\n\t\tThe answer to this expression %s is %d.",&infix[0],evaluate(&postfix[0])); printf("\n\nDo you want to continue?<Y/N>"); scanf("%c",&choice); }while(choice=='y' || choice=='Y'); printf("\n\t\t\tTHANK YOU FOR USING!!!"); printf("\n\nPress any key to exit!"); getch(); } else { printf("\n\t\t\tTHANK YOU FOR USING!!!"); printf("\n\nPress any key to exit!"); getch(); } return 0;}
×
×
  • Create New...

Important Information

Terms of Use | Privacy Policy | Guidelines | We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.