Матрица переменной размерности, представленная динамическим массивом - C#

Узнай цену своей работы

Формулировка задачи:

Разработать класс для требуемого типа данных: внутреннее представление данных, конструкторы, деструктор, методы ввода/вывода, изменения содержимого отдельных элементов. Матрица переменной размерности, представленная динамическим массивом, в котором строки матрицы расположены последовательно друг за другом.

Решение задачи: «Матрица переменной размерности, представленная динамическим массивом»

textual
Листинг программы
  1. namespace Matrix_test
  2. {
  3.     /*Разработать класс для требуемого типа данных:
  4.      * внутреннее представление данных,
  5.      * конструкторы,
  6.      * деструктор,
  7.      * методы ввода/вывода,
  8.      * изменения содержимого отдельных элементов.
  9.      * Матрица переменной размерности, представленная динамическим массивом, в котором строки матрицы расположены последовательно друг за другом.*/
  10.     class Matrix
  11.     {
  12.         // * * * * * Переменные * * * * * * *
  13.         /// <summary>
  14.         /// Скрытые перменные класса.
  15.         /// </summary>
  16.         private int _row, _col;
  17.         private int[,] _matrix = new int[0,0];
  18.         Random rnd = new Random();
  19.  
  20.  
  21.         // * * * * * Конструкторы * * * * * * *
  22.         /// <summary>
  23.         /// Конструктор возвращает размер Строк и Столбцов.
  24.         /// </summary>
  25.         /// <param name="Row"></param>
  26.         /// <param name="Col"></param>
  27.         public Matrix(int Row,int Col)
  28.         {
  29.             _row = Row;
  30.             _col = Col;
  31.         }
  32.         /// <summary>
  33.         /// Конструктор по умолчанию принимает нулевое значение.
  34.         /// </summary>
  35.         public Matrix()
  36.         {
  37.             _row = 0;
  38.             _col = 0;
  39.         }
  40.         /// <summary>
  41.         /// Деструктор Матрицы
  42.         /// </summary>
  43.         ~Matrix()
  44.         { }
  45.         // * * * * * Свойства * * * * * *
  46.         /// <summary>
  47.         /// (свойство)Строка принимающий параметр из вне класса, с проверкой на отрицательное число.
  48.         /// </summary>
  49.         internal int Row
  50.         {
  51.             get { return +_row; }
  52.             set {
  53.                 if ( value > 0 )
  54.                     _row = value;
  55.                 else
  56.                     _row = 0;
  57.             }
  58.         }
  59.         /// <summary>
  60.         /// (свойство)Колонка принимающий параметр из вне класса, с проверкой на отрицательное число
  61.         /// </summary>
  62.         internal int Col
  63.         {
  64.             get { return _col; }
  65.             set { if ( value > 0 )
  66.                     _col = value;
  67.                 else
  68.                     _col = 0;
  69.             }
  70.         }
  71.         /// <summary>
  72.         /// (свойство) возвращает количество строк в массиве
  73.         /// </summary>
  74.         internal int length_r
  75.         {
  76.             get { return _matrix.GetLength(0); }
  77.         }
  78.         /// <summary>
  79.         /// (свойство) возвращает количество столбцов в массиве
  80.         /// </summary>
  81.         internal int length_c
  82.         {
  83.             get { return _matrix.GetLength(1); }
  84.         }
  85.         // * * * * * Методы * * * * * * *
  86.         /// <summary>
  87.         /// Возвращает матрицу с N количество "Строк" и "Столбцов", иначе возвращает нулевую матрицу.
  88.         /// </summary>
  89.         /// <param name="Row">Кол-во Строк</param>
  90.         /// <param name="Col">Кол-во Столбцов</param>
  91.         /// <returns></returns>
  92.         internal int[,] Add(int Row,int Col)
  93.         {
  94.             this.Row = Row;
  95.             this.Col = Col;
  96.            
  97.             if ( this.Col >= 0 || this.Row >= 0 )
  98.                 return _matrix = new int[Row , Col];
  99.  
  100.             return _matrix = new int[0 , 0];
  101.         }
  102.         /// <summary>
  103.         /// Возвращает матрицу с N "Строк" или N "Столбцов", иначе возвращает нулевую матрицу.
  104.         /// </summary>
  105.         /// <param name="size">Размерность</param>
  106.         /// <param name="N">"Строка" или "Столбец"</param>
  107.         /// <returns></returns>
  108.         internal int[,] Add(int size, string N)
  109.         {
  110.             if ( N.ToLower() == "row" || N.ToLower() == "строка" )
  111.                 return _matrix = new int[size , 0];
  112.             else if ( N.ToLower() == "col" || N.ToLower() == "столбец")
  113.                 return _matrix = new int[0 , size];
  114.             return _matrix = new int[0 , 0];
  115.         }
  116.         /// <summary>
  117.         /// Устанавливает значение ячейки i-строки j-столбца
  118.         /// </summary>
  119.         /// <param name="i">Строка</param>
  120.         /// <param name="j">Столбец</param>
  121.         /// <param name="val">Значение</param>
  122.         internal void Set_m( int i , int j , int val )
  123.         {
  124.             if ( i >= 0 && j >= 0 )
  125.                 _matrix[i , j] = val;
  126.         }
  127.         /// <summary>
  128.         /// Заполняет матрицу случайными числами от min к max.
  129.         /// </summary>
  130.         /// <param name="min">Минимальное число</param>
  131.         /// <param name="max">Максимальное число</param>
  132.         /// <returns></returns>
  133.         internal int[,] Fill( int min , int max )
  134.         {
  135.             for ( int i = 0 ; i < _matrix.GetLength(0) ; i++ )
  136.                 for ( int j = 0 ; j < _matrix.GetLength(1) ; j++ )
  137.                     _matrix[i , j] = rnd.Next(min , max);
  138.             return _matrix;
  139.         }
  140.         /// <summary>
  141.         /// Заполняет матрицу случаными числами до max числа
  142.         /// </summary>
  143.         /// <param name="max">Максимальное число</param>
  144.         /// <returns></returns>
  145.         internal int[,] Fill( int max )
  146.         {
  147.             for ( int i = 0 ; i < length_r ; i++ )
  148.                 for ( int j = 0 ; j < length_c ; j++ )
  149.                     _matrix[i , j] = rnd.Next(max+1);
  150.             return _matrix;
  151.         }
  152.         /// <summary>
  153.         /// Возвращает "string" строку всей матрицы на экран.
  154.         /// </summary>
  155.         /// <returns></returns>
  156.         public override string ToString()
  157.         {
  158.             string View = $"{null,-3}";
  159.             for ( int i = 0 ; i < length_r ; i++ )
  160.             {
  161.                 if ( i == 0 )
  162.                 {
  163.                     for ( int v = 0 ; v < length_r ; v++ )
  164.                         View += string.Format($"{v,3}");
  165.                     View += "\n";
  166.                 }
  167.  
  168.                 View += string.Format($"{i,-2}:");
  169.                 for ( int j = 0 ; j < length_c ; j++ )
  170.                     View += string.Format($"{_matrix[i , j],3}");
  171.                 View += string.Format("\n");
  172.             }
  173.             return View;
  174.         }
  175.         /// <summary>
  176.         /// Возвращает новую матрицу, пустые поля заполняет нулями.
  177.         /// </summary>
  178.         /// <param name="Row">Новый размер Строк</param>
  179.         /// <param name="Col">Новый размер Колонок</param>
  180.         /// <returns></returns>
  181.         internal int[,] Change_Size(int Row,int Col)
  182.         {
  183.             int[,] new_matrix = new int[Row , Col];
  184.  
  185.             for ( int i = 0 ; i < new_matrix.GetLength(0) ; i++ )
  186.                 for ( int j = 0 ; j < new_matrix.GetLength(1) ; j++ )
  187.                     if ( i < _matrix.GetLength(0) )
  188.                         new_matrix[i , j] = j < _matrix.GetLength(1) ? new_matrix[i , j] = _matrix[i , j] : new_matrix[i , j] = 0;
  189.                     else
  190.                         new_matrix[i , j] = 0;
  191.                
  192.             return _matrix = new_matrix;
  193.         }
  194.  
  195.         /// <summary>
  196.         /// Совершает операцию N строкой массива с K строкой масиива, возвращает результат, иначе возвращает 0
  197.         /// </summary>
  198.         /// <param name="N">Первая строка</param>
  199.         /// <param name="K">Вторая строка</param>
  200.         /// <param name="Op">Операция ( +, -, *, / )</param>
  201.         /// <returns></returns>
  202.         internal float Operation(int N,int K,string Op)
  203.         {
  204.             float Res = 0, Tmp = 0;
  205.             switch (Op)
  206.             {
  207.                 case "+":
  208.                     for ( int i = 0 ; i < length_c; i++ )
  209.                         Res += _matrix[N , i] + _matrix[K,i];
  210.                     return Res;
  211.                 case "-":
  212.                     for ( int i = 0 ; i < length_c ; i++ )
  213.                     {
  214.                         Res += _matrix[N , i];
  215.                         Res -= _matrix[K, i];
  216.                     }
  217.                     return Res;
  218.                 case "/":
  219.                     for ( int i = 0 ; i < length_c ; i++ )
  220.                     {
  221.                         Res += _matrix[N , i];
  222.                         Tmp += _matrix[K , i];
  223.                     }
  224.                     if ( Tmp != 0 )
  225.                     {
  226.                         Res /= Tmp;
  227.                         return Res;
  228.                     }
  229.                     else return 0;
  230.                 case "*":
  231.                     for ( int i = 0 ; i < length_c ; i++ )
  232.                         Res += _matrix[N , i] * _matrix[K,i];
  233.                     return Res;
  234.                 default:
  235.                     break;
  236.             }
  237.             return 0;
  238.         }
  239.         /// <summary>
  240.         /// Возвращает значение массива по индексу, иначе 0
  241.         /// </summary>
  242.         /// <param name="i">i-строка</param>
  243.         /// <param name="j">j-столбец</param>
  244.         /// <returns></returns>
  245.         internal int Index_m(int i,int j)
  246.         {
  247.             if ( i >= 0 && j >= 0 )
  248.                 return _matrix[i , j];
  249.             else
  250.                 return 0;
  251.         }
  252.        
  253.     }
  254. }

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


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

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

5   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы