Ciao a tutti ragazzi sono nuovo e ho letto le regole del forum, cercando tra le varie discussioni non ho trovato qualcosa che mi aiutasse a capire il problema del mio programma. Studio ingegneria e sto facendo un programma per fondamenti di informatica,il mio problema è utilizzare al meglio le funzioni all' interno del programma ma non riesco a capire il motivo per la quale non riesco a farlo partire. Vi pubblico il mio lavoro su un semplice esercizio che date tre matrici(A,B,C) restituisca una quarta matrice che sia il risultato di: (A*B)-C. Spero possiate aiutarmi.
P.S. il problema viene visualizzato alla riga 41 colonna 27.
Scusate ma non riesco ad allegare il file.
///////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
//typedef int **Mat;
int alloca_matrice(int**,int,int);
int inserisci_elem(int**,int,int);
int visualizza_mat(int**,int,int);
int prodotto_mat(int**,int**,int**,int,int,int);
int differenza_matrice(int**,int**,int**,int,int);
int main(int argc, char *argv[]) {
int m,n,c,d,a,b,i,j,k;
int **mat1;
int **mat2;
int **mat_prod;
int **mat3;
int **mat_result;
int alloca1,alloca2,alloca3,alloca4,allocap;
int prod,dif;
do{
printf("Inserisci prima matrice:\n"); //inserisci matrice A
printf("Inserisci numero di righe:\n");
scanf("%d",&m);
alloca1=alloca_matrice(mat1,m,n);
printf("Inserisci numero di colonne:\n");
scanf("%d",&n);
printf("\n\nInserisci seconda matrice:\n"); //inserisci matrice B
printf("Inserisci numero di righe:\n");
scanf("%d",&c);
alloca2=alloca_matrice(mat2,c,d);
printf("Inserisci numero di colonne:\n");
scanf("%d",&d);
}
while(n!=c);
insersci_elem(**mat1,m,n);
insersci_elem(**mat2,c,d);
printf("Matrice A: %dx%d\n",m,n); // visualizza traccia matrice A
visualizza_mat(mat1,m,n);
printf("\nMatrice B: %dx%d\n",n,d); // visualizza traccia matrice B
visualizza_mat(mat2,n,d);
allocap=alloca_matrice(mat_prod,m,d); //alloca matrice prodotto A*B
prod=prodotto_mat(mat_prod,mat1,mat2,m,n,d); /* Calcolo del prodotto delle matrici A*B */
printf("\nMatrice prodotto AxB:\n"); // Visualizza traccia matrice A*B
visualizza_mat(mat_prod,m,n);
do{
printf("\n\nInserisci terza matrice:\n"); //inserisci matrice C
printf("Inserisci numero di righe:\n");
scanf("%d",&a);
alloca3=alloca_matrice(mat3,a,b);
printf("Inserisci numero di colonne:\n");
scanf("%d",&b);
}
while(a!=m||b!=d);
printf("\nInserisci valori matrice C \n\n\n"); // inserisci valori matrice C
insersci_elem(**mat3,a,b);
printf("\nMatrice C: %dx%d\n",a,b); // visualizza traccia matrice C
visualizza_mat(mat3,a,b);
alloca4=alloca_matrice(mat_result,a,b); //alloca matrice risultato=(A*B)-c
dif=differenza_matrice(mat_result,mat_prod,mat3,a,b); //calcolo matrice (A*B)-C
printf("\n\nDifferenza matrice (A*B)-C\n");
visualizza_mat(mat_result,a,b);
system("pause");
return(1);
}
int alloca_matrice(int **mat,int r, int c){ //alloca matrice
int i;
mat=(int**)malloc(r*sizeof(int*));
for(i=0;i<r;i++){
mat=(int*)malloc(c*sizeof(int));
}
return(**mat);
}
int inserisci_elem(int **mat,int r,int c){
int i,j;
printf("Inserisci valori matrice \n\n\n"); // inserisci valori matrice
for(i=0;i<r;i++){
for(j=0;j<c;j++){
printf("Elemento(%d,%d)=",i+1,j+1);
scanf("%d",&mat[j]);
}
printf("\n");
}
}
int visualizza_mat(int **mat,int r,int c){ /*Visualizza matrice*/
int i,j;
for(i=0;i<r;i++){
printf("\n");
for(j=0;j<c;j++){
printf(" %d ",mat[j]);
}
}
}
int prodotto_mat(int**mat_prod,int **mat1,int **mat2,int r,int c,int x){
int i,j,k;
for(i=0;i<r;i++){ /* Calcolo del prodotto delle matrici A*B */
for(j=0;j<x;j++){
mat_prod[j]=0;
for(k=0;k<c;k++){
mat_prod[j]+=mat1[k]*mat2[k][j];
}
}
}
}
int differenza_matrice(int**mat_result,int**mat_prod,int**mat3,int r,int c){
int i,j;
for(i=0;i<r;i++){ //calcolo matrice (A*B)-C
for(j=0;j<c;j++){
mat_result[j]=mat_prod[j]-mat3[j];
}
}
}