#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' && *bufer != '\n' && *bufer != ' ') { 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; }