devil_prince
28-05-2011, 17:59
Ragazzi devo fare il prodotto di matrici, però allocandole (sia le matrici di partenza che quella risultate) dinamicamente. Questo è quello che ho fatto fin ora:
#include <stdio.h>
#include <stdlib.h>
void main ()
{
int i, j, k, m, n, p, *A, *B, *C, D[100][100];
puts("-------------------------------");
puts("PRODOTTO DI MATRICI\n");
puts("-------------------------------");
/*input dei parametri m p ed n*/
printf("Inserire le righe per la prima matrice (parametro -m-): ");
scanf("%d",&m);
printf("Inserire le colonne per la prima matrice e righe per la seconda matrice (parametro -p-): ");
scanf("%d",&p);
printf("Inserire le colonne per la seconda matrice (parametro -n-): ");
scanf("%d",&n);
/*allocazione delle matrici*/
A=malloc(m*p*sizeof(int));
B=malloc(p*n*sizeof(int));
C=malloc(m*n*sizeof(int));
/*Azzeramento della matrice C*/
for(i=0;i<m;i++){
for(j=0;j<n;j++){
*(C+i*m*j)=0;}
}
/*inserimento degli elementi per le matrici A e B*/
for(i=0;i<m;i++){
for(j=0;j<p;j++){
printf("Inserire l'elemento dell'array A di posto (%d,%d): ",i,j);
scanf("%d",&D[i][j]);}
}
printf("Ecco la matrice A allocata dinamicamente\n");
for(i=0;i<m;i++){ //assegnati i valori alla matrice di appoggio li copiamo in A
for(j=0;j<p;j++)
{ *(A+i*p*j)=D[i][j];
printf("%d ",*(A+i*p*j));}
puts("\n");}
for(i=0;i<m;i++){ //azzeriamo la matrice di appoggi
for(j=0;j<n;j++){
D[i][j]=0;}
}
for(i=0;i<p;i++){ //assegnati i valori alla matrice di appoggio li copiamo in B
for(j=0;j<n;j++){
printf("Inserire l'elemento dell'array B di posto (%d,%d): ",i,j);
scanf("%d",&D[i][j]);}
}
printf("Ecco la matrice B allocata dinamicamente\n");
for(i=0;i<p;i++){
for(j=0;j<n;j++)
{ *(B+i*n*j)=D[i][j];
printf("%d ",*(B+i*n*j));}
puts("\n");}
/*Prodotto di AxB*/
for(i=0;i<m;i++){
for(j=0;j<n;j++){
for(k=0;k<p;k++){
*(C+i*m*j) = *(A+i*p*k)**(B+k*p*j)+*(C+i*m*j);}
}
}
printf("Ecco la matrice C allocata dinamicamente\n");
for(i=0;i<n;i++){
for(j=0;j<m;j++)
{printf("%d ",*(C+i*m*j));}
puts("\n");}
}
le matrici di partenza si allocano bene, ma la matrice C risultante ha valori tutti sballati...sbaglio qualcosa nella formula??
#include <stdio.h>
#include <stdlib.h>
void main ()
{
int i, j, k, m, n, p, *A, *B, *C, D[100][100];
puts("-------------------------------");
puts("PRODOTTO DI MATRICI\n");
puts("-------------------------------");
/*input dei parametri m p ed n*/
printf("Inserire le righe per la prima matrice (parametro -m-): ");
scanf("%d",&m);
printf("Inserire le colonne per la prima matrice e righe per la seconda matrice (parametro -p-): ");
scanf("%d",&p);
printf("Inserire le colonne per la seconda matrice (parametro -n-): ");
scanf("%d",&n);
/*allocazione delle matrici*/
A=malloc(m*p*sizeof(int));
B=malloc(p*n*sizeof(int));
C=malloc(m*n*sizeof(int));
/*Azzeramento della matrice C*/
for(i=0;i<m;i++){
for(j=0;j<n;j++){
*(C+i*m*j)=0;}
}
/*inserimento degli elementi per le matrici A e B*/
for(i=0;i<m;i++){
for(j=0;j<p;j++){
printf("Inserire l'elemento dell'array A di posto (%d,%d): ",i,j);
scanf("%d",&D[i][j]);}
}
printf("Ecco la matrice A allocata dinamicamente\n");
for(i=0;i<m;i++){ //assegnati i valori alla matrice di appoggio li copiamo in A
for(j=0;j<p;j++)
{ *(A+i*p*j)=D[i][j];
printf("%d ",*(A+i*p*j));}
puts("\n");}
for(i=0;i<m;i++){ //azzeriamo la matrice di appoggi
for(j=0;j<n;j++){
D[i][j]=0;}
}
for(i=0;i<p;i++){ //assegnati i valori alla matrice di appoggio li copiamo in B
for(j=0;j<n;j++){
printf("Inserire l'elemento dell'array B di posto (%d,%d): ",i,j);
scanf("%d",&D[i][j]);}
}
printf("Ecco la matrice B allocata dinamicamente\n");
for(i=0;i<p;i++){
for(j=0;j<n;j++)
{ *(B+i*n*j)=D[i][j];
printf("%d ",*(B+i*n*j));}
puts("\n");}
/*Prodotto di AxB*/
for(i=0;i<m;i++){
for(j=0;j<n;j++){
for(k=0;k<p;k++){
*(C+i*m*j) = *(A+i*p*k)**(B+k*p*j)+*(C+i*m*j);}
}
}
printf("Ecco la matrice C allocata dinamicamente\n");
for(i=0;i<n;i++){
for(j=0;j<m;j++)
{printf("%d ",*(C+i*m*j));}
puts("\n");}
}
le matrici di partenza si allocano bene, ma la matrice C risultante ha valori tutti sballati...sbaglio qualcosa nella formula??