Ho messo a posto un po' di indici nei cicli ... ti mostro tutte le parti modificate e quelle eliminate in quanto inutili ...
Per il main, parto da dopo l'input di righe e colonne fino alla fine
codice:matrice = (int**) malloc((righe * sizeof(int*))); for (i = 0; i < righe; i++) matrice[i] = (int*) malloc(colonne * sizeof(int)); trasp = (int**) malloc((colonne * sizeof(int*))); for (i = 0; i < colonne; i++) trasp[i] = (int*) malloc(righe * sizeof(int)); ris = (int**) malloc((righe * sizeof(int*))); for (i = 0; i < righe; i++) ris[i] = (int*) malloc(righe * sizeof(int)); for (i = 0; i < righe; ++i) { for (j = 0; j < colonne; ++j) { printf("Inserisci elemento riga %d e colonna %d: ", i, j); fflush(stdout); scanf("%d", &matrice[i][j]); printf("\n"); fflush(stdout); } } trasposta(trasp, matrice, righe, colonne); moltiplicazione(ris, trasp, matrice, righe, colonne); for (i = 0; i < righe; ++i) { for (j = 0; j < colonne; ++j) { printf("matrice[%d][%d]= %d ", i, j, matrice[i][j]); fflush(stdout); } printf("\n"); fflush(stdout); } for (i = 0; i < colonne; ++i) { for (j = 0; j < righe; ++j) { printf("trasp[%d][%d]= %d ", i, j, trasp[i][j]); fflush(stdout); } printf("\n"); fflush(stdout); } for (i = 0; i < righe; ++i) { for (j = 0; j < righe; ++j) { printf("ris[%d][%d]= %d ", i, j, ris[i][j]); fflush(stdout); } printf("\n"); fflush(stdout); }
per le funzioni
codice:void trasposta(int **trasp, int **matrice, int righe, int colonne) { int i, j; for (i = 0; i < righe; i++) { for (j = 0; j < colonne; j++) { trasp[j][i] = matrice[i][j]; } } } void moltiplicazione(int **ris, int **trasp, int **matrice, int righe, int colonne) { int i, j, k; for (i = 0; i < righe; i++) for (j = 0; j < righe; j++) { ris[i][j] = 0; for (k = 0; k < colonne; k++) ris[i][j] += matrice[i][k] * trasp[k][j]; } }

Rispondi quotando