#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"); } // Функция для обработки операции void process_operation(struct stack* s, const char* operation) { float b = pop_stack(s); float a = pop_stack(s); if (strcmp(operation, "+") == 0) { push_stack(s, a + b); } else if (strcmp(operation, "-") == 0) { push_stack(s, a - b); } else if (strcmp(operation, "*") == 0) { push_stack(s, a * b); } else if (strcmp(operation, "/") == 0) { if (b == 0) { printf("Chyba: Delenie nulou.\n"); exit(1); // Завершаем программу при делении на ноль } push_stack(s, a / b); } } int main() { struct stack mystack; init_stack(&mystack); char input[256]; int has_input = 0; // Переменная для отслеживания ввода printf("Poľská kalkulačka\n"); 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); has_input = 1; // Указываем, что был ввод print_stack(&mystack); continue; } // Если это не число, проверяем на операции if (strcmp(input, "+") == 0 || strcmp(input, "-") == 0 || strcmp(input, "*") == 0 || strcmp(input, "/") == 0) { if (mystack.size < 2) { printf("Chyba: Nedostatok hodnôt v zásobníku.\n"); break; } process_operation(&mystack, input); print_stack(&mystack); } else { printf("Chyba: Neplatný vstup.\n"); break; } } // Если не было введено ни одного значения, выводим сообщение if (has_input) { printf("no input\n"); } else { printf("no input\n"); } return 0; }