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 | |
studente1 | 6 |
studente2 | 7 |
studente3 | 8 |
studente4 | 9 |
studente5 | 10 |
studente6 | 8 |
media | 8 |
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
Somma dei numeri di una matrice
Ricerca elementi in una matrice