fork download
  1.  
  2. #include <stdio.h>
  3.  
  4. #define SIZE 10
  5.  
  6. double stack[SIZE];
  7. int sp;
  8.  
  9. void push(double value);
  10. double pop(void);
  11. int isFull(void);
  12. int isEmpty(void);
  13. void reset(void);
  14. void answer(void);
  15.  
  16. int main(void)
  17. {
  18. int resp;
  19. double data, a, b;
  20.  
  21. reset();
  22.  
  23. while(1){
  24.  
  25. int result = scanf("%d", &resp);
  26.  
  27. if(result == EOF){
  28. break;
  29. }
  30.  
  31. if(result != 1){
  32. printf("Invalid input\n");
  33. break;
  34. }
  35.  
  36. if(resp == 0) break;
  37.  
  38. switch(resp){
  39.  
  40. case 1:
  41. if(sp < 2){
  42. printf("Not enough data in stack\n");
  43. break;
  44. }
  45. b = pop();
  46. a = pop();
  47. push(a + b);
  48. break;
  49.  
  50. case 2:
  51. if(sp < 2){
  52. printf("Not enough data in stack\n");
  53. break;
  54. }
  55. b = pop();
  56. a = pop();
  57. push(a - b);
  58. break;
  59.  
  60. case 3:
  61. if(sp < 2){
  62. printf("Not enough data in stack\n");
  63. break;
  64. }
  65. b = pop();
  66. a = pop();
  67. push(a * b);
  68. break;
  69.  
  70. case 4:
  71. if(sp < 2){
  72. printf("Not enough data in stack\n");
  73. break;
  74. }
  75.  
  76. b = pop();
  77. a = pop();
  78.  
  79. if(b == 0){
  80. printf("Cannot divide by zero\n");
  81. push(a);
  82. push(b);
  83. break;
  84. }
  85.  
  86. push(a / b);
  87. break;
  88.  
  89. case 5: if(scanf("%lf", &data) != 1){
  90. printf("Invalid input\n");
  91. return 1;
  92. }
  93.  
  94. push(data);
  95. break;
  96.  
  97. case 9:
  98. answer();
  99. break;
  100.  
  101. default:
  102. printf("Invalid command\n");
  103. break;
  104. }
  105. }
  106.  
  107. return 0;
  108. }
  109.  
  110. void push(double value)
  111. {
  112. if(isFull()){
  113. printf("stack is full\n");
  114. }else{
  115. stack[sp++] = value;
  116. }
  117. }
  118.  
  119. double pop(void)
  120. {
  121. if(isEmpty()){
  122. printf("stack is empty\n");
  123. return 0;
  124. }else{
  125. return stack[--sp];
  126. }
  127. }
  128.  
  129. int isFull(void)
  130. {
  131. if(sp >= SIZE){
  132. return 1;
  133. }else{
  134. return 0;
  135. }
  136. }
  137.  
  138. int isEmpty(void)
  139. {
  140. if(sp <= 0){
  141. return 1;
  142. }else{
  143. return 0;
  144. }
  145. }
  146.  
  147.  
  148. void answer(void)
  149. {
  150. double sum = 0;
  151. int i;
  152.  
  153. for(i = 0; i < sp; i++){
  154. printf("Data %d\n", i + 1);
  155. sum += stack[i];
  156. }
  157.  
  158. printf("Answer %g\n", sum);
  159. }
  160.  
  161.  
  162. void reset(void)
  163. {
  164. sp = 0;
  165. }
  166.  
Success #stdin #stdout 0s 5288KB
stdin
5
1
5
2
1
9
stdout
Data 1
Answer 3