#include #include typedef double elemento; /* In questo modo se dovremo riusare il codice per allocare ad esempio delle matrici di long double bastera' cambiare la definizione di "elemento" come long double e tutto il resto del codice sara' riutilizzabile */ typedef elemento **Matrice; Matrice AllocaMatrice(const int nrighe, const int ncol); Matrice CreaMatrice(FILE *ifp,const int nrighe,const int ncol); Matrice Somma(Matrice a, Matrice b, const int nrighe, const int ncol); void DeallocaMatrice(Matrice a, const int nrighe); Matrice Prodotto(Matrice a, const int nra, const int nca, Matrice b, const int nrb, const int ncb); void TrovaDimensioni(FILE *ifp, int * nrighe, int * ncol); int main(){ int i=0,j=0,m=0,n=0; int ma=0,na=0,mb=0,nb=0,md=0,nd=0; const int MAXCHARS=1000; FILE *ifpa=NULL, *ifpb=NULL, *ofpc = NULL, *ifpd=NULL, *ofpe = NULL; Matrice a=NULL,b=NULL,c=NULL,d=NULL, e=NULL; char nomefile[MAXCHARS]; printf("Introduci il nome del file per la matrice a\n"); scanf("%s",nomefile); ifpa = fopen(nomefile,"r"); if(ifpa==NULL) { fprintf(stderr,"File %s non trovato\n",nomefile); exit(1); } printf("Introduci il nome del file per la matrice b\n"); scanf("%s",nomefile); ifpb = fopen(nomefile,"r"); if(ifpb==NULL) { fprintf(stderr,"File %s non trovato\n",nomefile); exit(1); } printf("Introduci il nome del file per la matrice somma\n"); scanf("%s",nomefile); ofpc = fopen(nomefile,"w"); if(ofpc==NULL) { fprintf(stderr,"Non e' possibile creare il file %s\n",nomefile); exit(1); } /* Questo era richiesto nel quesito standard: printf("Introduci il numero di righe e colonne di a e b\n"); scanf("%d %d",&m,&n); */ /* Sostituire le due righe precedenti con queste per la risposta alla prima domanda facoltativa */ TrovaDimensioni(ifpa,&ma,&na); TrovaDimensioni(ifpb,&mb,&nb); if(ma != mb || na != nb){ fprintf(stderr,"a e b hanno dimensioni diverse!\n"); exit(1); } m = ma; n = na; /* Fine parte facoltativa */ a = CreaMatrice(ifpa,m,n); fclose(ifpa); b = CreaMatrice(ifpb,m,n); fclose(ifpb); c = Somma(a,b,m,n); for(i=0;i