Объявить двумерный массив динамически, заполнить его с клавиатуры и отсортировать - 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( "" );
}
}