Multiplicação de Matrizes com ponteiros
Publicado por Paulo Henrique 18/07/2007
[ Hits: 20.363 ]
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;
}
Jogo da velha, para 2 jogadores, bem simples
EXPRESSÕES ARITMÉTICAS - PARTE 2
Parte 7 (Pesquisa) - Sessão de estudo sobre MATRIZES.
gramquilo.c - Transforma grama em quilo
Nenhum comentário foi encontrado.
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Instalando COSMIC no Linux Mint
Turbinando o Linux Mint: o poder das Nemo Actions
Inteligência Artificial no desenvolvimento de software: quando começar a usar?
[Resolvido] Algo deu errado ao abrir seu perfil
Usando o VNSTAT para medir o seu consumo de internet
Habilitando clipboard manager no ambiente COSMIC
Problema com som no laptop (5)
Quando vocês pararam de testar distros? (11)
Não estou conseguindo fazer funcionar meu Postfix na versão 2.4 no Deb... (2)









