From 3e37cc7666353ee9224dffcaf0049a12d307735f Mon Sep 17 00:00:00 2001 From: Deinerovych Date: Fri, 8 Nov 2024 11:05:41 +0100 Subject: [PATCH] 42 --- cv7/program.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/cv7/program.c b/cv7/program.c index 139de9b..b7a088b 100644 --- a/cv7/program.c +++ b/cv7/program.c @@ -10,6 +10,7 @@ typedef struct Node { struct Node *no; } Node; +// Создает новый узел с заданным текстом Node* create_node(const char* text) { Node *node = (Node*)malloc(sizeof(Node)); if (!node) { @@ -22,28 +23,31 @@ Node* create_node(const char* text) { return node; } +// Создает заранее заданное дерево знаний Node* build_knowledge_tree() { // Создаем корневой узел Node *root = create_node("Rastie to na strome?"); - // Создаем дочерние узлы для ответа "да" и "нет" + // Добавляем варианты ответов root->yes = create_node("Jablko"); root->no = create_node("Rastie to pod zemou?"); - // Создаем узлы для поддерева "Rastie to pod zemou?" + // Узлы для "Rastie to pod zemou?" root->no->yes = create_node("Mrkva"); root->no->no = create_node("Šalát"); return root; } +// Подсчитывает количество листовых узлов (продуктов) 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, FILE *input) { +// Запускает экспертную систему +void run_expert_system(Node *node) { while (node) { if (!node->yes && !node->no) { printf("*%s\n", node->text); @@ -55,7 +59,7 @@ void run_expert_system(Node *node, FILE *input) { printf("%s\n", node->text); char answer; - if (fscanf(input, " %c", &answer) != 1) { + if (scanf(" %c", &answer) != 1) { printf("Koniec\n"); return; } @@ -71,6 +75,7 @@ void run_expert_system(Node *node, FILE *input) { } } +// Освобождает выделенную память для дерева void free_tree(Node *node) { if (node) { free_tree(node->yes); @@ -80,6 +85,7 @@ void free_tree(Node *node) { } int main() { + // Создаем дерево знаний вручную Node *root = build_knowledge_tree(); if (!root) { @@ -91,7 +97,7 @@ int main() { int product_count = count_products(root); printf("Pozna %d druhov ovocia a zeleniny.\n", product_count); - run_expert_system(root, stdin); // Используем стандартный ввод для ответов + run_expert_system(root); free_tree(root); return 0;