Дана матрица размера N×M. Поменять местами столбцы - C#

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

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

Есть такая вот задачка. На мой взгляд, должна работать.Компилятор выдает исключение(индекс за границы), да и сама прога работает неправильно. Что я не так делаю? Просьба объяснять поподробнее, тк я новичок и мне важно понять смысл моих ошибок. * Дана матрица размера N×M. Поменять местами столбец с номером 1|M и первый|последний из столбцов, * содержащих только положительные элементы. */
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ConsoleApplication2
  6. {
  7. class Program
  8. {
  9. static void Show(int[,] arr)
  10. {
  11. for (int i = 0; i < arr.GetLength(0); i++)
  12. {
  13. for (int j = 0; j < arr.GetLength(1); j++)
  14. Console.Write("{0}\t", arr[i, j]);
  15. Console.WriteLine();
  16. }
  17. }
  18. static void ExchangeColumn1(int[,]arr, int j)//меняем местами столбцы
  19. {
  20. int t;
  21. for (int i = 0; i < arr.GetLength(0); i++)
  22. {
  23. t = arr[i, j];
  24. arr[i, j] = arr[i, 1];
  25. arr[i, 1] = t;
  26. }
  27. }
  28.  
  29. static void SearchFirst(int i, int j, int[,]arr)//поиск первого положительного столбца
  30. {
  31. int k1;
  32. bool first;
  33. for (j = 0; j < arr.GetLength(0); j++)
  34. {
  35. first = true;
  36. for (i = 0; i < arr.GetLength(1); i++)
  37. {
  38. if (arr[i, j] < 0)
  39. {
  40. first = false;
  41. break;
  42. }
  43. }
  44. if (first)
  45. break;
  46. }
  47. if (j == 0)
  48. Console.WriteLine("Требуемых столбцов не нашлось.");
  49. else
  50. k1 = j; //переменная k1 служит для запоминания первого положительного столбца
  51. ExchangeColumn1(arr, j);
  52. }
  53. static void SearchLast(int i, int j, int[,]arr)//ищем последний положительный столбец
  54. {
  55. int k2;
  56. bool last;
  57. for (j = arr.GetLength(1); j > 0; --j)
  58. {
  59. last = true;
  60. for (i = 0; i < arr.GetLength(0); i++)
  61. {
  62. if (arr[i, j] < 0)
  63. {
  64. last = false;
  65. break;
  66. }
  67. }
  68. if (last)
  69. break;
  70. }
  71. if (j == 0)
  72. Console.WriteLine("Требуемых столбцов не нашлось.");
  73. else
  74. k2 = j;
  75. ExchangeColumn1(arr, j);
  76. }
  77. static void ExchangeColumn3(int[,]arr, int m, int k1)//меняем столбец с номером М и первый положительный
  78. {
  79. int t;
  80. for (int i = 0; i < arr.GetLength(0); i++)
  81. {
  82. t = arr[i, m];
  83. arr[i, m] = arr[i, k1];
  84. arr[i, k1] = t;
  85. }
  86. }
  87. static void ExchangeColumn4(int[,]arr, int m, int k2)//меняем столбец с номером М и последний положительный
  88. {
  89. int t;
  90. for (int i = 0; i < arr.GetLength(0); i++)
  91. {
  92. t = arr[i, m];
  93. arr[i, k2] = arr[i, k2];
  94. arr[i, m] = t;
  95. }
  96. }
  97. static void ValueM (int m, int [,] arr)//вводим переменную М
  98. {
  99. Random r = new Random();
  100. m = r.Next(arr.GetLength(1));
  101. Console.WriteLine("Столбец M={0}", m);
  102. }
  103. static void Main()
  104. {
  105. int m=0;
  106. int k1=0;
  107. int k2=0;
  108. int i = 5;
  109. int j = 7;
  110. int[,] arr = new int[i, j];
  111. Random rand = new Random();
  112. for (i = 0; i < arr.GetLength(0); i++)
  113. for (j = 0; j < arr.GetLength(1); j++)
  114. arr[i, j] = rand.Next(-1, 15);
  115. Console.WriteLine("Исходный массив: ");
  116. Show(arr);
  117. Console.WriteLine();
  118. Console.WriteLine("Полученный массив 1");
  119. SearchFirst(i, j, arr);
  120. Show(arr);
  121. Console.WriteLine("Полученный массив 2");
  122. SearchLast(i, j, arr);
  123. Show(arr);
  124. Console.WriteLine("Полученный массив 3");
  125. ValueM(m, arr);
  126. ExchangeColumn3(arr, m, k1);
  127. Show(arr);
  128. Console.WriteLine("Полученный массив 4");
  129. ExchangeColumn4(arr, m, k2);
  130. Show(arr);
  131. Console.ReadKey();
  132. }
  133. }
  134. }

Решение задачи: «Дана матрица размера N×M. Поменять местами столбцы»

textual
Листинг программы
  1.         static  int n = 5;
  2.         static  int m = 7;  // Размерность матрицы  N * M
  3.        
  4.         static void Main()
  5.         {
  6.            
  7.             int[,] arr = new int[n,m];
  8.             int stolbec1 = 0;
  9.             int stolbec_end=0;
  10.  
  11.             Random rand = new Random();
  12.            
  13.             Console.WriteLine("Исходный массив: \n");
  14.             for (int i = 0; i < n; i++)
  15.             {
  16.                 for (int j = 0; j < m; j++)
  17.                 {
  18.                    arr[i, j] = rand.Next(-2, 15);
  19.                    Console.Write("{0}\t", arr[i,j]);
  20.                 }
  21.                 Console.WriteLine();
  22.             }
  23.  
  24.             Console.WriteLine();
  25.             Console.WriteLine("Меняем первый столбец и первый положительный\n");
  26.             stolbec1 = FindFirst(arr); // находим первый положительный столбец
  27.             Reverse(arr, 0, stolbec1);  // меняем первый и певый положительный столбцы
  28.             Show(arr, n, m); // выводим массив
  29.  
  30.             Console.WriteLine("\n");
  31.  
  32.             Console.WriteLine("Меняем первый столбец и последний положительный столбец\n");
  33.             stolbec_end = FindEnd(arr, stolbec1); // находим последний положительный столбец
  34.             Reverse(arr, 0, stolbec_end); // меняем первый стобец и последний положительный столбец
  35.             Show(arr, n, m); //выводим массив
  36.  
  37.             Console.WriteLine("\n");
  38.  
  39.             //меняем столбец с номером М и последний положительный
  40.             Console.WriteLine("Меняем стобец М и последний положительный столбец, M={0} \n", m);
  41.             stolbec_end = FindEnd(arr, stolbec1); // находим последний положительный столбец
  42.             Reverse(arr, m-1, stolbec_end); // меняем M стобец и последний положительный столбец
  43.             Show(arr, n, m); //выводим массив
  44.  
  45.             Console.ReadKey();
  46.  
  47.         }
  48.             static void Show(int[,]mass, int n, int m) // Вывод массива на экран
  49.             {
  50.                 for (int i = 0; i < n; i++)
  51.                 {
  52.                  for (int j = 0; j < m; j++) Console.Write("{0}\t", mass[i, j]);
  53.                  Console.WriteLine();
  54.                 }
  55.            }
  56.  
  57.             static void Reverse(int[,] arr, int chto, int nachto) // Функция замены
  58.             {
  59.                 for (int i = 0; i < n; i++)  // меняем стобцы i|j+
  60.                 {
  61.                     int k0 = arr[i, chto];
  62.                     int k6 = arr[i, nachto];
  63.                     arr[i, chto] = k6;
  64.                     arr[i, nachto] = k0;
  65.                 }
  66.        
  67.             }
  68.  
  69.             static int FindFirst(int[,] arr) //находим первый столбец с положительным элементом;
  70.             {
  71.                 int i;
  72.                 int stolbec=0;
  73.                 for (int j = 0; j < m; j++)  
  74.                 {
  75.                     for (i = 0; i < n; i++) if (arr[i, j] < 0) break;
  76.  
  77.                     if (i == n)
  78.                     {
  79.                         stolbec = j; // Это будет номер первого положительного столбца
  80.                         break;
  81.                     }
  82.                 }
  83.                 return stolbec;
  84.             }
  85.  
  86.            static int FindEnd(int [,]arr, int stolb)
  87.            {
  88.                int i;
  89.                int stolbec = 0;
  90.                for (int j = stolb; j < m; j++)  //находим последний столбец с положительным элементом;
  91.                {
  92.                    for (i = 0; i < n; i++) if (arr[i, j] < 0) break;
  93.                    if (i == n) stolbec = j; // это будет номер последнего положительного столбца
  94.                }
  95.                return stolbec;
  96.            }

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


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

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

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

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

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

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