De todas formas he desistido en el uso de estructuras junto con punteros :/
Ya tengo casi terminado el programa pero me encuentro ahora con un error de ejecución, es decir, no efectúa correctamente las operaciones, (función sum y función mul):
Código C:
Ver originalvoid sum(int, int, int, int, float*, float*);
void mul(int, int, int, int, float*, float*);
main()
{
int filA,colA,filB,colB;
float *mat1,*mat2;
FILE *p;
int i,j,t;
p
=fopen("matrices.txt","r"); if(p
==NULL
) printf("Error al abrir el archivo"); else
{
fscanf(p
,"%d %d",&filA
,&colA
); printf("Matriz A (%dx%d)\n",filA
,colA
); mat1
=(float*)malloc(filA
*colA
*sizeof(float)); for(i=0; i<filA; i++)
{
for(j=0; j<colA; j++)
{
fscanf(p
,"%f",(mat1
+i
*colA
+j
)); printf("%f ",*(mat1
+i
*colA
+j
)); }
}
fscanf(p
,"%d %d",&filB
,&colB
); printf("Matriz B (%dx%d)\n",filB
,colB
); mat2
=(float*)malloc(filB
*colB
*sizeof(float)); for(i=0;i<filB;i++)
{
for(j=0;j<colB;j++)
{
fscanf(p
,"%f",(mat1
+i
*colB
+j
)); printf("%f ",*(mat1
+i
*colB
+j
)); }
}
}
do
{
printf("\n\n Escolla a operacion a realizar sobre as duas matrices: \n 1. Sumar\n 2. Multiplicar\n 3. Sair\n\n Seleccion: "); switch(t)
{
case 1: sum(filA,colA,filB,colB,mat1,mat2); break;
case 2: mul(filA,colA,filB,colB,mat1,mat2); break;
case 3: t=999; break;
default: printf("Por favor, escolla unha das opcions disponhibles"); }
}while(t!=999);
return 0;
}
void sum(int filA, int colA, int filB, int colB, float *mat1, float *mat2)
{
int filC, colC, i, j;
float *mat3=NULL;
if(filA==filB && colA==colB)
{
filC=filA;
colC=colB;
mat3
=(float*)malloc(filC
*colC
*sizeof(float)); printf("\n\nMatriz C (%dx%d)\n",filC
,colC
); for(i=0; i<filA; i++)
{
for(j=0; j<colA; j++)
{
*(mat3+i*colC+j)=*(mat1+i*colA+j)+*(mat2+i*colB+j);
printf("%f ",*(mat3
+i
*colC
+j
)); }
}
}
else printf("No coincide la dimension de las matrices\n"); }
void mul(int filA, int colA, int filB, int colB, float *mat1, float *mat2)
{
int filC, colC, k, i, j;
float *mat3=NULL;
if(colA==filB)
{
filC=filA;
colC=colB;
mat3
=(float*)malloc(filC
*colC
*sizeof(float)); printf("\n\nMatriz C (%dx%d)\n",filC
,colC
); for(i=0; i<filC; i++)
{
for(j=0; j<colC; j++)
{
for(k=0; k<colA; k++)
{
*(mat3+i*colC+j)=*(mat3+i*colC+j)+*(mat1+i*colA+k)**(mat2+k*colB+j);
}
printf("%f ",*(mat3
+i
*colC
+j
)); }
}
}
else printf("El numero de columnas de la matriz 1 es distinto del numero de filas de la matriz 2\n"); }
Gracias, un saludo!