Somma di due matrici in C

Somma di due matrici in C

Realizziamo adesso un algoritmo che calcola la somma di due matrici in C.

Innanzitutto va detto che la somma si può effettuare solo se le due matrici hanno lo stesso numero di righe e di colonne.

Date due matrici A[M][N] e B[M][N] , la somma si effettua semplicemente sommando l’elemento della prima riga e della prima colonna della matrice A con l’elemento della prima riga e della prima colonna della matrice B. E così via per gli altri elementi.

Si avrà una matrice C[M][N] .

Ad esempio se guardiamo le matrici della figura sotto A e B, la matrice somma sarà la matrice C che si ottiene sommando il primo elemento della prima riga e della prima colonna di A (cioè l’elemento 2) con il primo elemento della prima riga e della prima colonna di B (cioè l’elemento 4). Il secondo elemento della matrice somma sarà dato dalla somma di 8 e 15. Ecc..

Allego le foto sotto.

due matrici calcolo
matrice somma


Algoritmo che realizza la somma di due matrici in C

Realizziamo adesso il programma, premettendo che l’uso delle funzioni lo renderebbe molto più snello ma ne rimando l’uso dopo aver spiegato come si usano.

I passi da seguire sono questi:

  • Inserire la prima matrice
  • Inserire la seconda matrice
  • Calcolare la matrice somma


Procediamo chiedendo in input il numero di righe e di colonne. Non ho fatto il controllo dell’input come nell’esempio precedente, ma si può aggiungere.

Inseriamo i dati nella prima matrice e i dati nella seconda matrice. Stampiamo le due matrici e poi le sommiamo (potevo fare anche prima la somma e poi la stampa delle due matrici, è indifferente).

La somma delle due matrici si ottiene sommando ciascun elemento della prima riga della matrice A con ogni elemento della stessa posizione della prima riga della matrice B. Ovvero:

C[i][j]=A[i][j]+B[i][j];

Come spiegato nelle due immagini sopra.

Allego il programma che chiaramente è solo un esempio. Si possono trovare altre varianti.

#include <stdio.h>
#define M 8
#define N 8   

main() { 
int A[M][N], B[M][N], C[M][N];
int n,m,i,j;

printf("Dammi il numero di righe: ");
scanf("%d", &m);

printf("Dammi il numero di colonne: ");
scanf("%d", &n);

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

for (i=0;i<m;i++) {
   for (j=0;j<n;j++) 
       C[i][j]=A[i][j]+B[i][j];               
        }

 printf("\nStampiamo i dati della matrice somma\n");
 for (i=0;i<m;i++) {
    printf("\n");
    for(j=0;j<n;j++) 
        printf("\t%d", C[i][j]);                
        }
}

Alcuni link utili:

Prodotto tra matrici

Somma elementi cornice esterna

Somma dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C


Somma dei numeri di una matrice in C

Somma dei numeri di una matrice in C

Realizziamo un semplicissimo algoritmo per il calcolo della somma dei numeri di una matrice in C.

Come prima dobbiamo inserire il numero di righe e di colonne della matrice, ovvero M ed N.

Tramite il ciclo do-while faccio un controllo dell’input, ovvero verifico che M ed N siano compresi nelle dimensioni massime definite prima e che non siano minori di 1. Ricordiamo che nel caso in cui M o N sia 1 abbiamo un array monodimensionale.

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

Adesso inseriamo i dati nella nostra matrice, procediamo per righe utilizzando due cicli annidati con i due indici i e j. L’indice i per le righe, l’indice j per le colonne. Quindi il primo elemento inserito sarà a[0][0] poi a[0][1] e così via.

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

Per effettuare la somma degli elementi molto semplicemente dichiariamo una variabile somma che inizializziamo a 0 (somma=0) e procediamo effettuando la somma progressiva degli elementi.
Quindi scriviamo semplicemente:

somma=somma+a[i][j];

Facciamo un esempio. Prendiamo la seguente matrice sotto:

matrice

L’algoritmo procederà così:

Prenderà la variabile somma e sommerà il primo elemento: somma=somma+2.

La prima volta prenderà somma=0 quindi somma=0+2=2.

Poi passerà al secondo elemento e lo sommerà alla somma precedente.

Cioè somma=2 (somma precedente) + 8 (secondo elemento)=10

Poi passerà al terzo elemento e quindi somma=10 (somma precedente) + 9 (terzo elemento) = 19

Appena finisce la prima riga passerà alla seconda riga, usando lo stesso procedimento, sommando a 19 il primo elemento della seconda riga. E così via.

Algoritmo per il calcolo della somma dei numeri di una matrice in C

#include <stdio.h>
#define M 8
#define N 8   

main() { 
int a[M][N];
int somma;

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("\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]);
        somma=somma+a[i][j];                
    }   
 }
printf("\nla somma è: \t %d", somma);
}

Ci possono essere tanti altri modi per risolvere questo problema, proponi pure il tuo metodo nei commenti sotto.

Alcuni link utili:

Somma elementi diagonale principale di una matrice in C

Somma elementi cornice esterna in C

Sommare due matrici in C

Matrice trasposta 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

Merge sort in C

Insertion Sort in C



Matrice trasposta in C

Matrice trasposta in C

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

Triangolo di Tartaglia in C

Triangolo di Tartaglia in C

Realizziamo un algoritmo che sviluppi il triangolo di Tartaglia in C.

Definizione triangolo di Tartaglia

In matematica il triangolo di Tartaglia è una tabella di numeri naturali disposti a triangolo e dove ciascun elemento è detto coefficiente binomiale perché coincide con i coefficienti delle potenze di un binomio.

Come si ottiene?

Al vertice e lungo i due lati esterni si inserisce il numero 1 mentre ogni elemento interno si ottiene dalla somma dei numeri della riga precedente sopra di esso.

tartaglia

Ad esempio nella terza riga il 2 è ottenuto come somma dei due uno che stanno sopra; o ancora nella quarta riga il 3 è ottenuto sommando gli elementi che stanno sopra 1 e 2. E così via.

Vogliamo realizzare un programma che rappresenti il triangolo di Tartaglia in C.


Procedimento algoritmo triangolo di Tartaglia in C

Dapprima chiediamo quante righe vogliamo visualizzare e lo facciamo controllando, come sempre, che il numero di righe non sia inferiore a 1 o che non superi il limite massimo.

Dopo inizializziamo la prima riga che avrà il vertice uguale a 1 e tutti gli altri elementi saranno a 0. Quindi a(0,0)=1.

Poi calcoliamo le altre righe, quindi utilizziamo due cicli, partendo dalla seconda riga ovvero da i=1.
Il primo elemento di ciascuna riga, in quanto elemento esterno, abbiamo detto che deve essere 1, quindi: a[i][0]=1;

Se ad esempio n=6 in questo modo tutti gli elementi da a(1,0) ad a(5,0) saranno uguali a 1. L’elemento a(0,0) lo abbiamo impostato prima.

Tutti gli altri elementi seguiranno questo calcolo:

a[i][j]=a[i-1][j-1]+a[i-1][j];


Ad esempio se consideriamo la seconda riga avremo:

a(1,0)=1

a(1,1)=a((i-1),(j-1))+a((i-1),(j)) ovvero: a(1,1)=a(0,0)+a(0,1)=1+0=1


Se consideriamo la terza riga avremo:

a(2,0)=1

a(2,1)=a(1,0)+a(1,1)=1+1=2

a(2,2)=a(1,1)+a(1,2)=1+0=1

E così via per le altre righe.

Non ci resta che visualizzarlo con due semplici cicli for.

Allego il listato completo.

#include<stdio.h>
#define N 100

int main(){
	int n,i,j,a[N][N];
		
	do {
		printf("Dammi il numero di righe: ");
		scanf("%d", &n);
	} while ((n>=N) || (n<1));
	
	//inizializzo la prima riga
	a[0][0]=1;
	for(j=1;j<n;j++)
	   a[0][j]=0;
			
	//calcolo le altre righe		
	for(i=1;i<n;i++) {
	  a[i][0]=1;
	  for(j=1;j<n;j++)
	      a[i][j]=a[i-1][j-1]+a[i-1][j];
	}

    //visualizzazione triangolo di tartaglia
	for(i=0;i<n;i++){
		for(j=0;j<=i;j++)
			printf("%d ", a[i][j]);
		printf("\n"); //va a capo
	}
}

Sviluppato in questo modo per n=6 si avrà questo risultato:

triangolo di tartaglia

Sarebbe più gradevole visualizzare il triangolo di Tartaglia inserendo gli spazi vuoti.

Basterà modificare solo la parte della visualizzazione in questo modo:

  //visualizzazione triangolo di tartaglia
   for(i=0;i<n;i++){
      for (j=1; j<(n-i)*4;j++)
      printf(" "); //inserisce gli spazi bianchi
	   for(j=0;j<=i;j++)
		   printf("%8d ", a[i][j]);
           printf("\n");
	}

Ecco un possibile sviluppo del triangolo di Tartaglia in C.

Alcuni link utili

Media per riga e per colonna

Somma elementi diagonale principale di una matrice

Sommare elementi cornice esterna

Somma di due matrici

Sommare dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Insertion Sort in C


Esercizio con le matrici in C

Esercizio con le matrici in C

Proponiamo un semplice esercizio con le matrici in C.

Si vuole realizzare un programma che richieda all’utente di inserire i voti corrispondenti a 7 prove sostenute in Matematica durante l’anno da 6 studenti della classe e calcoli la media di ogni prova e la media di ogni studente.

Ogni linea deve contenere pertanto i voti dello studente e la rispettiva media; quindi ci saranno 7 righe e 8 colonne. L’ottava colonna dunque conterrà la media delle prove sostenute da ciascun studente e la settima riga conterrà la media di ciascuna prova di tutti gli studenti.

Es: Nella riga 1 inserisco quindi i voti delle 7 prove sostenute nell’anno da uno studente.

Studente 1: 8, 10, 7, 7, 9, 7, 8

Il programma dovrà aggiungere la media nell’ottava colonna cioè:

Studente 1: 8, 10, 7, 7, 9, 7, 8, 8

Allo stesso modo per le altre righe.

Facciamo lo stesso discorso per le colonne. Nella prima colonna ci saranno tutti i voti della prima prova sostenuta da ciascun studente, aggiungiamo nell’ultima riga la media.

Prova1
studente16
studente2 7
studente3 8
studente4 9
studente5 10
studente6 8
media8

Continuiamo così per ogni colonna.

Procedimento algoritmo esercizio con le matrici in C

Innanzitutto occorre definire il numero di righe e di colonne. Come dicevamo prima aggiungeremo una riga e una colonna per la media.

Quindi:

#define M 8
#define N 7

Inseriamo i dati come abbiamo già spiegato negli esempi precedenti e dopo calcoliamo la media. L’unico accorgimento è quello di fermarsi ad N-1 ed M-1 in quanto dobbiamo inserire 6 righe e 7 colonne, l’ultima riga e l’ultima colonna è riservata alla media.

Per fare la media di ciascun studente, cioè la media per riga, basta scorrere la matrice con i due cicli, avendo l’accortezza di inizializzare la somma a zero e sommare tutti gli elementi della riga:

a[i][M-1]=a[i][M-1]+a[i][j];

e dopo occorre dividere per n-1

a[N-1][j]=a[N-1][j]/(N-1);

Lo stesso ragionamento per la colonna.

Ecco il listato completo.

#include<stdio.h>
#define M 8
#define N 7

int main(){
	float a[N][M];
	int i,j;
		
	printf("\nInseriamo i voti nella matrice \n");
	for(i=0;i<N-1;i++)
	    for(j=0;j<M-1;j++) {
		printf("Studente %d \tprova %d: ", i, j);
		scanf("%f", &a[i][j]);
	    }
				
	printf("\nCalcolo media delle prove \n");
	for(j=0;j<M;j++) {
	    a[N-1][j]=0;
	    for(i=0;i<N-1;i++)
	       a[N-1][j]=a[N-1][j]+a[i][j];
	    a[N-1][j]=a[N-1][j]/(N-1);
	}
		
	printf("\nCalcolo media studente \n");
	for(i=0;i<N-1;i++){
	     a[i][M-1]=0;
	     for(j=0;j<M-1;j++) 
		a[i][M-1]=a[i][M-1]+a[i][j];
	     a[i][M-1]=a[i][M-1]/(M-1);
	}
		
	printf("\nStampiamo i dati \n");
	for (i=0;i<N;i++) {	
	    printf("\n");
	    for(j=0;j<M;j++) 
	      printf("\t%7.2f", a[i][j]);				
	}				
}

Questo è solo un esempio di possibile risoluzione dell’esercizio con le matrici in C.

Alcuni link utili:

Somma elementi diagonale principale di una matrice

Esempio sulla somma degli elementi cornice esterna

Sommare due matrici

Somma dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C