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