#include #include #include #include #include #define SIZE 256 struct tree { char value[SIZE]; struct tree* left; struct tree* right; }; void trim_whitespace(char* str) { int i=strlen(str)-1; while (i>=0 && isspace(str[i])) { str[i]='\0'; i--; } } struct tree* read_tree() { char buffer[SIZE]; if (fgets(buffer, SIZE, stdin)==NULL) { return NULL; } if (buffer[0]=='\n') { return NULL; } trim_whitespace(buffer); struct tree* node=(struct tree*)calloc(1, sizeof(struct tree)); strcpy(node->value, buffer); if (buffer[0]!='*') { node->left=read_tree(); node->right=read_tree(); } return node; } void destroy_tree(struct tree* tree) { if (tree==NULL) { return; } destroy_tree(tree->left); destroy_tree(tree->right); free(tree); } int count_answers(struct tree* tree) { if (tree==NULL) { return 0; } if (tree->value[0]=='*') { return 1; } return count_answers(tree->left)+count_answers(tree->right); } void run_knowledge_system(struct tree* node) { if (node==NULL) { return; } if (node->value[0]=='*') { printf("%s\n", node->value); } else { printf("%s\n", node->value); } if (node->value[0]=='*') { return; } if (node->left!=NULL || node->right!=NULL) { char answer[10]; if (fgets(answer, sizeof(answer), stdin)==NULL) { printf("Koniec\n"); return; } if (answer[0]=='a') { run_knowledge_system(node->left); } else if (answer[0]=='n') { run_knowledge_system(node->right); } else { printf("Nespravny vstup.\n"); return; } } } int main() { struct tree* knowledge_base=read_tree(); char empty_line[SIZE]; if (fgets(empty_line, SIZE, stdin)==NULL || empty_line[0]!='\n') { printf("Nespravna baza pravidiel.\n"); if (knowledge_base!=NULL) { destroy_tree(knowledge_base); } return 1; } if (knowledge_base==NULL) { printf("Nespravna baza pravidiel.\n"); return 1; } int answer_count=count_answers(knowledge_base); printf("Expert_x_bufetu_to_vie.\n"); printf("Pozna_%d_druhov_ovocia_a_zeleniny.\n", answer_count); printf("Odpovedajte_'a'_pre_prvu_moznost_alebo_'n'_pre_druhu_moznost.\n"); run_knowledge_system(knowledge_base); destroy_tree(knowledge_base); return 0; }