diff --git a/cv7/program.c b/cv7/program.c index e69de29..302d142 100644 --- a/cv7/program.c +++ b/cv7/program.c @@ -0,0 +1,91 @@ +#include +#include +#include + +typedef struct Node { + char *text; + struct Node *yes; + struct Node *no; +} Node; + +// Funkcia na vytvorenie nového uzla +Node* create_node(const char *text) { + Node *node = (Node*) malloc(sizeof(Node)); + node->text = strdup(text); + node->yes = NULL; + node->no = NULL; + return node; +} + +// Načíta otázky a odpovede z konzoly a vytvára strom +Node* load_tree(int *item_count) { + char line[100]; + if (!fgets(line, sizeof(line), stdin) || line[0] == '\n') { + return NULL; + } + + line[strcspn(line, "\n")] = 0; // Odstráni nový riadok + + if (line[0] == '*') { + (*item_count)++; + return create_node(line + 1); // Vytvoriť uzol s odpoveďou + } else { + Node *node = create_node(line); // Vytvoriť uzol s otázkou + node->yes = load_tree(item_count); + node->no = load_tree(item_count); + return node; + } +} + +// Uvoľní pamäť stromu +void free_tree(Node *node) { + if (node) { + free(node->text); + free_tree(node->yes); + free_tree(node->no); + free(node); + } +} + +// Spustí znalostný systém s otázkami a odpoveďami +void run_system(Node *node) { + while (node) { + if (node->yes == NULL && node->no == NULL) { + printf("Expert z bufetu to vie.\n"); + printf("* %s\n", node->text); + printf("Koniec\n"); + break; + } + + printf("%s\n", node->text); + char answer; + scanf(" %c", &answer); + + if (answer == 'a') { + node = node->yes; + } else if (answer == 'n') { + node = node->no; + } else { + printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); + break; + } + } +} + +int main() { + int item_count = 0; + printf("Načítajte bázu znalostí:\n"); + Node *root = load_tree(&item_count); + + if (root == NULL) { + printf("Chyba: bázu znalostí sa nepodarilo načítať.\n"); + return 1; + } + + printf("Pozna %d druhov ovocia a zeleniny.\n", item_count); + printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); + run_system(root); + + free_tree(root); + return 0; +}