#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]; while (1) { printf("Zadajte číslo alebo operáciu (+, -, *, /): "); 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); 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 (mystack.size == 0) { printf("no input\n"); } return 0; }