Сортировать строки матрицы по возрастанию их минимумов - C (СИ)

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

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

Написать программу, которая позволяет в каждой строке квадратной матрицы искать минимум и сортировать эти строки по возрастанию этих характеристик.

Решение задачи: «Сортировать строки матрицы по возрастанию их минимумов»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. int main(void) {
  4.  
  5.     const x=5;  // Количество столбцов
  6.     const y=10; // Количество строк
  7.  
  8.     long arrM1[100][100];
  9.     long arrM2[100][100];
  10.     long arrExtr[100], arrOrder[100], arrInUse[100], lngLastExtr;
  11.     int i, j;
  12.  
  13.     // Инициализация матрицы
  14.     for(j = 0; j <= x - 1; j++)
  15.     {
  16.         arrExtr[j] = 2147483647;
  17.         for(i = 0; i <= y - 1; i++)
  18.         {
  19.             arrM1[i][j] = (int)random()/1000000;
  20.             if (j == 3) arrM1[i][j] = arrM1[i][0];
  21.             //printf("arrM1[%d][%d]%d\n", i, j, arrM1[i][j]);
  22.         }  
  23.     }
  24.  
  25.     // Поиск минимумов
  26.     for(j = 0; j <= x - 1; j++)
  27.     {
  28.         for(i = 0; i <= y - 1; i++)
  29.         {
  30.             if(arrExtr[j] > arrM1[i][j]) arrExtr[j] = arrM1[i][j];
  31.         }  
  32.         //printf("!!!arrExtr[%d] = %d\n", j, arrExtr[j]);
  33.     }
  34.  
  35.     // Определение порядка столбцов
  36.     for(j = 0; j <= x - 1; j++)
  37.     {
  38.         lngLastExtr = 2147483647;
  39.         for(i = 0; i <= x - 1; i++)
  40.         {
  41.             if(lngLastExtr > arrExtr[i] && arrInUse[i] != 1)
  42.                 {
  43.                     arrOrder[j] = i;
  44.                     lngLastExtr = arrExtr[arrOrder[j]];
  45.                 }
  46.         }
  47.         arrInUse[arrOrder[j]] = 1;
  48.         //printf("arrOrder[%d] = %d, arrInUse[%d] = %d\n", j, arrOrder[j], arrOrder[j], arrInUse[arrOrder[j]]);
  49.     }
  50.  
  51.     // Сортировка столбцов
  52.     for(j = 0; j <= x - 1; j++)
  53.     {
  54.         for(i = 0; i <= y - 1; i++)
  55.         {
  56.             arrM2[i][j] = arrM1[i][arrOrder[j]];
  57.         }  
  58.     }
  59.  
  60.     // Вывод результат
  61.     printf("\nИСХОДНАЯ МАТРИЦА\n");
  62.     for(i = 0; i <= y - 1; i++)
  63.     {
  64.         for(j = 0; j <= x - 1; j++)
  65.         {
  66.             printf("%d  ", arrM1[i][j]);
  67.         }
  68.     printf("\n");
  69.     }
  70.  
  71.     printf("\nПРЕОБРАЗОВАННАЯЯ МАТРИЦА\n");
  72.     for(i = 0; i <= y - 1; i++)
  73.     {
  74.         for(j = 0; j <= x - 1; j++)
  75.         {
  76.             printf("%d  ", arrM2[i][j]);
  77.         }
  78.     printf("\n");
  79.     }
  80.    
  81.     return 0;
  82. }

Объяснение кода листинга программы

Код представлен на языке C и выполняет сортировку строк матрицы по возрастанию их минимумов. Вот список действий, которые выполняются в коде:

  1. Инициализация матрицы. Вектор arrExtr инициализируется значением 2147483647, которое больше любого возможного значения в матрице. Для каждого элемента матрицы arrM1 выбирается случайное значение от 0 до 1000000. Если выбранный элемент находится в третьем столбце, он заменяется на значение из первого столбца (arrM1[i][0]).
  2. Поиск минимумов. Для каждого столбца матрицы arrExtr ищется минимальное значение. Если текущее значение в столбце меньше значения в arrExtr, оно заменяет значение в arrExtr.
  3. Определение порядка столбцов. Для каждого столбца матрицы ищется последнее минимальное значение в столбце, и если оно меньше значения в arrExtr и arrInUse не равно 1, оно становится новым значением в arrOrder и arrInUse устанавливается в 1.
  4. Сортировка столбцов. Для каждого столбца матрицы arrM1 выбирается значение из соответствующего столбца arrOrder.
  5. Вывод результата. И исходная матрица arrM1, и преобразованная матрица arrM2 выводятся на экран.

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


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

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

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

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

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

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