Update cv7/program.c

This commit is contained in:
Marat Izmailov 2024-11-14 13:18:55 +00:00
parent c2bcbcfff8
commit 282c50bfd0

View File

@ -4,34 +4,38 @@
#define SIZE 256 #define SIZE 256
// Štruktúra uzla binárneho stromu // Шструктура узла бинарного дерева
struct strom { struct strom {
char otazka[SIZE]; char otazka[SIZE];
struct strom* ano; struct strom* ano;
struct strom* nie; struct strom* nie;
}; };
// Funkcia na načítanie stromu zo štandardného vstupu // Функция для чтения базы правил из стандартного ввода
struct strom* nacitaj_strom() { struct strom* nacitaj_strom() {
char buffer[SIZE]; char buffer[SIZE];
if (!fgets(buffer, SIZE, stdin) || buffer[0] == '\n') { if (!fgets(buffer, SIZE, stdin) || buffer[0] == '\n') {
return NULL; // Koniec databázy alebo prázdny riadok return NULL; // Конец базы данных или пустая строка
} }
struct strom* uzol = malloc(sizeof(struct strom)); struct strom* uzol = malloc(sizeof(struct strom));
if (!uzol) {
printf("Chyba: nedostatok pamäte.\n");
exit(1);
}
strcpy(uzol->otazka, buffer); strcpy(uzol->otazka, buffer);
if (buffer[0] == '*') { if (buffer[0] == '*') {
uzol->ano = uzol->nie = NULL; // Tento uzol je list (odpoveď) uzol->ano = uzol->nie = NULL; // Это лист (ответ)
} else { } else {
uzol->ano = nacitaj_strom(); // Rekurzívne načítanie vetvy pre "áno" uzol->ano = nacitaj_strom(); // Чтение ветви для "да"
uzol->nie = nacitaj_strom(); // Rekurzívne načítanie vetvy pre "nie" uzol->nie = nacitaj_strom(); // Чтение ветви для "нет"
} }
return uzol; return uzol;
} }
// Funkcia na uvoľnenie pamäte stromu // Функция для освобождения памяти дерева
void znic_strom(struct strom* uzol) { void znic_strom(struct strom* uzol) {
if (uzol) { if (uzol) {
znic_strom(uzol->ano); znic_strom(uzol->ano);
@ -40,13 +44,13 @@ void znic_strom(struct strom* uzol) {
} }
} }
// Funkcia na interakciu s používateľom (prechádzanie stromu) // Функция для взаимодействия с пользователем (прохождение дерева)
void spusti_expert_system(struct strom* uzol) { void spusti_expert_system(struct strom* uzol) {
if (!uzol) return; if (!uzol) return;
printf("%s", uzol->otazka); printf("%s", uzol->otazka);
if (!uzol->ano && !uzol->nie) { if (!uzol->ano && !uzol->nie) {
printf("Koniec\n"); // Konečná odpoveď printf("Koniec\n"); // Окончательный ответ
return; return;
} }
@ -63,14 +67,14 @@ void spusti_expert_system(struct strom* uzol) {
} }
} }
// Funkcia na spočítanie listov stromu (konečných odpovedí) // Функция для подсчета листьев дерева (окончательных ответов)
int pocet_listov(struct strom* uzol) { int pocet_listov(struct strom* uzol) {
if (!uzol) return 0; if (!uzol) return 0;
if (!uzol->ano && !uzol->nie) return 1; if (!uzol->ano && !uzol->nie) return 1;
return pocet_listov(uzol->ano) + pocet_listov(uzol->nie); return pocet_listov(uzol->ano) + pocet_listov(uzol->nie);
} }
// Hlavná funkcia // Главная функция
int main() { int main() {
struct strom* databaza_znalosti = nacitaj_strom(); struct strom* databaza_znalosti = nacitaj_strom();