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.