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

#define N 4

int main(int argc, char *argv[])

{
    int valores[4][4], i, j;

    FILE *entradaTexto, *entradaBinaria;
    
    if(argc != 3)
    {
        fprintf(stderr, "Tem de passar dois argumentos!\n");
        return EXIT_FAILURE;
    }
    if((entradaTexto = fopen(argv[1], "r")) == 0)
    {
        fprintf(stderr, "Erro abrindo o ficheiro \"%s\".\n", argv[1]);
        return EXIT_FAILURE;
    }
    if((entradaBinaria = fopen(argv[2], "rb")) == 0)
    {
        fprintf(stderr, "Erro abrindo o ficheiro \"%s\".\n", argv[2]);
        return EXIT_FAILURE;
    }

    /* Leitura de texto: */
    for(i = 0; i < N; i++)
        for(j = 0; j < N; j++)
            if(fscanf(entradaTexto, "%d", &valores[i][j]) != 1)
            {
                fprintf(stderr, "Erro lendo elemento [%d][%d]!\n", i, j);
                return EXIT_FAILURE;
            }

    /* Escrita no ecra: */
    printf("Ficheiro de texto:\n");
    for(i = 0; i < N; i++)
    {
        for(j = 0; j < N; j++)
            printf("%3d ", valores[i][j]);
        putchar('\n');
    }

    /* Leitura binaria: */
    if(fread(valores, sizeof(int), N*N, entradaBinaria) != N*N)
    {
        fprintf(stderr, "Erro lendo ficheiro binario!\n");
        return EXIT_FAILURE;
    }

    /* Escrita no ecra: */
    printf("Ficheiro binario:\n");
    for(i = 0; i < N; i++)
    {
        for(j = 0; j < N; j++)
            printf("%3d ", valores[i][j]);
        putchar('\n');
    }

    fclose(entradaTexto);
    fclose(entradaBinaria);

    return EXIT_SUCCESS;
}