#include #include #include #define MAX_RAZMER 100 /* * Структура, описывающая стек */ typedef struct { /* * Массив, хранящий элементы стека */ double chisla[MAX_RAZMER]; /* * Индекс, указывающий на верхушку стека */ int vershina; } StEk; /* * Функция, инициализирующая стек */ void inicStEk(StEk* stek) { stek->vershina = 0; } /* * Функция, проверяющая, является ли стек пустым */ int isEmpty(StEk* stek) { return stek->vershina == 0; } /* * Функция, проверяющая, является ли стек полным */ int isFull(StEk* stek) { return stek->vershina == MAX_RAZMER; } /* * Функция, добавляющая элемент в стек */ void push(StEk* stek, double chislo) { if(isFull(stek)) { printf("no input\n"); exit(1); } stek->chisla[stek->vershina] = chislo; stek->vershina++; } /* Функция, извлекающая элемент из стека */ double pop(StEk* stek) { if(isEmpty(stek)) { printf("no input\n"); exit(1); } return stek->chisla[--stek->vershina]; } int main() { StEk stek; inicStEk(&stek); char bufer[256]; while(fgets(bufer, sizeof(bufer), stdin)) { char* konec; double chislo = strtod(bufer, &konec); if(*konec == '\n') { push(&stek, chislo); } else if(strcmp(konec, "+\n") == 0) { if(isEmpty(&stek)) { printf("no input\n"); exit(1); } double b = pop(&stek); if(isEmpty(&stek)) { printf("no input\n"); exit(1); } double a = pop(&stek); push(&stek, a + b); } else if(strcmp(konec, "-\n") == 0) { if(isEmpty(&stek)) { printf("no input\n"); exit(1); } double b = pop(&stek); if(isEmpty(&stek)) { printf("no input\n"); exit(1); } double a = pop(&stek); push(&stek, a - b); } else if(strcmp(konec, "*\n") == 0) { if(isEmpty(&stek)) { printf("no input\n"); exit(1); } double b = pop(&stek); if(isEmpty(&stek)) { printf("no input\n"); exit(1); } double a = pop(&stek); push(&stek, a * b); } else if(strcmp(konec, "/\n") == 0) { if(isEmpty(&stek)) { printf("no input\n"); exit(1); } double b = pop(&stek); if(isEmpty(&stek)) { printf("no input\n"); exit(1); } double a = pop(&stek); push(&stek, a / b); } else { printf("no input\n"); exit(1); } for(int i = 0; i < stek.vershina; i++) { printf("%.2lf ", stek.chisla[i]); } printf("\n"); } return 0; }