libri-javascript-python

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.

matrice trasposta

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

Indice algoritmi linguaggio C

Somma elementi diagonale principale di una matrice in C

Somma elementi cornice esterna in C

Come sommare due matrici in C

Come sommare i numeri di una matrice in C

Prodotto tra matrici in C

Ricerca elementi in una matrice in C

Inserire dati in una matrice in C

Tavola pitagorica in C

Array multidimensionali in C

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Insertion Sort in C

Gestione di una Pila mediante un array

Gestione di una Coda