Realizziamo un algoritmo che calcoli il prodotto tra due matrici in C.

Procediamo seguendo questi passi:

  • Inseriamo i dati nella prima matrice
  • Inseriamo i dati nella seconda matrice
  • Calcoliamo il prodotto
  • Visualizziamo la prima matrice
  • Visualizziamo la seconda matrice

E’ utile sapere che il prodotto tra due matrici si può ottenere se il numero di colonne della prima matrice è uguale al numero di righe della seconda matrice.

Quindi ad esempio se ho:

a[M][N]  e b[N][P] il prodotto è possibile.

a[M][N]  e b[M][P] il prodotto non è possibile.

Banner Pubblicitario

Algoritmo in linguaggio C per il calcolo del prodotto tra due matrici

Immaginiamo di poter utilizzare quindi queste due matrici, a[M][N] e b[N][P]. La matrice prodotto sarà quindi c[M][P].

Definiamo le dimensioni delle righe e delle colonne, ad esempio:

#define M 4
#define N 3
#define P 5


Quindi avremo una matrice a[4] [3] e una matrice b[3] [5].

Dapprima carichiamo i dati della prima matrice

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]);
}

e poi i dati della seconda matrice

Banner pubblicitario
  printf("\nInseriamo i dati nella seconda matrice \n");
    for (i=0;i<N;i++)
      for(j=0;j<P;j++) {
        printf("Inserisci elemento di riga %d e colonna %d: ", i, j);
        scanf("%d", &b[i][j]);
      }

La matrice prodotto sarà dunque la matrice c[4][5]

Per ottenere il valore dell’elemento i, j della matrice prodotto si inizializza a zero c[i][j]=0;

Con un ciclo che scandisce la riga i di a e la colonna j di b, si accumula in c la sommatoria dei prodotti dei corrispondenti elementi di a e b.

La variabile k permette di scorrere contemporaneamente la linea i di a e la colonna j di b. Questo procedimento lo ripetiamo per ogni elemento della matrice prodotto.

Algoritmo completo del prodotto tra matrici in linguaggio C

#include <stdio.h>
#define N 3
#define P 5    
#define M 4
int a[M][N];
int b[N][P];
int c[M][P]; 

main() {
int i,j,k;

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("\nInseriamo i dati nella seconda matrice \n");
 for (i=0;i<N;i++)
    for (j=0;j<P;j++) {
        printf("Inserisci elemento di riga %d e colonna %d: ", i, j);
        scanf("%d", &b[i][j]);
    }

 printf("\nCalcoliamo il prodotto \n");
 for (i=0;i<M;i++) 
        for(j=0;j<P;j++) {
            c[i][j]=0;
            for(k=0;k<N;k++)    
                c[i][j]=c[i][j]+a[i][k]*b[k][j];
    }

 printf("\nStampiamo i dati della prima 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 seconda matrice \n");
 for (i=0;i<N;i++) {
    printf("\n");
    for(j=0;j<P;j++) 
        printf("\t%d", b[i][j]);                
    }
        
printf("\nStampiamo i dati della matrice prodotto \n");
for (i=0;i<M;i++) {
    printf("\n");
    for(j=0;j<P;j++) 
        printf("\t%d", c[i][j]);                
    }    
}           

Ovviamente proponete pure il vostro metodo nei commenti sotto.

Alcuni link utili:

Array multidimensionali

Tavola pitagorica in C

Matrice trasposta in C

Array o vettori in C

Media dei numeri in un array in C

Array con numeri random in C

Quick sort in linguaggio C

Selection sort in linguaggio C

Merge sort in linguaggio C

Insertion Sort in linguaggio C