/*multiplica duas matrizes e guarda o resultado em uma matriz resultante*/ void multiplica_matrizes(void) { Matriz matriz_A = {NULL,1,1}, matriz_B = {NULL,1,1}, matriz_Mult = {NULL,1,1}; ushort i,j,k; uchar flag = TRUE; while(flag) { ler_matriz(&matriz_A);/*le valores para linha e coluna e aloca memoria para a matriz*/ ler_matriz(&matriz_B);/*le valores para linha e coluna e aloca memoria para a matriz*/ if(matriz_A.col != matriz_B.row)/*verifica se a multiplicaccao e possivel*/ { printf("\nErro o numero de linhas de colunas de A tem que ser igual ao numero de linhas de B\n"); libera_matriz(matriz_A.address, &(matriz_A.row));/*libera a memoria alocada anteriormente*/ libera_matriz(matriz_B.address, &(matriz_B.row));/*libera a memoria alocada anteriormente*/ } else flag = FALSE; } preenche_matriz(&matriz_A);/*preenche as entradas da matriz com valores via teclado*/ preenche_matriz(&matriz_B);/*preenche as entradas da matriz com valores via teclado*/ matriz_Mult.row = matriz_A.row; matriz_Mult.col = matriz_B.col; matriz_Mult.address = aloca_matriz(&(matriz_Mult.row),&(matriz_Mult.col));/*aloca memoria para a matriz_Mult*/ inicializa_matriz(&matriz_Mult); for(i = 0; i < matriz_Mult.row; i++) for(j = 0; j < matriz_Mult.col; j++) for(k = 0; k < matriz_A.col; k++)/*k < matriz_B->row tambem esta correto*/ *(*(matriz_Mult.address + i) + j) += (*(*(matriz_A.address + i) + k)) * (*(*(matriz_B.address + k) + j)); imprime_matriz(&matriz_A); imprime_matriz(&matriz_B); imprime_matriz(&matriz_Mult); libera_matriz(matriz_A.address,&(matriz_A.row)); libera_matriz(matriz_B.address,&(matriz_B.row)); libera_matriz(matriz_Mult.address,&(matriz_Mult.row)); }
int main(void){ int matriz[LINHAS][COLUNAS]; ler_matriz(matriz); soma_linha4(matriz); soma_coluna2(matriz); soma_diagonal_principal(matriz); soma_diagonal_secundaria(matriz); soma_todos_elementos(matriz); return 0; }