diff --git a/cv8/program.c b/cv8/program.c new file mode 100644 index 0000000..30a7829 --- /dev/null +++ b/cv8/program.c @@ -0,0 +1,122 @@ +#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_tree(struct tree* root); + + +int main(){ + struct tree* root = NULL; + root = read_tree(); + + char resp[SIZE]; + memset(resp,0,SIZE); + get_input(resp); + if(strlen(resp)>1){ + printf("Expert z bufetu to vie."); + 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."); + + system_execute(root); + + getchar(); + printf("Koniec"); + + destroy_tree(root); + + return 0; +} + + +struct tree* read_tree(){ + char buffer[SIZE]; + memset(buffer,0,SIZE); + + int flag = get_input(buffer); + if(flag==-1){ + printf("Expert z bufetu to vie."); + puts("Chybna databaza"); + exit(0); + } + + struct tree* node = calloc(1,sizeof(struct tree)); + memcpy(node->question,buffer,SIZE); + 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{ + 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); +} \ No newline at end of file