#include #include #include #define SIZE 100 struct tree{ char question[SIZE]; 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(struct tree* root); int main(){ struct tree* root = NULL; root = read_tree(); getchar(); puts("Expert z bufetu to vie."); printf("Pozna %d druhov ovocia a zeleniny.\n",type_count(root)); puts("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost."); system_execute(root); getchar(); puts("Koniec"); destroy(root); free(buffer); return 0; } struct tree* read_tree(){ char buffer[SIZE]; memset(buffer,0,SIZE); int flag = get_input(buffer); if(flag==-1){ puts("Koniec vstupu"); exit(0); } struct tree* node = calloc(1,sizeof(struct tree)); memcpy(node->question,buffer,SIZE); // Ak je nacitany riadok listovy uzol ,tak netreba robit nic // inak rekurzivne nacitanie laveho syna // a rekurzivne nacitanie praveho syna if(node->question[0]!='*'){ node->left = read_tree(); node->right = read_tree(); } return node; } int get_input(char *string){ char* r = fgets(string,SIZE,stdin); if(r==NULL){ return -1;//EOF } 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(SIZE,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 if(strlen(resp)>1){ puts("Expert z bufetu to vie."); puts("Chybna databaza"); exit(0); }else{ puts("Nerozumiem"); exit(0); } } int type_count(struct tree* root){//https://www.youtube.com/watch?v=Uze4GgUj3Fs&feature=emb_logo 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(struct tree* root){ if (root == NULL){ return; } destroy(root->left); destroy(root->right); free(root); }