public void VisualizeSolution(IMatrix <int> matrix, ISolution solution)
            {
                var text     = new StringBuilder();
                var splitted = new SplittedMatrix(matrix, solution);
                var index    = new Index2D();

                for (int i = 0; i < splitted.Size(0); i++) //строка разбитой матрицы
                {
                    if (i != 0)
                    {
                        text.AppendLine();
                    }
                    for (index.I = splitted.CellLow(i, 0); index.I <= splitted.CellHigh(i, 0); index.I++) //строка исходной матрицы, попавшая в строку разбитой матрицы
                    {
                        for (int j = 0; j < splitted.Size(1); j++)                                        //столбец разбитой матрицы
                        {
                            if (j != 0)
                            {
                                text.AppendFormat("    ");
                            }

                            for (index.J = splitted.CellLow(j, 1); index.J <= splitted.CellHigh(j, 1); index.J++) //столбец исходной матрицы, попавший в столбец разбитой матрицы
                            {
                                text.AppendFormat("{0,3} ", matrix[index]);
                            }
                        }
                        text.AppendLine();
                    }
                }

                MessageBox.Show(text.ToString());
            }
        protected override void SetBitmap()
        {
            for (int i = 0; i < solutionSizeColumn; i++) //строка разбитой матрицы
            {
                var lastOnI = splittedMatrix.CellHigh(i, 0);

                var index = new Index2D();
                //строка исходной матрицы, попавшая в строку разбитой матрицы
                for (index.I = splittedMatrix.CellLow(i, 0); index.I <= lastOnI; index.I++)
                {
                    for (int j = 0; j < solutionSizeRow; j++) //столбец разбитой матрицы
                    {
                        var lastOnJ = splittedMatrix.CellHigh(j, 1);

                        //строка исходной матрицы, попавшая в столбец разбитой матрицы
                        for (index.J = splittedMatrix.CellLow(j, 1); index.J <= lastOnJ; index.J++)
                        {
                            SetPixelToBitmapOfMatrix(
                                (int)(coefficient * GetValueOfMatrixFrom(matrix[index])),
                                index.I + i * zoomShift,
                                index.J + j * zoomShift);
                        }
                    }
                }
            }
        }