Realizar un programa en el lenguaje de programación c, que lea una matriz de un fichero, realiza la traspuesta de dicha matriz y la almacene en un fichero nuevo. Los nombres de los archivos se han de solicitar utilizando la línea de comandos como si de un comando ms-dos o Linux se tratara. Se ha de solicitar tanto el nombre del archivo origen como el nombre del archivo destino.



El ejercicio y practicas resuelta a continuación:

#include <stdio.h>
#include <stdlib.h>
// Predefinición de funciones
int Existe(char *);
// Función principal
int main(int argc,char *argv[])
{
    // Comprobación del numero de parámetros recibido
    if(argc!=3) {
        printf("\n¡Faltan parámetros");
        printf("\nFormato: comando fichero_origen fichero_destino");
        exit(1);
    }
    // Comprobación de ficheros
    if(Existe(argv[1])==1) {
        printf("\nEl fichero de origen no se ha encontrado o no existe...");
        exit(1);
    }
    // Declaración de variables necesarias
    FILE *fichero;
    int filas;
    int columnas;
    float **matriz1=NULL;
    int contador;
    int contador1;
    // Abrir archivo en modo lectura
    fichero=fopen(argv[1],"rt");
    // Leer filas y columnas
    fscanf(fichero,"%d %d",&filas,&columnas);
    printf("%d %d",filas,columnas);
    // Realizar la reserva de memoria para las matrices
     matriz1=(float **)malloc(sizeof(float *)*filas);
    for(contador=0;contador<filas;contador++)
    {
        matriz1[contador]=(float *)malloc(sizeof(float)*columnas);
    }
    // Asignar datos de la matriz
    for(contador=0;contador<filas;contador++) 
    {
        for(contador1=0;contador1<columnas;contador1++) 
        {
            fscanf(fichero,"%f",&matriz1[contador][contador1]);
        }
    }
    fclose(fichero);
    printf("\n");
    for(contador=0;contador<filas;contador++) 
    {
        for(contador1=0;contador1<columnas;contador1++) 
        {
            printf("%.2f ",matriz1[contador][contador1]);
        }
        printf("\n");
    }
    // visualizar traspuesta
    printf("\n%d %d\n",columnas,filas);
    for(contador=0;contador<columnas;contador++) 
    {
        for(contador1=0;contador1<filas;contador1++) 
        {
            printf("%.2f ",matriz1[contador1][contador]);
        }
        printf("\n");
    }
    fichero=fopen(argv[2],"wt");
    if(!fichero) 
    {
        printf("\nERROR No se ha podido crear el archivo destino...");
        exit(1);
    }
    // grabar traspuesta
    fprintf(fichero,"%d %d\n",columnas,filas);
    for(contador=0;contador<columnas;contador++) 
    {
        for(contador1=0;contador1<filas;contador1++) 
        {
            fprintf(fichero,"%.2f ",matriz1[contador1][contador]);
        }
        fprintf(fichero,"\n");
    }
    // cerrar archivo
    fclose(fichero);
    // liberar memoria
    for(contador=0;contador<filas;contador++) 
    {
        free(matriz1[contador]);
    }
    free(matriz1);
    return 0;
}
// Funcion Existe
int Existe(char *nombre_fichero)
{
    FILE *fichero;
    int resultado=0;  // 0 = existe 1 = no existe
    fichero=fopen(nombre_fichero,"rt");
    if(fichero!=NULL) 
    {
        fclose(fichero);
    } 
    else
    {
        resultado=1;
    }
    return resultado;
}

El archivo que se ha de crear para poder utilizar el programa, tiene en la primera linea el número de filas y columnas de la matriz, seguido de los valores que se quieren almacenar en la matriz.

Para ejecutar el programa desde la linea de programa, en mi caso y debido al nombre del programa creado, quedaría de la siguiente forma el directorio con el programa y el archivo de datos.

El resultado de la ejecución del programa es el siguiente:

Gracias por vuestra visita, si tenéis dudas podéis utilizar los comentarios para resolverlas.