Вызов функции с двумерным массивом - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток! Подскажите, в чём проблема?
//transponse (*) 
#include <locale.h>
#include <stdio.h>
int transponse(int matrix[][], int N, int M){
    printf("Исходная матрица: (%dX%d)\n",N,M);
    for (int i=0;i<N;i++){
        for (int j=0;j<M;j++)
            printf("%3d", matrix[i][j]);
        putchar('\n');
    }
    printf("Транспонированная матрица: (%dX%d)\n",M,N);
    for (int i=0;i<M;i++){
        for (int j=0;j<N;j++)
            printf("%3d", matrix[j][i]);
        putchar('\n');
    }
}
int main(){
    setlocale(LC_ALL,"Rus");
    int N=4;
    int M=5;
    int matrix[4][5]= 
    {   {1,2,3,4,5},
        {5,6,7,0,6},
        {9,10,11,10,0},
        {0,0,0,2,1}    };
    transponse(matrix,N,M);
}
Лог ошибок такой:
если задам массив в transponse в таком виде (**matrix), то программа запускается и сразу закрывается.

Решение задачи: «Вызов функции с двумерным массивом»

textual
Листинг программы
void tr(int *a, int n, int m)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        for(j = 0; j < m; j++)
            printf("%d ", a[i*m + j]);
        printf("\n");
    }
}
 
int main()
{
    int a[2][3] = {1,2,3,4,5,6};
    
    tr(&a[0][0],2,3);
    
    return 0;
}

Объяснение кода листинга программы

В данном коде представлена функция tr, которая принимает три аргумента:

  1. a - указатель на двумерный массив.
  2. n - количество строк в массиве.
  3. m - количество столбцов в массиве. Внутри функции создаются две переменные i и j, которые будут использоваться в циклах. Затем, с помощью внешнего цикла for, который выполняется n раз, происходит итерация по строкам массива. Внутри внешнего цикла, с помощью внутреннего цикла for, который выполняется m раз, происходит итерация по столбцам массива. На каждой итерации внутреннего цикла, с помощью оператора printf, выводится значение элемента массива, с добавлением пробела после запятой. После завершения внутреннего цикла, с помощью оператора printf, выводится символ новой строки \n, который позволяет перейти на следующую строку вывода. После завершения внешнего цикла, функция tr завершается. В функции main, создается двумерный массив a размером 2x3, инициализированный значениями 1,2,3,4,5,6. Затем, с помощью функции tr, происходит обход массива и вывод его значений на экран. Функция main завершается, и выполнение программы прекращается.

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


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

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

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