#include #include #define STACK_SIZE 10 // Максимальный размер стека double stack[STACK_SIZE]; // Массив для стека int top = 0; // Индекс верхнего элемента стека // Функция для вывода элементов стека void print_stack() { for (int i = 0; i < top; i++) { printf("%.2f ", stack[i]); // Выводим значение с двумя знаками после запятой } printf("\n"); } // Функция для добавления элемента в стек int push(double value) { if (top >= STACK_SIZE) { printf("full stack\n"); // Стек переполнен return 0; } stack[top++] = value; // Добавляем элемент в стек print_stack(); // Выводим текущий стек return 1; } // Функция для извлечения элемента из стека int pop(double *value) { if (top <= 0) { printf("not enough operands\n"); // Недостаточно операндов return 0; } *value = stack[--top]; // Извлекаем верхний элемент return 1; } // Функция для применения операции к двум верхним элементам стека int apply_operation(char op) { double a, b; if (!pop(&b) || !pop(&a)) { return 0; // Если не удалось извлечь операнды, возвращаем 0 } double result; // Переменная для хранения результата switch (op) { case '+': result = a + b; break; // Сложение case '-': result = a - b; break; // Вычитание case '*': result = a * b; break; // Умножение case '/': if (b == 0) { printf("division by zero\n"); // Деление на ноль return 0; } result = a / b; // Деление break; default: printf("bad input\n"); // Некорректный ввод операции return 0; } return push(result); // Добавляем результат в стек } // Главная функция int main() { char input[100]; // Буфер для ввода while (scanf("%s", input) == 1) { // Чтение ввода char *end; double value = strtod(input, &end); // Преобразование строки в число // Если вся строка была преобразована в число if (*end == '\0') { if (!push(value)) return 0; // Добавляем значение в стек } else if (input[1] == '\0' && strchr("+-*/", input[0])) { // Если это одна из операций if (!apply_operation(input[0])) return 0; // Применяем операцию } else { printf("bad input\n"); // Некорректный ввод return 0; } } printf("no input\n"); // Если нет ввода return 0; }