Update cv3/program.c
This commit is contained in:
		
							parent
							
								
									a33a137dee
								
							
						
					
					
						commit
						4dd11b3bae
					
				| @ -5,40 +5,40 @@ | |||||||
| 
 | 
 | ||||||
| #define STACK_SIZE 10 | #define STACK_SIZE 10 | ||||||
| 
 | 
 | ||||||
| // Структура стека
 | 
 | ||||||
| struct stack { | struct stack { | ||||||
|     float values[STACK_SIZE]; |     float values[STACK_SIZE]; | ||||||
|     int size; |     int size; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| // Функция для инициализации стека
 | 
 | ||||||
| void init_stack(struct stack* s) { | void init_stack(struct stack* s) { | ||||||
|     memset(s, 0, sizeof(struct stack)); |     memset(s, 0, sizeof(struct stack)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Функция для добавления значения в стек
 | 
 | ||||||
| void push_stack(struct stack* s, float value) { | void push_stack(struct stack* s, float value) { | ||||||
|     assert(s->size < STACK_SIZE); // Проверка переполнения стека
 |     assert(s->size < STACK_SIZE);  | ||||||
|     s->values[s->size] = value; |     s->values[s->size] = value; | ||||||
|     s->size += 1; |     s->size += 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Функция для извлечения значения из стека
 | 
 | ||||||
| float pop_stack(struct stack* s) { | float pop_stack(struct stack* s) { | ||||||
|     assert(s->size > 0); // Проверка на наличие элементов в стеке
 |     assert(s->size > 0);  | ||||||
|     s->size -= 1; |     s->size -= 1; | ||||||
|     return s->values[s->size]; |     return s->values[s->size]; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // Функция для вывода содержимого стека
 | 
 | ||||||
| void print_stack(struct stack* s) { | void print_stack(struct stack* s) { | ||||||
|     for (int i = 0; i < s->size; i++) { |     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) { | void process_operation(struct stack* s, const char* operation) { | ||||||
|     float b = pop_stack(s); |     float b = pop_stack(s); | ||||||
|     float a = 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) { |     } else if (strcmp(operation, "/") == 0) { | ||||||
|         if (b == 0) { |         if (b == 0) { | ||||||
|             printf("Chyba: Delenie nulou.\n"); |             printf("Chyba: Delenie nulou.\n"); | ||||||
|             exit(1); // Завершаем программу при делении на ноль
 |             exit(1);  | ||||||
|         } |         } | ||||||
|         push_stack(s, a / b); |         push_stack(s, a / b); | ||||||
|     } |     } | ||||||
| @ -62,30 +62,30 @@ int main() { | |||||||
|     init_stack(&mystack);  |     init_stack(&mystack);  | ||||||
| 
 | 
 | ||||||
|     char input[256]; |     char input[256]; | ||||||
|     int has_input = 0; // Переменная для отслеживания ввода
 |     int has_input = 0;  | ||||||
| 
 | 
 | ||||||
|     printf("Poľská kalkulačka\n"); |     printf("Poľská kalkulačka\n"); | ||||||
|     while (1) { |     while (1) { | ||||||
|         // Считывание ввода
 |          | ||||||
|         printf("Zadajte číslo alebo operáciu (+, -, *, /): "); |         printf("Zadajte číslo alebo operáciu (+, -, *, /): "); | ||||||
|         if (!fgets(input, sizeof(input), stdin)) { |         if (!fgets(input, sizeof(input), stdin)) { | ||||||
|             break; // Выход при ошибке ввода
 |             break;  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // Удаляем символ новой строки, если он есть
 |          | ||||||
|         input[strcspn(input, "\n")] = 0; |         input[strcspn(input, "\n")] = 0; | ||||||
| 
 | 
 | ||||||
|         // Проверка, является ли ввод числом
 |          | ||||||
|         char* endptr; |         char* endptr; | ||||||
|         float value = strtof(input, &endptr); |         float value = strtof(input, &endptr); | ||||||
|         if (endptr != input) { // Если это число
 |         if (endptr != input) {  | ||||||
|             push_stack(&mystack, value); |             push_stack(&mystack, value); | ||||||
|             has_input = 1; // Указываем, что был ввод
 |             has_input = 1;  | ||||||
|             print_stack(&mystack); |             print_stack(&mystack); | ||||||
|             continue;  |             continue;  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // Если это не число, проверяем на операции
 |          | ||||||
|         if (strcmp(input, "+") == 0 || strcmp(input, "-") == 0 ||  |         if (strcmp(input, "+") == 0 || strcmp(input, "-") == 0 ||  | ||||||
|             strcmp(input, "*") == 0 || strcmp(input, "/") == 0) { |             strcmp(input, "*") == 0 || strcmp(input, "/") == 0) { | ||||||
|             if (mystack.size < 2) { |             if (mystack.size < 2) { | ||||||
| @ -100,7 +100,7 @@ int main() { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // Если не было введено ни одного значения, выводим сообщение
 |     | ||||||
|     if (has_input) { |     if (has_input) { | ||||||
|         printf("no input\n"); |         printf("no input\n"); | ||||||
|     } else { |     } else { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user