asi cele
This commit is contained in:
parent
d0625be7f6
commit
0cd5003457
101
du5/program.c
101
du5/program.c
@ -0,0 +1,101 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user