Объяснить задание: дана матрица размером NxM. Упорядочить их строки по возрастанию их первых элементов - C (СИ)

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

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

Объясните пожалуйста про двумерные массивы. Препод ничего адекватно нам не объясняет поэтому приходиться учить язык самому, по интернету. Всё что я понял, что двумерные массивы держат в себе большое кол-во переменных и состоят из строк и столбцов. Если значение массивы даны, то я могу вывести любой элемент массивы и с ним уже работать, но на этом моё понимание в массивах закончилось. Прочёл приличное кол-во материала, но для понимания не хватает наглядного примера. Объясните пожалуйста "Обычным языком" как , к примеру, решать такую задачу :

"Дана матрица размером NxM. Упорядочить их строки по возрастанию их первых элементов"

. Буду очень благодарен. Уже несколько дней разбираю массивы, только с ними возникла проблема.

Решение задачи: «Объяснить задание: дана матрица размером NxM. Упорядочить их строки по возрастанию их первых элементов»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
 
int main()
{
 
int** a;
int n;
int m;
 
int i;
int j;
int k;
 
int tmp;
 
n = 10;
m = 20;
 
srand(time(0));
 
a = (int**) malloc(n*sizeof(int*));
 
for(i=0;i<n;i++)
a[i] = (int*) malloc(m*sizeof(int));;
 
for(i=0;i<n;i++)
for(j=0;j<m;j++)
a[i][j] = rand()%9;
 
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ", a[i][j]);
printf("\n");
}
 
for(i=0;i<n;i++)
{
for(k=i+1;k<n; k++)
{
if (a[i][0] > a[k][0])
{
for(j=0;j<m;j++)
{
tmp = a[i][j];
a[i][j] = a[k][j];
a[k][j] = tmp;
}
}
}
}
 
printf("\n");
 
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%d ", a[i][j]);
printf("\n");
}
 
for(i=0;i<n;i++)
free(a[i]);
 
free(a);
 
return 0;
 
}

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

В этом коде:

  1. Объявляются переменные:
    • int** a; - двумерный массив (матрица) типа int размером n на m.
    • int n; - количество строк в матрице.
    • int m; - количество столбцов в матрице.
    • int i; - счётчик для прохождения по строкам матрицы.
    • int j; - счётчик для прохождения по столбцам матрицы.
    • int k; - счётчик для прохождения по элементам матрицы (используется во внутреннем цикле).
    • int tmp; - временная переменная для обмена значениями.
    • n = 10; - размер первой размерности матрицы (количество строк).
    • m = 20; - размер второй размерности матрицы (количество столбцов).
    • srand(time(0)); - инициализация генератора случайных чисел.
    • a = (int**) malloc(n*sizeof(int*)); - выделение памяти под матрицу.
    • for(i=0;i<n;i++) a[i] = (int*) malloc(m*sizeof(int)); - выделение памяти под строки матрицы.
    • for(i=0;i<n;i++) for(j=0;j<m;j++) a[i][j] = rand()%9; - заполнение матрицы случайными числами.
    • for(i=0;i<n;i++) for(j=0;j<m;j++) printf(%d , a[i][j]); - вывод содержимого матрицы.
    • for(i=0;i<n;i++) free(a[i]); - освобождение памяти под строками матрицы.
    • free(a); - освобождение памяти под матрицей.
    • return 0; - завершение программы.
  2. В цикле for с i=0 до n-1 сортируются строки матрицы по возрастанию первого элемента каждой строки.
  3. Для этого используется вложенный цикл for с k=i+1 до n-1, который перебирает строки, начиная с i+1 до n-1, и, если первый элемент текущей строки больше первого элемента строки i, то происходит обмен значениями между этими строками.
  4. После сортировки выводится отсортированное содержимое матрицы.
  5. После работы с матрицей освобождается выделенная под неё память.
  6. Программа завершается возвратом значения 0, что означает успешное выполнение.

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


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

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

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