usaa25/du6/program.c
2025-11-12 14:53:24 +01:00

107 lines
2.1 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct tree{
char value[256];
struct tree* left; //ano
struct tree* right; // nie
}Tree;
void trim(char *str){
size_t len = strlen(str);
if(len > 0 && (str[len -1] == '\n')){
str[len - 1] = '\0';
}
} //odstranenie konca riadku
Tree* read_tree() {
char buffer[256];
if(!fgets(buffer,256,stdin))return NULL;
if(strcmp(buffer, "\n") == 0 ) return NULL;
trim(buffer);
Tree* node = calloc(1, sizeof(Tree));
strcpy(node->value, buffer);
if(buffer[0] == '*'){
return node;
}
node->left = read_tree();
node->right = read_tree();
return node;
}
void destroy_tree(Tree* t){
if(!t) return;
destroy_tree(t->left);
destroy_tree(t->right);
free(t);
}
int count_leaves(Tree* t){
if(!t) return 0;
if(!t->left && !t->right) return 1;
return count_leaves(t->left) + count_leaves(t->right);
}
void run_system(Tree* t) {
if (!t) return;
// Ak ide o odpoveď (list)
if (t->value[0] == '*') {
printf("%s\n", t->value);
printf("Koniec\n");
return;
}
// Otázka
printf("%s\n", t->value);
char ans[10];
if (!fgets(ans, sizeof(ans), stdin)) {
printf("Koniec vstupu\n");
return;
}
trim(ans);
if (strcmp(ans, "a") == 0)
run_system(t->left);
else if (strcmp(ans, "n") == 0)
run_system(t->right);
else {
printf("Nerozumiem\n");
}
}
int main() {
Tree* root = read_tree();
if (!root) {
printf("Expert z bufetu to vie.\n");
printf("Chybna databaza\n");
return 0;
}
int count = count_leaves(root);
printf("Expert z bufetu to vie.\n");
printf("Pozna %d druhov ovocia a zeleniny.\n", count);
printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n");
// overenie prázdneho riadku medzi databázou a vstupom používateľa
char empty[256];
if (!fgets(empty, 256, stdin) || strcmp(empty, "\n") != 0) {
printf("Chyba: chýba prázdny riadok medzi databázou a vstupom.\n");
destroy_tree(root);
return 1;
}
run_system(root);
destroy_tree(root);
return 0;
}