/* File: mattrian.c */
/* Time-stamp: "2002-05-14 12:40:43 calvanes" */
/* Scopo: uso di array multidimensionali */

/* Legge una matrice quadrata e verifica se e' triangolare superiore
   (tutti gli elementi al di sotto della diagonale principale sono pari a
   zero).
*/

#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 triangolareSuperiore(int m[DIM][DIM])
{
  int i, j;
  int triang;     /* booleana: indica se la matrice e` triangolare superiore */

  triang = 1;                     /* assumiamo che sia triangolare superiore */
  for (i = 1; i < DIM; i++)
    for (j = 0; j < i; j++)
      if (m[i][j] != 0)               /* ho trovato un elemento diverso da 0 */
        triang = 0;                   /* sotto alla diagonale                */
      /* NON ci deve essere il ramo else */

  return triang;

  /* Per anticipare l'uscita dai cicli durante la verifica si puo` modificare
     il codice di sopra come segue:

     triang = 1;
     for (i = 1; triang && i < DIM; i++)
       for (j = 0; triang && j < i; j++)
         if (m[i][j] != 0)
           triang = 0;

     Oppure usando l'istruzione break:

     triang = 1;
     for (i = 1; triang && i < DIM; i++)
       for (j = 0; j < i; j++)
         if (m[i][j] != 0) {
           triang = 0;
           break;
         }
  */
}


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

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

  if (triangolareSuperiore(mat))
    printf("e` triangolare superiore!\n");
  else
    printf("non e` triangolare superiore!\n");

  return 0;
}