/* File: magica.c */
/* Time-stamp: "2002-04-16 17:01:18 calvanes" */
/* Scopo: uso di array multidimensionali */

/* Legge una matrice quadrata e verifica se e` magica, ovvero le somme delle
   righe, delle colonne e delle due diagonali coincidono.
*/

#include <stdio.h>

#define DIM 3


void leggiMatrice(int m[DIM][DIM])
{
  int i, j;

  printf("Inserire gli elementi di una matrice di interi %dx%d\n", DIM, DIM);
  for (i = 0; i < DIM; i++)
    for (j = 0; j < DIM; j++)
      scanf("%d", &m[i][j]);
}


void stampaMatrice(int m[DIM][DIM])
{
  int i, j;

  for (i = 0; i < DIM; i++) {
    for (j = 0; j < DIM; j++)
      printf("%5d", m[i][j]);
    printf("\n");
  }
}


int sommaRiga(int m[DIM][DIM], int riga)
{
  int j, somma = 0;

  for (j = 0; j < DIM; j++)
    somma += m[riga][j];

  /* printf("Somma riga %d: %d\n", riga, somma); */
  return somma;
}


int sommaColonna(int m[DIM][DIM], int colonna)
{
  int i, somma = 0;

  for (i = 0; i < DIM; i++)
    somma += m[i][colonna];

  /* printf("Somma colonna %d: %d\n", colonna, somma); */
  return somma;
}


int sommaDiagonale(int m[DIM][DIM], int principale)
  /* Calcola la somma della diagonale principale o secondaria, a seconda del
     valore di principale. */
{
  int i, somma = 0;

  if (principale)
    for (i = 0; i < DIM; i++)
      somma += m[i][i];
  else
    for (i = 0; i < DIM; i++)
      somma += m[i][DIM-i-1];

  /*
  if (principale)
    printf("Somma diagonale principale: %d\n", somma);
  else
    printf("Somma diagonale secondaria: %d\n", somma);
  */

  return somma;
}


int magica(int m[DIM][DIM])
{
  int i, somma;
  int mag = 1;     /* booleana - indica che la matrice e` magica */

  somma = sommaDiagonale(m, 1);
  mag = (somma == sommaDiagonale(m, 0));

  for (i = 0; (i < DIM && mag); i++)
    if (somma != sommaRiga(m, i) || somma != sommaColonna(m, i))
      mag = 0;

  return mag;
}


int main(void)
{
  int mat[DIM][DIM];

  leggiMatrice(mat);

  printf("La matrice\n");
  stampaMatrice(mat);

  if (magica(mat))
    printf("e` magica.\n");
  else
    printf("non e` magica.\n");

  return 0;
}