fork download
  1. #include <stdio.h>
  2. #define SIZE 10
  3. double stack[SIZE];
  4. int sp;
  5. void push(double value);
  6. double pop(void);
  7. int isFull(void);
  8. int isEmpty(void);
  9. void answer(void);
  10. void reset(void);
  11. int flag=0;
  12. int main(void)
  13. { reset();
  14. while (1) {
  15. int resp;
  16. double data;
  17. scanf("%d",&resp);
  18.  
  19. if (resp==0) break;
  20. switch (resp)
  21. { case 1:
  22. if (isEmpty()) { printf("エラー: スタックが空です。\n");}
  23. else { double b = pop();
  24. if (isEmpty()) { printf("エラー: スタックに値が不足しています。\n"); push(b); }
  25. else { double a = pop(); push(a + b); } } break;
  26.  
  27. case 2: if (isEmpty()) { printf("エラー: スタックが空です。\n");}
  28. else { double b = pop();
  29. if (isEmpty()) { printf("エラー: スタックに値が不足しています。\n"); push(b); }
  30. else { double a = pop(); push(a - b); } } break;
  31.  
  32. case 3:
  33. if (isEmpty()) { printf("エラー: スタックが空です。\n"); }
  34. else { double b = pop();
  35. if (isEmpty()) { printf("エラー: スタックに値が不足しています。\n"); push(b); }
  36. else { double a = pop(); push(a * b); } } break;
  37.  
  38. case 4:
  39. if (isEmpty()) { printf("エラー: スタックが空です。\n"); }
  40. else { double b = pop();
  41. if (isEmpty()) { printf("エラー: スタックに値が不足しています。\n"); push(b); }
  42. else { double a = pop();
  43. if (b == 0) { printf("エラー。\n"); push(a); push(b); }
  44. else { push(a / b); } } } break;
  45.  
  46. case 5:
  47. printf("push:");
  48. scanf("%lf",&data);
  49. push(data);
  50. break;
  51.  
  52. case 9:
  53. answer();
  54. flag=1;
  55. break;
  56. }
  57. if(flag==1) break;
  58.  
  59. }
  60. return 0;}
  61.  
  62. void push(double value)
  63. { if (isFull()) { printf("スタックが満杯で入りませんでした。\n"); }
  64. else { stack[sp++] = value; } }
  65.  
  66. double pop(void)
  67. { if (isEmpty())
  68. { printf("スタックが空で取り出せませんでした。\n"); return 0; }
  69. else { return stack[--sp]; } }
  70.  
  71. int isFull(void)
  72. { if(sp>=SIZE) { return 1;}
  73. else { return 0; } }
  74.  
  75. int isEmpty(void)
  76. { if(sp<=0) { return 1; }
  77. else { return 0; }}
  78.  
  79. void answer(void)
  80. { if (isEmpty())
  81. { printf("スタックは空です。\n"); }
  82. else { printf("%lf",pop()); } }
  83.  
  84. void reset(void)
  85. { sp = 0; }
Success #stdin #stdout 0s 5276KB
stdin
5
1
5
2
1
9
stdout
push:push:3.000000