From 0e1c98baa35c153bc3518de9fb0bc137b7201ad1 Mon Sep 17 00:00:00 2001 From: Yevhen Kozirovskyi Date: Thu, 14 Nov 2024 20:29:44 +0000 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20cv7/program.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cv7/program.c | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/cv7/program.c b/cv7/program.c index e69de29..56558cd 100644 --- a/cv7/program.c +++ b/cv7/program.c @@ -0,0 +1,97 @@ +#include +#include +#include + +typedef struct Node { + char *text; + struct Node *yes; + struct Node *no; +} Node; + +Node* vytvor_uzol(char *text) { + Node *uzol = (Node*)malloc(sizeof(Node)); + uzol->text = strdup(text); + uzol->yes = NULL; + uzol->no = NULL; + return uzol; +} + +void uvolni(Node *uzol) { + if (uzol) { + free(uzol->text); + uvolni(uzol->yes); + uvolni(uzol->no); + free(uzol); + } +} + +void naloz_bazu(Node **root, FILE *file) { + char line[256]; + if (fgets(line, sizeof(line), file) == NULL || line[0] == '\n') { + *root = NULL; + return; + } + + if (line[0] == '*') { + *root = vytvor_uzol(line + 1); // odstránenie '*' + } else { + *root = vytvor_uzol(line); + naloz_bazu(&((*root)->yes), file); + naloz_bazu(&((*root)->no), file); + } +} + +int spocitaj_druhy(Node *uzol) { + if (!uzol) return 0; + if (!uzol->yes && !uzol->no) return 1; // odpoveď + return spocitaj_druhy(uzol->yes) + spocitaj_druhy(uzol->no); +} + +void znalostny_system(Node *uzol) { + char odpoved; + + while (uzol) { + if (!uzol->yes && !uzol->no) { + printf("Expert z bufetu to vie: %s\n", uzol->text); + break; + } + + printf("%s (a/n): ", uzol->text); + scanf(" %c", &odpoved); + + if (odpoved == 'a') { + uzol = uzol->yes; + } else if (odpoved == 'n') { + uzol = uzol->no; + } else { + printf("Nespravny vstup, program konci.\n"); + break; + } + } +} + +int main() { + FILE *file = fopen("baza.txt", "r"); + if (!file) { + printf("Chyba pri otváraní súboru.\n"); + return 1; + } + + Node *root = NULL; + naloz_bazu(&root, file); + fclose(file); + + if (root == NULL) { + printf("Chyba: nepodarilo sa načítať bázu pravidiel.\n"); + return 1; + } + + int druhy = spocitaj_druhy(root); + printf("Expert z bufetu to vie.\nPozna %d druhov ovocia a zeleniny.\n", druhy); + + printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); + znalostny_system(root); + + uvolni(root); + return 0; +}