From 20600f7434bbc0f6e1981f14ff35bc2a0b87145e Mon Sep 17 00:00:00 2001 From: Marat Izmailov Date: Mon, 21 Oct 2024 11:42:21 +0000 Subject: [PATCH] Update cv3/program.c --- cv3/program.c | 57 +++++++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/cv3/program.c b/cv3/program.c index d21f9cb..5441618 100644 --- a/cv3/program.c +++ b/cv3/program.c @@ -1,81 +1,88 @@ #include #include -#define STACK_SIZE 10 +#define STACK_SIZE 10 // Максимальный размер стека -double stack[STACK_SIZE]; -int top = 0; +double stack[STACK_SIZE]; // Массив для стека +int top = 0; // Индекс верхнего элемента стека +// Функция для вывода элементов стека void print_stack() { for (int i = 0; i < top; i++) { - printf("%.2f ", stack[i]); + printf("%.2f ", stack[i]); // Выводим значение с двумя знаками после запятой } printf("\n"); } +// Функция для добавления элемента в стек int push(double value) { if (top >= STACK_SIZE) { - printf("full stack\n"); + printf("full stack\n"); // Стек переполнен return 0; } - stack[top++] = value; - print_stack(); + stack[top++] = value; // Добавляем элемент в стек + print_stack(); // Выводим текущий стек return 1; } +// Функция для извлечения элемента из стека int pop(double *value) { if (top <= 0) { - printf("not enough operands\n"); + printf("not enough operands\n"); // Недостаточно операндов return 0; } - *value = stack[--top]; + *value = stack[--top]; // Извлекаем верхний элемент return 1; } +// Функция для применения операции к двум верхним элементам стека int apply_operation(char op) { double a, b; if (!pop(&b) || !pop(&a)) { - return 0; + return 0; // Если не удалось извлечь операнды, возвращаем 0 } - double result; + double result; // Переменная для хранения результата switch (op) { - case '+': result = a + b; break; - case '-': result = a - b; break; - case '*': result = a * b; break; + case '+': result = a + b; break; // Сложение + case '-': result = a - b; break; // Вычитание + case '*': result = a * b; break; // Умножение case '/': if (b == 0) { - printf("division by zero\n"); + printf("division by zero\n"); // Деление на ноль return 0; } - result = a / b; + result = a / b; // Деление break; default: - printf("bad input\n"); + printf("bad input\n"); // Некорректный ввод операции return 0; } - return push(result); + return push(result); // Добавляем результат в стек } +// Главная функция int main() { - char input[100]; + char input[100]; // Буфер для ввода - while (scanf("%s", input) == 1) { + while (scanf("%s", input) == 1) { // Чтение ввода char *end; - double value = strtod(input, &end); + double value = strtod(input, &end); // Преобразование строки в число + // Если вся строка была преобразована в число if (*end == '\0') { - if (!push(value)) return 0; + if (!push(value)) return 0; // Добавляем значение в стек } else if (input[1] == '\0' && strchr("+-*/", input[0])) { - if (!apply_operation(input[0])) return 0; + // Если это одна из операций + if (!apply_operation(input[0])) return 0; // Применяем операцию } else { - printf("bad input\n"); + printf("bad input\n"); // Некорректный ввод return 0; } } - printf("no input\n"); + printf("no input\n"); // Если нет ввода return 0; }