From b4ac3693a8ae55a16befcbe55fdb7d4cae545e3d Mon Sep 17 00:00:00 2001 From: Deinerovych Date: Wed, 6 Nov 2024 12:06:15 +0100 Subject: [PATCH] 21 --- cv7/program.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/cv7/program.c b/cv7/program.c index a024de4..d5c82a0 100644 --- a/cv7/program.c +++ b/cv7/program.c @@ -29,61 +29,55 @@ Node* parse_knowledge_base(FILE *file) { return NULL; } - line[strcspn(line, "\n")] = 0; + line[strcspn(line, "\n")] = 0; // Убираем символ новой строки if (line[0] == '*') { - return create_node(line + 1); + return create_node(line + 1); // Создаем узел-ответ, пропуская '*' } else { Node *node = create_node(line); - node->yes = parse_knowledge_base(file); - node->no = parse_knowledge_base(file); + node->yes = parse_knowledge_base(file); // Рекурсивно читаем ответ "да" + node->no = parse_knowledge_base(file); // Рекурсивно читаем ответ "нет" return node; } } int count_products(Node *node) { if (!node) return 0; - if (!node->yes && !node->no) return 1; + if (!node->yes && !node->no) return 1; // Если узел - лист (ответ) return count_products(node->yes) + count_products(node->no); } void run_expert_system(Node *node) { while (node) { - // Проверяем, достигли ли листового узла, и выводим результат + // Если достигли конечного узла (ответа), выводим ответ и завершаем работу if (!node->yes && !node->no) { printf("*%s\n", node->text); printf("Koniec\n"); return; } - // Выводим приглашение для ответа перед каждым вопросом + // Выводим приглашение для ввода printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); - - // Выводим текущий вопрос printf("%s\n", node->text); char answer; if (scanf(" %c", &answer) != 1) { - // Если нет корректного ввода, завершаем - printf("Koniec\n"); + printf("Koniec\n"); // Некорректный ввод return; } - // Переход к узлу "да" или "нет" + // Переходим к узлу "да" или "нет" if (answer == 'a') { node = node->yes; } else if (answer == 'n') { node = node->no; } else { - // Если введен некорректный ответ, завершаем - printf("Koniec\n"); + printf("Koniec\n"); // Некорректный ответ return; } } } - - void free_tree(Node *node) { if (node) { free_tree(node->yes); @@ -123,7 +117,7 @@ int main() { return 1; } - printf("Expert z bufetu to vie.\n"); // Выводим сообщение перед подсчетом + printf("Expert z bufetu to vie.\n"); int product_count = count_products(root); printf("Pozna %d druhov ovocia a zeleniny.\n", product_count);