Advertisement
jakaria_hossain

Postfix to Infix

Oct 23rd, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #include<math.h>
  5. int i=-1,p=0,a;
  6. char str[100];
  7. char op[100];
  8. char ex[100];
  9. void push(char data,char h)
  10. {
  11. int t;
  12. if(isdigit(data)==1 || data==' ' && isdigit(h)==1)
  13. {
  14. i++;
  15. ex[i]=data;
  16. }
  17. else
  18. {
  19. if(data=='^' || data=='(')
  20. {
  21. p++;
  22. op[p]=data;
  23. }
  24. else if(data=='*' || data=='/')
  25. {
  26. t=2;
  27.  
  28. while(op[p]!='+' && op[p]!='-' && op[p]!='(')
  29. {
  30.  
  31. pop();
  32.  
  33. }
  34. if(data=='*')
  35. {
  36. p++;
  37. op[p]=' ';
  38. op[++p]='*';
  39. }
  40.  
  41. else
  42. {
  43. p++;
  44. op[p]=' ';
  45. op[++p]='/';
  46. }
  47. }
  48. else if(data=='+' || data=='-')
  49. {
  50. t=3;
  51. while(op[p]!='(')
  52. {
  53. pop( );
  54. }
  55. if(data=='+')
  56. {
  57. p++;
  58. op[p]=' ';
  59. op[++p]='+';
  60. }
  61. else
  62. {
  63. p++;
  64. op[p]=' ';
  65. op[++p]='-';
  66.  
  67. }
  68. }
  69. else if(data==')')
  70. {
  71. while(op[p]!='(')
  72. {
  73. pop( );
  74.  
  75. }
  76. p--;
  77. }
  78. }
  79. }
  80. void pop( )
  81. {
  82. i++;
  83. ex[i]=op[p];
  84. p--;
  85. }
  86.  
  87. void evaluate( )
  88. {
  89. double sum=0,ara[1000],sume;
  90. int i,j,a,g,c=0;
  91. char pe[100];
  92. for(i=0; ex[i]!='\0'; i++)
  93. {
  94. j=i;
  95.  
  96. if(isdigit(ex[i])==1)
  97. {
  98. for(i=j,a=0; ex[i]!='\0'; i++,a++)
  99. {
  100. if(isdigit(ex[i])==1 && ex[i]!=' ')pe[a]=ex[i];
  101.  
  102. else break;
  103. }
  104.  
  105. sum=0.0;
  106. for(a=a-1,g=0; a>=0; a--,g++)
  107. {
  108. sum+=(pe[a]-48)*pow(10,g);
  109.  
  110. }
  111. ara[c++]=sum;
  112.  
  113. i--;
  114.  
  115. }
  116. else if(ex[i]!=' ')
  117. {
  118. if(ex[i]=='+')
  119. {
  120. ara[c-2]=ara[c-2]+ara[c-1];
  121. c-=1;
  122. }
  123. else if(ex[i]=='-')
  124. {
  125. ara[c-2]=ara[c-2]-ara[c-1];
  126. c-=1;
  127. }
  128. else if(ex[i]=='*')
  129. {
  130. ara[c-2]=ara[c-2]*ara[c-1];
  131. c-=1;
  132. }
  133. else if(ex[i]=='/')
  134. {
  135. ara[c-2]=ara[c-2]/ara[c-1];
  136. c-=1;
  137. }
  138. else if(ex[i]=='^')
  139. {
  140. ara[c-2]=pow(ara[c-2],ara[c-1]);
  141. c-=1;
  142. }
  143.  
  144.  
  145. }
  146.  
  147. }
  148. printf("\nevaluate:%.2lf\n",ara[0]);
  149.  
  150. }
  151. int main()
  152. {
  153.  
  154. int k,j,a,g,c=0,sume;
  155. double sum=0,ara[1000];
  156. char x,h,pe[100];
  157.  
  158.  
  159. op[0]='(';
  160.  
  161. scanf(" %[^\n]",str);
  162.  
  163. a=strlen(str);
  164.  
  165. str[a]=')';
  166. str[a+1]='\0';
  167. a=a+1;
  168. for(k=0; k<a; k++)
  169. {
  170. x=str[k];
  171. h=str[k+1];
  172.  
  173. push(x,h);
  174. }
  175. ex[i+1]='\0';
  176.  
  177. printf("\npostfix: %s\n",ex);
  178.  
  179. evaluate( );
  180.  
  181. return 0;
  182.  
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement