#include #include #include typedef struct Node { char text[256]; int is_leaf; struct Node* left; struct Node* right; } Node; Node* parse_tree(int* count, int* err) { if (*err) return NULL; char buffer[256]; if (!fgets(buffer, sizeof(buffer), stdin)) { *err = 1; return NULL; } buffer[strcspn(buffer, "\r\n")] = '\0'; if (strlen(buffer) == 0) { *err = 1; return NULL; } Node* node = (Node*)malloc(sizeof(Node)); if (!node) { *err = 1; return NULL; } strcpy(node->text, buffer); if (buffer[0] == '*') { node->is_leaf = 1; node->left = NULL; node->right = NULL; (*count)++; } else { node->is_leaf = 0; node->left = parse_tree(count, err); node->right = parse_tree(count, err); } return node; } void free_tree(Node* root) { if (!root) return; free_tree(root->left); free_tree(root->right); free(root); } int main() { int count = 0; int err = 0; Node* root = parse_tree(&count, &err); if (err || root == NULL) { printf("Chyba pri nacitani bazy pravidiel.\n"); free_tree(root); return 0; } char buffer[256]; if (!fgets(buffer, sizeof(buffer), stdin)) { printf("Chyba pri nacitani bazy pravidiel.\n"); free_tree(root); return 0; } buffer[strcspn(buffer, "\r\n")] = '\0'; if (strlen(buffer) != 0) { printf("Chyba pri nacitani bazy pravidiel.\n"); free_tree(root); return 0; } 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"); Node* current = root; while (current != NULL) { printf("%s\n", current->text); if (current->is_leaf) { printf("Koniec\n"); break; } char ans[256]; if (!fgets(ans, sizeof(ans), stdin)) { printf("Nerozumiem\n"); break; } ans[strcspn(ans, "\r\n")] = '\0'; if (strcmp(ans, "a") == 0) { current = current->left; } else if (strcmp(ans, "n") == 0) { current = current->right; } else { printf("Nerozumiem\n"); break; } } free_tree(root); return 0; }