PDA

View Full Version : Problema prodotto righe x colonne di 2 matrici memorizzate in modo dinamico


Piojolopez2406
14-05-2007, 18:35
ragazzi devo fare il prodotto righe per colonne di 2 matrici memorizzate in modo dinamico, ma incontro un problema quando vado a fare proprio il rpodotto, cioč nell'istruzione:

*(c+i*r+j)=*(c+i*r+j)+ *a(a+i*n+k) * *b(b+k*r+j);

mi dice che a e b non sono funzioni , dove ho sbagliato....

questo č il codice del programma:


#include <stdio.h>
#include <stdlib.h>
int *crea_matrice(int riga, int colonna);
void main()
{
int *a,*b,*c;
int n,m,q,r,i,j,k;


printf("scrivere valore riga di a: ");
scanf ("%d",&n);
printf("\nscrivere valore colonna di a: ");
scanf ("%d",&m);
printf("\nscrivere valore riga di b: ");
scanf ("%d",&q);
printf("\nscrivere valore colonna di b: ");
scanf ("%d",&r);
a=malloc(n*m*sizeof(int));
b=malloc(q*r*sizeof(int));
c=malloc(n*r*sizeof(int));

if(m==q)
{

for(i=0;i<n;i++)
for(j=0;j<m;j++)
*(a+i*m+j)=rand()%100/RAND_MAX;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
*(b+i*m+j)=rand()%100/RAND_MAX;
a=crea_matrice(n,m);
b=crea_matrice(q,r);
for (i=0;i<n;i++)
for (j=0;j<r;j++)
{
*(c+i*r+j)=0;
for(k=0;k<q;k++)
*(c+i*r+j)=*(c+i*r+j)+ *a(a+i*n+k) * *b(b+k*r+j);
}
printf("la matrice prodotto e'\n");

for (i=0;i<n;i++)
{
for (j=0;j<r;j++)
{
printf("%d ",*(c+i*r+j));
}
printf("\n");
}
}

else
printf("ERRORE");

}

Piojolopez2406
14-05-2007, 18:36
ragazzi devo fare il prodotto righe per colonne di 2 matrici memorizzate in modo dinamico, ma incontro un problema quando vado a fare proprio il rpodotto, cioč nell'istruzione:

*(c+i*r+j)=*(c+i*r+j)+ *a(a+i*n+k) * *b(b+k*r+j);

mi dice che a e b non sono funzioni , dove ho sbagliato....

questo č il codice del programma:


#include <stdio.h>
#include <stdlib.h>
int *crea_matrice(int riga, int colonna);
void main()
{
int *a,*b,*c;
int n,m,q,r,i,j,k;


printf("scrivere valore riga di a: ");
scanf ("%d",&n);
printf("\nscrivere valore colonna di a: ");
scanf ("%d",&m);
printf("\nscrivere valore riga di b: ");
scanf ("%d",&q);
printf("\nscrivere valore colonna di b: ");
scanf ("%d",&r);
a=malloc(n*m*sizeof(int));
b=malloc(q*r*sizeof(int));
c=malloc(n*r*sizeof(int));

if(m==q)
{

for(i=0;i<n;i++)
for(j=0;j<m;j++)
*(a+i*m+j)=rand()%100/RAND_MAX;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
*(b+i*m+j)=rand()%100/RAND_MAX;
a=crea_matrice(n,m);
b=crea_matrice(q,r);
for (i=0;i<n;i++)
for (j=0;j<r;j++)
{
*(c+i*r+j)=0;
for(k=0;k<q;k++)
*(c+i*r+j)=*(c+i*r+j)+ *a(a+i*n+k) * *b(b+k*r+j);
}
printf("la matrice prodotto e'\n");

for (i=0;i<n;i++)
{
for (j=0;j<r;j++)
{
printf("%d ",*(c+i*r+j));
}
printf("\n");
}
}

else
printf("ERRORE");

}

scusate ho sbagliatoa copiare ho mesoso una function in alto che perň nn ho usato, non la calcolate, perkč cmq la matrice me la creo random stesso nel main....

yorkeiser
14-05-2007, 18:41
Beh, ha ragione il compilatore: a(qualcosa) č una chiamata a funzione. Forse volevi scrivere *(a+i*n+k)

Piojolopez2406
14-05-2007, 18:49
Beh, ha ragione il compilatore: a(qualcosa) č una chiamata a funzione. Forse volevi scrivere *(a+i*n+k)

OK ho vinto il premio idiozia della giornata....:fagiano: ...........ho anke il certificato:read: .......grazie amico

cionci
14-05-2007, 20:46
Cerca di dare nomi un po' piů esplicativi alle variabili. Errori come questo sono dovuti proprio ai nomi anonimi che gli hai dato ;)

Piojolopez2406
14-05-2007, 21:48
ti spiego....il tutto č successo perkč ho modificato un programma ke avevo in paertenza...capisci...mi scocciavo di cambiare tutto...cmq dai...tt bene tnx