Advertisement
ledrose

expRealiser

Jan 28th, 2020
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.36 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4.  
  5.  
  6.  
  7. struct element {
  8.     int sym;
  9.     struct element *p;
  10. };
  11.  
  12.  
  13. void addel(struct element **cur,int sym) {
  14.     struct element *mem=malloc(sizeof(struct element));
  15.     mem->sym=sym;
  16.     mem->p=(*cur);
  17.     (*cur)=mem;
  18. }
  19.  
  20. int removeel(struct element **cur) {
  21.     struct element *mem=(*cur)->p;
  22.     int el=(*cur)->sym;
  23.     free(*cur);
  24.     (*cur)=mem;
  25.     return el;
  26. }
  27.  
  28.  
  29. int main()
  30. {
  31.     char exp[50];
  32.     struct element *topn=NULL, *topo=NULL;
  33.     int i=0,x1,x2,res;
  34.     scanf("%s",&exp);
  35.     while (exp[i]) {
  36.         switch(exp[i]) {
  37.             case '(': break;
  38.             case '+':
  39.             case '*':
  40.             case '-':
  41.             case '/':
  42.                 addel(&topo,(int)exp[i]); break;
  43.             case ')':
  44.                 x1=removeel(&topn);
  45.                 x2=removeel(&topn);
  46.                 switch((char)removeel(&topo)) {
  47.                     case '+': res=x2+x1; break;
  48.                     case '*': res=x2*x1; break;
  49.                     case '-': res=x2-x1; break;
  50.                     case '/': res=x2/x1; break;
  51.                 }
  52.                 addel(&topn,res);
  53.                 break;
  54.             default:
  55.                 addel(&topn,(int)exp[i]-48);
  56.                 break;
  57.         }
  58.         i++;
  59.     }
  60.     printf("%s",exp);
  61.     printf("=%d",topn->sym);
  62.     return 0;
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement