From 4f6ad9c280e4d81a11368b1a79b85a6724eef774 Mon Sep 17 00:00:00 2001 From: Deinerovych Date: Fri, 8 Nov 2024 10:27:18 +0100 Subject: [PATCH] final --- cv7/knowledge_base.txt | 5 +++++ cv7/program | Bin 16824 -> 16864 bytes cv7/program.c | 37 +++++++++++++++++-------------------- 3 files changed, 22 insertions(+), 20 deletions(-) create mode 100644 cv7/knowledge_base.txt diff --git a/cv7/knowledge_base.txt b/cv7/knowledge_base.txt new file mode 100644 index 0000000..fa82353 --- /dev/null +++ b/cv7/knowledge_base.txt @@ -0,0 +1,5 @@ +Je to ovocie alebo zelenina +*Jablko +*Mrkva + +a diff --git a/cv7/program b/cv7/program index 3b652740154122c96b3d92826d177bd42c811fe9..e46167d844fa19c4e08b5baf5448f3b6d8a9d653 100755 GIT binary patch delta 3557 zcmZ`+e^AuN72iEL;4Ub4{P4>e!yQ=EfZPv$h$zPo<@9T-6KHA%Z8C@=0kufwu4xie zjuI2Dcr%dKAKE|C*vWL7X*v@^>|h5Y#wo<9HnB~OOlu1>ZRbu&Vl*?7wDH^b_PgIJ zGSi*8eY>Ccd2iqDzWwgrSU;cX=R>)fu1qFMoi3Pb!*J0rEE5*JJ25=%v5utaosl%i zdhYhj6lO^cTaeD z#hl9z!5MQ+VQ0_beN|O0?LGTiyV_Yx%c0J_`&xQ}tw(|_-)imbV(s0b;66x6aY02& zgHq16Zr`?Pb4#haGSMn4XE3sE4UDA}J54N!nQ%tQSeuwx)YRg73wUZ)@5?wpxi2ic zvvUbU-Y+Glh<-AAQ}*8){xR-b5*wHO(DF{)eiNI*J{47NkxT=|vUI$05k4VPDXoqH zq&7Kl&_uaat2Ze@vf#^9#Ya0}6jzOO0CXE>i1E2BpJXAn`N<~K=H%?ESTLGyR0eQY9V(PlE7 zVIp3T68RCqulPP3%v`|(Fp!z|@Dm8JQ1MQ+-(NsYHS*73x;p4zg`HT{Jxz85*;8_ul>zEij(6 zjNb%?s;wdG7;;#=UoZnhYBZ-bojhDsBU7={NS5HrFhD$ER1{jKMv>Y-!HE>t zV;HzuBTz&>l!!Wb?7J8&k+zc@+&SP?Bbz!F;1v=_xLX|z3?OH|O)btYT!W(p&9P+I zl---7MnW@f>R_@!X}-RR_*M90_Uhg_D+N0xCK3DEe{hhf`MQq9(y<#qAtq*iUt;tB zrZ@sIifNA8(Vcg(KchyM+!T~QB)pwPb^kmM+R^0?r1=@dZmPHncdJ`NOVvRL<`fp~ zkjkT^d;qs1#xjmM#l!+M89i*A%(HMIr=j;>Utk_yyg&)J6L(kbpR?fznZn5=wye@! z7loJDTL)^ArKSxv=V)(Z2Z%F>`;R-m0s&*klO%KZ0zG{tP~R(3f=R-L1q3?GhJ!eM zXlRX=C-jr&(1gWKV)Vv{^p!UZ=wc#+ctSrF^Dmld-`o(x@fYnRPV7ZtOq0)$ZhFW~ zBoM~c471QyeSd#Xc@;J9O0Z{fPBduXJ~l1YM(JlGYQ|`(;+L?(z{9;{FiF#jV7m1` zH^4%LXiz2%p8Z_RFHEdnZ0p7tHytE{^q5W>AW{crS>)JJ-0ne9M`#*_x;H)SW@Hax zVu$H`yuG)Le4*hHa2)MD^tcVix-LLWGr`_IZODlT3? z#posF@zj@GfA_Rn*%4y0Ev=o0_P4o$hh2xe_jkF19s6AeyAD5v*pvHRds}<9_`E7&Z@pAARD8)Q{MfiH$l<7Ol#-9thA%^-e@ z09h!{kK^wYJYC?-w_rFQktVRz_JV2ik`&WF(o-=lTnN#YUxhOTD+^X&uucpn!Ae@j ziAKI`h(CA-?iJ*f*W(=G2qkEy8R3j*G&d{G>EL~C_VUq3R&py$n9^X6FPUOCZd>9} zc^NuOoc339^&Wkfsi<(W#K{}sOo@lbAdc-^u(&;TRo-Xv1;sjGo7-t`ro)ScjwqEd zJnepjd*PxRA04T1!`;rCp~>?ix4{+9hmJ;h;p=35F--XE2*Y`=!Y5$b>+u|$-#cRek!Xf1 zWeQhBT`X!pe7j6Be-#(g1tX>`z6(y3DUNpR+c6U6(!JwtE=q`Owhf@x#+Ea0orI;> zj5tN_l8Ykl2s<{T5wc*EMD33LQ{36B`kYk7_P2NWVw;;9WY(p3r}vafyJKzPxZzQlgb!4>NGqZj`~W=i3%O-f?f5M P)|4u}x17W74SD|soFm$D delta 3283 zcmZ`+4NP0t6~5Qz0S*Ri^Yd_;VjGe|$*}pALyP$fP99RXL02mF(_xo5i#x(kFiMyb zQ3R==j#bE+l4(n&q?NWt+f*XjF4?*c#+IZK)kwERL0wcDX_B*KDWOOqUE8;F@4JsV zk#?o`&OP7x?z!ild!Fz0@+dt&N+Tc{XYN{@YMbjyYWPDmnHNDmMpqw>m`ZA1A*%}b6fM5mSEd7gh%%yQQBup4OUH{MH zwD33$CSz~*jdG(y=l)>02da{t8J(Tsf!?l~n$Cf)V9#FoRICkJ zk-RPR!OdaZTmzX!oi%-%QZ8c=1)kbKU?!!_o+kKAtki1?+kP87nkvJV zRP#1xgN8~dvb8RM?-OiRRuqmP`*5l`{ZIlb!LJeh6{6z_XbN0M^dE@+Bmp%+x=9AJ z$qZ$tt#(YsMmwLt%7FdI>Nc6vFDIZDcoor8IQF_{`^;?K*OQN13Q{XPgsiIDDxt*k zuPW?ZcN3E7XeQ*d%>2($_dTRnKctsJvGrZpYLi=kkwl1^GlQkRw%48M7~`QSG2ap* zN=*8YiJJ9DjuMqlu>R56h)G?}biBxj^Fkv3Eaz9h22tAV2^JpWt4k|JKq!P<{&di2gRVFUQr;%~7S(+r7 z@AxNcO9pM6GCE6{@e7>rRue~1yQ57%u0)R>!l)Rbi^*vFxH8eSF9Ci^z!1pJqmRH) z_ONx25>47x%p$}El+WJ$5YlsshKsQN&<~F;zV{1s7L)QcEMA1_%^z!PN)uQXqeT62 zHg^iA`|l|e7je`Bo(`jFbe%@5Xn21UpCW$kKe!eJS9z~CIGDkmMBz6%u99Pd@H0k8 z!`#M6=FvjF0{{9RWxE!3M2i0u47tt2IY^s)f1XuQJ8qXUdfS4tv~edakQU+Y2=e~7 zS$4GS6qW(B{DEy&e1dVJxS_a(TM*E_gNY6bpOJ zhW%1J_W8qsJJC}zXR^Sj@CSwE_0Pz|z*jI6D`arDwl^6pA2I2giOtUw-X-WKAE2{! z{$5zvgy-2hZ^rP2>s(>(i`llZA{P3+`>6AR&c(48#Mmo{^0Bv`LG-dfe|KMP7YVx* ze+L~+_-{x3w|P9X8b=Fvo;l@-y%b+(6NbodUq5K=l!z-$K7-i_Ls@_KVZmXR6wYvUyEa z`%u1&auQ_|TyYiUucMd8a1?1y;fKan>{c-yXImkVTToDb8N2#{!YtYNMDUqKd>N(Q zSg9Surys%v4%ZTfb(NX?8J3p}JJXX5ADC0H+MEb2;PVQcEhsGbI|eIbFdHmm24ytn z%YyjAD%>f^uUy5o@C0u-dy_k3G`6;vagE7|ZVX?}G!)WJcKyK84=BcA?IZ+C9o7X| z)7bAEYppO<>YyEPuGB*p;S=mzfx11`R&gwdD+Tfz-45#xar%iH5D7rP`xaL{3mx)tTqiU%!;MpC3xiXoahNUu3xqi~> z9JbSpqc2Ry$FW064u)1!zMDP+Bjp|%fOF-tUB52r%#S!T51F5odkmLzz*g}r&4O@+ zr~Cy>j}4t?pA8SXeKL_4ATK>lmAhp5X7ZFjeKDe}%cK zM_{cg`_WY~=BAj5Z3JsyA8&UfUl?$+Nx!H4eBhm-6Dn;v;jn!8L950kmfxO zZ+hR$d+;{cpx*<%Gu=DZ=*)9ZbWy`Pg+D&&wl1X1R85SCX1+6 z3k=nIO#z_=;6kl;qoDP|ZUyQarYkV#bHHhz#bmK+^H|`5&kNH&3ta|U=dtNY*5!f( zO?B=~dOa-2@T0n2bPVR|JSM#w$KZaQ*A#bY9^+6`j~?sG;B>vkq}O~0T&TwwH~s|N oulH_zimiALV{IB58&ui=jg4N@i`5$TT^K>_qaB*I8MEQ|FaNHB00000 diff --git a/cv7/program.c b/cv7/program.c index ab18acb..54e7b8f 100644 --- a/cv7/program.c +++ b/cv7/program.c @@ -29,30 +29,29 @@ Node* parse_knowledge_base(FILE *file) { return NULL; } - line[strcspn(line, "\n")] = 0; // Удалить символ новой строки + line[strcspn(line, "\n")] = 0; Node *node = NULL; if (line[0] == '*') { - node = create_node(line + 1); // Создаём конечный узел (ответ) + node = create_node(line + 1); } else { - node = create_node(line); // Создаём узел с вопросом - node->yes = parse_knowledge_base(file); // Рекурсивное создание поддерева для "да" - node->no = parse_knowledge_base(file); // Рекурсивное создание поддерева для "нет" + node = create_node(line); + node->yes = parse_knowledge_base(file); + node->no = parse_knowledge_base(file); } return node; } int count_products(Node *node) { if (!node) return 0; - if (!node->yes && !node->no) return 1; // Если это ответ, возвращаем 1 + if (!node->yes && !node->no) return 1; return count_products(node->yes) + count_products(node->no); } void run_expert_system(Node *node, FILE *input) { while (node) { - // Проверка, если это листовой узел (ответ) if (!node->yes && !node->no) { - printf("*%s\n", node->text); // Выводим ответ с звездочкой + printf("*%s\n", node->text); printf("Koniec\n"); return; } @@ -62,17 +61,16 @@ void run_expert_system(Node *node, FILE *input) { char answer; if (fscanf(input, " %c", &answer) != 1) { - printf("Koniec\n"); // Некорректный ввод + printf("Koniec\n"); return; } - // Переход по дереву на основе ответа if (answer == 'a') { node = node->yes; } else if (answer == 'n') { node = node->no; } else { - printf("Koniec\n"); // Некорректный ввод + printf("Koniec\n"); return; } } @@ -92,22 +90,22 @@ void create_default_knowledge_base() { perror("Failed to create the knowledge base file"); exit(1); } - fprintf(file, "Je to ovocie alebo zelenina?\n"); + fprintf(file, "Je to ovocie alebo zelenina\n"); fprintf(file, "*Jablko\n"); fprintf(file, "*Mrkva\n"); - fprintf(file, "\n"); // Пустая строка для разделения базы знаний и ответов - fprintf(file, "a\n"); // Предустановленный ответ + fprintf(file, "\n"); + fprintf(file, "a\n"); fclose(file); } int main() { FILE *file = fopen("knowledge_base.txt", "r"); if (!file) { - create_default_knowledge_base(); // Создаем файл по умолчанию + create_default_knowledge_base(); file = fopen("knowledge_base.txt", "r"); if (!file) { perror("Failed to open the knowledge base file"); - return 1; // Завершение с кодом ошибки, если файл так и не открылся + return 1; } } @@ -115,21 +113,20 @@ int main() { if (!root) { printf("Báza znalostí sa nedá načítať.\n"); fclose(file); - return 1; // Завершение с кодом ошибки, если база знаний не загружена + return 1; } printf("Expert z bufetu to vie.\n"); int product_count = count_products(root); printf("Pozna %d druhov ovocia a zeleniny.\n", product_count); - // Пропуск пустой строки после базы знаний char line[MAX_LINE_LENGTH]; while (fgets(line, sizeof(line), file) && line[0] != '\n'); - run_expert_system(root, file); // Запуск системы с использованием оставшихся ответов + run_expert_system(root, file); free_tree(root); fclose(file); - return 0; // Успешное завершение программы + return 0; }