Объяснить задание: дана матрица размером 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;
}
Объяснение кода листинга программы
В этом коде:
- Объявляются переменные:
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;- завершение программы.
- В цикле
forсi=0доn-1сортируются строки матрицы по возрастанию первого элемента каждой строки. - Для этого используется вложенный цикл
forсk=i+1доn-1, который перебирает строки, начиная сi+1доn-1, и, если первый элемент текущей строки больше первого элемента строкиi, то происходит обмен значениями между этими строками. - После сортировки выводится отсортированное содержимое матрицы.
- После работы с матрицей освобождается выделенная под неё память.
- Программа завершается возвратом значения
0, что означает успешное выполнение.