Update cv3/program.c
This commit is contained in:
		
							parent
							
								
									86869ba7fd
								
							
						
					
					
						commit
						20600f7434
					
				| @ -1,81 +1,88 @@ | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| 
 | ||||
| #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; | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user