#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)
{
    reset();
    while(1){
        int cmd;
        double a, b, data;
        printf("command? ");
        scanf("%d", &cmd);

        switch(cmd){
            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();
                push(a / b);
                break;
            case 5: // data input
                printf("data? ");
                scanf("%lf", &data);
                push(data);
                break;
            case 9: // show answer
                answer();
                return 0;
        }
    }
}
void push(double value)
{
    if(isFull()){
        printf("Stack is full.\n");
        return;
    }
    stack[sp++] = value;
    printf("data:%f\n", value);
}

double pop(void)
{
    if(isEmpty()){
        printf("Stack is empty.\n");
        return 0;
    }
    return stack[--sp];
}

int isFull(void)
{
    return sp >= SIZE;
}

int isEmpty(void)
{
    return sp <= 0;
}

void answer(void)
{
    printf("answer:%f\n", stack[sp - 1]);
}

void reset(void)
{
    sp = 0;
}

