Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не считает частоту / 9 сообщений из 9, страница 1 из 1
08.08.2016, 16:37
    #39288437
otars
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не считает частоту
Нужно найти частоту встречаемости файла

В интернете нашёл формулу

(n / len) * 100.
где n - количество конкретного символа
len - длина строки

Выгружаю файл,считаю длину строки,а потом уже подсчитываю количество встречающихся символов и стараюсь применить выше указанную формулу но результата нету.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
void freq_symb()
{
	FILE *fd1=fopen("test1.txt","r");
	char str[255];
	int map[map_size] = {0};
	cout<<"Загрузка данных из файла..."<<endl;
	if (!fd1) 
       printf("Ошибка!Файл не найден!\n");
    else
	{	
		fgets(str,sizeof(str),fd1); 
printf(str); 
cout<<endl;
int l=strlen(str);
for(int i = 0; i < l; i++)
    {
        map[(unsigned char)str[i]]++;
    }
double frequency = 0.0;
    for(int i = 0; i < map_size; i++)
    {
		if(map[i])		
		{
        printf("'%c' => %d\n", (char)i, map[i]);
		frequency = (map[i]/l)*100;
		printf("'%c' => %d\n", (char)i, frequency);
		}
    }
	cout<<endl;
}
}



map[i] использую как переменную которая хранит количество встречающихся символов в строке.
...
Рейтинг: 0 / 0
08.08.2016, 16:58
    #39288456
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не считает частоту
otars,

У вас целочисленное деление на длину всегда дает 0, т.к. длина всегда больше числителя.
Умножайте сначала на 100, а потом делите на длину.
Ну либо приводите все к double перед делением.
...
Рейтинг: 0 / 0
08.08.2016, 17:01
    #39288461
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не считает частоту
Ну и обрабатывается только первая строка, а не весь файл, как заявлено.

Может еще какие-то баги есть, но через такое вырвиглазное форматирование лень читать.
...
Рейтинг: 0 / 0
08.08.2016, 19:57
    #39288562
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не считает частоту
Код: plaintext
1.
int map[map_size] = {0};



Что такое map_size ?
Так не должно компилироваться.
...
Рейтинг: 0 / 0
08.08.2016, 22:29
    #39288598
otars
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не считает частоту
MasterZiv
Код: plaintext
1.
int map[map_size] = {0};



Что такое map_size ?
Так не должно компилироваться.

Код: plaintext
1.
#define map_size 256



виноват забыл показать.
...
Рейтинг: 0 / 0
09.08.2016, 03:18
    #39288637
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не считает частоту
Anatoly Moskovskyotars,

У вас целочисленное деление на длину всегда дает 0, т.к. длина всегда больше числителя.
Умножайте сначала на 100, а потом делите на длину.
Ну либо приводите все к double перед делением.

Здесь единственный выход приведение к любому из floating type, умножение на 100 не поможет. ex: (2*100)/1000=0


авторВ интернете нашёл формулу

(n / len) * 100.
где n - количество конкретного символа
len - длина строки

Анатолий, смотрите к чему мы идём, люди слушаются ваших советов и 'гуглят', 'ищут в интернете' :D Такими темпами скоро в интернете будут искать как складывать и вычитать
PS Это ни в коему случае не упрек вам, а в контексте удивления того, что на интуитивно понятные вещи, изучаемые в школе, ссылаются как на информацию полученную в сети
...
Рейтинг: 0 / 0
09.08.2016, 12:22
    #39288825
otars
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не считает частоту
SashaMercury,
странно я не помню чтобы формулу по получению частоты встречаемости символов проходили в школе.
...
Рейтинг: 0 / 0
09.08.2016, 12:28
    #39288831
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не считает частоту
SashaMercuryЗдесь единственный выход приведение к любому из floating type, умножение на 100 не поможет. ex: (2*100)/1000=0
Ну, если точность нужна, то да, приводить к double
...
Рейтинг: 0 / 0
09.08.2016, 12:39
    #39288838
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не считает частоту
otarsя не помню чтобы формулу по получению частоты встречаемости символов проходили в школе.

Проценты. Второй класс начальной школы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не считает частоту / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]