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

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


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

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

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