Матрица переменной размерности, представленная динамическим массивом - 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;
        }
        
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы