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:
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.
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.