diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b03c889 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*/prog +*\~ diff --git a/proglabs/lab10/func.c b/proglabs/lab10/func.c index c98c48d..32ab3ce 100644 --- a/proglabs/lab10/func.c +++ b/proglabs/lab10/func.c @@ -1,4 +1,6 @@ -#include "head.i" int queryinput(int *x, int *inquery, int *query){ +#include "head.h" + +int queryinput(int *x, int *inquery, int *query){ setlocale(LC_ALL, ""); //INPUT------------------------------------------------- diff --git a/proglabs/lab10/func.c~ b/proglabs/lab10/func.c~ deleted file mode 100644 index 782b168..0000000 --- a/proglabs/lab10/func.c~ +++ /dev/null @@ -1,558 +0,0 @@ -#include "head.h" - - -int queryinput(int *x, int *inquery, int *query){ - setlocale(LC_ALL, ""); - - //INPUT------------------------------------------------- - wint_t ch; - *inquery = 0; - while((ch=getwchar())!=L'\n'&&ch!=L'\t'&&ch!=L' '&&*inquery= 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[33]++; - c++; - } - //________________________________________________________ - - - return 0; -} - -void func1 (char **f, int *x,int inquery, int *query){ - switch(funcReturn(f[2])){ - case 1://Определяет среднюю длину слова в тексте - { - if(x[32]){ - x[30]/=x[31]; - printf("\n\tСредняя длинна слова - %d",x[30]); - } - else{ - x[30]+=inquery; - x[31]++; - } - break; - } - - case 2://Подсчитывает количество слов, длина которых не превышает 5 символов. - { - if(x[32]){ - printf("\n\tВсего слов <5 букв - %d",x[30]); - } - else if(inquery<5)x[30]++; - break; - } - - case 3://Определяет количество букв после первого и до последнего слова. - { - 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[32]); - else - put(x,1,inquery,query); - break; - } - - case 5://определяет, сколько в заданном тексте слов, начинающихся с буквы,заданной пользователем. - { - if(x[32]) - printf("\n\t Слов начинающихся на %c - %d",f[4][0],x[30]); - else - if(query[0]==f[3][0])x[30]++; - break; - } - case 6://находит сумму всех цифр в введенном предложении. (если в тексте нетцифр, добавить) предусмотреть обработку шаблонов (12word, wo12rd,word12) - { - if(x[32]) - printf("\n\t Найти сумму всех цифр - %d",x[31]); - else - for(int i=0;i=L'0'&&query[i]<=L'9'){ - x[30]=(x[30]*100)+(query[i]-L'0'); - } - } - x[31]+=x[30]; - x[30]=0; - break; - } - - case 7:// вставляет восклицательный знак в конце каждой строки текста. - { - if(x[32]); - else{ - if(query[inquery-1]==L'\n'){ - if(query[inquery-2]==L'!'||query[inquery-2]==L'?'||query[inquery-2]==L'.'||query[inquery-2]==L',') - query[inquery-2]=L'!'; - else {query[inquery-1]=L'!';query[inquery]=L'\n';} - x[L'!'-28]++;inquery++;} - put(x,0,inquery,query); - } - break; - } - - case 8://проверяет заканчивается ли каждая строка точкой и добавляет ее при необходимости, считает сколько точек было добавлено - { - if(x[32]); - else{ - if(query[inquery-1]==L'\n'){ - if(query[inquery-2]==L'!'||query[inquery-2]==L'?'||query[inquery-2]==L'.'||query[inquery-2]==L',') - query[inquery-2]=L'.'; - else {query[inquery-1]=L'.';query[inquery]=L'\n';} - x[L'!'-28]++;inquery++;} - put(x,0,inquery,query); - } - break; - } - - case 9://определяет сколько раз в введенной строке встречается слово,заданное пользователем. - { - if(x[32]) - printf("\n\t Слово %s встречается - %d раз",f[4],x[30]); - else{ - if(last(inquery,query))inquery--; - x[30]+=strquery(f[3],query);} - break; - } - - case 10://подсчитывает количество букв в каждом втором слове. - { - 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[31]+=x[34]; - x[33]+=x[33]; - x[30]++; - } - break; - } - } -} - -void func2 (char **f, int *x,int inquery, int *query,int *ch){ - switch(funcReturn(f[2])){ - case 1: //Подсчитывает, сколько слов начинается с последней буквы первого слова. - { - 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[32])printf("\n\t Слов имеющих указанную длинну - %d",x[30]); - else{ - if(last(inquery,query))inquery--; - if(strquery(f[3],query))x[30]++; - } - break; - } - case 3: //Печатает самое длинное слово в тексте. - { - if(x[32]){printf("\n\t");} - else{ - if(x[31]1){ - x[30]=x[2]; - x[31]=x[3]; - x[33]=x[4]; - put(x,0,inquery,query); - break; - } - } - } - break; - } - case 7: //Вычисляет количество слов между первой и последней запятой во введенном тексте - { - if(x[32]){printf("\n\tКолличество слов между первой и последней запятой - %d",x[34]);} - else{ - if(x[L','-28]>0){ - x[31]+=inquery; - if(x[L','-28]>x[33]){ - x[34]+=x[31]; - x[33]=x[31]; - x[31]=0; - } - } - } - break; - } - case 8: //Находит два соседних слова, начинающихся с большой буквы - { - if(x[28]); - else{ - if(*query>=L'А'&&*query<=L'Я'){ - x[35]++; - if(x[35]==2){ - x[30]=x[2]; - x[31]=x[3]; - x[33]=x[4]; - x[35]=0; - printf("\n\t"); - put(x,0,x[34],ch); - printf(" - "); - put(x,0,inquery,query); - printf(" | Находятся друг за другом"); - } - for(int i = 0;iтевирП - { - put(x,inquery-1,0,query); - break; - } - case 2: //Делит слово на два и меняет начало с концом. Пример: жук -> кжу,солнце -> нцесол - { - put(x,0,inquery/2,query); - put(x,inquery/2,inquery,query); - break; - } - case 3: //После каждой гласной буквы вставляется буква L'c' и гласная повторяется. Пример: кот ->косот. - { - int alph[20] = {L'а',L'и',L'е',L'ё',L'о',L'у',L'ы',L'э',L'ю',L'я', - L'А',L'И',L'Е',L'Ё',L'О',L'У',L'Ы',L'Э',L'Ю',L'Я'}; - for(int i = 0;i121620, обработать только буквы. - { - x[25]=-1; - for(int i = 0;i= L'а' && query[i] <= L'я'){ - x[25] = (query[i] - L'а') + 1; - if(query[i]>=alphabet[8])x[25]++;} - else if (query[i] == L'ё') - x[25] = 7; - else if (query[i] >= L'А' && query[i] <= L'Я'){ - x[25] = (query[i] - L'А') + 1; - if(query[i]>=alphabet[41])x[25]++;} - else if (query[i] == L'Ё') - x[25] = 7; - if(x[25]!=-1){printf("%d",x[25]);x[25]=-1;} - } - put(x,40,40,query); - break; - } - case 5: //Заменяет буквы верхнего регистра на буквы нижнего и наоборот. Пример: Привет -> пРИВЕТ. - { - for(int i = 0;i32){ - query[i]=alphabet[i-33]; - - } - } - } - put(x,0,inquery,query); - break; - } - /*case 6: //Заменяет буквы на их двоичное представление из таблицы ASCII.Пример: кот ->101010101010111011100010 - { - break; - }*/ - case 7: /*Заменяет букву на заданное смещение в пределах алфавита (шифр - Цезаря), смещение задаётся параметром и может быть положительным или - отрицательным. Пример: кот 3 -> нсх, кот -3 -> злп*/ - { - while(f[3][x[35]]>=L'0'&&f[3][x[35]]<=L'9'){ - x[34] = (x[34]*10)+(f[3][x[35]]-L'0'); - x[35]++; - } - for(int i = 0;i33)x[34]-=33; - if(j+x[34]>=33)x[34]-=33; - query[i]=alphabet[j+x[34]]; - } - - else if(query[i]==alphabet[j]&&j>32){ - while(x[34]>33)x[34]-=33; - if(j+x[34]>=66)x[34]-=33; - query[i]=alphabet[j+33+x[34]]; - } - } - } - put(x,0,inquery,query); - break; - } - case 8: //Делит слово на два и оставляет большую часть. Пример: жук -> к, солнце -> сол - { - if(inquery%2!=0)x[34]=1; - else x[34]=0; - for (int i = 0; i<(inquery/2)+x[34];i++) - x[35] +=query[i]; - for (int i = (inquery/2)+x[34]; ix[36]) - put(x,0,(inquery/2)+x[34],query); - else - put(x,(inquery/2)+x[34],inquery,query); - break; - } - case 9: //Делит слово на два и оставляет меньшую часть. Пример: жук -> жу, солнце -> нце - { - if(inquery%2!=0)x[34]=1; - else x[34]=0; - for (int i = 0; i<(inquery/2)+x[34];i++) - x[35] +=query[i]; - for (int i = (inquery/2)+x[34]; ikot, жук -> zhuk - { - int translit[43]={ - L'a',L'b',L'v',L'g',L'd',L'e' , L'y',/**/L'o' , L'z',/**/L'h' , L'z',L'i',L'y',L'k',L'l',L'm',L'n',L'o', - L'p',L'r',L's',L't',L'u',L'f',L'h',L'c' , L'c',/**/L'h' , L's',/**/L'h' , L's',/**/L'h',/**/L'c',/**/L'h', - L'\'',L'y',L'\'',L'e',L'e' , L'y',/**/L'u' , L'y',/**/L'a'}; - - for(int i =0;i>inquery;i++){ - if( - (query[i] >= alphabet[0] && query[i] <= alphabet[5]) || - (query[i] >= alphabet[8] && query[i] <= alphabet[23]) || - (query[i] >= alphabet[27] && query[i] <= alphabet[30]) || - (query[i] >= alphabet[0+33] && query[i] <= alphabet[5+33]) || - (query[i] >= alphabet[8+33] && query[i] <= alphabet[23+33]) || - (query[i] >= alphabet[27+33] && query[i] <= alphabet[30+33])) - { - query[i]=translit[i]; - } - else if (query[i] != alphabet[26] || query[i] != alphabet[26+33]) - { - for(int z = 0;zinquery) - for(;i>inquery;i--) - printf("%lc",query[i]); - - if(x[30]!=x[2]){putwchar(L'\n');} - if(x[31]!=x[3]){putwchar(L'\t');} - if(x[33]!=x[4]){putwchar(L' ');} - x[30]=x[2]; - x[31]=x[3]; - x[33]=x[4]; -} - - -void printcount(int *x){ - int sum = 0; - printf("\nStatistic"); - printf("\n\t \"Symb\" - [ammount]\n"); - 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-38]>10) - printf("\n\t \"%c\" = [%d]", i, x[i-32]); - else - sum+=x[i-38]; - } - - printf("\n\t other - [%d]",sum+x[33]); -} - - -int str(char *a, char *b) { - int i = 0; - while(a[i] != L'\0' && b[i] != L'\0') { - if(a[i] != b[i]) return 0; - i++; - } - return a[i] == b[i]; -} - - -int strquery(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/main.c b/proglabs/lab10/main.c index ee19380..f221dd4 100644 --- a/proglabs/lab10/main.c +++ b/proglabs/lab10/main.c @@ -10,15 +10,6 @@ int main(int argc, char *argv[]){ for (int i = 0;i='1' && ((int)*argv[1])<='3'){ + swt = ((int)*argv[1]) - '0'; + } + else{ + printf("Wrong [arg1]\n"); + return 1; + } + + if(((int)*argv[2])>='0' && ((int)*argv[2])<='9'){ + switch(swt){ + case 1: + while(queryinput(x,&inquery,query)!=-1) + func1(argv,x,inquery,query); + x[32]=1; + func1(argv,x,inquery,query); + break; + case 2: + while(queryinput(x,&inquery,query)!=-1) + func2(argv,x,inquery,query,assist); + x[32]=1; + func2(argv,x,inquery,query,assist); + break; + case 3: + while(queryinput(x,&inquery,query)!=-1) + func3(argv,x,inquery,query); + break; + } + printcount(x); + } + else{ + printf("Wrong [arg2]\n"); + return 1; + } return 0; } diff --git a/proglabs/lab10/prog b/proglabs/lab10/prog new file mode 100755 index 0000000..69422cc Binary files /dev/null and b/proglabs/lab10/prog differ diff --git a/proglabs/lab10/test/output.1_3 b/proglabs/lab10/test/output.1_3 new file mode 100644 index 0000000..23e1b77 --- /dev/null +++ b/proglabs/lab10/test/output.1_3 @@ -0,0 +1,11 @@ + + Колл-во букв после 1 и до последнего слова - 181 +Statistic + "Symb" - [ammount] + + "Letters" - [184] + "Digits" - [0] + "\n" - [8] + "\t" - [0] + "space" - [35] + other - [12] \ No newline at end of file diff --git a/proglabs/lab10/test/output.2_8 b/proglabs/lab10/test/output.2_8 new file mode 100644 index 0000000..c9449f5 --- /dev/null +++ b/proglabs/lab10/test/output.2_8 @@ -0,0 +1,10 @@ + +Statistic + "Symb" - [ammount] + + "Letters" - [184] + "Digits" - [0] + "\n" - [8] + "\t" - [0] + "space" - [35] + other - [12] \ No newline at end of file diff --git a/proglabs/lab10/test/output.3_4 b/proglabs/lab10/test/output.3_4 new file mode 100644 index 0000000..08eaebb --- /dev/null +++ b/proglabs/lab10/test/output.3_4 @@ -0,0 +1,18 @@ +2164 171614162530 3114 5182193033 141610 +3 9121620123 71091510 2411819121611 1913217229 +10 151 171018123 18194211330151611 518217229 +10 3 191315121023 201101519203123 13322310 +2164 171614162530 3114 5182193033 141610 +10 3 221183323 10 3 7102061119121614 416186 +3 1218132 252171614 3 172119202915151614 1416186 +10 3 1418125152923 17181617119203323 96141310 + +Statistic + "Symb" - [ammount] + + "Letters" - [184] + "Digits" - [0] + "\n" - [8] + "\t" - [0] + "space" - [35] + other - [46] \ No newline at end of file diff --git a/proglabs/lab10/test/test.sh b/proglabs/lab10/test/test.sh old mode 100644 new mode 100755