Декодирование кода Хэмминга

Пример программы, выполняющей декодирование кода Хэмминга, приведен ниже.

#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;
}
 
« Предыдущая статья   Следующая статья »