fork download
  1. #include<stdio.h>
  2. #define SIZE 10
  3. /*AIログ
  4. それぞれの関数の役割の確認
  5. 理解したこと:15~21のコメントの内容
  6. while文の中での処理の流れの確認
  7. 理解したこと:switch文の型および、中の処理の流れ
  8. 9を選んだ時の終了の仕方
  9. 理解したこと:swhich文の中で、9を選んだ時にcaseでは表示のみの処理をさせ、それから外に出て、if文でx==9の時にbreakさせることで、while文を終了させることができる
  10. */
  11.  
  12. double stack[SIZE];
  13. int sp;
  14. int x=0;
  15. double a,b;
  16. double dango;
  17.  
  18. void push(double value);//スタックにデータを格納する
  19. double pop(void);//スタックからデータを取り出す
  20.  
  21. int isFull(void);//スタックが満杯かどうかを判定する
  22. int isEmpty(void);//スタックが空かどうかを判定する
  23. void answer(void);//計算結果の表示
  24. void reset(void);//スタックの中身をすべて空にする(初期化する)
  25.  
  26. int main(void){
  27. reset();
  28. printf("逆ポーランドによる演算\n");
  29.  
  30.  
  31. while(1){
  32. printf("データ入力:5\n足し算:1\n引き算:2\n掛け算:3\n割り算:4\n計算結果:9\n");
  33. scanf("%d", &x);
  34.  
  35. switch(x)
  36. {
  37. case 1:
  38. b=pop();
  39. a=pop();
  40. push(b+a);
  41. break;
  42.  
  43. case 2:
  44. a=pop();
  45. b=pop();
  46. push(b-a);
  47. break;
  48.  
  49. case 3:
  50. a=pop();
  51. b=pop();
  52. push(b*a);
  53. break;
  54.  
  55. case 4:
  56. a=pop();
  57. b=pop();
  58. push(b/a);
  59. break;
  60.  
  61. case 5:
  62. printf("データを入力してください:");
  63. scanf("%lf", &dango);
  64. push(dango);
  65. break;
  66.  
  67. case 9:
  68. answer();
  69. break;
  70.  
  71. default:
  72. printf("無効な入力です\n");
  73. }
  74. if(x==9)
  75. break;
  76. }
  77.  
  78. return 0;
  79. }
  80.  
  81. void push(double value)
  82. {
  83. if(isFull()){
  84. printf("スタックが満杯です\n");
  85. }
  86. else{
  87. stack[sp] = value;
  88. sp++;
  89. }
  90. }
  91.  
  92.  
  93. double pop(void)
  94. {
  95. if(sp<=0){
  96. printf("スタックが空です\n");
  97. return 0;
  98. }
  99. else{
  100. sp--;
  101. return stack[sp];
  102. }
  103.  
  104. }
  105.  
  106.  
  107. int isFull(void)
  108. {
  109. if(sp>=SIZE){
  110. return 1;
  111. }else{
  112. return 0;
  113. }
  114.  
  115. }
  116.  
  117.  
  118. int isEmpty(void)
  119. {
  120. if(sp==0){
  121. return 1;
  122. }
  123. else{
  124. return 0;
  125. }
  126. }
  127.  
  128.  
  129. void answer(void)
  130. {
  131. double ans;
  132. ans = pop();
  133. printf("answer:%lfです\n", ans);
  134. }
  135.  
  136.  
  137. void reset(void)
  138. {
  139. sp=0;
  140. stack[0] = 0;
  141. }
Success #stdin #stdout 0s 5316KB
stdin
5 10 5 20 1 9
stdout
逆ポーランドによる演算
データ入力:5
足し算:1
引き算:2
掛け算:3
割り算:4
計算結果:9
データを入力してください:データ入力:5
足し算:1
引き算:2
掛け算:3
割り算:4
計算結果:9
データを入力してください:データ入力:5
足し算:1
引き算:2
掛け算:3
割り算:4
計算結果:9
データ入力:5
足し算:1
引き算:2
掛け算:3
割り算:4
計算結果:9
answer:30.000000です