Где ошибка? Код Хэмминга (15,11) - C#
Формулировка задачи:
Ввожу 11-битовое кодовое слово, умножаю его на порождающую матрицу, получаю закодированное слово, затем ввожу это закодированное слово и он пишет, что есть ошибка, хотя такого быть не должно. Где ошибка в коде найти не могу.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ConsoleApplication1 { class Test { static void Main() { char[] data = new char[11]; int[] encoded = new int[15]; int[] edata = new int[15]; int[] syndrome = new int[12]; int[,] hmatrix = new int[4, 15]{{1,0,0,0,1,0,0,1,0,1,1,0,1,1,1}, {0,1,0,0,1,1,0,0,1,0,1,1,0,1,1}, {0,0,1,0,0,1,1,1,0,0,1,1,1,0,1}, {1,0,0,1,0,0,1,0,1,1,0,1,1,1,1}}; char[,] gmatrix = new char[11, 15] { { '1', '1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0' }, { '0', '1', '1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0' }, { '0', '0', '1', '1', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0' }, { '1', '0', '1', '1', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0', '0' }, { '0', '1', '0', '1', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0', '0' }, { '1', '0', '0', '1', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0', '0' }, { '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0', '0' }, { '0', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0', '0' }, { '1', '0', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0', '0' }, { '1', '1', '0', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '0' }, { '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1' }}; int i, j; Console.Write("\nКод Хэмминга. Кодирование\n\nВведите 11-битовое слово: \n"); for (int d = 0; d < 11; d++) { data[d] = Convert.ToChar(Console.ReadLine()); } //Console.Write("\nGenerator matrix enter\n"); /* for(i=0;i<11;i++){ for(j=0;j<15;j++){ Console.Write("{0},{1}",i,j); gmatrix[i,j]=Convert.ToChar(Console.ReadLine()); } Console.WriteLine(); } */ Console.Write("\nПорождающая матрица\n"); for (i = 0; i < 11; i++) { for (j = 0; j < 15; j++) { Console.Write("{0} \t|", gmatrix[i, j]); } Console.WriteLine(); } Console.WriteLine("\nКодированные данные\n"); for (i = 0; i < 15; i++) { for (j = 0; j < 11; j++) encoded[i] += ((data[j] - 0) * (gmatrix[j, i] - 0)); encoded[i] = encoded[i] % 2; Console.Write("{0} |", encoded[i]); } Console.Write("\nКод Хэмминга. Декодирование\n\nВведите кодированные данные : \n"); for (i = 0; i < 15; i++) edata[i] = Convert.ToChar(Console.ReadLine()); for (i = 0; i < 4; i++) { for (j = 0; j < 15; j++) syndrome[i] += (edata[j] * hmatrix[i, j]); syndrome[i] = syndrome[i] % 2; } for (j = 0; j < 15; j++) if ((syndrome[0] == hmatrix[0, j]) && (syndrome[1] == hmatrix[1, j]) && (syndrome[2] == hmatrix[2, j]) && (syndrome[3] == hmatrix[3, j])) break; if (j == 15) Console.Write("\nОшибок нет\n"); else { Console.Write("\nОшибка получена в {0} бите данных\n", j + 1); edata[j] = 0; Console.Write("\nДанные должны быть такими : "); for (j = 0; j < 15; j++) if (edata[j] == 48) Console.Write("{0} |", 0); else if (edata[j] == 49) Console.Write("{0} |", 1); else Console.Write("{0} |", edata[j]); } Console.ReadKey(); } } }
Например я ввожу 10100101111. Получаю закодированное слово 100010100101111. Ввожу 100010100101111 и он пишет, что ошибка находится в 4 бите. Такого быть не должно.
Хэлпаните как-нибудь уже
Решение задачи: «Где ошибка? Код Хэмминга (15,11)»
textual
Листинг программы
Console.Write("\nДанные должны быть такими : "); for (j = 0; j < 15; j++) if (edata[j] == 48) Console.Write("{0} |", 0); else if (edata[j] == 49) Console.Write("{0} |", 1); else Console.Write("{0} |", edata[j]); } Console.ReadKey(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д