rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double *multmatriz(double *matriz1, int f1, int c1, double *matriz2, int f2, int c2, int *fr, int *cr)
{
int i,j,k;
double suma;
double *matriz_r = (double *)malloc((size_t)(f1*c2*sizeof(double)));
for(i = 0; i < f1; i++)
{
for(j = 0; j < c2; j++)
{
suma = 0;
for(k = 0; k < c1; k++)
{
suma += matriz1[c1*i+k]*matriz2[c1*k+j];
}
matriz_r[c2*i + j] = suma;
}
}
*cr = c2;
*fr = f1;
return matriz_r;
}
int obtenerDimensiones(char *cad, int *f, int *c)
{
int i,j;
char *cadaux = NULL, *cadaux2 = NULL;
//printf("%s", cad);
for(i = 0; i < strlen(cad); i++)
{
//printf("%c", cad[i]);
cadaux2 = NULL;
if(cad[i] != ' ' && cad[i] != '\0')
{
//printf("entro al if");
sprintf(cadaux2, "%c", cad[i]);
cadaux = strcat(cadaux, cadaux2);
//printf("cadaux = %s\n", cadaux);
}
else break;
}
if(cadaux == NULL) return 0;
else
{
*c = atoi(cadaux);
cadaux = NULL;
cadaux2 = NULL;
for(j = i+1; j < strlen(cad); j++)
{
cadaux2 = NULL;
if(cad[i] != ' ' && cad[i] != '\0')
{
sprintf(cadaux2, "%c", cad[i]);
cadaux = strcat(cadaux, cadaux2);
}
else break;
}
if(cadaux == NULL) return 0;
else
{
*f = atoi(cadaux);
free(cadaux);
}
}
return 1;
}
int leerMatriz(char *direccion, double *matriz, int *f, int *c)
{
char *cadena;
int i, n;
FILE *in = fopen(direccion, "r");
printf("\nENTRO LEER MATRIZ\n");
if (!in)
{
printf("ERROR ABRIENDO ARCHIVO\n");
fclose(in);
return 0;
}
else
{
printf("ANTES DEL FGETS");
fgets(cadena, 81, in);
//printf("ENTRO ELSE, LUESGO DE FGETS");
if(fgets(cadena, 81, in) != NULL)
{
//printf("%s", cadena);
//obtenerDimensiones(cadena, f, c);
//printf("\nTamaño matriz c=%d f=%d\n", c, f);
/*matriz = (double *)malloc((size_t)(*f)*(*c)*sizeof(double));
for(i = 0; i < (*f)*(*c); i++)
{
if(fscanf(in, "%lf\n", matriz[i]) == EOF)
{
printf("ERROR EN EL FORMATO DEL ARCHIVO\n");
fclose(in);
return 0;
}
}*/
}
else
{
printf("ERROR EN EL FORMATO DEL ARCHIVO\n");
fclose(in);
return 0;
}
}
fclose(in);
return 1;
}
int escribirMatriz(char *direccion, double *matriz, int f, int c)
{
FILE *out = fopen(direccion, "w");
int i;
if(!out)
{
printf("ERROR AL CREAR EL ARCHIVO\n");
fclose(out);
return 0;
}
else
{
fprintf(out, "MATRIZ RESULTANTE\n");
fprintf(out, "%d %d\n", c, f);
for(i = 0; i < f*c; i++)
{
if(!fprintf(out, "%lf\n", matriz[i]))
{
printf("SE PRODUJO UN ERROR AL ESCRIBIR EN EL ARCHIVO\n");
fclose(out);
return 0;
}
}
}
fclose(out);
return 1;
}
int main(int argc, char *argv[])
{
int f1, c1, f2, c2, fr, cr;
double *m1, *m2, *mr;
//printf("%s\n", argv[0]);
if(leerMatriz(argv[1], m1, &f1, &c1) && leerMatriz(argv[2], m2, &f2, &c2))
{
/*printf("\nLEYO LAS MATRICES\n");
if(c1 == f2)
{
mr = multmatriz(m1, f1, c1, m2, f2, c2, &fr, &cr);
if(escribirMatriz("resultado.txt", mr, fr, cr))
{
printf("EL ARCHIVO CON LA MATRIZ RESULTANTE HA SIDO CREADO\n");
}
}
else
{
printf("ERROR, EL NUMERO DE COLUMNAS DE LA PRIMERA MATRIZ DEBE SER IGUAL AL NUMERO DE FILAS DE LA SEGUNDA MATRIZ\n");
}
free(m1);
free(m2);
free(mr);*/
}
return 0;
}