Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
septe-mber
0 / 0 / 0
Регистрация: 02.01.2013
Сообщений: 123
#1

Код Хэмминга декодирование - C++

15.06.2014, 18:59. Просмотров 485. Ответов 0
Метки нет (Все метки)

привет всем ! я у меня все никак не получается декодирование ! в чем моя ошибка
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
using namespace std;
 
pair<vector<pair<bool, int>>, vector<bool>> coding(vector<bool> vec, bool flag)
{
    if(flag)
        for(size_t i = 1; i < vec.size(); i *= 2)
            vec.insert(vec.begin() + i - 1, 0);
 
    vector<vector<bool>> matrix;
    matrix.push_back(vec);
 
    //Составляем матрицу
    for(size_t i = 1; i < vec.size(); i *= 2)
    {
        vector<bool> vecTmp;
        for(size_t j = 0, value = 0; j < vec.size(); j++)
        {
            if(i - 1 <= j)
            {
                if(value < i)
                {
                    value++;
                    vecTmp.push_back(1);
                }
                else if(value < i * 2)
                {
                    value++;
                    vecTmp.push_back(0);
                }
 
                if(value == i * 2)
                    value = 0;
            }
            else
                vecTmp.push_back(0);
        }
        matrix.push_back(vecTmp);
    }
    //Вычисляем контрольные биты
    vector<int> vecBit;
    for(size_t i = 1; i < matrix.size(); i++)
        vecBit.push_back(inner_product(matrix[i].begin(), matrix[i].end(), matrix[0].begin(), 0));
 
    vector<pair<bool, int>> vecBitIndex;
    for(size_t i = 1, j = 0; i < vec.size(); i *= 2, j++)
    {
        if(vecBit[j] % 2 == 0)
        {
           vecBitIndex.push_back(make_pair(0, i));
           vec[i - 1] = 0;
        }
        else
        {
            vecBitIndex.push_back(make_pair(1, i));
            vec[i - 1] = 1;
        }
    }
    return make_pair(vecBitIndex, vec);
}
 
int main()
{
    cout<<"*******Hamming Code*******"<<endl;
    cout<<"Информация представленная в двоичном виде"<<endl;
    vector<bool> code = { 1, 1, 1, 1, 1, 1, 0 };
    copy(code.begin(), code.end(), ostream_iterator<int>(cout, "\t"));
    cout<<endl
        <<"Размер "<<code.size()<<endl;
 
    cout<<endl
       <<"\tКОДИРОВАНИЕ"<<endl;
    auto vecCoding = coding(code, true);
    cout<<"Вставленные контрольные биты"<<endl;
    copy(vecCoding.second.begin(), vecCoding.second.end(), ostream_iterator<int>(cout, "\t"));
    cout<<endl
        <<"Размер "<<vecCoding.second.size()<<endl;
    cout<<"Контрольные биты"<<endl;
    for_each(vecCoding.first.begin(), vecCoding.first.end(), [](const pair<bool, int>& bit)
    { cout<<bit.first<<'\t'; });
 
    cout<<endl<<endl;
    vecCoding.second[0] = 0;
    cout<<endl
        <<"\tДЕКОДИРОВАНИЕ"<<endl;
    cout<<"Делаем ошибку"<<endl;
    auto vecDecoding = coding(vecCoding.second, false);
    cout<<"Контрольные биты"<<endl;
    cout<<endl;
 
    for_each(vecDecoding.first.begin(), vecDecoding.first.end(), [](const pair<bool, int>& bit)
    { cout<<bit.first<<'\t'; });
    cout<<endl<<endl;
 
    vector<int> errorIndex;
    for(size_t i = 0; i < vecCoding.first.size() && vecDecoding.first.size(); i++)
    {
        if(vecCoding.first[i].first != vecDecoding.first[i].first)
            errorIndex.push_back(vecCoding.first[i].second);
    }
    if(errorIndex.empty())
    {
        cout<<"Ошибки нет"<<endl;
        return 0;
    }
    cout<<"Ошибка в "<<accumulate(errorIndex.begin(), errorIndex.end(), 0)<<" позиции"<<endl;
    return 0;
}
учился по статье на хабре
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2014, 18:59     Код Хэмминга декодирование
Посмотрите здесь:

код Хэмминга - C++
требуется написать программу, (кодер/декодер) код хэмминга (15,11) вводим ошибку срочно

Код Хэмминга - C++
Прошу объяснить как работает этот код Хэмминга и написать прогу по заданию. Задание. 1)Написать программу, реализующую код...

Код Хэмминга - C++
Всем привет, разбираю пример кода Хмминга, подскажите плз, что это за фрагменты void PackFile(char* in, char* out) { ifstream...

Код Хэмминга (Dev C++) - C++
всем добрый день; сможете помочь с кодом, надо написать код хэмминга в dev c++, плиииз. по братский

Код Хэмминга кодер-декодер - C++
Требуется создать кодер-декодер по коду Хэмминга. Почитал, вроде ничего сложного. Теперь надо написать.

Коды Фано, Хаффмана, Хэмминга, Шеннона, код с проверкой на четность - C++
Помогите пожалуйста!!!!!!очень срочно надо!!!:(:(нужно реализовать коды Фано,Хаффмана,Хэмминга((7,4),(8,4)),Шеннона,код с проверкой на...

Последовательность Хэмминга - C++
1)Даны натуральные числа a,b (a&lt;=b). Получить все простые числа p, удовлетворяющие неравенству a&lt;=p&lt;=b. 2)Дано натуральное число n....

Последовательность Хэмминга - C++
Последовательность Хэмминга образуют натуральные числа, не имеющие других простых делителей, кроме 2, 3 и 5. Найти: сумму первых N...

Коды Хэмминга С++ - C++
Коды Хэмминга С++

Генерация чисел Хэмминга - C++
Задание 2.24. Генерация чисел Хэмминга Числами Хэмминга называются натуральные числа, которые среди своих делителей имеют только степени...

Как реализовать кодирование кода Хэмминга? - C++
Подскажите пожалуйста как реализовать кодирование кода Хэмминга на C++?

Декодирование - C++
Декодирование закодированного текста. У меня программа декодирует посимвольно, т.е. например текст закодирован вот так: 24, он берет...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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