Преобразовать матрицу N x N путем поворота - C#

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

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

напишите пожалуйста программу Преобразовать матрицу N x N, "поворачивая" ее вокруг центра на 90, 180, 270 градусов против часовой стрелки

Решение задачи: «Преобразовать матрицу N x N путем поворота»

textual
Листинг программы
  1.     class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             int[,] m = { { 0, 1 }, { 2, 3 }};
  6.  
  7.             Matrix m1 = new Matrix(m);
  8.             Matrix m2 = new Matrix(m);
  9.             Matrix m3 = new Matrix(m);
  10.  
  11.             m1.RotateClockwise90();
  12.             Console.WriteLine("90 градусов");
  13.             Console.WriteLine(m1.ToString());
  14.             m2.Rotate180();
  15.             Console.WriteLine("180 градусов");
  16.             Console.WriteLine(m2.ToString());
  17.             Console.WriteLine("270 градусов");
  18.             m3.RotateAnitclockwise90();
  19.             Console.WriteLine(m3.ToString());
  20.  
  21.  
  22.         }
  23.  
  24.         class Matrix
  25.         {
  26.             enum Rotation
  27.             {
  28.                 None,
  29.                 Clockwise90,
  30.                 Clockwise180,
  31.                 Clockwise270
  32.             }
  33.  
  34.             public Matrix(int[,] matrix)
  35.             {
  36.                 m_matrix = matrix;
  37.                 m_rotation = Rotation.None;
  38.             }
  39.  
  40.             //  the transformation routines
  41.             public void RotateClockwise90()
  42.             {
  43.                 m_rotation = (Rotation)(((int)m_rotation + 1) & 3);
  44.             }
  45.  
  46.             public void Rotate180()
  47.             {
  48.                 m_rotation = (Rotation)(((int)m_rotation + 2) & 3);
  49.             }
  50.  
  51.             public void RotateAnitclockwise90()
  52.             {
  53.                 m_rotation = (Rotation)(((int)m_rotation + 3) & 3);
  54.             }
  55.  
  56.             //  accessor property to make class look like a two dimensional array
  57.             public int this[int row, int column]
  58.             {
  59.                 get
  60.                 {
  61.                     int
  62.                       value = 0;
  63.  
  64.                     switch (m_rotation)
  65.                     {
  66.                         case Rotation.None:
  67.                             value = m_matrix[row, column];
  68.                             break;
  69.  
  70.                         case Rotation.Clockwise90:
  71.                             value = m_matrix[m_matrix.GetUpperBound(0) - column, row];
  72.                             break;
  73.  
  74.                         case Rotation.Clockwise180:
  75.                             value = m_matrix[m_matrix.GetUpperBound(0) - row, m_matrix.GetUpperBound(1) - column];
  76.                             break;
  77.  
  78.                         case Rotation.Clockwise270:
  79.                             value = m_matrix[column, m_matrix.GetUpperBound(1) - row];
  80.                             break;
  81.                     }
  82.  
  83.                     return value;
  84.                 }
  85.  
  86.                 set
  87.                 {
  88.                     switch (m_rotation)
  89.                     {
  90.                         case Rotation.None:
  91.                             m_matrix[row, column] = value;
  92.                             break;
  93.  
  94.                         case Rotation.Clockwise90:
  95.                             m_matrix[m_matrix.GetUpperBound(0) - column, row] = value;
  96.                             break;
  97.  
  98.                         case Rotation.Clockwise180:
  99.                             m_matrix[m_matrix.GetUpperBound(0) - row, m_matrix.GetUpperBound(1) - column] = value;
  100.                             break;
  101.  
  102.                         case Rotation.Clockwise270:
  103.                             m_matrix[column, m_matrix.GetUpperBound(1) - row] = value;
  104.                             break;
  105.                     }
  106.                 }
  107.             }
  108.  
  109.             //  creates a string with the matrix values
  110.             public override string ToString()
  111.             {
  112.                 int
  113.                   num_rows = 0,
  114.                   num_columns = 0;
  115.  
  116.                 switch (m_rotation)
  117.                 {
  118.                     case Rotation.None:
  119.                     case Rotation.Clockwise180:
  120.                         num_rows = m_matrix.GetUpperBound(0);
  121.                         num_columns = m_matrix.GetUpperBound(1);
  122.                         break;
  123.  
  124.                     case Rotation.Clockwise90:
  125.                     case Rotation.Clockwise270:
  126.                         num_rows = m_matrix.GetUpperBound(1);
  127.                         num_columns = m_matrix.GetUpperBound(0);
  128.                         break;
  129.                 }
  130.  
  131.                 StringBuilder
  132.                   output = new StringBuilder();
  133.  
  134.                 output.Append("{");
  135.  
  136.                 for (int row = 0; row <= num_rows; ++row)
  137.                 {
  138.                     if (row != 0)
  139.                     {
  140.                         output.Append(", ");
  141.                     }
  142.  
  143.                     output.Append("{");
  144.  
  145.                     for (int column = 0; column <= num_columns; ++column)
  146.                     {
  147.                         if (column != 0)
  148.                         {
  149.                             output.Append(", ");
  150.                         }
  151.  
  152.                         output.Append(this[row, column].ToString());
  153.                     }
  154.  
  155.                     output.Append("}");
  156.                 }
  157.  
  158.                 output.Append("}");
  159.  
  160.                 return output.ToString();
  161.             }
  162.  
  163.             int[,]
  164.                 //  the original matrix
  165.               m_matrix;
  166.  
  167.             Rotation
  168.                 //  the current view of the matrix
  169.               m_rotation;
  170.         }
  171.     }

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


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

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

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

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

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

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