#include #include #include #include typedef struct tree{ char value[256]; struct tree* left; //ano struct tree* right; // nie }Tree; void trim(char *str){ size_t len = strlen(str); if(len > 0 && (str[len -1] == '\n')){ str[len - 1] = '\0'; } } //odstranenie konca riadku Tree* read_tree() { char buffer[256]; if(!fgets(buffer,256,stdin))return NULL; if(strcmp(buffer, "\n") == 0 ) return NULL; trim(buffer); Tree* node = calloc(1, sizeof(Tree)); strcpy(node->value, buffer); if(buffer[0] == '*'){ return node; } node->left = read_tree(); node->right = read_tree(); return node; } void destroy_tree(Tree* t){ if(!t) return; destroy_tree(t->left); destroy_tree(t->right); free(t); } int count_leaves(Tree* t){ if(!t) return 0; if(!t->left && !t->right) return 1; return count_leaves(t->left) + count_leaves(t->right); } void run_system(Tree* t) { if (!t) return; // Ak ide o odpoveď (list) if (t->value[0] == '*') { printf("%s\n", t->value); printf("Koniec\n"); return; } // Otázka printf("%s\n", t->value); char ans[10]; if (!fgets(ans, sizeof(ans), stdin)) { printf("Chyba vstupu.\n"); return; } trim(ans); if (strcmp(ans, "a") == 0) run_system(t->left); else if (strcmp(ans, "n") == 0) run_system(t->right); else { printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); } } int main() { Tree* root = read_tree(); if (!root) { printf("Chyba: nepodarilo sa načítať bázu pravidiel.\n"); return 1; } int count = count_leaves(root); printf("Expert z bufetu to vie.\n"); printf("Pozna %d druhov ovocia a zeleniny.\n", count); printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); // overenie prázdneho riadku medzi databázou a vstupom používateľa char empty[256]; if (!fgets(empty, 256, stdin) || strcmp(empty, "\n") != 0) { printf("Chyba: chýba prázdny riadok medzi databázou a vstupom.\n"); destroy_tree(root); return 1; } run_system(root); destroy_tree(root); return 0; }