Матрица переменной размерности, представленная динамическим массивом - 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;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д