Где ошибка? Код Хэмминга (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();
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы