From 23fd7ac3c31f62344c3081a91aa7b564f4168d66 Mon Sep 17 00:00:00 2001 From: Deinerovych Date: Wed, 16 Oct 2024 10:01:39 +0200 Subject: [PATCH] 2 --- cv3/program.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/cv3/program.c b/cv3/program.c index fd0b02c..4a11359 100644 --- a/cv3/program.c +++ b/cv3/program.c @@ -13,8 +13,9 @@ bool is_number(char *string) { strtof(string, &end); return end != string && *end == '\0'; } -bool is_operation(char c) { - return c == '+' || c == '-' || c == '*' || c == '/'; + +bool is_operation(char *string) { + return strlen(string) == 2 && (string[0] == '+' || string[0] == '-' || string[0] == '*' || string[0] == '/'); } float calculator(float n1, float n2, char operation) { @@ -31,25 +32,27 @@ float calculator(float n1, float n2, char operation) { if (n2 != 0) { return n1 / n2; } else { - printf("Ошибка: деление на ноль\n"); + printf("Error: division by zero\n"); exit(1); } } return 0; } + void push(float number) { if (stack_top < STACK_SIZE - 1) { stack[++stack_top] = number; } else { - printf("Ошибка: стек переполнен\n"); + printf("Error: stack overflow\n"); exit(1); } } + float pop() { if (stack_top >= 0) { return stack[stack_top--]; } else { - printf("Ошибка: стек пуст\n"); + printf("Error: stack is empty\n"); exit(1); } } @@ -63,32 +66,35 @@ int main() { if (arr[0] == '\n' || arr[0] == EOF) { break; } + if (is_number(arr)) { float number = strtof(arr, &pend); push(number); + printf("Number added: %.2f\n", number); } - else if (is_operation(arr[0])) { + else if (is_operation(arr)) { if (stack_top < 1) { - printf("Ошибка: недостаточно чисел в стеке для операции\n"); + printf("Error: not enough numbers in the stack for operation\n"); return 1; } + float n2 = pop(); float n1 = pop(); char operation = arr[0]; float result = calculator(n1, n2, operation); push(result); + printf("Operation result: %.2f\n", result); } else { - printf("Ошибка: некорректный ввод\n"); + printf("Error: invalid input\n"); return 1; } } - // Вывод результата if (stack_top == 0) { - printf("Результат: %.2f\n", pop()); + printf("Final result: %.2f\n", pop()); } else { - printf("Ошибка: стек содержит более одного числа после операций\n"); + printf("Error: stack contains more than one number after operations\n"); } return 0;