Odwrócona tablica dwuwymiarowa

0

Piszę funkcję, która na podstawie jednej tablicy tworzy inną tablicę dwuwymiarową, z odwróconymi wierszami i kolumnami (transponowaną).
np.

2  4  
7  6   
1  3

po:

2  7  1
4  6  3

Kompilator pokazuje błędy w linijkach z deklaracją funkcji "transponuj"oraz jej wywołaniem. Domyślam się że chodzi o niepoprawne użycie wskaźników, proszę o wskazówki co należy poprawić.

#include<stdio.h>

int transponuj(int **tab, int m, int n){

	int T_trans[m][n], i, j;

	for(i=0; i<m; i++){
	
		for(j=0; j<n; j++)
		T_trans[i][j] = tab[j][i];
	
	}

	printf("Macierz transponowana:\n");
	for(i=0; i<3; i++){
	
		for(j=0; j<3; j++)
		printf("%d\t", T_trans[i][j]);
		printf("\n");
		
	}

return 0;	
}


int main(){
	int tab[3][3]={ {12,15,10}, {7,13,20}, {2,4,8} };
	int i=3, j=3;

	printf("Macierz:\n");
	
	for(i=0; i<3; i++){
	
		for(j=0; j<3; j++)
		printf("%d\t",tab[i][j]);
		printf("\n");
	
	}
	
	transponuj(tab, 3, 3);
		
return 0;
}
0

A jak brzmią te komunikaty o błędach?

0

Prawdopodobnie problem z przekazywaniem tablicy dwuwymiarowej (problematyczne toto);

Możesz spróbować przekazać w ten sposób:

int transponuj(int tab[][3], int m, int n);

Stworzyć własne opakowanie na tablicę dwuwymiarową np:

struct Matrix
{
    int rows;
    int cols;
    int data[10][10];
};
 
Matrix transponuj(const Matrix &matrix)
{ 
    Matrix trans;
    trans.rows = matrix.cols;
    trans.cols = matrix.rows;
	
    int i, j;
 
    for(i = 0; i < matrix.cols; i++)
    { 
        for(j = 0; j < matrix.rows; j++)
            trans.data[i][j] = matrix.data[j][i]; 
    }
	
    return trans;  
}
 
int main()
{
    Matrix matrix;
    matrix.cols = 3; matrix.rows = 3;
    matrix.data[0][0] = 12; matrix.data[0][1] = 15; matrix.data[0][2] = 10;
    matrix.data[1][0] = 7;   matrix.data[1][1] = 13; matrix.data[1][2] = 20;
    matrix.data[2][0] = 2;   matrix.data[2][1] = 4;  matrix.data[2][2] = 8;
 
    Matrix trans = transponuj(matrix); 
    return 0;
}

i przekazywanie nie będzie już katorgą. Przy okazji struktura trochę mało optymalna.

Szukać innych sposobów, można wpisać w necie "przekazywanie tablicy dwuwymiarowej do funkcji w c".

0

Ok, dzięki poprawiłem i działa jak należy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1