He estado probando con matrices 3x3 y por algún motivo las posiciones 2,3 y 3,1 dan números muy grandes y no logro ver el error.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void hallardimensiones(char archivo[20],char matrizt[20][20],int *filas,int *col){
FILE *file;
file = fopen(archivo,"r");
if (file == NULL){
perror("error al abrir el fichero");
system("pause");
return;
}
int i,elementos;
float aux;
for ( i=0;!(feof(file));i++){
fgets(matrizt[i],100,file);
}
fclose(file);
*filas = i;
file = fopen(archivo,"r");
for ( i=1; fscanf(file," %f",&aux)==1;i++){
}
elementos = i;
*col = elementos/(*filas);
printf("Hay %i filas y %i columnas",(*filas),(*col));
fclose(file);
}
void leer(char archivo[],int filas,int col,float matriz[filas][col]){
FILE *file;
file = fopen(archivo,"r");
int i,j;
for(i=0,j=0;i<filas;i++){
for(j=0;j<col;j++){
printf("posicion %i %i \n",i,j);
fscanf(file," %f",&matriz[i][j]);
}
}
for(i=0,j=0;i<filas;i++){
for(j=0;j<col;j++){
printf(" %f ",matriz[i][j]);
}
printf(" \n");
}
fclose(file);
}
producto(int filas1,int filas2,int col1,int col2,float matriz1[filas1][col1],float matriz2[filas2][col2],float resultado[filas1][col2]){
int i,j,z;
if (filas1!=col2){
printf("error de dimensiones");
system("pause");
return;
}
for(i=0,j=0;i<filas1;i++){
for(j=0;j<col2;j++){
for(z=0;z<filas1;z++){
resultado[i][j]+=(matriz1[i][z])* (matriz2[z][j]);
}
}
}
for(i=0,j=0;i<filas1;i++){
printf(" \n");
for(j=0;j<col2;j++){
printf(" %.2f",resultado[i][j]);
}
}
printf(" \n");
}
int main(){
char archivo[20];
char matrizt[20][20];
printf("Introduce el nombre del archivo de la matriz 1 \n");
gets(archivo);
int filas1,col1;
hallardimensiones(archivo,matrizt,&filas1,&col1);
float matriz1[filas1][col1];
leer(archivo,filas1,col1,matriz1);
printf("Introduce el nombre del archivo la matriz 2\n");
gets(archivo);
int filas2,col2;
hallardimensiones(archivo,matrizt,&filas2,&col2);
float matriz2[filas2][col2];
leer(archivo,filas2,col2,matriz2);
float resultado[filas1][col2];
producto(filas1,filas2,col1,col2,matriz1,matriz2,resultado);
system("pause");
return 0;
}
Matrices que he multiplicado para probar:
1 1 1
2 3 2
4 5 6
1 0 0
0 1 0
0 0 0
PD:Si hace falta meto comentarios xD