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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
 
int main(void) {
 
    const x=5;  // Количество столбцов
    const y=10; // Количество строк
 
    long arrM1[100][100];
    long arrM2[100][100];
    long arrExtr[100], arrOrder[100], arrInUse[100], lngLastExtr;
    int i, j;
 
    // Инициализация матрицы
    for(j = 0; j <= x - 1; j++)
    {
        arrExtr[j] = 2147483647;
        for(i = 0; i <= y - 1; i++)
        {
            arrM1[i][j] = (int)random()/1000000;
            if (j == 3) arrM1[i][j] = arrM1[i][0];
            //printf("arrM1[%d][%d]%d\n", i, j, arrM1[i][j]);
        }   
    }
 
    // Поиск минимумов
    for(j = 0; j <= x - 1; j++)
    {
        for(i = 0; i <= y - 1; i++)
        {
            if(arrExtr[j] > arrM1[i][j]) arrExtr[j] = arrM1[i][j];
        }   
        //printf("!!!arrExtr[%d] = %d\n", j, arrExtr[j]);
    }
 
    // Определение порядка столбцов
    for(j = 0; j <= x - 1; j++)
    {
        lngLastExtr = 2147483647;
        for(i = 0; i <= x - 1; i++)
        {
            if(lngLastExtr > arrExtr[i] && arrInUse[i] != 1)
                {
                    arrOrder[j] = i;
                    lngLastExtr = arrExtr[arrOrder[j]];
                }
        }
        arrInUse[arrOrder[j]] = 1;
        //printf("arrOrder[%d] = %d, arrInUse[%d] = %d\n", j, arrOrder[j], arrOrder[j], arrInUse[arrOrder[j]]);
    }
 
    // Сортировка столбцов
    for(j = 0; j <= x - 1; j++)
    {
        for(i = 0; i <= y - 1; i++)
        {
            arrM2[i][j] = arrM1[i][arrOrder[j]];
        }   
    }
 
    // Вывод результат
    printf("\nИСХОДНАЯ МАТРИЦА\n");
    for(i = 0; i <= y - 1; i++)
    {
        for(j = 0; j <= x - 1; j++)
        {
            printf("%d  ", arrM1[i][j]);
        }
    printf("\n");
    }
 
    printf("\nПРЕОБРАЗОВАННАЯЯ МАТРИЦА\n");
    for(i = 0; i <= y - 1; i++)
    {
        for(j = 0; j <= x - 1; j++)
        {
            printf("%d  ", arrM2[i][j]);
        }
    printf("\n");
    }
    
    return 0;
}

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

Код представлен на языке 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
Похожие ответы