#include #include #include typedef struct Node { char *text; struct Node *yes; struct Node *no; } Node; Node* vytvor_uzol(char *text) { Node *uzol = (Node*)malloc(sizeof(Node)); uzol->text = strdup(text); uzol->yes = NULL; uzol->no = NULL; return uzol; } void uvolni(Node *uzol) { if (uzol) { free(uzol->text); uvolni(uzol->yes); uvolni(uzol->no); free(uzol); } } int spocitaj_druhy(Node *uzol) { if (!uzol) return 0; if (!uzol->yes && !uzol->no) return 1; // Это лист, т.е. ответ return spocitaj_druhy(uzol->yes) + spocitaj_druhy(uzol->no); } void znalostny_system(Node *uzol) { char odpoved; while (uzol) { if (!uzol->yes && !uzol->no) { printf("Expert z bufetu to vie: %s\n", uzol->text); break; } printf("%s (a/n): ", uzol->text); scanf(" %c", &odpoved); if (odpoved == 'a') { uzol = uzol->yes; } else if (odpoved == 'n') { uzol = uzol->no; } else { printf("Nespravny vstup, program konci.\n"); break; } } } int main() { // Создаем дерево вопросов и ответов вручную Node *root = vytvor_uzol("Je to ovocie alebo zelenina?"); root->yes = vytvor_uzol("*Jablko"); root->no = vytvor_uzol("Rastie to pod zemou?"); root->no->yes = vytvor_uzol("*Mrkva"); root->no->no = vytvor_uzol("*Šalát"); // Подсчитываем количество видов int druhy = spocitaj_druhy(root); printf("Expert z bufetu to vie.\nPozna %d druhov ovocia a zeleniny.\n", druhy); // Выводим инструкцию для пользователя printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); // Запускаем систему вопросов и ответов znalostny_system(root); // Освобождаем память uvolni(root); return 0; }