From deb82891bb8c5f87bbe503d44264581ae30cf62e Mon Sep 17 00:00:00 2001 From: 0niiC Date: Tue, 25 Nov 2025 09:03:13 +0700 Subject: [PATCH] m --- proglabs/lab10/func.c | 229 ++++++++++++++++++++++++++++-------- proglabs/lab10/head.h | 22 ++-- proglabs/lab10/main.c | 38 ++++-- proglabs/lab10/prog | Bin 0 -> 20112 bytes proglabs/lab10/test/output | 26 ++++ proglabs/lab10/test/test.md | 5 + 6 files changed, 252 insertions(+), 68 deletions(-) create mode 100755 proglabs/lab10/prog create mode 100644 proglabs/lab10/test/output create mode 100644 proglabs/lab10/test/test.md diff --git a/proglabs/lab10/func.c b/proglabs/lab10/func.c index 8a1d521..ae2e6f0 100644 --- a/proglabs/lab10/func.c +++ b/proglabs/lab10/func.c @@ -6,30 +6,49 @@ int buffinput(int *x, int *inbuff, int *buff){ //INPUT------------------------------------------------- wint_t ch; *inbuff = 0; - while((ch=getwchar())!='\n'&&ch!=' '&&*inbuff='я') || - ('А'<=&&>='Я') - ){x[0]++;c++;continue;} - - else if('0'>=buff[c]&&buff[c]<='9'){x[1]++;continue;} - else if(buff[c]=='\t'){x[3]++} - else if(buff[c]==i){x[i-28]++;c++;continue;}; - - else {x[25]++;c++;} + while (c < *inbuff) + { + int sym = buff[c]; + if ((sym >= L'а' && sym <= L'я') || + (sym >= L'А' && sym <= L'Я')) + { + x[0]++; + c++; + continue; + } + if (sym >= L'0' && sym <= L'9') + { + x[1]++; + c++; + continue; + } + if (sym > 32 && sym <= 47) { + x[sym - 28]++; + c++; + continue; + } + if (sym > 58 && sym <= 64) { + x[sym - 38]++; + c++; + continue; + } + x[27]++; + c++; } //________________________________________________________ @@ -38,18 +57,18 @@ int buffinput(int *x, int *inbuff, int *buff){ } -void func1 (char *f, int *x,int inbuff, int *buff){ - printf("\nFunc output:"); - switch(f[3]){ +void func1 (char **f, int *x,int inbuff, int *buff){ + switch(funcReturn(f[2])){ case 1://Определяет среднюю длину слова в тексте { if(x[28]){ x[30]/=x[29]; printf("\n\tСредняя длинна слова - %d",x[30]); + count(x); } else{ x[30]+=inbuff; - x{29}++; + x[29]++; } break; } @@ -57,7 +76,7 @@ void func1 (char *f, int *x,int inbuff, int *buff){ case 2://Подсчитывает количество слов, длина которых не превышает 5 символов. { if(x[28]){ - printf("\n\tВсего слов <5 букв - %d",x[30]); + printf("\n\tВсего слов <5 букв - %d",x[30]); } else if(inbuff<5)x[30]++; break; @@ -67,69 +86,112 @@ void func1 (char *f, int *x,int inbuff, int *buff){ { if(x[29]); else {x[30]-=x[0];x[29]=1;} - if(x[28]){x[30]+=x[0];printf{"\n\tКолл-во букв после 1 и до последнего слова - %d",x[30]}} + if(x[28]){x[30]+=x[0];printf("\n\tКолл-во букв после 1 и до последнего слова - %d",x[30]);} break; } case 4://Удаляет первую букву каждого слова и выводит результат. - { - for(int i = 1;i='0'&&buff[i]<='9'){ + x[30]=(x[30]*100)+(buff[i]-'0'); + } + } + x[29]+=x[30]; + x[30]=0; break; } case 7:// вставляет восклицательный знак в конце каждой строки текста. { + if(x[28]); + else{ + if(buff[inbuff-1]=='\n'){ + if(buff[inbuff-2]=='!'||buff[inbuff-2]=='?'||buff[inbuff-2]=='.'||buff[inbuff-2]==',') + buff[inbuff-2]='!'; + else {buff[inbuff-1]='!';buff[inbuff]='\n';} + x['!'-28]++;inbuff++;} + put(0,x,inbuff,buff); + } break; } case 8://проверяет заканчивается ли каждая строка точкой и добавляет ее при необходимости, считает сколько точек было добавлено { + if(x[28]); + else{ + if(buff[inbuff-1]=='\n'){ + if(buff[inbuff-2]=='!'||buff[inbuff-2]=='?'||buff[inbuff-2]=='.'||buff[inbuff-2]==',') + buff[inbuff-2]='.'; + else {buff[inbuff-1]='.';buff[inbuff]='\n';} + x['!'-28]++;inbuff++;} + put(0,x,inbuff,buff); + } break; } case 9://определяет сколько раз в введенной строке встречается слово,заданное пользователем. { + if(x[28]) + printf("\n\t Слово %s встречается - %d раз",f[4],x[30]); + else{ + if(last(inbuff,buff))inbuff--; + x[30]+=strbuff(f[3],buff);} break; } case 10://подсчитывает количество букв в каждом втором слове. { + /* x[26] = x[0] - x[27]; + if(x[28]){ + x[29]=x[27]-x[29]; + printf("\n\t Сумма букв в четных словах - %d",x[29]); + } + else{ + if(x[30]%2==0) + x[29]+=x[26]; + x[27]+=x[27]; + x[30]++; +*/ } break; } } } -void func2 (int *f, int *x,int inbuff, int *buff){ - switch(f[3]){ +void func2 (char **f, int *x,int inbuff, int *buff){ + printf("\nFunc output:"); + switch(funcReturn(f[2])){ case 1: //Подсчитывает, сколько слов начинается с последней буквы первого слова. { + put(inbuff-1,x,-1,buff); break; } case 2: //Подсчитывает, сколько слов имеют указанную пользователем длину. { - break; + if(x[28])printf("\n\t Слов имеющих указанную длинну - %d",x[30]); + else{ + if(last(inbuff,buff))inbuff--; + if(strbuff(f[3],buff))x[30]++; + break;} } case 3: //Печатает самое длинное слово в тексте. { @@ -167,10 +229,11 @@ void func2 (int *f, int *x,int inbuff, int *buff){ } -void func3 (int *f, int *x,int inbuff, int *buff){ - switch(f[3]){ +void func3 (char **f, int *x,int inbuff, int *buff){ + switch(funcReturn(f[2])){ case 1: //Реверсирует слово. Пример: Привет ->тевирП { + put(inbuff-1,x,0,buff); break; } case 2: //Делит слово на два и меняет начало с концом. Пример: жук -> кжу,солнце -> нцесол @@ -214,15 +277,85 @@ void func3 (int *f, int *x,int inbuff, int *buff){ } } +int last(int inbuff,int *buff){ + if((buff[inbuff-1]=='.') || + (buff[inbuff-1]==',') || + (buff[inbuff-1]=='!') || + (buff[inbuff-1]=='?')) { + return 1; + } + return 0; +} + +void put(int i,int *x,int inbuff,int *buff){ + + if(iinbuff) + for(;i>inbuff;i--) + putwchar(buff[i]); + + if(x[30]!=x[2]){putwchar('\n');} + if(x[29]!=x[3]){putwchar('\t');} + if(x[27]!=x[4]){putwchar(' ');} + x[30]=x[2]; + x[29]=x[3]; + x[27]=x[4]; +} void count(int *x){ int sum = 0; printf("\nStatistic"); printf("\n\t \"Symb\" - [ammount]\n"); - printf("\n\t \"\\n\" - [%d]"); - printf("\n\t \"\\t\" - [%d]"); - printf("\n\t \" \" - [%d]"); - for(int i=33;i<=64;i++) - if(x[i-28]>10){printf("\n\t\"%ls\" - [%d]"),i,x[i];} - else sum+=x[i-30]; - printf("\n\t other - [%d]",sum); + printf("\n\t \"Letters\" - [%d]",x[0]); + printf("\n\t \"Digits\" - [%d]",x[1]); + printf("\n\t \"\\n\" - [%d]",x[2]); + printf("\n\t \"\\t\" - [%d]",x[3]); + printf("\n\t \"space\" - [%d]",x[4]); + + for (int i = 33; i <= 47; i++) { + if (x[i-28] > 10) + printf("\n\t \"%c\" - [%d]", i, x[i-28]); + else + sum+=x[i-28]; + } + + for (int i = 58; i <= 64; i++) { + if(x[i-28]>10) + printf("\n\t \"%c\" = [%d]", i, x[i-28]); + else + sum+=x[i-38]; + } + + printf("\n\t other - [%d]",sum+x[27]); +} + +int str(char *a, char *b) { + int i = 0; + while(a[i] != '\0' && b[i] != '\0') { + if(a[i] != b[i]) return 0; + i++; + } + return a[i] == b[i]; +} + +int strbuff(char *a, int *b){ + + return 0; +} + +int funcReturn(char *f){ + int swt=0; + if(str(f,"1"))swt=1; + if(str(f,"2"))swt=2; + if(str(f,"3"))swt=3; + if(str(f,"4"))swt=4; + if(str(f,"5"))swt=5; + if(str(f,"6"))swt=6; + if(str(f,"7"))swt=7; + if(str(f,"8"))swt=8; + if(str(f,"9"))swt=9; + if(str(f,"10"))swt=10; + return swt; } diff --git a/proglabs/lab10/head.h b/proglabs/lab10/head.h index 95a37e4..6d3e59c 100644 --- a/proglabs/lab10/head.h +++ b/proglabs/lab10/head.h @@ -2,6 +2,7 @@ #define HEAD #include +#include #include @@ -10,22 +11,27 @@ int buffinput(int *x, int *inbuf, int *buff); // FUNC -void func1(int f, int *x, int inbuff, int *buff); +void func1(char **f, int *x, int inbuff, int *buff); -void func2(int f, int *x, int inbuff, int *buff); +void func2(char **f, int *x, int inbuff, int *buff); -void func3(int f, int *x, int inbuff, int *buff); +void func3(char **f, int *x, int inbuff, int *buff); + +int last(int inbuff,int *buff); + +void put(int i,int *x,int inbuff,int *buff); void count(int *x); +int str(char *a,char *b); + +int strbuff(char *a,int *b); + +int funcReturn(char *f); // DEFINE -#define clear; printf("\n \033[H\033[J \n"); +#define clear printf("\n \033[H\033[J \n") #define BUFFMAX 20 #define XMAX 31 - -#define FUNC1 3 -#define FUNC2 8 -#define FUNC3 4 #endif diff --git a/proglabs/lab10/main.c b/proglabs/lab10/main.c index 2cad787..6ac68a6 100644 --- a/proglabs/lab10/main.c +++ b/proglabs/lab10/main.c @@ -1,17 +1,23 @@ #include "head.h" int main(int argc, char *argv[]){ - int buff[BUFFMAX]; - int x[XMAX]; - for (int i = 0;i#X`XY~qsWOgT%czy~2~4#l_%_H2KsCFHO~!Q= zo5{wbUCeQUUM&EqqWH!+;Y5iiG|4?B>25ef@+qi1BuH{&m3t-#ih@k`gXBtxB-?KI z$W$SxprTv$7703Y!FsNgF$L{%6dQA;kTYwXu&qe6J0(O5mE6|1jC!iO{Zs8~ zDW{1~1?6z?n9vlVX|dt@T2{1| z4UjL2?qMEByU5ih-U@tZI7t5I-~03XzUF&v&Xx(`8&15@cQ|$S!}k|9H|ZdAS0M|vMaDHYC{N2E7qwtg6(e%(5jE3Jf z2L8LiYxua!Y9L0_Gk*;Hl$wjHiVj*fk4db z2-|K1TS83{;`>TnW2haZy3SCrp(zq-Zn{0pI>JVCYh9>0%yxz)M_YSS#Aslofd*+g z+i=~+HEV;5{Y$Odl6-Zse;EsI+*T8;54VSRHgy=`_H8w5n_DB{ZJ`}d8w~DjX^lu% zf`WBaMs%hK^T>m1F+K#vmAdHxAM|m zDr!Gd>vQjg0)Im8R|>yK;;-5)=nAje1Dgb%=7(HT9C6%+ms=CZn>M`M>N);|4PVAF z;xc5zUtq&C=@03kIjhP<8(!@pMDyA3a?9r;(`H@4c)WO*q`Uau+aqZ%I3W z612xO}U(9xP%WboJvly0W~ z_G~UU*fR}`XtB(t30~J99PI9ClgJoHd142NYu27OVqCqa>k{ZH;<^UY%b?}}AH?@C zbb6wPOzW`$%nQVJ>PIulZHNUJgsD(YMQLc#LHNTjcG26#Tk7;L~B7Ls6A%Q}yR|HObzkV&^!$+xG~^c#O%hEVhFCfgb)EP}D`ltt~-&))v|7L>CgZz#lOZi}gee zYKJ?&{o&a-pIBfghTf?!PQ$I_m>z$f2PWN~6*HB3KNkyO`0~8|&IC4kZmBa-d(!iR zIKsr6hMFS3MNk~hR9XULtJi63JZud=OL5$N65Z|33wJ7o59e_P^)7n3rI7n#^|5pQ z;dq&HXOKUvu{+}JuFY$b{YWVHJ8fMNL7C)qbo+;Jv?8y72in_H!Z9@_g28QJwbM?T zeho8XIE~q0_rO>#Tj(2Vv?4XkGVjyOduTxKEq@QsP-z@q5##W0zk$iW6gn`)rNlH# zV#N_}&pmk)R=|urPE3b6(k#M<5jZNX$kFbGmCWwJz!|vBGRKFY3++e< z>z~qX%{JY=Jw3oA0w=9~;f%1#9WV3tyaFjZIcp=&HoiC(X_c{jERx@tJ{IZ9=#0@w zgKRdu$Sk$fl$(MkD9*?aGI~TQJ6mDxXeY6L9diy$EPV^+;_&U*U7W$W6`0Yi(y0Ew z36B3f!6DjzIXG*vD28vr+O!A9sFE$`g2YmM8UI?rt=n3QH@}ayIERbZn&eFU$Jia4 zFz>M47ROp>MEHWH<%vDllu7Uq-#Ymg+?l}UBx;`H@uK0^&@D1=?WoPxPS$AK$;1*~ zBOPtFxM?xVz1_wwmbeb@Z5#T&Ut@_kT3uzaArH1uO(G0SWuvtn+Lv9kg>Cly$lCAK zZjUbTP!Pm7w`)1wjUtM{BHXZ zui$R`OIhiAn^$nReO*@i{)ty`w>>T^eMfo4W0c`;Ys?#d3e7~|RBtEz#!w~#BYHgb zEahC7Ea^94bof57aDuuS)9yQB-D^L<|DwyopEmP+dT1wINt^lTq}jBYk4{<@oxl&fnG$|W z-mWrzO*#^<#r&>GL;RXRcJ~z-nVsf0@ig}gTgA#><#N_NFMG%9LS)bRM9N5{McyW} zU9abdTh=Bbr#)hny+HSf^vQSmVxpObTugFIk{t98r1Z0S4zZ?**C#nN;&@PT^lt7X z4Tj&8vHBfbj?XO^K`@j^5sr?f1ZvAfPTj7(4WlH(SOi0PI?>Y$cSd67nvse z+(@F&Vo0$*_EZUyYqWiY?JfTcsZu6$GodnbiCxz{mM#yDc1VZle6#01T93U`Z*w~I z=BZpxMOmIPRmQfEbk>8^PQv~Q+q3rrrLkmY*qdOb5Q2WkkOE_Y5__cWp z8pF+P^BD)YvN9d*ns6k_%1YbXTX$+Vg1c%v2a5$*vK=&uUZAbPH(_tpS{t;6XrxXO zz_>tLkG2+xwn*F(3)d9E_i9-cTg>G5yj3^LO3i(#z2<)NDf3{eFV&}^@|=0VJcz%3 zEp;avhs-BXU7%IgLkRr$1H0dR(mZ65wa+cn%*RtP^I7u=$q2rOAo-m6+yaOn%9G6( z%tKu5eyvI~50E`jEhPEj(w;ZY?Q7;f;gm)$roPIZ?N8mCikk;gJ*hjX59E7go${Ib zT2`u=kC^@DGpV~^6kIX$dGq;HOf#RL?xcFO)ZLKpPVE&^#4qi@zse5Im%58W1(W@_ z-o;H(STtb!&A%rz+|E9s96neJF?7=2RDHTiIYa2B5NT}OtgbaMixrye7HfQUumK}3IxiQqz(i)8zG@Z0L98*~@ z8aG9pO~cXDY^^z!b+(q)YBYx1NjGT{Q*0?)#+I``!22vKSk)qmi)Z?{YYadf)tK*% zT<)&`_W~vXcl}E)X97<8SuQsMc;x4~oDXN*8JS#e5nw-#^P2(x7!L*70Dl9R1e}Z~ zKK+2k2;>3F@N{qla3-LSj=(5*w9AX<_ASiQ>GMpVG+`pi5}w|HNuSK+K1&?yCin=< z#b+r#w*cQph{?Y7lc#;&d%;&G?q#bkz2@>IbLSA6WN*S}ANueBou*e$_T62ywtW1! zd&j{9r{4i|#lPlqPs3iG{uPmm-~i8zR!|B3Hl!* zMu!0{`J(4ZoZCMG^hcoc|12r}MSCs!4CuWXv7P47KgH7jIpA+VtQ#EkkVU@<_=oYB z>RS%`_gVVy0R1A25guaa{kxu%xqlCXUIO|KhyLwcKZ(#Y2pSY3(>ohf2uGhnDMX+U zfkFfd5hz5U5P?Dj{--0L-osPx-BC_Lh2Hg}GD!gI#Xrh(sU#}}yhH%&{XTrxkr(_XjA>ivQX0c2@QW z|I6ZS6=$UQynRyAKay?bH&_0Da8d7%yG<|WrwPW^OL&8X4HDia;oTA{dG-G0hP7+2 z*5)DWov&3b^Dp*SX^R&vURG6AMK9Q%r%=3#*?at3>vlE@@@RPC84d3R-ovIccmKrr z`Ivf7oaCuofsY5XLd_qJ#AP);7va=5i=Ubp<7WxrHc0%yWvHMW7J$_N;yWMblpP#j z&VF>UAn`L3s*M~kaQ15t8k!v;>t{KB8e6p4N!*9#Xm+z4U(UwQ7X19Igz6Lc_%NHR zU3#7&{-Vj&x))N6y+C-?u)&{;MKtU*davm@YIsmC49O`M;zIxbB4)s8ED??p~=2mV#kQ-s~u=Rh+?FT4Be7(KxQ2(J6m z^{Z<(uEksESo6Vv9$dd=bxk0suiL_c8?M{5X7zQ!P3zZh4QvZ;TfOGGK#6-1hvi=`7O?+OuUtE zAxN}2)M2n4(FTapW5{5TG>JFu(Qv+YAFS_a4K{`%_4G>q#!cX=Z;Aw?9pQT3qs1&3 zj?}XbgMJ`jM@NU$V*NUR!!G|p0kD#3>xTs#9KqnWnzg~e_3MH`u6|3{h_*-0^YXv* zR|%ZD5Ez3of5)yCBeVn1Xcw?i)grA%*uOIp_2VgTTe#iW#rzg(N3;n)JkeCo{PE!^JG)EaR#f}pjBn?ocZYi-R2X@p~bBixBAA3lG3 zD<4dMxG~t!9%=~(8|xvfTGFl6Yc?)0LOX?gFx1{2g2N=Q>M#>(!4pRR&Q@r~#m~(N z)fgP+uWN0gr{1o)|DR}5zC<~O%1hMmnkZQ9(y8(fh4!Ojmru&XK|#6975h2Qm{x;= zrEJ+B>vwgO0^+rojcDMjDY=2<#0-VM9M3uNrRMrQC0O{ zL$>z022IEsl(Z}a=P+}Bk;FV&ngf9`e3 zYf?@@ijTcWvUS_|Hi&ln>b|OAP9^A4iIP`3A9c%D3W_?PsPl^Ar&!y|_s}5wD*h@z zP_SIiMeJfIxFk$*a8F`aLVz ze>FdqoSFxxAxkVuUj07Iz$ze7<_Tb3mAr!VeQ>+H%Jb7wUbiGgMad~h`Ji21<*AFR z1;6rBsZnxP8^VNB{;Pbgx>|6!`N@{OluP@I>`2s=ynFpBc{{Y`zD>t1)uJ&V9ix4m q=9%(G?Td8&RlW-ean;rd_|M9aB)Xc&$w!y}C?Etbb_uwe>^}hMgJ<#p literal 0 HcmV?d00001 diff --git a/proglabs/lab10/test/output b/proglabs/lab10/test/output new file mode 100644 index 0000000..8ee7f2a --- /dev/null +++ b/proglabs/lab10/test/output @@ -0,0 +1,26 @@ + + Средняя длинна слова - 1 +Statistic + "Symb" - [ammount] + + "" - [0] + "" - [0] + "\n" - [5] + "\t" - [0] + " " - [20] + "5" - [32764] + "9" - [32654] + ">" - [-1474847549] + other - [991712084] +Statistic + "Symb" - [ammount] + + "" - [0] + "" - [0] + "\n" - [5] + "\t" - [0] + " " - [20] + "5" - [32764] + "9" - [32654] + ">" - [-1474847549] + other - [991712084] \ No newline at end of file diff --git a/proglabs/lab10/test/test.md b/proglabs/lab10/test/test.md new file mode 100644 index 0000000..9cbe668 --- /dev/null +++ b/proglabs/lab10/test/test.md @@ -0,0 +1,5 @@ +asd asd asd dsa ggg qwe asdasdasd qweqweqw + + + a +a