This commit is contained in:
Deinerovych 2024-11-08 11:05:41 +01:00
parent 48311a443e
commit 3e37cc7666

View File

@ -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;