C++: Задачи armadillo: №3 Установить частоту употребления букв в тексте.
реклама
Посчитать количество двубуквенных сочетаний, состоящих из гласных.(Результаты записать в файл).
#include<stdio.h>
#include<stdlib.h>
//********************************************************************
void bigalpha(char *txt,unsigned int l);
void countalpha(char *txt,unsigned int l,char *alpha,int *num);
void diagram(FILE *f,char *alpha,int *num);
void outtwoglasn(FILE *f,char *txt,unsigned int l);
int isglasn(char c);
//********************************************************************
void bigalpha(char *txt,unsigned int l)
{
int i,j;
char *big=”АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ”;
char *sml=”абвгдеёжзийклмнопрстуфхцчшщъыьэюя”;
for(i=0;i<l;i++)
for(j=0;j<33;j++)
if(txt[i]==sml[j])
{
txt[i]=big[j];
break;
}
}
void countalpha(char *txt,unsigned int l,char *alpha,int *num)
{
int i,j;
for(i=0;i<33;num[i]=0,i++);
for(i=0;i<l;i++)
for(j=0;j<33;j++)
if(txt[i]==alpha[j])
{
num[j]++;
break;
}
}
void diagram(FILE *f,char *alpha,int *num)
{
int i,j,buf;
double freq,nalpha=0;
char c;
for(i=0;i<32;nalpha+=num[i],i++);
for(i=0;i<32;i++)
for(j=i+1;j<33;j++)
if(num[j]>num[i])buf=num[j],num[j]=num[i],num[i]=buf,
c=alpha[j],alpha[j]=alpha[i],alpha[i]=c;
for(i=0;i<33;i++)
{
freq=100*num[i]/nalpha,fprintf(f,”%c %6.2f “,alpha[i],freq);
for(j=0;j<50*num[i]/num[0];j++) putc(‘*’,f);
putc(‘\n’,f);
}
}
int isglasn(char c)
{
char *glasn=”АЕЁИОУЫЭЮЯ”;
int i;
for(i=0;i<10;i++)
if(glasn[i]==c) return 1;
return 0;
}
void outtwoglasn(FILE *f,char *txt,unsigned int l)
{
unsigned int i;
int n=0;
for(i=0;i<l-1;i++)
if(isglasn(txt[i])&isglasn(txt[i+1]))n++;
fprintf(f,”\nКоличество двубуквенных гласных сочетанй %d\n”,n);
}
//********************************************************************
void main()
{
FILE *f;
char *alpha=”АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ”;
unsigned char *txt;
unsigned int l;
int num[33];
f=fopen(“text.in”,”r”);
fseek(f,0,SEEK_END);
l=ftell(f);
txt=malloc(l);
fseek(f,0,SEEK_SET);
fread(txt,1,l,f);
fclose(f);
bigalpha(txt,l);
countalpha(txt,l,alpha,num);
f=fopen(“n4.out”,”w”);
diagram(f,alpha,num);
outtwoglasn(f,txt,l);
fclose(f);
free(txt);
}
n4.out
О 11.76 **************************************************
Е 8.95 **************************************
И 8.33 ***********************************
А 7.72 ********************************
Н 6.99 *****************************
С 6.25 **************************
Л 5.76 ************************
Т 5.64 ***********************
В 4.90 ********************
Р 4.53 *******************
М 3.55 ***************
П 3.06 *************
Д 2.94 ************
Ь 2.57 **********
К 2.45 **********
Г 1.84 *******
Х 1.47 ******
Ч 1.47 ******
Ы 1.47 ******
З 1.47 ******
Б 1.35 *****
Я 1.23 *****
Й 1.10 ****
У 0.98 ****
Ц 0.98 ****
Ш 0.74 ***
Ю 0.49 **
Ж 0.37 *
Ф 0.37 *
Щ 0.25 *
Э 0.25 *
Ъ 0.00
Ё 0.00
Количество двубуквенных гласных сочетанй 27
реклама
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Сейчас обсуждают