From b05532617b43f0b534215733252e048958cae848 Mon Sep 17 00:00:00 2001 From: ov075wu Date: Thu, 20 Nov 2025 16:59:48 +0100 Subject: [PATCH] refresh --- du6/program.c | 104 ++++++++++++-------------------------------------- 1 file changed, 25 insertions(+), 79 deletions(-) diff --git a/du6/program.c b/du6/program.c index 1545f25..f7de366 100644 --- a/du6/program.c +++ b/du6/program.c @@ -10,25 +10,20 @@ typedef struct TreeNode { struct TreeNode *no_branch; } TreeNode; -static TreeNode* read_tree_node(int *used_lines) { +static TreeNode* read_tree_node() { char buffer[MAXLINE]; - memset(buffer, 0, sizeof(buffer)); - char *r = fgets(buffer, sizeof(buffer), stdin); - if (r == NULL) { + if (!fgets(buffer, sizeof(buffer), stdin)) { return NULL; } - (*used_lines)++; - if (buffer[0] == '\n' || buffer[0] == '\r') { return NULL; } TreeNode *node = calloc(1, sizeof(TreeNode)); - if (!node) { + if (!node) exit(1); - } strncpy(node->text, buffer, MAXLINE - 1); @@ -38,129 +33,81 @@ static TreeNode* read_tree_node(int *used_lines) { return node; } - node->yes_branch = read_tree_node(used_lines); - node->no_branch = read_tree_node(used_lines); - + node->yes_branch = read_tree_node(); + node->no_branch = read_tree_node(); return node; } static void free_tree(TreeNode *root) { - if (root != NULL) { - free_tree(root->yes_branch); - free_tree(root->no_branch); - free(root); - } + if (!root) return; + free_tree(root->yes_branch); + free_tree(root->no_branch); + free(root); } static int count_leafs(TreeNode *root) { - if (root == NULL) { - return 0; - } + if (!root) return 0; - int left = count_leafs(root->yes_branch); - int right = count_leafs(root->no_branch); + if (!root->yes_branch && !root->no_branch) + return 1; - int is_leaf = (root->yes_branch == NULL && root->no_branch == NULL) ? 1 : 0; - - return left + right + is_leaf; + return count_leafs(root->yes_branch) + count_leafs(root->no_branch); } static int validate_tree(TreeNode *root) { - if (root == NULL) { - return 0; - } + if (!root) return 0; int is_answer = (root->text[0] == '*'); if (is_answer) { - if (root->yes_branch != NULL || root->no_branch != NULL) { + if (root->yes_branch || root->no_branch) return 0; - } return 1; } - if (root->yes_branch == NULL || root->no_branch == NULL) { + if (!root->yes_branch || !root->no_branch) return 0; - } return validate_tree(root->yes_branch) && validate_tree(root->no_branch); } -static void skip_empty_line() { - char temp[MAXLINE]; - long pos = ftell(stdin); - - if (fgets(temp, sizeof(temp), stdin) == NULL) { - return; - } - - if (!(temp[0] == '\n' || temp[0] == '\r')) { - fseek(stdin, pos, SEEK_SET); - } -} - static void run_dialog(TreeNode *root) { - if (root == NULL) { - return; - } + if (!root) return; printf("%s", root->text); - if (root->yes_branch == NULL && root->no_branch == NULL) { + if (!root->yes_branch && !root->no_branch) { printf("Koniec\n"); return; } char c; - int r = scanf(" %c", &c); - - if (r != 1) { - printf("Koniec vstupu\n"); + if (scanf(" %c", &c) != 1) { + printf("Koniec\n"); return; } if (c == 'a') { run_dialog(root->yes_branch); - return; - } - - if (c == 'n') { + } else if (c == 'n') { run_dialog(root->no_branch); - return; + } else { + printf("Nerozumiem\n"); } - - printf("Nerozumiem\n"); } int main() { - int used_lines = 0; - TreeNode *root = read_tree_node(&used_lines); - skip_empty_line(); + TreeNode *root = read_tree_node(); // читаем базу до пустой строки printf("Expert z bufetu to vie.\n"); - if (root == NULL || !validate_tree(root)) { + if (!root || !validate_tree(root)) { printf("Chybna databaza\n"); free_tree(root); return 0; } - int total_lines = used_lines; - - long pos = ftell(stdin); - char extra[MAXLINE]; - if (fgets(extra, sizeof(extra), stdin) != NULL) { - int newline = (extra[0] == '\n' || extra[0] == '\r'); - if (!newline) { - printf("Chybna databaza\n"); - free_tree(root); - return 0; - } - } else { - fseek(stdin, pos, SEEK_SET); - } - int total = count_leafs(root); printf("Pozna %d druhov ovocia a zeleniny.\n", total); @@ -169,6 +116,5 @@ int main() { run_dialog(root); free_tree(root); - return 0; }