/* esMatriciSommaDiagonali.cpp

 Scrivere le seguenti funzioni:
 1) fuzione somma_diag che prende in ingresso 
    una matrice quadrata di interi nxn e retituisce la somma 
	degli elementi sulla diagonale principale e secondaria.
 2) funzione stampa_matrice che prende in ingresso una matrice
    quadrata di interi nxn e stampa a video tutti gli elementi
   
   Scrivere un programma che crea una matrice 3x3 di interi, 
   chiede all'utente di digitare da tastiera 9 interi e 
   li inserisce nella matrice per righe.  
   Il programma invoca la funzione stampa_matrice seguita da 
   e somma e stampa a video il valore restituito dalla funzione. 
   
   Output d'esempio:

   Inserisci 9 interi:
   1 2 3 4 1 6 7 8 1

   La matrice inserita e': 
   1 2 3 
   4 1 6 
   7 8 1

   La somma degli elementi sulla diag. pric. e sec. e': 13

*********************************************************/

#include <iostream>
using namespace std;


int somma_diag(int* mat, int r,int c) {
   int somma = 0; 
   for (int i = 0; i < r; i++) 
      for (int j = 0; j < c; j++)
         if ( ( j==i ) || ( j+i == c-1 ) )
            somma = somma + *(mat+i*c + j); 
            //equivalente a somma = somma + mat[i*c + j]; 
   return somma;
} 
   
void stampa_matrice(int* mat, int r,int c) {
   for (int i = 0; i < r; i++){   
      for (int j = 0; j < c; j++)
         cout<< *(mat+i*c + j) <<' ';
      cout<<endl;
   }
}


int main(){ 

   const int DIM = 3;
   int M[DIM][DIM];
  
   
   cout<<"Inserisci i "<< DIM*DIM <<" elementi della matrice "<<DIM<<"x"<<DIM<<endl;

   for (int i = 0; i < DIM; i++)
      for (int j = 0; j < DIM; j++)
         cin >> M[i][j];
    
   cout<<"La matrice inserita e': "<<endl;
   stampa_matrice(&M[0][0], DIM, DIM);
   cout<<endl;
   int somma = somma_diag(&M[0][0], DIM, DIM);   
   cout<<"La somma degli elementi diag.  princip e second. e': " << somma << endl;
      
  return 0;
}
