From da1f8a0db7d9ad728e28d7bb08c823295720485c Mon Sep 17 00:00:00 2001 From: 0niiC Date: Wed, 26 Nov 2025 01:38:59 +0700 Subject: [PATCH] m --- proglabs/lab10/func.c | 175 +++++++++++++++++++++++------------------- proglabs/lab10/head.h | 18 ++--- proglabs/lab10/main.c | 28 +++---- 3 files changed, 119 insertions(+), 102 deletions(-) diff --git a/proglabs/lab10/func.c b/proglabs/lab10/func.c index ae2e6f0..61ace36 100644 --- a/proglabs/lab10/func.c +++ b/proglabs/lab10/func.c @@ -1,14 +1,15 @@ #include "head.h" -int buffinput(int *x, int *inbuff, int *buff){ + +int queryinput(int *x, int *inquery, int *query){ setlocale(LC_ALL, ""); //INPUT------------------------------------------------- wint_t ch; - *inbuff = 0; - while((ch=getwchar())!='\n'&&ch!='\t'&&ch!=' '&&*inbuff= L'а' && sym <= L'я') || (sym >= L'А' && sym <= L'Я')) { @@ -47,7 +48,7 @@ int buffinput(int *x, int *inbuff, int *buff){ c++; continue; } - x[27]++; + x[33]++; c++; } //________________________________________________________ @@ -57,144 +58,153 @@ int buffinput(int *x, int *inbuff, int *buff){ } -void func1 (char **f, int *x,int inbuff, int *buff){ +void func1 (char **f, int *x,int inquery, int *query){ switch(funcReturn(f[2])){ case 1://Определяет среднюю длину слова в тексте { - if(x[28]){ - x[30]/=x[29]; + if(x[32]){ + x[30]/=x[31]; printf("\n\tСредняя длинна слова - %d",x[30]); count(x); } else{ - x[30]+=inbuff; - x[29]++; + x[30]+=inquery; + x[31]++; } break; } case 2://Подсчитывает количество слов, длина которых не превышает 5 символов. { - if(x[28]){ + if(x[32]){ printf("\n\tВсего слов <5 букв - %d",x[30]); } - else if(inbuff<5)x[30]++; + else if(inquery<5)x[30]++; break; } case 3://Определяет количество букв после первого и до последнего слова. { - 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[31]); + else {x[30]-=x[0];x[31]=1;} + if(x[32]){x[30]+=x[0];printf("\n\tКолл-во букв после 1 и до последнего слова - %d",x[30]);} break; } case 4://Удаляет первую букву каждого слова и выводит результат. { - if(x[28]); + if(x[32]); else - put(1,x,inbuff,buff); + put(1,x,inquery,query); break; } case 5://определяет, сколько в заданном тексте слов, начинающихся с буквы,заданной пользователем. { - if(x[28]) + if(x[32]) printf("\n\t Слов начинающихся на %c - %d",f[4][0],x[30]); else - if(buff[0]==f[3][0])x[30]++; + if(query[0]==f[3][0])x[30]++; break; } case 6://находит сумму всех цифр в введенном предложении. (если в тексте нетцифр, добавить) предусмотреть обработку шаблонов (12word, wo12rd,word12) { - if(x[28]) - printf("\n\t Найти сумму всех цифр - %d",x[29]); + if(x[32]) + printf("\n\t Найти сумму всех цифр - %d",x[31]); else - for(int i=0;i='0'&&buff[i]<='9'){ - x[30]=(x[30]*100)+(buff[i]-'0'); + for(int i=0;i='0'&&query[i]<='9'){ + x[30]=(x[30]*100)+(query[i]-'0'); } } - x[29]+=x[30]; + x[31]+=x[30]; x[30]=0; break; } case 7:// вставляет восклицательный знак в конце каждой строки текста. { - if(x[28]); + if(x[32]); 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); + if(query[inquery-1]=='\n'){ + if(query[inquery-2]=='!'||query[inquery-2]=='?'||query[inquery-2]=='.'||query[inquery-2]==',') + query[inquery-2]='!'; + else {query[inquery-1]='!';query[inquery]='\n';} + x['!'-28]++;inquery++;} + put(0,x,inquery,query); } break; } case 8://проверяет заканчивается ли каждая строка точкой и добавляет ее при необходимости, считает сколько точек было добавлено { - if(x[28]); + if(x[32]); 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); + if(query[inquery-1]=='\n'){ + if(query[inquery-2]=='!'||query[inquery-2]=='?'||query[inquery-2]=='.'||query[inquery-2]==',') + query[inquery-2]='.'; + else {query[inquery-1]='.';query[inquery]='\n';} + x['!'-28]++;inquery++;} + put(0,x,inquery,query); } break; } case 9://определяет сколько раз в введенной строке встречается слово,заданное пользователем. { - if(x[28]) + if(x[32]) printf("\n\t Слово %s встречается - %d раз",f[4],x[30]); else{ - if(last(inbuff,buff))inbuff--; - x[30]+=strbuff(f[3],buff);} + if(last(inquery,query))inquery--; + x[30]+=strquery(f[3],query);} break; } case 10://подсчитывает количество букв в каждом втором слове. { - /* x[26] = x[0] - x[27]; - if(x[28]){ - x[29]=x[27]-x[29]; - printf("\n\t Сумма букв в четных словах - %d",x[29]); + x[34] = x[0] - x[33]; + if(x[32]){ + x[31]=x[33]-x[31]; + printf("\n\t Сумма букв в четных словах - %d",x[31]); } else{ if(x[30]%2==0) - x[29]+=x[26]; - x[27]+=x[27]; + x[31]+=x[34]; + x[33]+=x[33]; x[30]++; -*/ } + } break; } } } -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); + if(x[32]){ + printf("\n\t Количество букв начинающихся с %c - %d",x[32],x[34]); + } + else if(!(x[31])){x[31]=0;x[33]=query[inquery-1];} + else{if (query[0]==x[33]){x[34]++;}} break; } case 2: //Подсчитывает, сколько слов имеют указанную пользователем длину. { - if(x[28])printf("\n\t Слов имеющих указанную длинну - %d",x[30]); + if(x[32])printf("\n\t Слов имеющих указанную длинну - %d",x[30]); else{ - if(last(inbuff,buff))inbuff--; - if(strbuff(f[3],buff))x[30]++; + if(last(inquery,query))inquery--; + if(strquery(f[3],query))x[30]++; break;} } case 3: //Печатает самое длинное слово в тексте. { + int ch[20]; + if(x[32]){printf("\n\t")} + else{ + if(x[31]тевирП { - put(inbuff-1,x,0,buff); + put(inquery-1,x,0,query); break; } case 2: //Делит слово на два и меняет начало с концом. Пример: жук -> кжу,солнце -> нцесол @@ -277,33 +287,37 @@ void func3 (char **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]=='?')) { + +int last(int inquery,int *query){ + if((query[inquery-1]=='.') || + (query[inquery-1]==',') || + (query[inquery-1]=='!') || + (query[inquery-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(iinquery) + for(;i>inquery;i--) + putwchar(query[i]); if(x[30]!=x[2]){putwchar('\n');} - if(x[29]!=x[3]){putwchar('\t');} - if(x[27]!=x[4]){putwchar(' ');} + if(x[31]!=x[3]){putwchar('\t');} + if(x[33]!=x[4]){putwchar(' ');} x[30]=x[2]; - x[29]=x[3]; - x[27]=x[4]; + x[31]=x[3]; + x[33]=x[4]; } + + void count(int *x){ int sum = 0; printf("\nStatistic"); @@ -322,15 +336,16 @@ void count(int *x){ } for (int i = 58; i <= 64; i++) { - if(x[i-28]>10) - printf("\n\t \"%c\" = [%d]", i, x[i-28]); + if(x[i-38]>10) + printf("\n\t \"%c\" = [%d]", i, x[i-32]); else sum+=x[i-38]; } - printf("\n\t other - [%d]",sum+x[27]); + printf("\n\t other - [%d]",sum+x[33]); } + int str(char *a, char *b) { int i = 0; while(a[i] != '\0' && b[i] != '\0') { @@ -340,11 +355,13 @@ int str(char *a, char *b) { return a[i] == b[i]; } -int strbuff(char *a, int *b){ + +int strquery(char *a, int *b){ return 0; } + int funcReturn(char *f){ int swt=0; if(str(f,"1"))swt=1; diff --git a/proglabs/lab10/head.h b/proglabs/lab10/head.h index 6d3e59c..decedf8 100644 --- a/proglabs/lab10/head.h +++ b/proglabs/lab10/head.h @@ -7,31 +7,31 @@ // GET -int buffinput(int *x, int *inbuf, int *buff); +int queryinput(int *x, int *inbuf, int *query); // FUNC -void func1(char **f, int *x, int inbuff, int *buff); +void func1(char **f, int *x, int inquery, int *query); -void func2(char **f, int *x, int inbuff, int *buff); +void func2(char **f, int *x, int inquery, int *query); -void func3(char **f, int *x, int inbuff, int *buff); +void func3(char **f, int *x, int inquery, int *query); -int last(int inbuff,int *buff); +int last(int inquery,int *query); -void put(int i,int *x,int inbuff,int *buff); +void put(int i,int *x,int inquery,int *query); void count(int *x); int str(char *a,char *b); -int strbuff(char *a,int *b); +int strquery(char *a,int *b); int funcReturn(char *f); // DEFINE #define clear printf("\n \033[H\033[J \n") -#define BUFFMAX 20 -#define XMAX 31 +#define QUERYMAX 20 +#define XMAX 40 #endif diff --git a/proglabs/lab10/main.c b/proglabs/lab10/main.c index 6ac68a6..8812fd0 100644 --- a/proglabs/lab10/main.c +++ b/proglabs/lab10/main.c @@ -3,8 +3,8 @@ int main(int argc, char *argv[]){ setlocale(LC_ALL, ""); - int buff[BUFFMAX]; - int inbuff; + int query[QUERYMAX]; + int inquery; int x[XMAX]; for (int i = 0;i