Объявить двумерный массив динамически, заполнить его с клавиатуры и отсортировать - C (СИ)
Формулировка задачи:
Итак, ребят. Задачка вот какая: нужно объявить двумерный массив динамически, заполнить его с клавиатуры и отсортировать. Что я имею:
Тут представлен вариант, в котором массив объявлен статически и он успешно сортируется.
Я начал объявление динамически, но теперь не знаю, как заполнить массив и отсортировать его. Если пользоваться стандартным заполнением, как было раньше, и использовать сортировку из верхнего кода, то программа выдает нули. Что делать, куда копать и как все-таки заполняется двумерный динамический массив?
#include <stdio.h> #include <conio.h> main() { int i,n,j,elements,tmp; int **min, **max; int *lin; printf("Input razmernost massiva\n"); scanf("%d",&n); int A[n][n]; for(i=0;i<n;i++){ for(j=0;j<n;j++){ printf("Input A[%d][%d] ",i,j); scanf("%d",&elements); A[i][j]=elements; }} for (i=0;i<n-1;i++){ for(j=n-1; j>i; j--){ if(A[j][n-j-1]<A[j-1][n-j]) { tmp=A[j][n-j-1]; A[j][n-j-1]=A[j-1][n-j]; A[j-1][n-j]=tmp; }}} printf("\n\nPosle sortirovki:\n\n"); for(i=0; i<n; i++) { for(j=0; j<n; j++) printf("%8.2d", A[i][j]); printf("\n"); } getch();}
#include <conio.h> #include <stdlib.h> main() { int i,n,j,elements,tmp; printf("Input razmernost massiva\n"); scanf("%d",&n); float **matr; matr=(float **)malloc(n* sizeof(float *)); for(i=0;i<n;i++) { matr[i]=(float *)malloc(n*sizeof(float *));} for(i=0;i<n;i++){ printf("Input matr[%d]",i); scanf("%d",&elements); matr[i]=elements; }
Решение задачи: «Объявить двумерный массив динамически, заполнить его с клавиатуры и отсортировать»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> //функция заполняет матрицу псевдослучайными данными void FillMatrix( int** matrix, const int size, const unsigned randRange, const int shift ); //функция печатает матрицу void PrintMatrix( int** matrix, const int size ); int main( void ) { srand( time( 0 ) ); // засеять генератор случайных чисел // запрашиваем у пользователя данные для матрицы int size; printf( "Введите размер квадратной матрицы " ); scanf( "%u", &size ); // объявляем нашу матрицу как указатель на int и выделяем необходимую память для нее int** a = ( int** ) calloc( size, sizeof(int*) ); int i; for ( i = 0; i < size; ++i ) a[ i ] = ( int* ) calloc( size, sizeof(int) ); // заполняем матрицу псевдослучайными значениями типа int FillMatrix( a, size, 100, 0 ); // выводим матрицу на экран puts( "Исходная матрица" ); PrintMatrix( a, size ); // освобождаем память, выделенную под матрицу for ( i = 0; i < size; ++i ) free( a[ i ] ); free( a ); return EXIT_SUCCESS; } void FillMatrix( int** matrix, const int size, const unsigned randRange, const int shift ) { int i, j; for ( i = 0; i < size; ++i ) for ( j = 0; j < size; ++j ) // shift - начальное значение диапазона, randRange - диапазон значений matrix[ i ][ j ] = shift + rand() % randRange; } void PrintMatrix( int** matrix, const int size ) { int i, j; for ( i = 0; i < size; ++i ) { for ( j = 0; j < size; ++j ) printf( "%4d ", matrix[ i ][ j ] ); puts( "" ); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д