Как объединить 2 матрицы в 1?

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("{0}", A[i, j]);
    }
    Console.WriteLine();
}
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() + " ");
    }
    Console.WriteLine();
}

Необходимо, чтобы значения 2 матриц объединились в 1 общую.Общая матрица должна иметь размерность r*n. Мне необходимо, чтобы значения одной матрицы соединились со значениями другой матрицы. Пример

матрица


Ответы (1 шт):

Автор решения: aepot

Предположим, что матрицы одинаковой высоты.

private byte[,] MergeRight(byte[,] left, byte[,] right)
{
    int leftWidth = left.GetLength(1);
    int width = leftWidth + right.GetLength(1);
    int height = left.GetLength(0);
    byte[,] result = new byte[height, width];
    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            if (j < leftWidth)
                result[i, j] = left[i, j];
            else
                result[i, j] = right[i, j - leftWidth];
        }
    }
}
byte[,] merged = MergeRight(A, E);

Начинайте разбивать код на методы, у вас куча повторяющегося без причины кода.

→ Ссылка