In questa lezione parliamo di matrice trasposta in C. Nella scorsa lezione abbiamo già parlato di matrici e abbiamo sviluppato alcuni esempi.
Matrice trasposta in linguaggio C
Prima dello sviluppo dell’algoritmo in C diamo alcune definizioni.
Ricordiamo dunque che una matrice A[M] [N] si dice rettangolare se M è diverso da N, altrimenti se M ed N sono uguali allora la matrice si dice quadrata.
Una matrice trasposta è una matrice che si ottiene da essa scambiando semplicemente le righe con le colonne.
Ad esempio se ho la matrice A, la trasposta sarà la matrice A T come da figura sotto. In poche parole ho scambiato le righe con le colonne.
Quindi se A è una matrice M x N allora A T diventerà una matrice N x M.
Ovvero è una matrice i cui elementi a[j][i] sono dunque gli elementi a[i][j] della matrice originaria.
Algoritmo per la matrice trasposta in C
Bene, realizzarla in C è molto semplice e non c’è differenza se una matrice è rettangolare o quadrata.
Realizzeremo quindi un algoritmo che:
- Chiederà la dimensione di M ed N;
- Farà inserire gli elementi della matrice A;
- Calcolerà la matrice trasposta A T ;
- La visualizzerà in output.
Procedimento
Definisco la dimensione massima delle righe e delle colonne in 8, ma ovviamente potevo indicare qualsiasi dimensione.
La matrice a[M][N] di interi ha come trasposta la matrice b[N][M].
Chiedo la dimensione delle matrici che definisco nelle variabili intere n ed m, definendo quindi un controllo dell’input.
La matrice trasposta in C si calcola semplicemente scorrendo le righe e le colonne della matrice a e ponendo b[j][i]=a[i][j].
Ecco dunque il codice completo:
#include <stdio.h>
#define M 8
#define N 8
main() {
int a[M][N];
int b[N][M];
int n,m,i,j;
do {
printf("Dammi il numero di righe: ");
scanf("%d", &m);
} while ((m>M) || (m<1));
do {
printf("Dammi il numero di colonne: ");
scanf("%d", &n);
} while ((n>N)|| (n<1));
printf("\nInseriamo i dati nella matrice \n");
for (i=0;i<m;i++)
for(j=0;j<n;j++) {
printf("Inserisci elemento di riga %d e colonna %d: ", i, j);
scanf("%d", &a[i][j]);
}
printf("\nCalcoliamo la matrice trasposta \n");
for (i=0;i<m;i++)
for(j=0;j<n;j++) {
b[j][i]=a[i][j];
}
printf("\nStampiamo i dati della matrice \n");
for (i=0;i<m;i++) {
printf("\n");
for(j=0;j<n;j++)
printf("\t%d", a[i][j]);
}
printf("\nStampiamo i dati della matrice trasposta \n");
for (i=0;i<n;i++) {
printf("\n");
for(j=0;j<m;j++)
printf("\t%d", a[j][i]);
}
}
Questa è solo una possibile soluzione all’algoritmo per il calcolo della matrice trasposta in C. Chiaramente ci possono essere tantissimi altri algoritmi, dite pure la vostra nei commenti.
Alcuni link utili
Somma elementi diagonale principale di una matrice in C
Somma elementi cornice esterna in C
Come sommare i numeri di una matrice in C
Ricerca elementi in una matrice in C
Inserire dati in una matrice in C
Gestione di una Pila mediante un array