Декодирование кода Хэмминга
Пример программы, выполняющей декодирование кода Хэмминга, приведен ниже.
#include <stdio.h>
#include <stdlib.h>
// буфер ввода
char input[1024];
int len;
int find_mistake()
{
int i, mistake = 0;
for (i = 0; i < len; i ++)
if (input[i] == '1')
mistake ^= i + 1;
return mistake;
}
// главная функция
int main()
{
int i, mistake = 0;
char info[1024];
int info_pos = 0;
int b = 1;
// ввод исходных данных
printf("Enter code: ");
scanf("%s", input);
len = strlen(input);
for (i = 0; i < len; i++)
// проверка на корректность
if (input[i] != '0' && input[i] != '1')
{
printf("Invalid code.\n");
return -1;
}
// поиск ошибок
mistake = find_mistake();
if (mistake)
{
input[mistake - 1] ^= '0' ^ '1';
mistake = find_mistake();
if (mistake)
{
printf("Invalid code.\n");
return -1;
}
}
// вывод результата
printf("Fixed code: %s\n", input);
for (i = 0; i < len; i++)
if (i + 1 == b)
b <<= 1;
else
info[info_pos++] = input[i];
info[info_pos] = '\0';
printf("Informational string: %s\n", info);
return 0;
}