#include #include #include #define LINESIZE 50 struct tree{ char question[LINESIZE]; struct tree* left; struct tree* right; }; struct tree* read_tree(); void system_execute(struct tree* root); int get_input(char *string); int type_count(struct tree* root); void destroy_tree(struct tree* root); int main(){ struct tree* root = NULL; root = read_tree(); char resp[LINESIZE]; memset(resp,0,LINESIZE); get_input(resp); if(strlen(resp)>1){ printf("Expert z bufetu to vie.\n"); puts("Chybna databaza"); exit(0); } puts("Expert z bufetu to vie."); printf("Pozna %d druhov ovocia a zeleniny.\n",type_count(root)); printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); system_execute(root); getchar(); printf("Koniec\n"); destroy_tree(root); return 0; } struct tree* read_tree(){ char buffer[LINESIZE]; memset(buffer,0,LINESIZE); int flag = get_input(buffer); if(flag==-1){ printf("Expert z bufetu to vie.\n"); puts("Chybna databaza"); exit(0); } struct tree* node = calloc(1,sizeof(struct tree)); memcpy(node->question,buffer,LINESIZE); if(node->question[0]!='*'){ node->left = read_tree(); node->right = read_tree(); } return node; } int get_input(char *string){ char* r = fgets(string,LINESIZE,stdin); if(r==NULL){ return -1; } string[strlen(string)-1]='\0'; return 1; } void system_execute(struct tree* root){ if(root==NULL){ return; } printf("%s\n",root->question); if(root->question[0]=='*'){ return; } char *resp = calloc(LINESIZE,sizeof(char)); int flag = get_input(resp); if(flag==-1){ puts("Koniec vstupu"); exit(0); } if(resp[0]=='a'){ system_execute(root->left); }else if(resp[0]=='n'){ system_execute(root->right); }else{ puts("Nerozumiem"); exit(0); } } int type_count(struct tree* root){ if(root==NULL){ return 0; } if(root->question[0]=='*'){ return 1; } int count= type_count(root->left)+type_count(root->right); return count; } void destroy_tree(struct tree* root){ if (root == NULL){ return; } destroy_tree(root->left); destroy_tree(root->right); free(root); }