#include #include #include typedef struct Node { char *content; struct Node *yes; struct Node *no; } Node; Node* create_node(const char *content) { Node *new_node = (Node*)malloc(sizeof(Node)); new_node->content = strdup(content); new_node->yes = NULL; new_node->no = NULL; return new_node; } void free_tree(Node *root) { if (root) { free(root->content); free_tree(root->yes); free_tree(root->no); free(root); } } int count_answers(Node *root) { if (!root) return 0; if (root->yes == NULL && root->no == NULL) return 1; return count_answers(root->yes) + count_answers(root->no); } Node* parse_rules() { char line[256]; Node *root = NULL, *current = NULL; Node *stack[100]; int stack_top = -1; while (fgets(line, sizeof(line), stdin)) { line[strcspn(line, "\n")] = 0; if (strlen(line) == 0) break; if (line[0] == '*') { Node *answer = create_node(line + 1); if (stack_top >= 0) { if (stack[stack_top]->yes == NULL) stack[stack_top]->yes = answer; else stack[stack_top]->no = answer; } } else { Node *question = create_node(line); if (stack_top >= 0) { if (stack[stack_top]->yes == NULL) stack[stack_top]->yes = question; else stack[stack_top]->no = question; } stack[++stack_top] = question; } } if (stack_top >= 0) { root = stack[0]; } return root; } void ask_question(Node *node) { if (!node) return; if (node->yes == NULL && node->no == NULL) { printf("* %s\n", node->content); printf("Koniec\n"); return; } printf("%s\n", node->content); char response; while (1) { response = getchar(); getchar(); // Capture newline if (response == 'a' && node->yes) { ask_question(node->yes); break; } else if (response == 'n' && node->no) { ask_question(node->no); break; } else { printf("Nerozumiem\n"); } } } int main() { printf("Expert z bufetu to vie.\n"); Node *root = parse_rules(); if (!root) { printf("Chybne pravidla.\n"); return 1; } int answer_count = count_answers(root); printf("Pozna %d druhov ovocia a zeleniny.\n", answer_count); printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); if (root) { ask_question(root); } free_tree(root); return 0; }