Ciao,
ho corretto gran parte del codice. C'è comunque un errore nella funzione che si occupa di fare il prodotto vero e proprio tra le matrici. Quello lo lascio a te...
#include <stdio.h>
#include <stdlib.h>
void acquisizionematrice(int *matrice, int righe, int colonne); /*prototipo funzione*/
void stampamatrice(int *matrice, int righe, int colonne); /*prototipo funzione*/
void prodottomatrici(int *matrice1, int *matrice2, int *matriceprodotto, int righe, int colrig, int colonne); /*prototipo funzione*/
int main()
{
int *A; /*puntatore alla matrice A*/
int *B; /*puntatore alla matrice B*/
int *C; /*puntatore alla matrice C prodotto di A e B*/
int n; /*righe di A*/
int p; /*colonne di A*/
int q; /*righe di B*/
int m; /*colonne di B*/
printf("Inserisci il numero di righe e di colonne della matrice A.\n");
scanf("%d", &n);
scanf("%d", &p);
printf("Inserisci il numero di righe e di colonne della matrice B.\n");
scanf("%d", &q);
scanf("%d", &m);
if (p!=q) /*Controllo eseguibilità del prodotto*/
{
printf("Il prodotto righe per colonne tra A e B non è eseguibile.\n");
}
else
{
A=(int*)malloc(n*p*sizeof(int));
acquisizionematrice(A, n, p); /*chiamata alla funzione che acquisisce la matrice*/
printf("La matrice A e':\n");
stampamatrice(A, n, p); /*chiamata alla funzione che stampa la matrice*/
B=(int*)malloc(q*m*sizeof(int));
acquisizionematrice(B, q, m); /*chiamata alla funzione che acquisisce la matrice*/
printf("La matrice B e':\n");
stampamatrice(B, q, m); /*chiamata alla funzione che stampa la matrice*/
C=(int*)malloc(n*m*sizeof(int));
printf("La matrice prodotto tra A e B e':\n");
prodottomatrici(A, B, C, n, p, m); /*Chiamata alla funzione che effettua il prodotto righe per colonne tra A e B*/
}
system("PAUSE");
return 0;
} /*Fine main*/
/*definizione funzione*/
void acquisizionematrice(int *matrice, int righe, int colonne)
{
int i;
int j;
{
for(i=0; i<righe; i++)
{
for(j=0; j<colonne; j++)
{
printf("Inserisci l'elemento di posto %d,%d della matrice\n", i, j);
scanf("%d", &matrice[i*righe+j]);
}
}
}
}
/*definizione funzione*/
void stampamatrice(int *matrice, int righe, int colonne)
{
int i;
int j;
{
for(i=0; i<righe; i++)
{
for(j=0; j<colonne; j++)
{
printf("%d ", matrice[i*righe+j]);
}
printf("\n");
}
}
}
/*definizione funzione*/
/* SBAGLIATA */
void prodottomatrici(int *matrice1, int *matrice2, int *matriceprodotto, int righe, int colrig, int colonne)
{
int i;
int j;
int k;
{
for(i=0; i<righe; i++)
{
for(j=0; j<colonne; j++)
{
for(k=0; k<colrig; k++)
{
matriceprodotto[i*righe+j] += matrice1[i*righe+k]*matrice2[k*colrig+j];
}
}
}
}
stampamatrice(matriceprodotto, righe, colonne);
}
P.S. Ci sono anche parecchie parentesi graffe inutili ma quelle le ho lasciate... Non fanno danni ma sono comunque inutili e possono complicare la lettura del codice.