#include #include #include #include #define STACK_SIZE 10 struct stack { float values[STACK_SIZE]; int size; }; void init_stack(struct stack* s) { memset(s, 0, sizeof(struct stack)); } void push_stack(struct stack* s, float value) { assert(s->size < STACK_SIZE); s->values[s->size] = value; s->size += 1; } float pop_stack(struct stack* s) { assert(s->size > 0); s->size -= 1; return s->values[s->size]; } void print_stack(struct stack* s) { for (int i = 0; i < s->size; i++) { printf("%.2f ", s->values[i]); } printf("\n"); } int main() { struct stack mystack; init_stack(&mystack); char input[256]; int has_input = 0; while (1) { if (!fgets(input, sizeof(input), stdin)) { break; } input[strcspn(input, "\n")] = 0; char* endptr; float value = strtof(input, &endptr); if (endptr != input) { push_stack(&mystack, value); has_input = 1; print_stack(&mystack); continue; } if (strcmp(input, "+") == 0) { if (mystack.size < 2) { printf("Chyba: Nedostatok hodnôt v zásobníku.\n"); break; } float b = pop_stack(&mystack); float a = pop_stack(&mystack); push_stack(&mystack, a + b); print_stack(&mystack); } else if (strcmp(input, "-") == 0) { if (mystack.size < 2) { printf("Chyba: Nedostatok hodnôt v zásobníku.\n"); break; } float b = pop_stack(&mystack); float a = pop_stack(&mystack); push_stack(&mystack, a - b); print_stack(&mystack); } else if (strcmp(input, "*") == 0) { if (mystack.size < 2) { printf("Chyba: Nedostatok hodnôt v zásobníku.\n"); break; } float b = pop_stack(&mystack); float a = pop_stack(&mystack); push_stack(&mystack, a * b); print_stack(&mystack); } else if (strcmp(input, "/") == 0) { if (mystack.size < 2) { printf("Chyba: Nedostatok hodnôt v zásobníku.\n"); break; } float b = pop_stack(&mystack); float a = pop_stack(&mystack); if (b == 0) { printf("Chyba: Delenie nulou.\n"); break; } push_stack(&mystack, a / b); print_stack(&mystack); } else { printf("Chyba: Neplatný vstup.\n"); break; } } if (!has_input) { printf("no input\n"); } return 0; }