Код Хэмминга. Проверочная и пораждающая матрица
Каким образом можно сгенерировать ниже приведенные матрицы не разделяя их по частям?
"Порождающая матрица G может быть представлена двумя матрицами, единичной и добавочной."
Добавочная матрица это транспонировнная часть проверочной матрицы(не единичной то есть).
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Security;
static void transp(byte[,] mas)
{
byte[,] temp = new byte[mas.GetLength(1), mas.GetLength(0)];
for (int i = 0; i < temp.GetLength(0); i++)
{
for (int j = 0; j < temp.GetLength(1); j++)
{
temp[i, j] = mas[j, i];
}
}
for (int i = 0; i < temp.GetLength(0); i++)
{
for (int j = 0; j < temp.GetLength(1); j++)
{
Console.Write(temp[i, j] + "\t");
}
Console.WriteLine();
}
}
Console.Write("Введите информационную комбинацию: ");
string alpha = Console.ReadLine();
Console.WriteLine("Информ.комбинация = " + alpha);
int k = alpha.Length;
Console.WriteLine("Число информационных разрядов = {0}", k);
double r = Math.Ceiling(Math.Log(k + 1 + Math.Log(k + 1, 2), 2));
Console.WriteLine("Число корректирующих разрядов = {0}", r);
int n = Convert.ToInt32(k + r);
Console.WriteLine("Число разрядов закодированной кодовой комбинации = {0}", n);
byte[,] A = new byte[Convert.ToInt32(r), k];
//Random rnd = new Random();
for (int i = 0; i < r; i++)
{
for (int j = 0; j < k; j++)
{
//A[i, j] = rnd.Next(0, 1);
Console.Write("Введите число: " + "\t");
A[i, j] = byte.Parse(Console.ReadLine());
}
Console.WriteLine();
}
Console.WriteLine("Матрица A[r,k] = ");
for (int i = 0; i < r; i++)
{
for (int j = 0; j < k; j++)
{
Console.Write(A[i, j] + "\t");
}
Console.WriteLine();
}
Console.WriteLine("Транспонированнаяа матрица A[r,k] = ");
transp(A);
byte[,] E = new byte[Convert.ToInt32(r), Convert.ToInt32(r)];
for (int i = 0; i < r; i++)
{
for (int j = 0; j < r; j++)
{
if (i == j)
{
E[i, j] = 1;
}
else
{
E[i, j] = 0;
}
}
}
Console.WriteLine("Матрица E[r,r] = ");
for (int i = 0; i < r; i++)
{
for (int j = 0; j < r; j++)
{
Console.Write(E[i, j].ToString() + "\t");
}
Console.WriteLine();
}
byte[,] E1 = new byte[k, k];
for (int i = 0; i < k; i++)
{
for (int j = 0; j < k; j++)
{
if (i == j)
{
E1[i, j] = 1;
}
else
{
E1[i, j] = 0;
}
}
}
Console.WriteLine("Матрица E[k,k] = ");
for (int i = 0; i < k; i++)
{
for (int j = 0; j < k; j++)
{
Console.Write(E1[i, j].ToString() + "\t");
}
Console.WriteLine();
}
