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