prvy
This commit is contained in:
parent
b122d16c44
commit
b2378dd997
122
cv8/program.c
Normal file
122
cv8/program.c
Normal file
@ -0,0 +1,122 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<string.h>
|
||||
#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);
|
||||
}
|
Loading…
Reference in New Issue
Block a user