From 4dd11b3bae56672b2b20014c895ad2a4221f39a8 Mon Sep 17 00:00:00 2001 From: Marat Izmailov Date: Thu, 17 Oct 2024 12:02:05 +0000 Subject: [PATCH] Update cv3/program.c --- cv3/program.c | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/cv3/program.c b/cv3/program.c index 8434c3d..6d023d1 100644 --- a/cv3/program.c +++ b/cv3/program.c @@ -5,40 +5,40 @@ #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); // Проверка переполнения стека + assert(s->size < STACK_SIZE); s->values[s->size] = value; s->size += 1; } -// Функция для извлечения значения из стека + float pop_stack(struct stack* s) { - assert(s->size > 0); // Проверка на наличие элементов в стеке + 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("%.2f ", s->values[i]); } - printf("\n"); + printf("\n"); } -// Функция для обработки операции + void process_operation(struct stack* s, const char* operation) { float b = pop_stack(s); float a = pop_stack(s); @@ -51,7 +51,7 @@ void process_operation(struct stack* s, const char* operation) { } else if (strcmp(operation, "/") == 0) { if (b == 0) { printf("Chyba: Delenie nulou.\n"); - exit(1); // Завершаем программу при делении на ноль + exit(1); } push_stack(s, a / b); } @@ -59,48 +59,48 @@ void process_operation(struct stack* s, const char* operation) { int main() { struct stack mystack; - init_stack(&mystack); + init_stack(&mystack); char input[256]; - int has_input = 0; // Переменная для отслеживания ввода + 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; // Выход при ошибке ввода + break; } - // Удаляем символ новой строки, если он есть + input[strcspn(input, "\n")] = 0; - // Проверка, является ли ввод числом + char* endptr; float value = strtof(input, &endptr); - if (endptr != input) { // Если это число + if (endptr != input) { push_stack(&mystack, value); - has_input = 1; // Указываем, что был ввод + has_input = 1; print_stack(&mystack); - continue; + 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; + break; } process_operation(&mystack, input); print_stack(&mystack); } else { printf("Chyba: Neplatný vstup.\n"); - break; + break; } } - // Если не было введено ни одного значения, выводим сообщение + if (has_input) { printf("no input\n"); } else {