Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 22.09.2014
Сообщений: 13
1

Частотная таблица повторений символов

30.09.2014, 22:16. Просмотров 1299. Ответов 13
Метки нет (Все метки)

Підрахувати для текста частотну таблицю, тобто для кожного символа визначити, його частоту появи в тексті (число таких символів у тексті ділене на загальне число символів у тексті).
 Комментарий модератора 
Перевожу
Подготовить частотную таблицу, такую, что для каждого символа текста она определяет его частоту появления в тексте (число символов в тексте деленное на общее количество символов).
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2014, 22:16
Ответы с готовыми решениями:

Подсчитать количество повторений символов входящих в состав введенной строки
Задача: написать программу, которая считает, сколько раз каждый символ, входящий в состав введенной...

Количество повторений элементов заданного множества символов во введенной строке
Ребят ,нужна помощь,как можно переделать эту программу только через указатели? Вот задание на...

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

Запрет повторений символов
Создал простейший калькулятор в Lazarus . Нужно, чтобы юзер не мог задавать больше 1 запятой....

13
0 / 0 / 0
Регистрация: 22.09.2014
Сообщений: 13
01.10.2014, 09:46  [ТС] 2
Подготовить частотную таблицу, такую, что для каждого символа текста она определяет его частоту появления в тексте (число символов в тексте деленное на общее количество символов).
0
653 / 574 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
01.10.2014, 10:11 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
std::map<char, double> FreqChar;
ostream f;
f.open("myFileName");
char c = 0;
int totalChars = 0;
while(c!=EOF)
{
ostream>>c;
FreqChar[c]++;
totalChars++;
}
for(map<char, double>::iterator it = FreqChar.begin(); it != FreqChar.end(); it++)
{
it->second/=totalChars;
}
примерно так
0
0 / 0 / 0
Регистрация: 22.09.2014
Сообщений: 13
01.10.2014, 10:49  [ТС] 4
а можно с объяснениями?)
0
0 / 0 / 0
Регистрация: 22.09.2014
Сообщений: 13
01.10.2014, 10:56  [ТС] 5
Цитата Сообщение от aLarman Посмотреть сообщение
примерно так
Выдает кучу ошибок(
Частотная таблица повторений символов
0
457 / 382 / 326
Регистрация: 05.11.2013
Сообщений: 1,043
Записей в блоге: 6
01.10.2014, 13:21 6
На этом форуме используются русский и английский.
Печатает только количество вхождений, преобразовать к % элементарно:
C++
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
32
33
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
 
void main () {
 static char ascii[256];
 char name[80];
 FILE *fp;
 int i;
 char c;
 textmode (C4350);
 textcolor (7);
 clrscr();
 printf ("\nИмя файла (короткое)? "); fflush(stdin); scanf("%s",name);
 fp=fopen (name,"rt");
 if (fp==NULL) {
  printf ("\nCan't open file %s\nPress Enter to EXIT",name);
  fflush (stdin); getchar(); exit (1);
 }
 while (!feof(fp)) {
  fread (&c,1,1,fp);
  ascii[c]++;
 }
 fclose (fp);
 textcolor (LIGHTRED);
 for (i=0; i<256; i++) {
  if (i==0 || i>6 && i<14 || i==255) cprintf ("%02d",i);
  else cprintf ("%c",i);
  printf (" %d",ascii[i]);
  printf (i%8==7?"\n":"\t");
 }
 printf ("\nPress Enter to EXIT"); fflush (stdin); getchar();
}
0
653 / 574 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
01.10.2014, 13:23 7
это кусок кода, надо написать ф-цию main
добавить инклюды
C++
1
2
3
#include<map>
#include<fstream>
#include<iostream>
и быть может еще чего то, не все же за Вас делать
0
Эксперт С++
1889 / 1237 / 354
Регистрация: 16.05.2013
Сообщений: 3,239
Записей в блоге: 6
01.10.2014, 14:04 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <set>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
int main(int argc, char* argv[]) {
    std::ifstream file("C:\\text.txt");
    if(!file)
        std::cerr << "Error!\n";
    std::multiset<char> coll{std::istream_iterator<char>(file), std::istream_iterator<char>()};
    auto lo = coll.begin();
    auto up = std::upper_bound(lo, coll.end(), *lo);
    for(; lo != coll.end(); lo = up, up = std::upper_bound(up, coll.end(), *up))
        std::cout << *lo << ' ' << std::setprecision(5) << static_cast<double>(coll.count(*lo)) / coll.size() << std::endl;
    return EXIT_SUCCESS;
}
0
0 / 0 / 0
Регистрация: 22.09.2014
Сообщений: 13
03.10.2014, 10:59  [ТС] 9
Цитата Сообщение от aLarman Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
std::map<char, double> FreqChar;
ostream f;
f.open("myFileName");
char c = 0;
int totalChars = 0;
while(c!=EOF)
{
ostream>>c;
FreqChar[c]++;
totalChars++;
}
for(map<char, double>::iterator it = FreqChar.begin(); it != FreqChar.end(); it++)
{
it->second/=totalChars;
}
почему-то все равно не работает... можно с комментариями?

Добавлено через 16 часов 9 минут
C++
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
32
33
34
35
36
37
38
#include "stdio.h"
#include "stdafx.h"
#include "iostream"
#include "conio.h"
#pragma warning(disable : 4996)
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (0,"");     //необхідно, якщо є кирилиця
    char text[10][80], *p;
    FILE *f;
    f=fopen("C:\\text.txt","r");        //відкриття файлу
    if (!f)
    {   printf("Error open file\n"); //якщо помилка - кінець
        return(0);
    }
    int i = 0, countstr;
    while (!feof(f))            //читати, поки не кінець файлу
    {   fgets(text[i],80,f);    //читати весь рядок
        i++;
    }
    countstr = i;
    for (i=0; i<countstr; i++)      //цикл по всіх рядках
        printf("%s", text[i]);      //видача на екран
        //  puts(text[i]);      //видає рядок і переводить маркер
    printf("\n");
    int countletter = 0;
    for (i=0; i<countstr; i++)
    {   p = text[i];    //установка покажчика в початок рядка
        while (*p)  //поки не кінець рядка
        {   if ((*p!=' ' && *(p+1)==' ') ||(*p!=' ' && *(p+1)=='\0') )
            countletter++;
            p++;    //перенести показчик на наступний символ
        }
    }
    printf("\nколичество букв в данном тексте = %i\n", countletter);
    fclose (f);
}
Читает слова,а надо буквы(...
0
Эксперт С++
1889 / 1237 / 354
Регистрация: 16.05.2013
Сообщений: 3,239
Записей в блоге: 6
03.10.2014, 11:24 10
andreyklochko, смотрите мой пост. Читает буквы.
0
0 / 0 / 0
Регистрация: 22.09.2014
Сообщений: 13
07.10.2014, 00:58  [ТС] 11
Цитата Сообщение от Ilot Посмотреть сообщение
andreyklochko, смотрите мой пост. Читает буквы.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <set>
#include <fstream>
#include <iterator>
#include <algorithm>
#include <iomanip>
#include <cstdlib>
int main(int argc, char* argv[])
{
    std::ifstream file("C:\text.txt");
    if(!file)
        std::cerr << "Error!\n";
    std::multiset<char> coll;
    {
        std::istream_iterator<char>(file), std::istream_iterator<char>();
    }
    auto lo = coll.begin();
    auto up = std::upper_bound(lo, coll.end(), *lo);
    for(; lo != coll.end(); lo = up, up = std::upper_bound(up, coll.end(), *up))
        std::cout << *lo << ' ' << std::setprecision(5) << static_cast<double>(coll.count(*lo)) / coll.size() << std::endl;
}
требуется индетефикатор в этой строчке
C++
1
std::istream_iterator<char>(file), std::istream_iterator<char>();
0
Эксперт С++
1889 / 1237 / 354
Регистрация: 16.05.2013
Сообщений: 3,239
Записей в блоге: 6
07.10.2014, 07:51 12
Цитата Сообщение от andreyklochko Посмотреть сообщение
требуется индетефикатор в этой строчке
Не требуется. Уберите ; в13 и 15 строчках и включите в компиляторе поддержку стандарта С++11.
0
0 / 0 / 0
Регистрация: 22.09.2014
Сообщений: 13
07.10.2014, 16:22  [ТС] 13
Цитата Сообщение от Ilot Посмотреть сообщение
включите в компиляторе поддержку стандарта С++11.
я этого пока не умею( а можно сделать мой вариант? мне главное чтоб было по-проще)
0
1362 / 586 / 198
Регистрация: 02.08.2011
Сообщений: 2,880
07.10.2014, 18:48 14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 int ArrSimv[256]={};
   const char *FName="M:\\test.txt";
 
   int ch;  //Буква (символ)
   double count_{0}; //Всего букв. Double для корректного деления
 
   ifstream F1(FName);
      while (!F1.eof()){
        ch=F1.get();   //Прочитал символ
        if ((ch==' ') || (ch=='\n')) continue;  //разделители можно убирать так
        ArrSimv[ch]++;  //увеличили число встретившегося символа на 1
        if (ArrSimv[ch]==1) count_++; //Если символ был встречен раз, увеличиваем счетчик
      }
   F1.close();
 
//Выводим на экран соотношение встреч
    for(int i=0;i<256;i++){
        if (ArrSimv[i]>0) {
                cout<<(char)i<<"   "<<ArrSimv[i]/count_*100<<"\n";
               // cout<<(char)i<<"   "<<ArrSimv[i]/count_*100<<"  "<<"wstrechen "<<ArrSimv[i]<<" raz is "<<count_<<"\n";
        }
    }
см. Мода массива
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2014, 18:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Расстановка символов без повторений
может кто-нить помочь с интересной задачкой? есть определенный набор символов, допустим это...

Подсчёт количества повторений символов в строке
Подскажите , почему не работает код? Ввожу строку , ввожу символ, проверяю сколько раз он...

Сформировать строку из символов без повторений
Вводится строка. Сформировать строку из символов(без повторений), содержащихся в данной строке....

Частота повторений для всех символов в тексте
У меня есть текст, допустим: фывфыв ывфваавв ( на практике тут будет 200 символов ). Мне нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.