Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
barbsh
1 / 1 / 2
Регистрация: 13.09.2014
Сообщений: 43
#1

Шеннон-Фано - C++

13.09.2014, 17:36. Просмотров 717. Ответов 5
Метки нет (Все метки)

Помогите пожалуйста, дали курсовую, неделю не могу сделать уже.
В кратце:
1. Посчитать сколько раз встречается каждый символ в введенном тексте
2. Упорядочить символы по убыванию количества совпадений.
3. Найти примерную середину и разделить таблицу пополам(Например, всего 100 символов, середина 50, вот в верхней части должно быть примерно 50 совпадений и в нижней)
4. Дальше каждую половину еще надо отделить до тех пор, пока не останется что отделять, в верх записывать 0, вниз 1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2014, 17:36
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Шеннон-Фано (C++):

Шеннон-Фано
Вопрос будет о методе сжатия изображения(bmp) методом Шеннона-Фано. Допустим я...

Шеннон-Фано, зацикливается программа
В чем косяк? почему то зацикливается и все, хз даже что делать, перепробывал...

Код шеннон или хаффмана в dev c++
всем добрый день; сможете помочь с кодом, надо написать код шеннон или хаффмана...

Алгоритм шеннона фано
Помогите реализовать алгоритм шеннона фано, курсовую скоро сдавать, а у меня...

Алгоритм Шеннона-Фано
Приветствую всех в этой теме. Создаю архиватор по методу Шеннона-Фано. И...

Алгоритм Шеннона-Фано
Помогите, реализовать Алгоритм Шеннона-Фано на С ++, так чтобы мы вводили сроку...

5
XRoy
860 / 710 / 305
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
13.09.2014, 17:46 #2
barbsh,
Показывайте что сделали уже
0
barbsh
1 / 1 / 2
Регистрация: 13.09.2014
Сообщений: 43
13.09.2014, 17:48  [ТС] #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main()
{   unsigned long m = 255, kolvo;// максимальный размер массива, размер массива
    int symbols[255] = { };  // пустой массив для заполнения таблицы частот
 
    char* mass = new char[m]; // Обьявление массива
    cout << "BBegute TekcT: " << endl;
    cin >> mass;
    kolvo = strlen(mass);
    
    
    for (int i = 0; i < kolvo; i++)
    {
        ++symbols[mass[i]];
    }
    for (int i = 0; i < kolvo; i++)
        cout << symbols[i];
С++, а не шарп, очепятка вышла

Добавлено через 59 секунд
По идее, должен был считать, но почему то не хочет, + я еще не знаю куда посчитанные совпадения записывать(
Вот застрял и все
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
14.09.2014, 00:55 #4
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
39
40
41
42
43
#include<iostream>
#include <cstdlib>
using namespace std;
 
int index(char ch, char* symbols, int size)
{
    for (int i = 0; i < size; ++i)
    {
        if (ch == symbols[i])
            return i;
        else
            continue;
    }
    return -1;
}
 
int main()
{   
    const int N = 255;
    const int M = 6;
    
    int frequencys[N] = { };  // пустой массив для заполнения таблицы частот
    char symbols[M] = {'a', 'b', 'c', 'd', 'e', 'f'};
    char text[N]; // Обьявление массива под текст
    cout << "BBegute TekcT: " << endl;
    cin.getline(text, N);
    unsigned long kolvo = strlen(text);
    
    for (int i = 0; i < kolvo; i++)
    {
        int ind = index(text[i], symbols, M);
        if (ind!= -1)
        ++frequencys[ind];
    }
    
    for (int i = 0; i < M; i++)
    {
        cout << symbols[i] << " - " << frequencys[i] << endl;
    }
 
    system("pause");
    return 0;
}
1
Миниатюры
Шеннон-Фано  
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
14.09.2014, 01:32 #5
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
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstdlib>
using namespace std;
 
int main()
{   
    string symbols = "abcdef";
    vector <int> frequency(symbols.size());
    string text; 
    cout << "Enter the text: " << endl;
    getline(cin, text);
    
    const int M = symbols.size();
    for (int i = 0; i < M; i++)
    {
        frequency[i] = count(text.begin(), text.end(), symbols[i]);;
    }
    
    for (int i = 0; i < M; i++)
    {
        cout << symbols[i] << " - " << frequency[i] << endl;
    }
 
    system("pause");
    return 0;
}
0
Миниатюры
Шеннон-Фано  
barbsh
1 / 1 / 2
Регистрация: 13.09.2014
Сообщений: 43
14.09.2014, 16:20  [ТС] #6
Спасибо огромное

Добавлено через 4 часа 8 минут
Все остальное сделал, осталось присвоить символам 0 и 1, как сделать бы это?)
0
14.09.2014, 16:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2014, 16:20
Привет! Вот еще темы с решениями:

Метод Шеннона-Фано
метод Шеннона-Фано, рассортировал вероятности по убыванию, а после не могу...

Метод Шеннона фано
Помогите пожалуста реализовать самый простой способ этого алгоритма сжатия на...

Кодирование Фано-Шеннона
Добрый день. Есть недочет в коде, цель закодировать и декодировать строку...

Кодирование Шеннона-Фано
Окей мы посчитали вероятности символов и прочие штуки.. Далее нужно создать...


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

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

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