#include <stdio.h>
#define SIZE 10
double stack[SIZE];
int sp;
void push(double value);
double pop(void);
int isFull(void);
int isEmpty(void);
void answer(void);
void reset(void);
int main(void) {
int choice;
double data, a, b;
reset();
/* (1) main関数内の処理 loop & switch文 */
while (1) {
printf("1:+, 2:-, 3:*, 4:/, 5:Push, 9:Answer -> "); if (scanf("%d", &choice
) != 1) break;
if (choice == 9) {
break;
}
switch (choice) {
case 1: /* 足し算 (+) */
b = pop();
a = pop();
push(a + b);
break;
case 2: /* 引き算 (-) */
b = pop();
a = pop();
push(a - b);
break;
case 3: /* 掛け算 (*) */
b = pop();
a = pop();
push(a * b);
break;
case 4: /* 割り算 (/) */
b = pop();
a = pop();
if (b != 0) {
push(a / b);
} else {
printf("Error: Zero division\n"); }
break;
case 5: /* データ入力 (Push) */
push(data);
break;
default:
break;
}
}
answer();
return 0;
}
/* (2) reset関数:スタックのポインタを初期化 */
void reset(void) {
sp = 0;
}
/* (3) answer関数:計算結果(スタックの一番上の値)を表示 */
void answer(void) {
if (!isEmpty()) {
printf("answer = %f\n", stack
[sp
- 1]); } else {
}
}
/* (4) isEmpty関数:スタックが空かどうかを判断 */
int isEmpty(void) {
return (sp == 0);
}
/* (5) isFull関数:スタックが満杯かどうかを判断 */
int isFull(void) {
return (sp == SIZE);
}
/* (6) pop関数:データをスタックから取り出す */
double pop(void) {
if (!isEmpty()) {
sp--;
return stack[sp];
} else {
return 0;
}
}
/* (7) push関数:データをスタックに格納する */
void push(double value) {
if (!isFull()) {
stack[sp] = value;
sp++;
} else {
}
}
CiNpbmNsdWRlIDxzdGRpby5oPgoKCiNkZWZpbmUgU0laRSAxMAoKZG91YmxlIHN0YWNrW1NJWkVdOwppbnQgc3A7Cgp2b2lkIHB1c2goZG91YmxlIHZhbHVlKTsKZG91YmxlIHBvcCh2b2lkKTsKaW50IGlzRnVsbCh2b2lkKTsKaW50IGlzRW1wdHkodm9pZCk7CnZvaWQgYW5zd2VyKHZvaWQpOwp2b2lkIHJlc2V0KHZvaWQpOwoKaW50IG1haW4odm9pZCkgewogICAgaW50IGNob2ljZTsKICAgIGRvdWJsZSBkYXRhLCBhLCBiOwoKICAgIHJlc2V0KCk7CgogICAgLyogKDEpIG1haW7plqLmlbDlhoXjga7lh6bnkIYgbG9vcCAmIHN3aXRjaOaWhyAqLwogICAgd2hpbGUgKDEpIHsKICAgICAgICBwcmludGYoIjE6KywgMjotLCAzOiosIDQ6LywgNTpQdXNoLCA5OkFuc3dlciAtPiAiKTsKICAgICAgICBpZiAoc2NhbmYoIiVkIiwgJmNob2ljZSkgIT0gMSkgYnJlYWs7CgogICAgICAgIGlmIChjaG9pY2UgPT0gOSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIHN3aXRjaCAoY2hvaWNlKSB7CiAgICAgICAgICAgIGNhc2UgMTogLyog6Laz44GX566XICgrKSAqLwogICAgICAgICAgICAgICAgYiA9IHBvcCgpOwogICAgICAgICAgICAgICAgYSA9IHBvcCgpOwogICAgICAgICAgICAgICAgcHVzaChhICsgYik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyOiAvKiDlvJXjgY3nrpcgKC0pICovCiAgICAgICAgICAgICAgICBiID0gcG9wKCk7CiAgICAgICAgICAgICAgICBhID0gcG9wKCk7CiAgICAgICAgICAgICAgICBwdXNoKGEgLSBiKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDM6IC8qIOaOm+OBkeeulyAoKikgKi8KICAgICAgICAgICAgICAgIGIgPSBwb3AoKTsKICAgICAgICAgICAgICAgIGEgPSBwb3AoKTsKICAgICAgICAgICAgICAgIHB1c2goYSAqIGIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNDogLyog5Ymy44KK566XICgvKSAqLwogICAgICAgICAgICAgICAgYiA9IHBvcCgpOwogICAgICAgICAgICAgICAgYSA9IHBvcCgpOwogICAgICAgICAgICAgICAgaWYgKGIgIT0gMCkgewogICAgICAgICAgICAgICAgICAgIHB1c2goYSAvIGIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yOiBaZXJvIGRpdmlzaW9uXG4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDU6IC8qIOODh+ODvOOCv+WFpeWKmyAoUHVzaCkgKi8KICAgICAgICAgICAgICAgIHByaW50ZigiRGF0YTogIik7CiAgICAgICAgICAgICAgICBzY2FuZigiJWxmIiwgJmRhdGEpOwogICAgICAgICAgICAgICAgcHVzaChkYXRhKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgcHJpbnRmKCJJbnZhbGlkIGNob2ljZVxuIik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgYW5zd2VyKCk7CiAgICByZXR1cm4gMDsKfQoKLyogKDIpIHJlc2V06Zai5pWw77ya44K544K/44OD44Kv44Gu44Od44Kk44Oz44K/44KS5Yid5pyf5YyWICovCnZvaWQgcmVzZXQodm9pZCkgewogICAgc3AgPSAwOwp9CgovKiAoMykgYW5zd2Vy6Zai5pWw77ya6KiI566X57WQ5p6c77yI44K544K/44OD44Kv44Gu5LiA55Wq5LiK44Gu5YCk77yJ44KS6KGo56S6ICovCnZvaWQgYW5zd2VyKHZvaWQpIHsKICAgIGlmICghaXNFbXB0eSgpKSB7CiAgICAgICAgcHJpbnRmKCJhbnN3ZXIgPSAlZlxuIiwgc3RhY2tbc3AgLSAxXSk7CiAgICB9IGVsc2UgewogICAgICAgIHByaW50ZigiU3RhY2sgaXMgZW1wdHlcbiIpOwogICAgfQp9CgovKiAoNCkgaXNFbXB0eemWouaVsO+8muOCueOCv+ODg+OCr+OBjOepuuOBi+OBqeOBhuOBi+OCkuWIpOaWrSAqLwppbnQgaXNFbXB0eSh2b2lkKSB7CiAgICByZXR1cm4gKHNwID09IDApOwp9CgovKiAoNSkgaXNGdWxs6Zai5pWw77ya44K544K/44OD44Kv44GM5rqA5p2v44GL44Gp44GG44GL44KS5Yik5patICovCmludCBpc0Z1bGwodm9pZCkgewogICAgcmV0dXJuIChzcCA9PSBTSVpFKTsKfQoKLyogKDYpIHBvcOmWouaVsO+8muODh+ODvOOCv+OCkuOCueOCv+ODg+OCr+OBi+OCieWPluOCiuWHuuOBmSAqLwpkb3VibGUgcG9wKHZvaWQpIHsKICAgIGlmICghaXNFbXB0eSgpKSB7CiAgICAgICAgc3AtLTsKICAgICAgICByZXR1cm4gc3RhY2tbc3BdOwogICAgfSBlbHNlIHsKICAgICAgICBwcmludGYoIlN0YWNrIFVuZGVyZmxvd1xuIik7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9Cn0KCi8qICg3KSBwdXNo6Zai5pWw77ya44OH44O844K/44KS44K544K/44OD44Kv44Gr5qC857SN44GZ44KLICovCnZvaWQgcHVzaChkb3VibGUgdmFsdWUpIHsKICAgIGlmICghaXNGdWxsKCkpIHsKICAgICAgICBzdGFja1tzcF0gPSB2YWx1ZTsKICAgICAgICBzcCsrOwogICAgfSBlbHNlIHsKICAgICAgICBwcmludGYoIlN0YWNrIE92ZXJmbG93XG4iKTsKICAgIH0KfQ==