Где ошибка? Код Хэмминга (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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д