Cercavo di implementare una funzione per il prodotto tra matrici e l'algoritmo credo di averlo trovato, il programma non dà errori nè warning il problema è che sembra stampare a video gli indirizzi dei vari elementi della matrice prodotto e non gli elementi (la matrice prodotto viene comunque con le dimensioni giuste). Credetemi, ho provato a controllare bene che eventuali & fossero messi nel posto giusto ma non ne vengo a capo. Se qualcuno riuscisse a darmi una mano gliene sarei veramente grato... Ho usato Code::Blocks.
Ecco il programma:
#include <stdio.h>
#include <stdlib.h>
typedef struct{ //struttura usata per contenere le dimensioni di una matrice
int r; //numero righe
int c; //numero colonne
} dim;
int **ProdMat(int **, int **, dim, dim);
int **ProdMat(int **M1, int **M2, dim m1, dim m2)
{
int i,h,k;
int **ris;
dim dimris;
if(m1.c!=m2.r){printf("Impossibile svolgere il prodotto"); exit(-1);}
dimris.r=m1.r;
dimris.c=m2.c;
if ((ris=(int**)malloc(dimris.r*sizeof(int*)))==NULL)
{printf("Impossibile allocare righe della matrice prodotto"); exit(-1);}
for (i=0; i<dimris.r; i++){
if((ris[i]=(int*)malloc(dimris.c*sizeof(int)))==NULL)
{printf("Impossibile allocare le colonne della matrice prodotto"); exit(-1);}
}
for(h=0; h<dimris.r; h++){
for(k=0; k<dimris.c; k++){
for(i=0; i<m1.c; i++){
ris[h][k]+=M1[h][i]*M2[i][k];
}
}
}
return(ris);
}
int main()
{
int** A1, **A2, **MatRis;
int i,j;
dim a1, a2, dimris;
printf("Inserisci il numero di righe della prima matrice\n");
scanf("%d",&a1.r);
printf("Inserisci il numero di colonne della prima matrice\n");
scanf("%d",&a1.c);
printf("Inserisci il numero di righe della seconda matrice\n");
scanf("%d",&a2.r);
printf("Inserisci il numero di colonne della seconda matrice\n");
scanf("%d",&a2.c);
if ((A1=(int**)malloc(a1.r*sizeof(int*)))==NULL)
{printf("Impossibile allocare righe prima matrice"); return(-1);}
for (i=0; i<a1.r; i++){
if((A1[i]=(int*)malloc(a1.c*sizeof(int)))==NULL)
{printf("Impossibile allocare le colonne della prima matrice"); return(-1);}
}
if ((A2=(int**)malloc(a2.r*sizeof(int*)))==NULL)
{printf("Impossibile allocare righe seconda matrice"); return(-1);}
for (i=0; i<a2.r; i++){
if((A2[i]=(int*)malloc(a2.c*sizeof(int)))==NULL)
{printf("Impossibile allocare le colonne della seconda matrice"); return(-1);}
}
dimris.r=a1.r;
dimris.c=a2.c;
for (i=0; i<a1.r; i++){
for(j=0; j<a1.c; j++){
printf("Inserisci A1[%d][%d]\n",i,j);
scanf("%d", &A1[i][j] );
}
}
for (i=0; i<a2.r; i++){
for(j=0; j<a2.c; j++){
printf("Inserisci A2[%d][%d]\n",i,j);
scanf("%d", &A2[i][j] );
}
}
MatRis=ProdMat(A1, A2, a1, a2);
for (i=0; i<dimris.r; i++){
for(j=0; j<dimris.c; j++){
printf(" %d ",MatRis[i][j] );
}
printf("\n\n");
}
for(i=0; i<a1.r; i++) free(A1[i]);
free(A1);
for(i=0; i<a2.r; i++) free(A2[i]);
free(A2);
for(i=0; i<dimris.r; i++) free(MatRis[i]);
free(MatRis);
system("pause");
return 0;
}