Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите сделать,пожалуйста!Помогите срочно Пожалуйста!с++.подсчитать вероятности символов, встречающихся в текстовом файле. Отсортировать вероятности символов по убыванию

82K
01 июня 2012 года
АленаСТ
5 / / 01.06.2012
Помогите срочно Пожалуйста!Нужно подсчитать вероятности символов, встречающихся в текстовом файле. Отсортировать вероятности символов по убыванию
326
01 июня 2012 года
sadovoya
757 / / 19.11.2005
Причем тут вероятность? В конкретном файле ровно столько то букв "а", столько-то "б". Или речь идет все-таки о случайных выборках букв из файла? Для огромных файлов так целесообразно поступать, например. Задача не ясна - либо тупой подсчет букв, либо методы обсчета выборок.
82K
01 июня 2012 года
АленаСТ
5 / / 01.06.2012
Нужен,как я поняла, именно "тупой" подсчет символов.на данном этапе необходимо именно строчка или несколько. я кое что набросала, но что то не так. не могу понять что именно. помогите хоть разобраться,пожалуйста!
исходник:


#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

void BSort(int A[], int n)
{
int temp,min,i,j,B[n];
for(i=0;i<n;i++)
B=A;
for(i=0;i<n-1;i++)
for (j=n-1;j>i;j--)
{
if (B[j-1]>B[j])
{
temp=B[j];
B[j]=B[j-1];
B[j-1]=temp;
}}
printf("Ìàññèâ ïî óáûâàíèþ:", B[j]);
}
void prf(int A[], int n)
{
int i;
for (i=0;i<n;i++)
printf("A[%d] =%6.0d\n",i,A);
}
int main()
{FILE *tekst;
int i, simv;
char ch;
char bukv [150];
int sum = 0; //çàïîëíåíèå ñòðîêè
if ((tekst = fopen("tekst.txt","r")) == NULL) {
printf ("îøèáêà îòêðûòèÿ ôàéëà");
getch();
exit(1);
}
tekst = fopen("tekst.txt","r");
while (!feof(tekst)) //Ïîêà íå äîøëè äî êîíöà ôàéëà
{
ch = fgetc(tekst); // Ñ÷èòûâàåì ïî îäíîìó ñèìâîëó
if(ch == ' ' || ch == '\n' || ch == '\t' || ch == ',') simv++; //Ñ÷èòàåò òî÷êè, ïåðåõîä íà ñëåäóùóþ ñòðîêó è òàáóëÿöèþ.
}
fseek(tekst,0,SEEK_SET); //Ïåðåõîä â íà÷àëî ôàéëà.
printf("simv: %i", simv);
while (!feof(tekst)) //Ïîêà íå äîøëè äî êîíöà ôàéëà
{
ch = fgetc(tekst); // Ñ÷èòûâàåì ïî îäíîìó ñèìâîëó

{
if (i=='à')
sum++;
return sum;
}
{
if (i=='á')
sum++;
return sum;
}
{
if (i=='â')
sum++;
return sum;
}
{
if (i=='ã')
sum++;
return sum;
}
{
if (i=='ä')
sum++;
return sum;
}
{
if (i=='å')
sum++;
return sum;
}
{
if (i=='¸')
sum++;
return sum;
}
{
if (i=='æ')
sum++;
return sum;
}
{
if (i=='ç')
sum++;
return sum;
}
{
if (i=='è')
sum++;
return sum;
}
{
if (i=='é')
sum++;
return sum;
}
{
if (i=='ê')
sum++;
return sum;
}
{
if (i=='ë')
sum++;
return sum;
}
{
if (i=='ì')
sum++;
return sum;
}
{
if (i=='í')
sum++;
return sum;
}
{
if (i=='î')
sum++;
return sum;
}
{
if (i=='ï')
sum++;
return sum;
}
{
if (i=='ð')
sum++;
return sum;
}
{
if (i=='ñ')
sum++;
return sum;
}
{
if (i=='ò')
sum++;
return sum;
}
{
if (i=='ó')
sum++;
return sum;
}
{
if (i=='ô')
sum++;
return sum;
}
{
if (i=='õ')
sum++;
return sum;
}
{
if (i=='ö')
sum++;
return sum;
}
{
if (i=='÷')
sum++;
return sum;
}
{
if (i=='ø')
sum++;
return sum;
}
{
if (i=='ù')
sum++;
return sum;
}
{
if (i=='ú')
sum++;
return sum;
}
{
if (i=='û')
sum++;
return sum;
}
{
if (i=='ü')
sum++;
return sum;
}
{
if (i=='ý')
sum++;
return sum;
}
{
if (i=='þ')
sum++;
return sum;
}
{
if (i=='ÿ')
sum++;
return sum;
}}
fseek(tekst,0,SEEK_SET);
printf("\nÂåðîÿòíîñòè ñèìâîëîâ: %i",bukv);
}
int main()
{
int *A,n=10;
A=(int *) malloc(n*sizeof(int));
BSort(A,n);
getch();
return 0;
}
2.1K
01 июня 2012 года
disputant
95 / / 28.05.2007
Как все запущено...

Вобщем, на коленке, не компилируя - просто сама идея:


Код:
int freq[256] = { 0 };
int c;

while((c = fgetc(f)) != EOF)
{
    freq[c]++;
}

......

for(int i = 0; i < 256; ++i)
{
    if (freq[i] == 0) continue;
    printf("Char %c:  %d\n",i,freq[i]);
}
Наверное, можно добавить проверки, чтоб не выводить непечатные :) символы типа \n, \t и иже с ними.

А, да! там же еще сортировка...

Тогда


Код:
struct {
    int freq;
    char c;
} freq[256] = { 0 }; // Вообще-то это С++ объявление, как там в С - смотрите сами

int c;


for(int i = 0; i < 256; ++i)
{
    freq[i].c = i;
    freq[i].freq = 0;
}
.......

while((c = fgetc(f)) != EOF)
{
    freq[c].freq++;
}

......

for(int i = 0; i < 256; ++i)
{
    if (freq[i] == 0) continue;
    printf("Char %c:  %d\n",i,freq[i]);
}  

qsort(freq,sizeof(freq[0]),256,compare);
где compare сравнивает два элемента freq...


Слушайте, у вас все же как в тегах - C, или как в заголовке - C++?!
82K
02 июня 2012 года
АленаСТ
5 / / 01.06.2012
с++.
поясните пожалуйста, что означают EOF, и qsort(freq,sizeof(freq[0]),256,compare);
2.1K
02 июня 2012 года
disputant
95 / / 28.05.2007
Цитата: АленаСТ
с++.
поясните пожалуйста, что означают EOF, и qsort(freq,sizeof(freq[0]),256,compare);



Если C++, то читать лучше, используя поток, а сортировать - используя sort() из STL. Но можно и так.

EOF - если считан символ EOF, это значит, что достигнут конец файла (Enf Of File), а qsort - стандартная библиотечная функция для сортировки. Ей передается массив каких-то элементов, указывается их количество и размер, и указатель на функцию, которая сравнивает два элемента.

82K
03 июня 2012 года
АленаСТ
5 / / 01.06.2012
Простите,за глупые вопросы,я только учусь, а что означает freg?просто счетчик?
82K
03 июня 2012 года
АленаСТ
5 / / 01.06.2012
Вообще, если можно поясните свои действия. я примерно понимаю,но не все
326
03 июня 2012 года
sadovoya
757 / / 19.11.2005
О библиотечных функциях см. здесь, например.
326
03 июня 2012 года
sadovoya
757 / / 19.11.2005
А freq - это пользовательский массив структур, содержащих символ в одном из полей, а в другом его частоту. Начните наконец сами немного вникать, а не ждать пока разжуют.
2.1K
03 июня 2012 года
disputant
95 / / 28.05.2007
Тем более что люди тут постоянно не сидят и не ждут, когда вы очередной вопрос зададите :)
За меня все ответили, sadovoya, спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог