Объяснить задание: дана матрица размером 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
, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д