#include <stdio.h>
#include <stdlib.h>


#define MAX_N_LIN 20
#define MAX_N_COL 20




void ler_matriz(FILE *f,int m[MAX_N_LIN][MAX_N_COL],int *n_lin, int *n_col){

    fscanf(f,"%d %d",n_lin,n_col);

    for (int i=0;i<*n_lin;i++){
        for (int j=0;j<*n_col;j++){
            fscanf(f,"%d",&m[i][j]);
        }
    }
}

void imprimir_matriz(int m[MAX_N_LIN][MAX_N_COL],int n_lin, int n_col){
    printf("\nn_lin_a:%d n_col_a:%d\n",n_lin,n_col);
    for (int i=0;i<n_lin;i++){
        for (int j=0;j<n_col;j++){
            printf("%d ",m[i][j]);
        }
        printf("\n");
    }
}

void set(int m[MAX_N_LIN*MAX_N_COL],int n_lin, int n_col,int i, int j, int valor){
    m[i*n_col+j] = valor;
}

int get(int m[MAX_N_LIN*MAX_N_COL],int n_lin, int n_col,int i, int j){
    return m[i*n_col+j];
}


void ler_matriz_linear(FILE *f,int m[MAX_N_LIN*MAX_N_COL],int *n_lin, int *n_col){

    int valor;

    fscanf(f,"%d %d",n_lin,n_col);

    for (int i=0;i<*n_lin;i++){
        for (int j=0;j<*n_col;j++){
            fscanf(f,"%d",&valor);
            set(m,*n_lin,*n_col,i,j,valor);
        }
    }
}

void imprimir_matriz_linear(int m[MAX_N_LIN*MAX_N_COL],int n_lin, int n_col){
    printf("\nn_lin_a:%d n_col_a:%d\n",n_lin,n_col);
    for (int i=0;i<n_lin;i++){
        for (int j=0;j<n_col;j++){
            printf("%d ",get(m,n_lin,n_col,i,j));
        }
        printf("\n");
    }
}



int main()
{

    FILE *f;
    int n_lin_a,n_col_a,
        n_lin_b,n_col_b,
        n_lin_c,n_col_c,
        n_lin_d,n_col_d;

    int a[MAX_N_LIN][MAX_N_COL];
    int b[MAX_N_LIN][MAX_N_COL];
    int c[MAX_N_LIN*MAX_N_COL];
    int d[MAX_N_LIN*MAX_N_COL];

    /*bertura de um arquivo
    através da função fopen
    */

    f = fopen("mat1.txt","r");

    if (f==0){
        printf("erro:arquivo invalido ou inexistente");
        exit(1);
    }

    ler_matriz(f,a,&n_lin_a,&n_col_a);
    ler_matriz(f,b,&n_lin_b,&n_col_b);

    imprimir_matriz(a,n_lin_a,n_col_a);
    imprimir_matriz(b,n_lin_b,n_col_b);


    fclose(f);

    f = fopen("mat2.txt","r");

    if (f==0){
        printf("erro:arquivo invalido ou inexistente");
        exit(1);
    }

    ler_matriz_linear(f,c,&n_lin_c,&n_col_c);
    ler_matriz_linear(f,d,&n_lin_d,&n_col_d);


    imprimir_matriz_linear(c,n_lin_c,n_col_c);
    imprimir_matriz_linear(d,n_lin_d,n_col_d);

    fclose(f);

    return 0;
}
