#include #include #include #include #define STACK_SIZE 10 float stack[STACK_SIZE]; int stack_top = -1; bool is_number(char *string) { char *end; strtof(string, &end); return end != string && (*end == '\n' || *end == '\0'); } 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) { if (operation == '+') { return n1 + n2; } else if (operation == '-') { return n1 - n2; } else if (operation == '*') { return n1 * n2; } else if (operation == '/') { if (n2 != 0) { return n1 / n2; } else { printf("Error: division by zero\n"); return 0; } } return 0; } void push(float number) { if (stack_top < STACK_SIZE - 1) { stack[++stack_top] = number; } else { printf("Error: stack overflow\n"); } } float pop() { if (stack_top >= 0) { return stack[stack_top--]; } else { printf("Error: stack is empty\n"); return 0; } } void print_stack() { for (int i = 0; i <= stack_top; i++) { if (i > 0) { printf(" "); } printf("%.2f", stack[i]); } printf(" "); // Пробел в конце каждой строки } int main() { char arr[50]; char *pend; stack_top = -1; while (fgets(arr, 50, stdin)) { if (arr[0] == '\n' || arr[0] == EOF) { break; } if (is_number(arr)) { float number = strtof(arr, &pend); push(number); print_stack(); // Печать стека после ввода числа printf("\n"); // Переход на новую строку после вывода } else if (is_operation(arr)) { if (stack_top < 1) { printf("no input\n"); return 0; } float n2 = pop(); float n1 = pop(); char operation = arr[0]; float result = calculator(n1, n2, operation); push(result); print_stack(); // Печать стека после выполнения операции printf("\n"); // Переход на новую строку после вывода } } if (stack_top == 0) { printf("%.2f \n", pop()); // Печать оставшегося элемента без дублирования printf("no input\n"); } else if (stack_top > 0) { // Если на стеке больше одного элемента, выводим сообщение "no input" printf("no input\n"); } return 0; }