Update cv3/program.c
This commit is contained in:
		
							parent
							
								
									f53d8562dc
								
							
						
					
					
						commit
						4cbd8c399f
					
				@ -5,32 +5,32 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#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]);
 | 
				
			||||||
@ -43,25 +43,27 @@ int main() {
 | 
				
			|||||||
    init_stack(&mystack);
 | 
					    init_stack(&mystack);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    char input[256];
 | 
					    char input[256];
 | 
				
			||||||
 | 
					    int has_input = 0; 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (1) {
 | 
					    while (1) {
 | 
				
			||||||
        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; 
 | 
				
			||||||
            print_stack(&mystack);
 | 
					            print_stack(&mystack);
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Если это не число, проверяем на операции
 | 
					        
 | 
				
			||||||
        if (strcmp(input, "+") == 0) {
 | 
					        if (strcmp(input, "+") == 0) {
 | 
				
			||||||
            if (mystack.size < 2) {
 | 
					            if (mystack.size < 2) {
 | 
				
			||||||
                printf("Chyba: Nedostatok hodnôt v zásobníku.\n");
 | 
					                printf("Chyba: Nedostatok hodnôt v zásobníku.\n");
 | 
				
			||||||
@ -108,8 +110,8 @@ int main() {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Если не было введено ни одного значения, выводим сообщение
 | 
					    
 | 
				
			||||||
    if (mystack.size == 0) {
 | 
					    if (!has_input) {
 | 
				
			||||||
        printf("no input\n");
 | 
					        printf("no input\n");
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user