diff --git a/du5/program.c b/du5/program.c index e69de29..c083752 100644 --- a/du5/program.c +++ b/du5/program.c @@ -0,0 +1,101 @@ +#include +#include +#include + + +struct uzol { //zakladna struktura, kam nahram otazky a referencie + char otazka[100]; + struct uzol *lavy; + struct uzol *pravy; +} + +struct uzol* nacitaj_data() { // todo, rekurzivne pomazat z pamate + + char riadok[100]; // o velkosti otazky alebo ovocia + if (!fgets(riadok, 100, stdin)) return NULL; // ak nahram NULL + if (riadok[0] == '\n') return NULL; // ak vyenterujem input + + // mozno bude treba osetrit ak by bol namiesto otazky rovno produkt, prv ocakavam otazku + + struct uzol* uzol = malloc (sizeof(struct uzol)); // alokujem pre kazdy novy uzol binarneho stromu + + strcpy (uzol -> otazka, riadok); // nakopcim stdin do textoveho pola struktury + + //kontrola hviezdicky, ak najdem, nepokracujem v strome tym smerom + if (riadok[0] == '*') { + uzol -> lavy = NULL; + uzol -> pravy = NULL; + } else { // rekurzivne nacitam najprv lavy koren, potom pravy ak to bola otazka + uzol -> lavy = nacitaj_data(); + uzol -> pravy = nacitaj_data(); + } + return uzol; // vyplneny strom +} + +int zrataj_produkty(struct node* uzol) { + if (uzol == NULL) return 0; // ak je NULL, vratim nic + if (uzol -> pravy == NULL && uzol -> lavy == NULL) return 1; //ak nemam pokracovanie ale existujem, vratim 1 + return zrataj_produkty(uzol -> pravy) + zrataj_produkty(uzol -> lavy); // pozbieram existencne jednotky +} + +void spustac(struct uzol* uzol) { + if (uzol == NULL) return; // ak nemam strom koncim + printf ("%s",uzol -> otazka); // vypisem content textu struktury + if (uzol -> pravy == NULL && uzol -> lavy == NULL) { // ak nema pokracovanie, napisem ze nema pokracovanie + printf ("Koniec\n"); + return; + } + char odpoved; // iacitavam a/n + scanf("%c",&odpoved); + + if (odpoved == 'a') { + spustac (uzol -> lavy); + } else if (odpoved == 'n') { + spustac (uzol -> pravy); + } // uvidim co test ocakava ked dam zle odpoved + +} + +void destroy_tree (struct uzol* strom){ + destroy_tree(strom -> lavy); + destroy_tree(strom -> pravy); + free(strom); +} + +int main() { + + struct uzol* strom = nacitaj_data(); + + if (!strom) return 0; + + int listy = zrataj_produkty(strom); + + printf("Expert z bufetu to vie.\n"); + printf("Pozna %d druhov ovocia a zeleniny.\n", listy); + printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); + + spustac(strom); + + destroy_tree(strom); + + return 0; +} + + + + + + + + + + + + + + + + + + +