/*
 * arquivo: leia_imprima_matriz.c
 * ------------------------------
 * Este programa ilustra a passagem de matrizes como parametros
 * em funcoes.
 */

#include <stdio.h>

#define MMAX 10
#define NMAX 10

/******Protótipos das funcoes*********************************/

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

    /* OBS: Note que o tipo da funcao deve ser especificado   */ 
    /*      Note que os tipos dos parametros devem ser especificados */
    /*      Note como ficou a especificacao da dimensao da matriz */
/*
 * Esta funcao 
 * 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 imprima_matriz(double a[][NMAX], int m, int n);
/*
 * Esta funcao 
 * recebe uma matriz de m x n doubles a[][NMAX] e inteiros m e n
 * e imprime a, isto 'e, imprime 
 *
 * a[0][0] ... a[0][n-1]
 * a[1][0] ... a[1][n-1]
 * ...
 * a[m-1][0] ... a[0][n-1]
 */

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

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

  printf("Forneca os valores de m e n: ");
  scanf("%d %d", &m, &n);

  leia_matriz(M, m, n);        /* Veja como se faz a chamada da funcao */ 
  imprima_matriz(M, m, n);     /* Veja como ficam os parametros  */
                               /* Note que os tipos nao aparecem! */
  
  return 0;
}

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

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

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

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

  printf("\nOs elementos da matriz sao\n\n");
  for (i = 0;  i < m; i++) {
    for (j = 0; j < n; j++)
      printf("%g ", a[i][j]);
    printf("\n");
  }
  printf("\n");
}