Realizziamo un programma in C che, data una matrice quadrata di ordine N, determini la somma degli elementi della diagonale principale di una matrice.
Nella figura sotto ho evidenziato in rosso la diagonale principale e in verde quella secondaria.
Vogliamo dunque costruire un algoritmo che, data una matrice quadrata di ordine N, determini la somma degli elementi della diagonale principale di una matrice.
Fondamenti solidi di programmazione
Impara le basi della programmazione in C in modo semplice, pratico ed efficace. Variabili, cicli, funzioni, logica e algoritmi.
- ⏱️ 9 ore di corso registrato
- 🧩 Più di 50 algoritmi risolti passo passo
- 🎯 Livello base
- 💻 100% online, fruibile quando vuoi
Innanzitutto prendiamo in input una matrice quadrata di ordine N, inseriamo i dati nella matrice e facciamo queste considerazioni.
La diagonale principale di una matrice 3 x 3 è data dagli elementi a(0,0) , a(1,1) e a(2,2).
Mentre la diagonale principale di una matrice 4 x 4 è data dagli elementi a(0,0) , a(1,1) , a(2,2) e a(3,3). E così via.
Quindi la diagonale principale di una matrice è data dagli elementi il cui indice j è uguale all'indice i.
Pertanto per ottenere la somma, basta semplicemente fare:
for(i=0;i<n;i++)
somma_d += a[i][i];
/*somma_d è la variabile che contiene la somma degli elementi con indice j=i.*/
Allo stesso modo ragioniamo per la diagonale secondaria.
Gli elementi della diagonale secondaria di una matrice 3 x 3 sono a(0,2) , a(1,1) e a(2,0).
Mentre se la matrice è 4 x 4 gli elementi della diagonale secondaria sono a(0,3) , a(1,2) , a(2,1) e a(3,0).
Notiamo, nel caso della matrice 3x3, che l'indice i parte da 0 e arriva a 2 mentre l'indice j parte da 2 e arriva a 0, cioè l'indice i si incrementa mentre l'indice j si decrementa. Così anche nella matrice 4 x4, ecc...
Dunque per queste considerazioni avremo:
for(i=0,j=n-1;i<n;i++,j--)
somma_s += a[i][j];
/*somma_s è la variabile che contiene la somma degli elementi della diagonale secondaria*/
Allego tutto il listato
#include<stdio.h>
#define N 100
int main(){
int a[N][N],n,m,i,j,somma_d=0,somma_s=0;
do {
printf("Dammi il numero di righe e colonne: ");
scanf("%d", &n);
} while ((n>N) || (N<1));
printf("\nInseriamo i dati nella matrice \n");
for (i=0;i<n;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 \n");
for (i=0;i<n;i++) {
printf("\n");
for(j=0;j<n;j++)
printf("\t%d", a[i][j]);
}
for(i=0;i<n;i++)
somma_d += a[i][i]; //somma diagonale principale
for(i=0,j=n-1;i<n;i++,j--)
somma_s += a[i][j];*/ //somma diagonale secondaria
printf("la somma della diagonale principale e' %d\n",somma_d);
printf("la somma della diagonale secondaria e' %d\n",somma_s);
}
Esempio di calcolo della somma degli elementi che si trovano sopra la diagonale principale.
Adesso ci poniamo il problema di voler calcolare la somma degli elementi che si trovano sopra la diagonale principale, in definitiva gli elementi della sotto-matrice triangolare superiore.
Quindi facciamo nuovamente le nostre considerazioni.
Nel caso di una matrice 3 x 3, gli elementi che si trovano al di sopra la diagonale principale sono a(0,1) , a(0,2) e a(1,2).
Nel caso di una matrice 4 x 4, gli elementi che si trovano al di sopra la diagonale principale sono a(0,1) , a(0,2) , a(0,3) , a(1,2) , a(1,3) e a(2,3).
Uno dei modi per ottenere ciò è usare due cicli.
//somma elementi al di sopra della diagonale principale
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
somma+=a[i][j];
Analogamente per sommare gli elementi al di sotto della diagonale principale, ovvero gli elementi della sotto-matrice triangolare inferiore.
//somma elementi al di sotto della diagonale principale
for(j=0;j<n;j++)
for(i=j+1;i<n;i++)
somma2+=a[i][j];
Dunque, allego il listato completo:
#include<stdio.h>
#define N 100
int main(){
int a[N][N],n,m,i,j,somma=0,somma2=0, somma_d=0, somma_s=0;
do {
printf("Dammi il numero di righe e colonne: ");
scanf("%d", &n);
} while ((n>N) || (N<1));
printf("\nInseriamo i dati nella matrice \n");
for (i=0;i<n;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 \n");
for (i=0;i<n;i++) {
printf("\n");
for(j=0;j<n;j++)
printf("\t%d",a[i][j]);
}
for(i=0;i<n;i++)
somma_d += a[i][i]; //somma diagonale principale
for(i=0,j=n-1;i<n;i++,j--)
somma_s += a[i][j]; //somma diagonale secondaria
//somma elementi al di sopra della diagonale principale
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
somma+=a[i][j];
//somma elementi al di sotto della diagonale principale
for(j=0;j<n;j++)
for(i=j+1;i<n;i++)
somma2+=a[i][j];
printf("\nla somma della diagonale principale e' %d\n",somma_d);
printf("la somma della diagonale secondaria e' %d\n",somma_s);
printf("la somma degli elementi sopra diagonale principale e' %d\n",somma);
printf("la somma degli elementi sotto diagonale principale e' %d\n",somma2);
}
Se ad esempio volessimo ottenere la somma degli elementi della diagonale che sta sotto quella principale, allora basterebbe sommare gli elementi di posto a[i+1][i].
for(i=0;i<n-1;i++)
somma_d1 += a[i+1][i];
Questi sono solo degli esempi di possibili soluzioni agli esercizi proposti. Proponete pure le vostre nei commenti sotto.
Alcuni link utili:
Triangolo di Tartaglia in C
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
Array con numeri random
Quick sort in C
Selection sort in C
📘 Vuoi approfondire l'argomento? Dai un'occhiata a 50 Algoritmi per imparare C++ — vedi su Amazon.
Merge sort in C
Insertion Sort in C