Ho definito la matrice finale come Matrix_X e ho modificato la funzione cosi:
Prototipo:
double Prod_Matrix (double X[][4], double X_T[][6], double Matrix_X [][4], int r1, int c1, int r2, int c2);
Funzione:
double Prod_Matrix (double a[][4], double b[][6], double Matrix_X [][4], int r1, int c1, int r2, int c2)
{
int i, j, k;
double prod[r1][c2];
for (i=0; i < r1; i++)
for (j=0; j < c2; j++)
for (k=0; k < c1; k++)
Matrix_X [i][j] += a[i][k] * b[k][j];
printf ("Il prodotto tra le matrici è:\n");
for (i=0; i<4; i++)
for (j=0; j<4; j++){
printf ("%f;",Matrix_X [i][j]);
if (j==3)
printf (";\n");
}
return Matrix_X [0][0];
}
main():
double *z;
z = Prod_Matrix (X, X_T, Matrix_X, 6, 4, 4, 6); //chiamo la funzione che moltiplica le matrici
for (i=0; i<r1; i++) //riassegno in un array i valori del prodotto
for (j=0; j<c1; j++)
Matrix_X[j][i] = *z++;
Mi da il seguente errore dove chiamo la funzione:
incompatible types when assigning to type 'double *' from type 'double'
Oppure:
Prototipo:
double* Prod_Matrix (double X[][4], double X_T[][6], double *p, int r1, int c1, int r2, int c2);
Funzione:
double* Prod_Matrix (double a[][4], double b[][6], double *p, int r1, int c1, int r2, int c2)
{
int i, j, k;
double prod[r1][c2];
for (i=0; i < r1; i++)
for (j=0; j < c2; j++)
for (k=0; k < c1; k++)
prod [i][j] += a[i][k] * b[k][j];
printf ("Il prodotto tra le matrici è:\n");
for (i=0; i<4; i++)
for (j=0; j<4; j++){
printf ("%f;", prod [i][j]);
if (j==3)
printf (";\n");
}
p = prod[0][0];
return &p;
}
errore su p = prod[0][0]; incompatible types when assigning to type 'double *' from type 'double'
errore su return &p;
Multiple markers at this line
- return from incompatible pointer type [-Wincompatible- pointer-types]
- function returns address of local variable [-Wreturn-local-addr]
main ():
double *z, *p;
z = Prod_Matrix (X, X_T, p, 6, 4, 4, 6);