Ir ao conteúdo
  • Cadastre-se
_luks_

Multiplicação de Matrizes em C

Recommended Posts

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera eu conseguir fazer o exercicio, se alguem se quiser me da um toque !!!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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");

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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..

Compartilhar este post


Link para o post
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");
}

Compartilhar este post


Link para o post
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??

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();

}

 

Compartilhar este post


Link para o post
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");

}


Compartilhar este post


Link para o post
Compartilhar em outros sites

é...eu non entendi o q era esse aux....e que tá "aux+" na matriz q é multiplicada...o q é isso??

é tipo aux=aux+1??

valeu desde já??

Compartilhar este post


Link para o post
Compartilhar em outros sites
é...eu non entendi o q era esse aux....e que tá "aux+" na matriz q é multiplicada...o q é isso??

é tipo aux=aux+1??

valeu desde já??

Isso mesmo ela acumula os valores da matriz A e da matriz B

Aux=0

Aux = Aux + 1 + 6 + 15 = 22

Compartilhar este post


Link para o post
Compartilhar em outros sites
e o que esse system("pause");??

Tem a mesma função do getch de manter o programa aberto so que com o system("pause") ao final do programa ele informa "Presione qualquer tecla para continuar" com o getch você teria que ter um printf para o mesmo efeito

Compartilhar este post


Link para o post
Compartilhar em outros sites
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");

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

pessoal estou aprendendo C ainda num cheguei em matrizes apenas vi vetores

então o que significa isso?

m[10] // vetor "m" com 10 posições"//

m[10][10] // e aqui o que significa? //

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom m[10] significa que sua matriz tem 10 numeros mas ele não deu quantas linhas.

ja na de baixo significa que sua matriz tem 10 linhas por 10 colunas. sempre o numero que aparece primeiro se refere as linhas e o segundo as colunas.

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

Olá, muito bom esse programa do Adrianled. É perfeito. Eu estava procurando exatamente isso já faz tempo. A persistência é o caminho do êxito mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

por que nessa parte "

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 Matriz A: ", i+1, 167, j+1, 167);

usou o 167?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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");
    }
} 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×