<div style="text-align:left;"><img src="http://thimg.todayhumor.co.kr/upfile/201505/1431986564Fhnb4qavajPggZHNQEL.jpg" width="800" height="500" alt="12345.jpg" class="chimg_photo" style="border:none;"></div> <div>#include < stdio.h > </div> <div><br></div> <div>#include < stdlib.h > </div> <div><br></div> <div>#define MAX 100 </div> <div><br></div> <div>int stack[MAX]; </div> <div>int stack_top; </div> <div><br></div> <div>void init_stack(void) </div> <div>{ </div> <div> stack_top = -1; </div> <div>} </div> <div><br></div> <div>int push(int t) </div> <div>{ </div> <div> if (stack_top >= MAX - 1) </div> <div> { </div> <div> printf("\nStack overflow !!!"); </div> <div> exit(1); </div> <div> } </div> <div> stack[++stack_top] = t; </div> <div> return t; </div> <div><br></div> <div>} </div> <div><br></div> <div>int pop(void) /* Pop function */ </div> <div><br></div> <div>{ </div> <div> if (stack_top < 0) </div> <div> { </div> <div> printf("\nStack underflow !!!"); /* Underflow error control part */ </div> <div> exit(1); </div> <div> } </div> <div> return stack[stack_top--]; </div> <div>} </div> <div>int get_stack_top(void) /* Getting the stack's top value */ </div> <div>{ </div> <div> return (stack_top < 0) ? -1 : stack[stack_top]; </div> <div>} </div> <div>int is_stack_empty(void) /* Checking the stack is empty or not */ </div> <div>{ </div> <div> return (stack_top < 0); </div> <div>} </div> <div>int is_operator(int op) /* Is this an operator ? */ </div> <div>{ </div> <div> return (op == '+' || op == '-' || op == '*' || op == '/'); </div> <div>} </div> <div>int precedence(int op) /* Check the precedence between operators */ </div> <div>{ </div> <div> if (op == '(') return 0; </div> <div> if (op == '+' || op == '-') return 1; </div> <div> if (op == '*' || op == '/') return 2; </div> <div> else return 3; </div> <div>} </div> <div><br></div> <div><br></div> <div><br></div> <div><br></div> <div>int is_legal(char *postfix) /* Check the postfix expression... legal? illegal? */ </div> <div>{ </div> <div> int result = 0; </div> <div> while (*postfix) </div> <div> { </div> <div> while (*postfix == ' ') /* Get rid of space */ </div> <div> postfix++; </div> <div> if (is_operator(*postfix)) </div> <div> result--; </div> <div> else </div> <div> { </div> <div> result++; </div> <div> while (*postfix != ' ') </div> <div> postfix++; </div> <div> } </div> <div> if (result < 1) break; </div> <div> postfix++; </div> <div> } </div> <div> return (result == 1); </div> <div>} </div> <div>void postfix(char *dst, char *src) /* Change the infix expression to the postfix expression */ </div> <div>{ </div> <div> char c; </div> <div> init_stack(); </div> <div> while (*src) </div> <div> { </div> <div> if (*src == '(') /* push '(' */ </div> <div> { </div> <div> push(*src); </div> <div> src++; </div> <div> }</div> <div> else if (*src == ')') /* If meet ')', pop until meet '('. and then throw '(' */ </div> <div> { </div> <div> while (get_stack_top() != '(') </div> <div> { </div> <div> *dst++ = pop(); </div> <div> *dst++ = ' '; </div> <div> } </div> <div> pop(); </div> <div> src++; </div> <div> } </div> <div> else if (is_operator(*src)) /* If it is an operator... */ </div> <div> { </div> <div> while (!is_stack_empty() && precedence(get_stack_top()) >= precedence(*src)) </div> <div> { </div> <div> *dst++ = pop(); </div> <div> *dst++ = ' '; </div> <div>} </div> <div> push(*src); </div> <div> src++; </div> <div> } </div> <div> else if (*src >= '0' && *src <= '9') /* If it is an operand... */ </div> <div> { </div> <div> do </div> <div> { </div> <div> *dst++ = *src++; </div> <div> } while (*src >= '0' && *src <= '9'); </div> <div> *dst++ = ' '; </div> <div> } </div> <div> else </div> <div> src++; </div> <div> } </div> <div> while (!is_stack_empty()) /* Pop rest of them in the stack */ </div> <div> { </div> <div> *dst++ = pop(); </div> <div> *dst++ = ' '; </div> <div> } </div> <div><br></div> <div> dst--; </div> <div><br></div> <div> *dst = 0; </div> <div><br></div> <div>} </div> <div>int eval(char *post) /* Calculation postfix expression */ </div> <div>{ </div> <div> int i; </div> <div> init_stack(); </div> <div> while (*post) </div> <div> { </div> <div> if (*post >= '0' && *post <= '9') /* Push the operands */ </div> <div> { </div> <div> i = 0; </div> <div> do </div> <div> { </div> <div> i = i * 10 + *post - '0'; </div> <div> post++; </div> <div> } while (*post >= '0' && *post <= '9'); </div> <div> push(i); </div> <div> } </div> <div> else if (*post == '+') /* If it is an operator, pop two times and push it */ </div> <div> { </div> <div> push(pop() + pop()); </div> <div> post++; </div> <div> } </div> <div> else if (*post == '*') </div> <div> { </div> <div> push(pop() * pop()); </div> <div> post++; </div> <div> } </div> <div>else if (*post == '-') </div> <div>{ </div> <div>i = pop(); </div> <div>push(pop() - i); </div> <div> post++; </div> <div>} </div> <div>else if (*post == '/') </div> <div>{ </div> <div> i = pop(); </div> <div> push(pop() / i); </div> <div> post++; </div> <div>} </div> <div> else </div> <div> post++; </div> <div> } </div> <div> return pop(); /* Last one in the stack! That is an answer of postfix expression */ </div> <div>} </div> <div>int main()</div> <div>{ </div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span> FILE * fp1 = fopen("hw5.inp","r");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span> FILE * fp2 = fopen("hw5.inp","r");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span> FILE * fp3 = fopen("hw5.out","w");</div> <div> int result; </div> <div> char exp[100], infix[100]; </div> <div> while(1) /* infinite loop */ </div> <div> { </div> <div> printf("\n\nInput infix expression\n"); </div> <div> printf("==> "); </div> <div> if(scanf("%s", &infix)==EOF) /* If press ^d, scanf returns EOF. We can make it exit algorithm */ </div> <div> { </div> <div> printf("\n"); </div> <div> } </div> <div> postfix(exp, infix); /* Call postfix function */ </div> <div> printf("\n%s", exp); </div> <div> if (!is_legal(exp)) /* Check the postfix expression */ </div> <div> { </div> <div> printf("\n Expression is not legal!\n\n"); </div> <div> continue; </div> <div> } </div> <div> result = eval(exp); // 결과값</div> <div> printf("\n%d\n\n", result); </div> <div> printf("\n" "*");</div> <div><span class="Apple-tab-span" style="white-space:pre;"> </span>} </div> <div> return 0; </div> <div>} </div> <div><br></div> <div>이렇게 까진 다 짯는데.</div> <div>txt파일에서 저렇게 나올려면 어떻게 짜야하는지 궁금합니다..</div>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.