Ciao. Ho creato un programma che prende in ingresso due matrici A e B e ne calcola il prodotto A*B (i cui elementi sono dati dal prodotto righe per colonne tra A e B).
Questa parte del programma prende gli elementi da tastiera:
#include<stdio.h>
#include<stdlib.h>
int prod(int *A, int *B, int M, int L);
int main()
{
int M;
int N;
int L;
int i;
int j;
int *A;
int *B;
printf("Inserisci il numero di colonne di A. Deve essere uguale al numero di righe di B\n");
scanf("%d",&M);
printf("Inserisci il numero di righe di A\n");
scanf("%d",&N);
printf("Inserisci il numero di colonne di B\n");
scanf("%d",&L);
A=(int *)malloc(M*N*sizeof(int));
B=(int *)malloc(L*M*sizeof(int));
//Acquisisce elementi di A
for(i=0;i<N;i++)
{
for(j=0;j<M;j++)
{
printf("Inserisci l'elemento a%d%d della matrice A ",i+1,j+1);
scanf("%d",&A[i*M+j]);
}
}
//Acquisisce elementi di B
for(i=0;i<M;i++)
{
for(j=0;j<L;j++)
{
printf("Inserisci l'elemento a%d%d della matrice B ",i+1,j+1);
scanf("%d",&B[i*L+j]);
}
}
prod(A,B,M,L);
system("PAUSE");
return 0;
}
La funzione mi calcola non tutti gli elementi della matrice A*B, ma solo l'elemento di riga p e colonna q, con p e q in input:
int prod(int *A, int *B, int M, int L)
{
int p;
int q;
int k;
int h;
int C;
C=0;
printf("Inserisci l'elemento che vuoi visualizzare della matrice A*B\n\nInserisci indice riga\n");
scanf("%d",&p);
printf("Inserisci indice colonna\n");
scanf("%d",&q);
for(k=0,h=1;k<=M;k++,h++)
{
C+=A[M*(q-1)+k]*B[L*(h-1)+(p-1)];
}
printf("%d",&C);
return 1;
}
Sono stato attento a far scorrere gli indici con il for visto che ho salvato ciascuna matrice su un array monodimensionale a partire da A[0] e da B[0].
Però alla fine l'elemento stampato a schermo non è corretto (cioè non è il prodotto della p-esima riga di A per la q-esima colonna di B).
Qualcuno mi può aiutare? Non so veramente che fare anche perchè ho ricontrollato tutto compreso il for della funzione e credo sia corretto.
Grazie.