#include #include #include #define MAX_LINE_LENGTH 100 // Структура для вузла дерева typedef struct Node { char *question; // Питання char *answer; // Відповідь (товар) struct Node *yes; // Далі по "так" struct Node *no; // Далі по "ні" } Node; // Функція для створення нового вузла Node* create_node(char *question, char *answer) { Node *node = (Node*)malloc(sizeof(Node)); node->question = question; node->answer = answer; node->yes = NULL; node->no = NULL; return node; } // Функція для зчитування дерева з файлу Node* build_tree(FILE *file) { char line[MAX_LINE_LENGTH]; if (fgets(line, sizeof(line), file) == NULL) return NULL; // Видалити пробіли та символи нового рядка в кінці line[strcspn(line, "\n")] = 0; if (line[0] == '*') { // Це відповідь return create_node(NULL, strdup(line + 1)); // Пропускаємо зірочку } else { // Це питання Node *node = create_node(strdup(line), NULL); node->yes = build_tree(file); // Рекурсія для 'так' node->no = build_tree(file); // Рекурсія для 'ні' return node; } } // Функція для підрахунку кількості товарів (листків дерева) int count_items(Node *node) { if (node == NULL) return 0; if (node->answer != NULL) return 1; // Листок дерева return count_items(node->yes) + count_items(node->no); } // Функція для взаємодії з користувачем void ask_questions(Node *node) { while (node != NULL) { if (node->answer != NULL) { // Якщо це відповідь printf("Expert z bufetu to vie.\n"); printf("Pozna %d druhov ovocia a zeleniny.\n", count_items(node)); printf("Koniec\n"); return; } printf("%s\n", node->question); printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); char response; scanf(" %c", &response); // Читання відповіді if (response == 'a') { node = node->yes; } else if (response == 'n') { node = node->no; } else { printf("Nespravny vstup. Koniec.\n"); return; } } } int main() { FILE *file = fopen("data.txt", "r"); if (file == NULL) { printf("Помилка при зчитуванні файлу.\n"); return 1; } Node *tree = build_tree(file); fclose(file); if (tree == NULL) { printf("Помилка в структурі файлу.\n"); return 1; } printf("Expert z bufetu to vie.\n"); printf("Pozna %d druhov ovocia a zeleniny.\n", count_items(tree)); ask_questions(tree); return 0; }