From c38a43540aa1b3271d1ba639260fce262d477a08 Mon Sep 17 00:00:00 2001 From: rumata-ap Date: Fri, 31 Jul 2020 10:27:34 +0300 Subject: [PATCH] edit --- MatrixL.cs | 152 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 115 insertions(+), 37 deletions(-) diff --git a/MatrixL.cs b/MatrixL.cs index 3864bcc..b120a2f 100644 --- a/MatrixL.cs +++ b/MatrixL.cs @@ -12,6 +12,49 @@ namespace MatrixExtensions T init; int r; int c; + public int R + { + get + { + if (r > 0) + return r; + else + return -1; + } + } + public int C + { + get + { + if (c > 0) + return c; + else + return -1; + } + } + public T this[int i, int j] + { + get + { + if (r > 0 && c > 0) + if (i > -1 && j > -1) + return src[i] [j]; + else + throw new ArgumentException("Неверный задана индексация"); + else + throw new ArgumentException("Не задана матрица"); + } + set + { + if (r > 0 && c > 0) + if (i > -1 && j > -1) + src[i][j] = value; + else + throw new ArgumentException("Неверный задана индексация"); + else + throw new ArgumentException("Не задана матрица"); + } + } public MatrixL(int r, int c, T initValue) { @@ -29,90 +72,125 @@ namespace MatrixExtensions } } - public T GetEl(int idxR, int idxC) + /// + ///Извлечение строки по указанному индексу. + /// + /// Индекс строки для извлечения. + /// + public List Row (int idxR) { - return src[idxR][idxC]; + if (r == 0 || idxR < 0 || idxR > r) throw new ArgumentException("Матрица пустая либо не верно указан индекс строки."); + + return src[idxR]; } - public void SetEl(int idxR, int idxC, T el) + /// + /// Извлечение столбца по указанному индексу. + /// + /// Индекс столбца для извлечения. + /// + public List Col (int idxC) { - src[idxR][idxC] = el; + if (c == 0 || idxC < 0 || idxC > c) throw new ArgumentException("Матрица пустая либо не верно указан индекс столбца."); + + List res = new List(r); + foreach (List item in src) res.Add(item[idxC]); + + return res; } + /// + /// Вставка строки со значениями по умолчанию по указанному индексу. + /// + /// Индекс строки для вставки. public void InsertRow(int idxR) { - if (idxR > r) return; + if (r == 0 || idxR < 0 || idxR > r) throw new ArgumentException("Матрица пустая либо не верно указан индекс строки для вставки."); src.Insert(idxR, new List(c)); r++; - for (int i = 0; i < c; i++) - { - src[idxR].Add(init); - } + for (int i = 0; i < c; i++) src[idxR].Add(init); } + /// + /// Вставка строки по указанному индексу. + /// + /// Индекс строки для вставки. + /// Список значений элементов строки public void InsertRow(int idxR, List row) { - if (idxR > r) return; + if (r == 0 || idxR < 0 || idxR > r) throw new ArgumentException("Матрица пустая либо не верно указан индекс строки для вставки."); src.Insert(idxR, new List(c)); r++; int n = c; if (row.Count < c) n = row.Count; - for (int i = 0; i < n; i++) - { - src[idxR].Add(row[i]); - } + for (int i = 0; i < n; i++) src[idxR].Add(row[i]); if (row.Count < c) { - for (int i = n; i < c; i++) - { - src[idxR].Add(init); - } + for (int i = n; i < c; i++) src[idxR].Add(init); } } - + + /// + /// Вставка столбца со значениями по умолчанию по указанному индексу. + /// + /// Индекс столбца для вставки. public void InsertCol(int idxC) { - if (idxC > c) return; + if (c == 0 || idxC < 0 || idxC > c) throw new ArgumentException("Матрица пустая либо не верно указан индекс столбца для вставки."); c++; - for (int i = 0; i < r; i++) - { - src[i].Insert(idxC, init); - } + for (int i = 0; i < r; i++) src[i].Insert(idxC, init); } + /// + /// Вставка столбца по указанному индексу. + /// + /// Индекс столбца для вставки. + /// Список значений элементов столбца public void InsertCol(int idxC, List col) { - if (idxC > c) return; + if (c == 0 || idxC < 0 || idxC > c) throw new ArgumentException("Матрица пустая либо не верно указан индекс столбца для вставки."); c++; - for (int i = 0; i < r; i++) - { - src[i].Insert(idxC, init); - } + for (int i = 0; i < r; i++) src[i].Insert(idxC, init); int n = r; if (col.Count < r) n = col.Count; foreach (List item in src) { - for (int i = 0; i < n; i++) - { - item.Insert(idxC, col[i]); - } + for (int i = 0; i < n; i++) item[i] = col[i]; + if (col.Count < r) { - for (int i = n; i < r; i++) - { - item.Insert(idxC, init); - } + for (int i = n; i < r; i++) item[i] = init; } } } + + public void RemoteRowAt(int idxR) + { + if (r > 0 && idxR >= 0 && idxR <= r) { src.RemoveAt(idxR); r--; } + else throw new ArgumentException("Матрица пустая либо не верно указан индекс строки для удаления."); + } + + + public void RemoteColAt(int idxC) + { + if (c > 0 && idxC >= 0 && idxC<=c) + { + foreach (List item in src) + { + item.RemoveAt(idxC); + c--; + } + } + else throw new ArgumentException("Матрица пустая либо не верно указан индекс столбца для удаления."); + } } }