Multiplicação de Matrizes com ponteiros
Publicado por Paulo Henrique 18/07/2007
[ Hits: 20.107 ]
Depois de um tempinho dedicado pra resolver esse probleminha, resolvi postar para o caso de alguém ter o mesmo! Trata-se de um programa de multiplicação de matrizes usando alocação dinâmica.
Código livre pra todos que desejarem visualizar =)
#include <stdlib.h> #include <stdio.h> /* @Autor Paulo Henrique - Doidinho <contato@dicnet.com.br> Multiplicação Matricial usando ponteiros com alocação dinamica Agradecimentos faimison e adair =) Apesar de ser uma função básica e fácil tive alguns probelmas quando quis fazê-la e os dois me ajudaram nas minhas dúvidas ^^ */ // Procedimento cardimen pra carregar as dimensões das matrizes void cardimen(int *nl, int *nc,char texto[]) { printf("Digite a quantidade de linhas de %s\t",texto); scanf("%d",nl); printf("Digite a quantidade de colunas de %s\t",texto); scanf("%d",nc); } //Função carregamat como ponteiro pra pegar os valores de cada elemento da matriz quer for pedida int *carregamat (int nl, int nc,char texto[]){ int l,c; int *temp; temp = (int *) calloc((nl*nc), sizeof(int)); if (temp) { for (l=0;l<nl;l++) { for (c=0;c<nc;c++) { printf("Digite o elemento [%d , %d] de %s\t",l+1,c+1,texto); scanf("%d",&temp[(l*nc)+c]); } } }else{ puts("Erro na alocacao de memoria"); exit(0); } return temp; } //Função Multiplica tb como ponteiro que recebe todos os dados e multiplica os valores de cada item int *multiplica (int *matA, int *matB, int nla, int nca, int nlb, int ncb){ int l,c,k; int *matRes; matRes= (int *) calloc((nla*ncb),sizeof(int)); if (matRes) { for (l=0;l<nla;l++){ for (c=0;c<ncb;c++){ matRes[(l*ncb)+c]=0; for (k=0;k<nca;k++) { matRes[(l*ncb)+c]=matRes[(l*ncb)+c]+matA[(l*nca)+k]*matB[(k*ncb)+c]; } } } }else{ puts("Erro na alocacao de memoria"); exit(0); } return(matRes); } //Procedimento imprimeMatriz, que recebe o valor de matRes e imprime o resultado, poderia imprimir as //outras matrizes, basta apenas declarar elas dentro do procedimento e pedir isso no método main void imprimeMatriz (int nl, int nc, int *matRes) { int l, c; for (l=0;l<nl;l++){ for (c=0;c<nc;c++) { printf("\t %d", matRes[(l*nc)+c]); } printf ("\n"); } } //Método Main int main(int argc, char *argv[]) { int nla,nca,nlb,ncb; int *matA,*matB,*matRes; cardimen(&nla,&nca,"A"); cardimen(&nlb,&ncb,"B"); while (nla != ncb){ printf("Matrizes Incompativeis"); printf("Digite novamente a quantidade de linhas de B\n"); scanf("%d",&ncb); } puts("\nCarga da Matriz A"); matA=carregamat(nla,nca,"A"); puts("\nCarga da Matriz B"); matB=carregamat(nlb,ncb,"B"); matRes=multiplica(matA,matB,nla,nca,nlb,ncb); puts("\nResuldado da multiplicacao"); imprimeMatriz(nla,ncb,matRes); system("PAUSE"); return 0; }
Lista ligada simples, algoritmos de inserção, busca e impressão
EXPRESSÕES ARITMÉTICAS - PARTE 1
Uma ajuda para quem gosta de Geometria Analítica
Nenhum comentário foi encontrado.
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Ingress NGINX Controller CVSS base score of 9.8 (1)
Impossível corrigir problemas, você manteve (hold) pacotes quebrados. (1)
Linux Mint não conecta Wi-Fi sem fio (18)