From cf3e69ac7c191f7c1b152d68b7f0bfe084378c64 Mon Sep 17 00:00:00 2001 From: Matej Hajduk Date: Wed, 12 Nov 2025 10:16:28 +0100 Subject: [PATCH] du6 --- du6/program.c | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/du6/program.c b/du6/program.c index 4fdee7c..3cb7c6f 100644 --- a/du6/program.c +++ b/du6/program.c @@ -9,9 +9,97 @@ typedef struct tree{ struct tree* right; // nie }Tree; -void trim_newline(char *str){ +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(node)); + + 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); + destry_tree(t->right); + free(t); +} +int count_leaves(Tree* t){ + if(!t) return 0; + if(!t->left && !t->right) return 1; + return count_leaves(5->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("Chyba vstupu.\n"); + return; + } + + trim_newline(ans); + + if (strcmp(ans, "a") == 0) + run_system(t->left); + else if (strcmp(ans, "n") == 0) + run_system(t->right); + else { + printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); + } +} +int main() { + Tree* root = read_tree(); + + if (!root) { + printf("Chyba: nepodarilo sa načítať bázu pravidiel.\n"); + return 1; + } + + int count = count_leaves(root); + + printf("Expert z bufetu to vie.\n"); + printf("Pozna %d druhov ovocia a zeleniny.\n", count); + + // overenie prázdneho riadku medzi databázou a vstupom používateľa + char empty[SIZE]; + if (!fgets(empty, SIZE, 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; }