#include #include #include typedef struct Uzol { char *text; struct Uzol *ano; struct Uzol *nie; } Uzol; int pocet_tovarov = 0; Uzol* vytvor_uzol(const char *text) { Uzol *uzol = (Uzol *)malloc(sizeof(Uzol)); uzol->text = strdup(text); uzol->ano = NULL; uzol->nie = NULL; return uzol; } Uzol* nacitaj_strom() { char riadok[256]; if (fgets(riadok, sizeof(riadok), stdin) == NULL || riadok[0] == '\n') { return NULL; } riadok[strcspn(riadok, "\n")] = '\0'; if (riadok[0] == '*') { pocet_tovarov++; return vytvor_uzol(riadok + 1); } Uzol *uzol = vytvor_uzol(riadok); uzol->ano = nacitaj_strom(); uzol->nie = nacitaj_strom(); return uzol; } void spusti_system(Uzol *uzol) { while (uzol != NULL) { if (uzol->ano == NULL && uzol->nie == NULL) { printf("*%s\nKoniec vstupu\n", uzol->text); return; } if (uzol != NULL) { printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); printf("%s\n", uzol->text); } char odpoved; if (scanf(" %c", &odpoved) != 1 || (odpoved != 'a' && odpoved != 'n')) { printf("Nerozumiem\n"); return; } uzol = (odpoved == 'a') ? uzol->ano : uzol->nie; } } void uvolni_strom(Uzol *uzol) { if (uzol == NULL) return; uvolni_strom(uzol->ano); uvolni_strom(uzol->nie); free(uzol->text); free(uzol); } int main() { Uzol *koren = nacitaj_strom(); if (!koren) { printf("Chyba: Nepodarilo sa načítať bázu pravidiel.\n"); return 1; } printf("Expert z bufetu to vie.\nPozna %d druhov ovocia a zeleniny.\n", pocet_tovarov); spusti_system(koren); uvolni_strom(koren); return 0; }