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