/*
 * Lê uma matriz de um arquivo. Os dois primeiros inteiros lidos são
 * a dimensão da matriz. A matriz é armazenada em vários vetores, cada
 * um para uma linha. 
 *
 * Escreve a matriz em um arquivo de saída segundo o formato:
 * linhas = 3
 * colunas = 3
 * mat[0][0] = 1.0
 * mat[0][1] = 2.4
 */
#include<stdio.h>
#include<stdlib.h>

int **le_matriz(int *nlin, int* ncol) {
  FILE *fr;
  int **v;
  int i, j;

  fr = fopen ("m-in.txt", "r");

  if (fr == NULL) {
    perror("m-in.txt");
    exit(-1);  /* Abandona o programa */  
  }
  
  fscanf(fr, "%d %d", nlin, ncol);
  v = (int **) malloc (*nlin * sizeof(int*));
  
  for (i = 0; i < *nlin; i++)
    v[i] = (int *) malloc (*ncol * sizeof(int));

  for (i = 0; i < *nlin; i++)
    for (j = 0; j < *ncol; j++)
    fscanf(fr, "%d", &v[i][j]);

  fclose(fr);
  
  return v;
}

void escreve_matriz(int **v, int nlin, int ncol) {
  FILE *fw;
  int i, j;

  fw = fopen ("m-out.txt", "w");

  if (fw == NULL) {
    perror("m-out.txt");
    exit(-1);  /* Abandona o programa */  
  }
  
  fprintf(fw, "linhas = %d\n", nlin); /* Dimensão da matriz */
  fprintf(fw, "colunas = %d\n", ncol); 
  
  for (i = 0; i < nlin; i++)
    for (j = 0; j < ncol; j++)
      fprintf(fw, "mat[%d][%d] = %d\n", i, j, v[i][j]);

  fclose(fw);  
}

int main() {
  int **v;
  int i, nlin, ncol;
  
  v = le_matriz(&nlin, &ncol);
  escreve_matriz(v, nlin, ncol);

  for (i = 0; i < nlin; i++)
    free(v[i]);
  free(v);
  
  return 0;
}