diff --git a/du5/program.c b/du5/program.c new file mode 100644 index 0000000..ce1ac91 --- /dev/null +++ b/du5/program.c @@ -0,0 +1,109 @@ +#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("Nespravny vstup.\nKoniec\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("Nespravny vstup.\nKoniec\n"); + break; + } + } + + free_tree(root); + return 0; +}