Ir ao conteúdo
  • Cadastre-se

Multiplicação de Matrizes em C


_luks_

Posts recomendados

Eae galera, tô com o seguinte exercício:

5. Sobre operações coma matrizes, implemente um programa em C que faça:

a. Multiplicação entre duas matrizes, as matrizes o usuário que digita quantas linhas e colunas ele quer.

se alguem souber por favor me ajudem, esse exercício é pra segunda-feira !!!!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...
  • mês depois...

E ai galera, como vejo que sempre alguem esta atras da resolucao deste problema, vou colocar um codigo aqui.É um codigosimples se alocacao dinamica, mas espero poder ajudar alguem que esteja enfrentando dificuldades. porém espero que quem utilizar o codigo, nao simplesmente o copie, mas sim tente entende lo, pois copiando ninguem vai aprender nada.Se alguem tiver duvidas e quiser alguma explicação pode entrar em contato comigo por email que sera um prazer ajudar.

abraços a todos!!!!

#include <stdio.h>

#include <stdlib.h>

/*

*

*/

void main(void)

{

int i,j,k,l,c;

float m[10][10];

float m1[10][10];

float maux[10][10];

printf("digite a quntidade de linhas das matrizes \n");

scanf("%i",&l);

printf("\n\n");

printf("Digite a quantidade de colunas das matrizes\n");

scanf("%i",&c);

printf("\n\n");

printf("Digite os elementos da matriz 1");

printf("\n\n");

for(i=0;i<l;i++)

{

for(j=0;j<c;j++)

{

printf("elemento %i%i -->",i,j);

scanf("%f",&m[j]);

}

}

printf("\n\n");

printf("Digite os elementos da matriz 2");

printf("\n\n");

for(i=0;i<l;i++)

{

for(j=0;j<c;j++)

{

printf("elemento %i%i -->",i,j);

scanf("%f",&m1[j]);

maux[j]=0;

}

}

for(i=0;i<l;i++)

{

for(j=0;j<c;j++)

{

for(k=0;k<l;k++)

{

maux[j]=maux[j]+(m[k]*m1[k][j]);

}

}

}

printf("\n\n");

printf("As matrizes multiplicadas geram a matriz abaixo");

printf("\n\n");

for(i=0;i<l;i++)

{

printf("\n");

for(j=0;j<c;j++)

{

printf("% 6.2f",maux[j]);

}

}

printf("\n\n");

}

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

beleza Galera, sou novo no forum... aproveitando o codigo do nosso amigo... eu fiz umas mudanças que ficou da seguinte maneira:

#include <stdio.h>

#include <stdlib.h>

#define m 2

#define n 2

main()

{

int i,j,k;

int ma1[m][n],ma2[m][n], ma3[m][n];

printf("Digite os elementos da matriz 1");

printf("\n\n");

for(i=0;i<m;i++)

{

for(j=0;j<n;j++)

{

scanf("%i",&ma1[j]);

}

}

printf("\n\n");

printf("Digite os elementos da matriz 2");

printf("\n\n");

for(i=0;i<m;i++)

{

for(j=0;j<n;j++)

{

scanf("%i",&ma2[j]);

ma3[j]=0;

}

}

for(i=0;i<m;i++)

{

for(j=0;j<n;j++)

{

for(k=0;k<m;k++)

{

ma3[j]=ma3[j]+(ma1[k]*ma2[j][k]);

}

}

}

printf("\n\n");

printf("As matrizes multiplicadas geram a matriz abaixo");

printf("\n\n");

for(i=0;i<m;i++)

{

printf("\n");

for(j=0;j<n;j++)

{

printf("%i",ma3[j]);

printf("\n\n");

}

}

system("pause");

}

porém acho que o resultado esta dando errado.. exemplo se eu dgitar 2222 nas duas matrizes.. o resultado esta dando 8888... não era pra dar 6666??.. me corrijam se eu estiver errado..... valeu..

Link para o comentário
Compartilhar em outros sites


#include <stdio.h>
#include <conio.h>

main(){

//Definição de variaveis
int i, j, l, c;

//Entrada de dados
printf("\n Informe a quntidade de linhas das matrizes : ");
scanf("%d",&l);
printf("\n\n Informe a quantidade de colunas das matrizes : ");
scanf("%d",&c);;
float matrizA[l][c],matrizB[l][c],matrizC[l][c];

for(i=0; i<l; i++)
{
for(j=0; j<c; j++)
{
printf("\n\n Informe o valor da %d%c Linha e da %d%c Coluna da Matriz A: ", i+1, 167, j+1, 167);
scanf("%f", &matrizA[i][j]);
}
printf("\n");
}
for(i=0; i<l; i++)
{
for(j=0; j<c; j++)
{
printf("\n\n Informe o valor da %d%c Linha e da %d%c Coluna da 2%c Matriz B: ", i+1, 167, j+1, 167, 167);
scanf("%f", &matrizB[i][j]);
}
printf("\n");
}
printf("---------------------------- 1 - Matriz Gerada ---------------------------------\n\n");
for(i=0; i<l; i++)
{
for(j=0; j<c; j++)
{
printf("%6.f", matrizA[i][j]);
}
printf("\n\n");
}
printf("---------------------------- 2 - Matriz Gerada ---------------------------------\n\n");
for(i=0; i<l; i++)
{
for(j=0; j<c; j++)
{
printf("%6.f", matrizB[i][j]);
}
printf("\n\n");
}
//Processamento e saida em tela
for(i=0; i<l; i++)
{
matrizC[i][j]=0;
for(j=0; j<c; j++)
{
matrizC[i][j] = matrizA[i][j] * matrizB[i][j];
}
}
printf("\n\n");
printf("---------------------------- 3 - Matriz Gerada ---------------------------------\n\n");
for(i=0; i<l; i++)
{
for(j=0; j<c; j++)
{
printf("%6.f", matrizC[i][j]);
}
printf("\n\n");
}
printf("\n\n");
system("pause");
}

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

mas só q esse programa que você criou non multiplica matriz de diferentes linha e colunas...e para se mulptiplicar uma matriz o numero de colunas da primeira de ve ser igual ao numero de linhas da primeira....eu fiz um pouco,mas non consigo fazer com que a matriz multiplique da forma correta...alguémpod ajudar??

valeu ^^

abaixo o programa:

#include <stdio.h>

#include <conio.h>

main()

{

//Definição de variaveis

int i, j, l, c,l1,c1;

float matrizA[10][10],matrizB[10][10],matrizC[10][10];

//Entrada de dados

printf("\n Informe a quntidade de linhas das matriz A : ");

scanf("%d",&l);

printf("\n\n Informe a quantidade de colunas das matriz A : ");

scanf("%d",&c);

printf("\n Informe a quntidade de linhas das matriz B : ");

scanf("%d",&l1);

printf("\n\n Informe a quantidade de colunas das matriz B : ");

scanf("%d",&c1);

if(c==l1)

{

for(i=0; i<l; i++)

{

for(j=0; j<c; j++)

{

printf("\n\n Informe o valor da %d%c Linha e da %d%c Coluna da Matriz A: ", i+1, 167, j+1, 167);

scanf("%f", &matrizA[j]);

}

printf("\n");

}

for(i=0; i<l1; i++)

{

for(j=0; j<c1; j++)

{

printf("\n\n Informe o valor da %d%c Linha e da %d%c Coluna da 2%c Matriz B: ", i+1, 167, j+1, 167, 167);

scanf("%f", &matrizB[j]);

}

printf("\n");

}

printf("---------------------------- 1 - Matriz Gerada ---------------------------------\n\n");

for(i=0; i<l; i++)

{

for(j=0; j<c; j++)

{

printf("%6.f", matrizA[j]);

}

printf("\n\n");

}

printf("---------------------------- 2 - Matriz Gerada ---------------------------------\n\n");

for(i=0; i<l1; i++)

{

for(j=0; j<c1; j++)

{

printf("%6.f", matrizB[j]);

}

printf("\n\n");

}

//Processamento e saida em tela

for(i=0; i<l; i++)

{

matrizC[j]=0;

for(j=0; j<c1; j++)

{

matrizC[j] = matrizA[j] * matrizB[j];

}

}

printf("\n\n");

printf("---------------------------- 3 - Matriz Gerada ---------------------------------\n\n");

for(i=0; i<l; i++)

{

for(j=0; j<c1; j++)

{

printf("%6.f", matrizC[j]);

}

printf("\n\n");

}

printf("\n\n");

}

else

{

printf("nao ha com multiplicaras matrizes dadas");

}

getch();

}

 

Link para o comentário
Compartilhar em outros sites

mas só q esse programa que você criou non multiplica matriz de diferentes linha e colunas...e para se mulptiplicar uma matriz o numero de colunas da primeira de ve ser igual ao numero de linhas da primeira....eu fiz um pouco,mas non consigo fazer com que a matriz multiplique da forma correta...alguémpod ajudar??

Cara você tinha razão daquela forma ele apenas multiplica matrizes quadradas,

para multiplicar matrizes de tamanho diferente seguindo a regra fica assim

obs: a regra diz que o numero de elemento da coluna da primeira matriz dever ser igual ao numero de elemento da linha da segunda matriz somente assim podem ser multiplicadas


#include <stdio.h>
#include <conio.h>

main()
{

//Definição de variaveis
int i, j, l, c, l1, c1, X;

//Entrada de dados
printf("\n Informe a quntidade de linhas da matriz A : ");
scanf("%d",&l);
printf("\n Informe a quantidade de colunas da matriz A : ");
scanf("%d",&c);
printf("\n Informe a quntidade de linhas da matriz B : ");
scanf("%d",&l1);
printf("\n Informe a quantidade de colunas da matriz B : ");
scanf("%d",&c1);
float matrizA[l][c],matrizB[l1][c1],matrizC[c][l1],Aux=0;
if(c==l1)
{
for(i=0; i<l; i++)
{
for(j=0; j<c; j++)
{
printf("\n\n Informe o valor da %d%c Linha e da %d%c Coluna da Matriz A: ", i+1, 167, j+1, 167);
scanf("%f", &matrizA[i][j]);
}
printf("\n");
}
for(i=0; i<l1; i++)
{
for(j=0; j<c1; j++)
{
printf("\n\n Informe o valor da %d%c Linha e da %d%c Coluna da 2%c Matriz B: ", i+1, 167, j+1, 167, 167);
scanf("%f", &matrizB[i][j]);
}
printf("\n");
}
printf("---------------------------- 1 - Matriz Gerada ---------------------------------\n\n");
for(i=0; i<l; i++)
{
for(j=0; j<c; j++)
{
printf("%6.f", matrizA[i][j]);
}
printf("\n\n");
}
printf("---------------------------- 2 - Matriz Gerada ---------------------------------\n\n");
for(i=0; i<l1; i++)
{
for(j=0; j<c1; j++)
{
printf("%6.f", matrizB[i][j]);
}
printf("\n\n");
}
//Processamento e saida em tela
for(i=0; i<l; i++)
{
for(j=0; j<c1; j++)
{
matrizC[i][j]=0;
for(X=0; X<l1; X++)
{
Aux += matrizA[i][X] * matrizB[X][j];
}
matrizC[i][j]=Aux;
Aux=0;
}
}
printf("\n\n");
printf("---------------------------- 3 - Matriz Gerada ---------------------------------\n\n");
for(i=0; i<l; i++)
{
for(j=0; j<c1; j++)
{
printf("%6.f", matrizC[i][j]);
}
printf("\n\n");
}
printf("\n\n");
}
else
{
printf("\n\n Nao ha com multiplicar as matrizes dadas ");
}
system("pause");

}


Link para o comentário
Compartilhar em outros sites

  • 10 meses depois...
int x, y;

printf("Digite a qtde de linhas da matriz: ");

scanf("%i", &x);

printf("\n");

printf("Digite a qtde de colunas da matriz: ");

scanf("%i", &y);

int i, j, matr_A[x][y], matr_B[x][y], matr_C[x][y] ;

printf("\n");

for(i=0; i<x; i++)

{

for(j=0; j<y; j++)

{

printf("Digite o valor da posicao [%i,%i] da matriz A: ", i, j);

scanf("%i", &matr_A[j]);

}

}

printf("\n");

for(i=0; i<x; i++)

{

for(j=0; j<y; j++)

{

printf("Digite o valor da posicao [%i,%i] da matriz B: ", i, j);

scanf("%i", &matr_B[j]);

}

}

printf("\nA multiplicacao é:\n");

for(i=0; i<x; i++)

{

for(j=0; j<y; j++)

{

matr_C[j]=matr_A[j]*matr_B[j];

printf("%i\n", matr_C[j]);

}

}

printf("\n");

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...
  • 3 meses depois...
  • 7 anos depois...
  • 9 meses depois...

Estou mandando minha solução caso alguém esteja com dificuldade.

#include <stdio.h>
int main()
{
    int mat1[3][3], mat2[3][3], result[3][3], i, j;
    printf("Digite os elementos da primeira matriz, linha por linha.");
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            scanf("%d", &mat1[j]);
    printf("Digite os elementos da segunda matriz, linha por linha.");
    for(i=0;i<3;i++)
        for(j=0;j<3;j++)
            scanf("%d", &mat2[j]);
    printf("\nO resultado da multiplicacao das matrizes e:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            result[j]=(mat1[0]*mat2[0][j])+(mat1[1]*mat2[1][j])+(mat1[2]*mat2[2][j]);
            printf("%d ", result[j]);
        }
        printf("\n");
    }
} 

 

Link para o comentário
Compartilhar em outros sites

  • 4 semanas depois...

Acho melhor tentar de novo porque tá misturado fonte de algo que parece Pascal com C num samba do afrodescendente com distúrbio mental incapacitante (o samba do crioulo doido). Tem pouca coisa aí a se aproveitar e considerando que os eu "hoje" 

era sábado e já estamos na quarta-feira, talvez seja tarde demais.
Se aceita uma dica, copiar/colar respostas para exercícios de programação:

1 - CERTAMENTE não fazem você aprender,

2 - muito provavelmente o seu professor vai sacar que nào foi você quem fez

3 - Nunca vai funcionar, principalmente se copia fonte de Pascal para exercício em C

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • 5 meses depois...
Em 11/11/2008 às 09:37, Léo_0 disse:

printf("\n\n Informe o valor da %d%c Linha e da %d%c Coluna da 2%c Matriz B: ", i+1, 167, j+1, 167, 167);

O que essa linha faz exatamente? eu entendo a mensagem que o usuário recebe, mas depois que se encerra a partir do ", i+1, 167, j+1, 167, 167); eu não entendo. Porque incrementar 1? de onde vem esse 167? 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Lara Figueiredo    na linguagem c para imprimir números e strings ou caracteres precisa informar  ao programa o tipo desses dados , e para isso usa se o %d ou % i  para imprimir números inteiros e %s para imprimir strings e % . 2f para imprimir float e %c para imprimir apenas um caractere , e isso fica posicionado dentro das aspas duplas ,  e então depois da vírgula coloca se os valores referentes aos dados que se quer imprimir na tela , e no caso o i+1 se refere  a um número inteiro que provavelmente seja o valor da variável de controle do laço for desse código e o 167 é o código ASCII do caratere que representa aquele zero que fica em cima do número quando se quer escrever primeiro ou segundo , etc. . . e o j+1 também provavelmente seja o valor da variável j do outro laço for e o outro 167 é igual ao outro 167 anterior  e esse último 167 também é a mesma coisa e é para representar que é a segunda matriz B

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

17 horas atrás, devair1010 disse:

@Lara Figueiredo    na linguagem c para imprimir números e strings ou caracteres precisa informar  ao programa o tipo desses dados , e para isso usa se o %d ou % i  para imprimir números inteiros e %s para imprimir strings e % . 2f para imprimir float e %c para imprimir apenas um caractere , e isso fica posicionado dentro das aspas duplas ,  e então depois da vírgula coloca se os valores referentes aos dados que se quer imprimir na tela , e no caso o i+1 se refere  a um número inteiro que provavelmente seja o valor da variável de controle do laço for desse código e o 167 é o código ASCII do caratere que representa aquele zero que fica em cima do número quando se quer escrever primeiro ou segundo , etc. . . e o j+1 também provavelmente seja o valor da variável j do outro laço for e o outro 167 é igual ao outro 167 anterior  e esse último 167 também é a mesma coisa e é para representar que é a segunda matriz B

Muito obrigada, vou estudar mais a respeito. Gratidão

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Olá boa noite.

Preciso criar um program em c que leia de 0 a 60, depois mostre os números em pares em colunas mais ou menos assim:

1,2

3,4

5,6

depois deve se fazer a subtração desses números em ordem da direita para a esquerda como se fosse ordem decrescente;

depois precisa se imprimir em tela qual números que a o resultado foi = ao número 1.

Porém de vez em quando terei que mudar os números   mudarão de lugar e não ficaram ordenados.

Não sei se uso Fibonaci, combinação ou algo do tipo pois trata se de um programa de jogo de loteria e entre 60 números o jogador coloca ra  os números que ele quiser ao acaso  e terá que colocar esses números aleatório no programa no caso o programa terá que ler os números entre 60 os que o usuário quiser colocar no seu jogo.

Realmente alguém pode me ajudar? 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...