Come ottenere la matrice trasposta in C

Nella seguente pagina viene mostrato come creare un programma in C in grado di ottenere la matrice trasposta di una data matrice.

Prima di iniziare con la spiegazione del programma, risulta fondamentale ricordare la definizione di matrice trasposta. La matrice trasposta di una particolare matrice, è la matrice che si ottiene scambiando le righe con le colonne. Ovvero, la matrice trasposta è una nuova matrice in cui le colonne diventano righe, mentre le righe diventano colonne.

Ad esempio, sia A una matrice di dimensione MxN, la sua trasposta AT avrà dimensione NxM

Questo significa che l'elemento che si trova in posizione [0][1] all’interno della matrice A, si troverà nella posizione [1][0] della matrice trasposta AT. Di conseguenza, per ottenere la matrice trasposta basta invertire l’ordine degli indici della matrice.

Procedimento algoritmo

Iniziamo con la dichiarazione di una matrice di dimensione MxN, dove M ed N sono due macro definite con la direttiva #define, che rappresentano, rispettivamente, il numero di righe e di colonne della matrice. A questo punto dobbiamo inizializzare la matrice, questo può essere fatto inserendo manualmente gli elementi direttamente nel codice, oppure chiedendo all’utente di inserire valori da tastiera. Nel nostro caso abbiamo deciso di seguire il primo metodo, di conseguenza inizializziamo la matrice con dei valori arbitrari.

Oltre alla matrice iniziale abbiamo bisogno di dichiarare un’altra matrice, ovvero la matrice trasposta di dimensione NxM, in cui l’algoritmo inserirà i valori.

Definite le due matrici, possiamo iniziare con il riempimento della matrice trasposta della matrice iniziale. Come accennato, questo si può fare semplicemente scambiando l’ordine degli indici, ovvero sia mat la matrice iniziale e trasp la sua matrice trasposta, quest’ultima si ottiene ponendo trasp[j][i] = mat[i][j], dove i ed j sono le due variabili dei due cicli for innestati, usati per poter scorrere la matrice iniziale.

Al termine dei due cicli for, la matrice trasp conterrà la matrice trasposta della matrice originaria. Per verificare tale risultato, stampiamo a schermo sia la matrice originaria, che la sua matrice trasposta.

Codice completo per ottenere la matrice trasposta in C

Di seguito viene riportato il codice completo del programma in grado di restituire la matrice trasposta di una matrice.


#include <stdio.h>
#define M 4
#define N 3

int main(){
    int mat[M][N] = {{3, 4, 7}, {5, 7, 3}, {0, 0, 5}, {7, 4, 6}};
    int trasp[N][M];
    
    for(int i=0; i<M; i++){
        for(int j=0; j<N; j++){
            trasp[j][i] = mat[i][j];
        }
    }

    printf("Matrice originale: \n");
    for(int i=0; i<M; i++){
        for(int j=0; j<N; j++){
            printf("%d ", mat[i][j]);
        }
        printf("\n");
    }

    printf("Matrice trasposta: \n");
    for(int i=0; i<N; i++){
        for(int j=0; j<M; j++){
            printf("%d ", trasp[i][j]);
        }
        printf("\n");
    }

    return 0;
}


Matrice originale: 3 4 7 5 7 3 0 0 5 7 4 6 Matrice trasposta: 3 5 0 7 4 7 0 4 7 3 5 6

Come è possibile notare, le righe e le colonne della matrice trasposta, sono invertite rispetto alle righe ed alle colonne della matrice originale.

Indice pagine linguaggio C: