#include #include #include #define SIZE 256 typedef struct Tree { char text[SIZE]; int isAnswer; struct Tree *yes; struct Tree *no; } Tree; Tree* readTree() { char line[SIZE]; if (!fgets(line, SIZE, stdin)) return NULL; line[strcspn(line, "\r\n")] = 0; Tree *node = malloc(sizeof(Tree)); node->yes = NULL; node->no = NULL; if (line[0] == '*') { node->isAnswer = 1; int i = 1; while (line[i] == ' ') i++; strcpy(node->text, line + i); } else { node->isAnswer = 0; strcpy(node->text, line); node->yes = readTree(); node->no = readTree(); } return node; } int count(Tree *n) { if (!n) return 0; if (n->isAnswer) return 1; return count(n->yes) + count(n->no); } void freeTree(Tree *n) { if (!n) return; freeTree(n->yes); freeTree(n->no); free(n); } void start(Tree *n) { char in[SIZE]; while (n && !n->isAnswer) { printf("%s\n", n->text); if (!fgets(in, SIZE, stdin)) return; int i = 0; while (in[i] == ' ' || in[i] == '\t' || in[i] == '\r') i++; if (in[i] == 'a') n = n->yes; else n = n->no; } if (n) { printf("*%s\n", n->text); printf("Koniec\n"); } } int main() { printf("Expert z bufetu to vie.\n"); Tree *root = readTree(); if (!root) { printf("Chyba nacitania\n"); return 0; } printf("Pozna %d druhov ovocia a zeleniny.\n", count(root)); printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); start(root); freeTree(root); return 0; }