#include <stdio.h>
#include <stdlib.h>

#define MAXOP 100  // Максимальный размер операдна (цифры) или оператора
#define NUMBER '0' // Признак числа

int getop(char[]);
void push(double);
double pop(void);

int main() {
  int type;
  double pop2;
  char s[MAXOP];

  while ((type = getop(s)) != EOF) {
    switch (type) {
    case NUMBER:
      push(atof(s));
      break;
    case '+':
      push(pop() + pop());
      break;
    case '*':
      push(pop() * pop());
      break;
    case '-':
      /*
       * Тут сначала извлекаем верхний операнд, из которого надо
       * вычитать. В отличии от `+`, `*` для `-` и `/` порядок операндов
       * важен.
       *
       * ----------
       * -
       * 10
       * 20
       * ...
       * ----------
       *
       * Чтобы сделать вычитание - надо из 20 вычесть 10 - получается
       * излекам со стека 10, затем 20 и делаем вычитание
       */
      pop2 = pop();
      push(pop() - pop2);
      break;
    case '/':
      /*
       * Тут примерно то-же самое, только еще надо сделать проверку
       * на ноль
       */
      pop2 = pop();
      if (pop2 != 0.0)
        push(pop() / pop2);
      else
        printf("Error: Division by zero\n");
      break;
    case '\n':
      printf("\t%.g\n", pop());
      break;
    default:
      printf("Error: Unknown operation %s\n", s);
      break;
    }
  }
}
