Перестановкой строк и столбцов упорядочить по возрастанию элементы главной диагонали квадратной матрицы - C (СИ)

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

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

Заполнить матрицу размером N×M целыми случайными числами, распределенными в диапазоне от a до b. N=3; M=3; a=0; b=10. Перестановкой строк и столбцов упорядочить по возрастанию элементы главной диагонали квадратной матрицы. Задачу разбить на подзадачи, которые оформить в виде функций, причем объявления этих функций и функция main(…) должны находиться в разных файлах. первый файл с заполнением массива:
#include "stdafx.h"
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <time.h>
 
void matrix_init()
{
    int const iCount = 3, jCount = 3;
 
    srand ((unsigned) time (NULL));
    int i, j;
 
    for (i = 0; i < iCount; i++)
    {
        for (j = 0; j < jCount; j++) 
        {
            source[i*iCount+j] = rand()%10;
            printf("%i\t", ((source[i*iCount+j])));
        }
        printf("\n");
    }
}
А вот со вторым файлом проблемы. То бишь не могу понять как переставить строки и столбцы в правильном порядке

Решение задачи: «Перестановкой строк и столбцов упорядочить по возрастанию элементы главной диагонали квадратной матрицы»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
#define N 5
 
void swap(int& n1, int& n2);
 
int main()
{
    int** X = new int*[N];
    for (int i = 0; i < N; i++)
    {
        X[i] = new int[N];
        for (int j = 0; j < N; j++)
        {
            X[i][j] = rand() % 10;
            printf("%d ",X[i][j]);
        }
    
        printf("\n");
    }
 
    printf("\n");
 
    for (int i = 0; i < N; i++)
    {
        for (int k = i+1; k < N; k++)
            if (X[k][k] < X[i][i])
            {
                swap(X[i][k],X[k][k]);
                swap(X[k][i],X[i][i]);
                for (int m = 0; m < N; m++)
                    swap(X[m][i],X[m][k]);
            }
    }
 
    for (int z1 = 0; z1 < N; z1++)
    {
        for (int z2 = 0; z2 < N; z2++)
            printf("%d ",X[z1][z2]);
        printf("\n");
    }
 
    _getch();
 
    return 0;
}
 
void swap(int& n1, int& n2)
 { int _tn = n1; n1 = n2; n2 = _tn; }

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

Код представлен на языке C и выполняет следующие действия:

  1. Создаёт матрицу NxN (N=5) случайных целых чисел.
  2. Сортирует элементы главной диагонали (и только их) по возрастанию, используя алгоритм пузырька.
  3. Выводит отсортированную матрицу. Вот список действий, оформленный в виде нумерованного списка с названиями и значениями переменных:
  4. Включает необходимые заголовочные файлы
  5. Определяет размерность матрицы N
  6. Создаёт и инициализирует матрицу
  7. Заполняет матрицу случайными целыми числами от 0 до 9
  8. Выводит матрицу на экран
  9. Сортирует элементы главной диагонали по возрастанию
  10. Выводит отсортированную матрицу
  11. Завершает работу программы Алгоритм пузырька, использованный в программе, сравнивает пары соседних элементов главной диагонали и, если текущий элемент больше следующего, меняет их местами. После прохождения по всем элементам главной диагонали, наиболее большие элементы будут расположены в конце. Алгоритм пузырька не является оптимальным для больших матриц, так как имеет квадратичную сложность. Функция swap() используется для обмена значениями двух переменных.

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


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

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

6   голосов , оценка 4.5 из 5
Похожие ответы