// Отображение матрицы С
        private void ShowMatrixC()
        {
            int n = Math.Min(20, C.N);
            int m = Math.Min(20, C.N);

            // очистка
            this.GridView_C.Rows.Clear();  // удаление всех строк
            int count = this.GridView_C.Columns.Count;

            for (int i = 0; i < count; i++)     // цикл удаления всех столбцов
            {
                this.GridView_C.Columns.RemoveAt(0);
            }
            if (C.Type != Category.none)
            {
                // создание новой
                DataGridViewTextBoxColumn[] column = new DataGridViewTextBoxColumn[m];
                for (int i = 0; i < m; i++)
                {
                    column[i]            = new DataGridViewTextBoxColumn(); // выделяем память для объекта
                    column[i].HeaderText = (i + 1).ToString();
                    column[i].Name       = (i + 1).ToString();
                }
                // задание новой
                this.GridView_C.Columns.AddRange(column); // добавление столбцов
                for (int i = 0; i < n && i < C.N; i++)
                {
                    object[] row = new object[m];
                    for (int j = 0; j < m; j++)
                    {
                        row[j] = ServiceFunctions.DeletZerosInEndString(String.Format("{0:F" + Epsilon.value.ToString() + "}", Operations.getElement(i, j, C)));
                    }
                    GridView_C.Rows.Add(row);// добавление строк
                }
                foreach (DataGridViewColumn col in GridView_C.Columns)
                {
                    col.SortMode = DataGridViewColumnSortMode.NotSortable;
                }
            }
        }
        // Методы

        // Создание матрицы с помощью файла
        public void OpenFromFileToDataTransfer(string filename, ref History_message ourHistory)
        {
            StreamReader f = null;

            try
            {
                f = new StreamReader(filename);
            }
            catch
            {
                ourHistory = ourHistory.Add("При открытии файла произошла ошибка " + filename);
                return;
            }
            int      N;
            double   V;
            Category Type;

            double[] PackedForm;
            bool     success;

            success = Int32.TryParse(f.ReadLine().Trim(), out N);
            if (!success)
            {
                ourHistory = ourHistory.Add("Неверный формат размерности");
                f.Close();
                return;
            }
            if (N <= 1)
            {
                ourHistory = ourHistory.Add("Размерность должна быть больше 1");
                f.Close();
                return;
            }
            DataTransfer.data[0] = N;
            success = Double.TryParse(f.ReadLine().Trim(), out V);
            if (!success)
            {
                ourHistory = ourHistory.Add("Неверный формат значения V");
                f.Close();
                return;
            }
            DataTransfer.data[1] = V;
            success = Category.TryParse(f.ReadLine().Trim(), out Type);
            if (!success || Type == Category.none)
            {
                ourHistory = ourHistory.Add("Неверный формат типа");
                f.Close();
                return;
            }
            DataTransfer.data[2] = Type;
            PackedForm           = new double[N * (N + 1) / 2];
            int    k    = 0;
            Matrix Temp = new Matrix('_', N, V, Type, null);

            for (int i = 0; i < N; i++)
            {
                string line = f.ReadLine();
                if (line == null)
                {
                    ourHistory = ourHistory.Add("Недостаточно строк в файле");
                    f.Close();
                    return;
                }
                line = line.Trim();
                line = System.Text.RegularExpressions.Regex.Replace(line, @"\s+", " ");
                string[] splittedStroka = line.Split(' ');
                for (int j = 0; j < N; j++)
                {
                    String strElement;
                    try
                    {
                        strElement = splittedStroka[j];
                    }
                    catch
                    {
                        ourHistory = ourHistory.Add("Недостаточно значений в строке " + (4 + i).ToString());
                        f.Close();
                        return;
                    }
                    success = Double.TryParse(strElement, out V);
                    if (!success)
                    {
                        ourHistory = ourHistory.Add("Обнаружено значение, не являющееся числом: " + strElement + " в строке " + (4 + i).ToString());
                        f.Close();
                        return;
                    }
                    else
                    {
                        if (Operations.isV(i, j, Temp))
                        {
                            if ((double)DataTransfer.data[1] == V)
                            {
                                // пропустить
                            }
                            else
                            {
                                ourHistory = ourHistory.Add("Ожидалось значение V, равное " +
                                                            ((double)DataTransfer.data[1]).ToString() + ", а получено значение V, равное " +
                                                            V.ToString() + " в строке: " + (4 + i).ToString());
                                f.Close();
                                return;
                            }
                        }
                        else
                        {
                            if (Math.Abs(V) <= 1E-12)
                            {
                                V = 0;
                            }
                            PackedForm[k] = V;
                            k++;
                        }
                    }
                }
                success = false;
                try
                {
                    String _ = splittedStroka[N];
                }
                catch
                {
                    success = true;
                }
                if (!success)
                {
                    ourHistory = ourHistory.Add("Имеются лишние значения в строке " + (4 + i).ToString());
                    f.Close();
                    return;
                }
            }
            if (f.ReadLine() != null)
            {
                ourHistory = ourHistory.Add("Имеются лишние строки в конце файла");
                f.Close();
                return;
            }
            DataTransfer.data[3] = PackedForm;
            f.Close();
        }