// Отображение матрицы С 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(); }