Матрица переменной размерности, представленная динамическим массивом - C#
Формулировка задачи:
Разработать класс для требуемого типа данных: внутреннее представление данных, конструкторы, деструктор, методы ввода/вывода, изменения содержимого отдельных элементов. Матрица переменной размерности, представленная динамическим массивом, в котором строки матрицы расположены последовательно друг за другом.
Решение задачи: «Матрица переменной размерности, представленная динамическим массивом»
textual
Листинг программы
namespace Matrix_test { /*Разработать класс для требуемого типа данных: * внутреннее представление данных, * конструкторы, * деструктор, * методы ввода/вывода, * изменения содержимого отдельных элементов. * Матрица переменной размерности, представленная динамическим массивом, в котором строки матрицы расположены последовательно друг за другом.*/ class Matrix { // * * * * * Переменные * * * * * * * /// <summary> /// Скрытые перменные класса. /// </summary> private int _row, _col; private int[,] _matrix = new int[0,0]; Random rnd = new Random(); // * * * * * Конструкторы * * * * * * * /// <summary> /// Конструктор возвращает размер Строк и Столбцов. /// </summary> /// <param name="Row"></param> /// <param name="Col"></param> public Matrix(int Row,int Col) { _row = Row; _col = Col; } /// <summary> /// Конструктор по умолчанию принимает нулевое значение. /// </summary> public Matrix() { _row = 0; _col = 0; } /// <summary> /// Деструктор Матрицы /// </summary> ~Matrix() { } // * * * * * Свойства * * * * * * /// <summary> /// (свойство)Строка принимающий параметр из вне класса, с проверкой на отрицательное число. /// </summary> internal int Row { get { return +_row; } set { if ( value > 0 ) _row = value; else _row = 0; } } /// <summary> /// (свойство)Колонка принимающий параметр из вне класса, с проверкой на отрицательное число /// </summary> internal int Col { get { return _col; } set { if ( value > 0 ) _col = value; else _col = 0; } } /// <summary> /// (свойство) возвращает количество строк в массиве /// </summary> internal int length_r { get { return _matrix.GetLength(0); } } /// <summary> /// (свойство) возвращает количество столбцов в массиве /// </summary> internal int length_c { get { return _matrix.GetLength(1); } } // * * * * * Методы * * * * * * * /// <summary> /// Возвращает матрицу с N количество "Строк" и "Столбцов", иначе возвращает нулевую матрицу. /// </summary> /// <param name="Row">Кол-во Строк</param> /// <param name="Col">Кол-во Столбцов</param> /// <returns></returns> internal int[,] Add(int Row,int Col) { this.Row = Row; this.Col = Col; if ( this.Col >= 0 || this.Row >= 0 ) return _matrix = new int[Row , Col]; return _matrix = new int[0 , 0]; } /// <summary> /// Возвращает матрицу с N "Строк" или N "Столбцов", иначе возвращает нулевую матрицу. /// </summary> /// <param name="size">Размерность</param> /// <param name="N">"Строка" или "Столбец"</param> /// <returns></returns> internal int[,] Add(int size, string N) { if ( N.ToLower() == "row" || N.ToLower() == "строка" ) return _matrix = new int[size , 0]; else if ( N.ToLower() == "col" || N.ToLower() == "столбец") return _matrix = new int[0 , size]; return _matrix = new int[0 , 0]; } /// <summary> /// Устанавливает значение ячейки i-строки j-столбца /// </summary> /// <param name="i">Строка</param> /// <param name="j">Столбец</param> /// <param name="val">Значение</param> internal void Set_m( int i , int j , int val ) { if ( i >= 0 && j >= 0 ) _matrix[i , j] = val; } /// <summary> /// Заполняет матрицу случайными числами от min к max. /// </summary> /// <param name="min">Минимальное число</param> /// <param name="max">Максимальное число</param> /// <returns></returns> internal int[,] Fill( int min , int max ) { for ( int i = 0 ; i < _matrix.GetLength(0) ; i++ ) for ( int j = 0 ; j < _matrix.GetLength(1) ; j++ ) _matrix[i , j] = rnd.Next(min , max); return _matrix; } /// <summary> /// Заполняет матрицу случаными числами до max числа /// </summary> /// <param name="max">Максимальное число</param> /// <returns></returns> internal int[,] Fill( int max ) { for ( int i = 0 ; i < length_r ; i++ ) for ( int j = 0 ; j < length_c ; j++ ) _matrix[i , j] = rnd.Next(max+1); return _matrix; } /// <summary> /// Возвращает "string" строку всей матрицы на экран. /// </summary> /// <returns></returns> public override string ToString() { string View = $"{null,-3}"; for ( int i = 0 ; i < length_r ; i++ ) { if ( i == 0 ) { for ( int v = 0 ; v < length_r ; v++ ) View += string.Format($"{v,3}"); View += "\n"; } View += string.Format($"{i,-2}:"); for ( int j = 0 ; j < length_c ; j++ ) View += string.Format($"{_matrix[i , j],3}"); View += string.Format("\n"); } return View; } /// <summary> /// Возвращает новую матрицу, пустые поля заполняет нулями. /// </summary> /// <param name="Row">Новый размер Строк</param> /// <param name="Col">Новый размер Колонок</param> /// <returns></returns> internal int[,] Change_Size(int Row,int Col) { int[,] new_matrix = new int[Row , Col]; for ( int i = 0 ; i < new_matrix.GetLength(0) ; i++ ) for ( int j = 0 ; j < new_matrix.GetLength(1) ; j++ ) if ( i < _matrix.GetLength(0) ) new_matrix[i , j] = j < _matrix.GetLength(1) ? new_matrix[i , j] = _matrix[i , j] : new_matrix[i , j] = 0; else new_matrix[i , j] = 0; return _matrix = new_matrix; } /// <summary> /// Совершает операцию N строкой массива с K строкой масиива, возвращает результат, иначе возвращает 0 /// </summary> /// <param name="N">Первая строка</param> /// <param name="K">Вторая строка</param> /// <param name="Op">Операция ( +, -, *, / )</param> /// <returns></returns> internal float Operation(int N,int K,string Op) { float Res = 0, Tmp = 0; switch (Op) { case "+": for ( int i = 0 ; i < length_c; i++ ) Res += _matrix[N , i] + _matrix[K,i]; return Res; case "-": for ( int i = 0 ; i < length_c ; i++ ) { Res += _matrix[N , i]; Res -= _matrix[K, i]; } return Res; case "/": for ( int i = 0 ; i < length_c ; i++ ) { Res += _matrix[N , i]; Tmp += _matrix[K , i]; } if ( Tmp != 0 ) { Res /= Tmp; return Res; } else return 0; case "*": for ( int i = 0 ; i < length_c ; i++ ) Res += _matrix[N , i] * _matrix[K,i]; return Res; default: break; } return 0; } /// <summary> /// Возвращает значение массива по индексу, иначе 0 /// </summary> /// <param name="i">i-строка</param> /// <param name="j">j-столбец</param> /// <returns></returns> internal int Index_m(int i,int j) { if ( i >= 0 && j >= 0 ) return _matrix[i , j]; else return 0; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д