/****************************************
 * Veja o uso das constantes TRUE e FALSE
 ******************************************
 */

/*
 * arquivo: matriz_simetrica.c
 * ---------------------------
 * Recebe um inteiro n e uma matriz real n x n.
 * Decide se a matriz dada e' simetrica.
 */
#include <stdio.h>

#define TRUE 1
#define FALSE 0

#define NMAX 10


/**********************************************************************/
/*
 * leia_matriz():
 * =============
 * Recebe uma matriz de doubles a[][NMAX] e inteiros m e n.
 * Le m x n reais e os coloca em em a, isto 'e, em
 *
 * a[0][0] ... a[0][n-1]
 * a[1][0] ... a[1][n-1]
 * ...
 * a[m-1][0] ... a[0][n-1]
 */

void leia_matriz(double a[][NMAX], int m, int n);

/*
 * mz_eh_simetrica():
 * ==================
 * Recebe uma n x n matriz de doubles a[][NMAX] e um inteiro n.
 * Decide se a matriz recebida 'e simetrica, isto 'e, 
 * 
 * a[i][j] = a[j][i]
 * 
 * para todo 0 <= i < n e 0 <= i < n.
 */

int mz_eh_simetrica(double a[][NMAX], int n);

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

int main()
{
  double M[NMAX][NMAX];
  int n;

  printf("Forneca o valor de n: ");
  scanf("%d", &n);

  leia_matriz(M, n, n);

  if (mz_eh_simetrica(M,n))
    printf("A matriz dada 'e simetrica.\n");
  else
    printf("A matriz dada _nao_ 'e simetrica.\n");
  
  return 0;
}

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

void leia_matriz(double a[][NMAX], int m, int n)
{
  int i, j;

  printf("Forneca as entradas da matriz %d x %d:\n", m, n);
  for (i = 0; i < m; i++)
    for (j = 0; j < n; j++)
      scanf("%lf", &a[i][j]);
}

int mz_eh_simetrica(double a[][NMAX], int n)
{
  int i, j;

  for (i = 0; i < n; i++) 
    for (j = i+1; j < n; j++)
      if (a[i][j]!= a[j][i])
	return FALSE;

  return TRUE;
}