multiplicaçao de matrizes em C++  XML
Índice dos Fóruns » Outras Linguagens
Autor Mensagem
alinecs
What is classpath?

Membro desde: 31/10/2010 01:04:40
Mensagens: 5
Offline

Oi!
gostaria de saber como faço a multiplicaçao das matrizes desse problema, e como faço pra imprimi-la usando o c++!

"Fazer um programa que leia uma matriz M13x2e uma matriz M22x3,e calcule a multiplicação de M1 por M2."

obrigada!

xD
andeb
Thread.start()

Membro desde: 17/05/2009 21:01:04
Mensagens: 47
Localização: Blumenau
Offline

Não dá de multiplicar essa matriz. O número de colunas da M1 precisa ser o mesmo que o número de linhas da M2.

"it's not what you know, it's when you know it"
davidbuzatto
Moderador
[Avatar]

Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline

andeb wrote:Não dá de multiplicar essa matriz. O número de colunas da M1 precisa ser o mesmo que o número de linhas da M2.

Hein? Mas não é assim? M1 tem 2 linhas, três colunas. M2 tem 3 linhas, 2 colunas.

Olha a definição de multiplicação entre matrizes:


Analisando a definição é possível facilmente escrever o algoritimo.

[]´s

Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."

http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm
[WWW]
Andre Rosa
GUJ Master
[Avatar]

Membro desde: 22/01/2010 07:10:22
Mensagens: 1297
Offline

alinecs wrote:Oi!
gostaria de saber como faço a multiplicaçao das matrizes desse problema, e como faço pra imprimi-la usando o c++!

"Fazer um programa que leia uma matriz M13x2e uma matriz M22x3,e calcule a multiplicação de M1 por M2."

obrigada!

xD


Poste o que você já fez.

Um programador pobre.
[ICQ]
andeb
Thread.start()

Membro desde: 17/05/2009 21:01:04
Mensagens: 47
Localização: Blumenau
Offline

davidbuzatto wrote:
andeb wrote:Não dá de multiplicar essa matriz. O número de colunas da M1 precisa ser o mesmo que o número de linhas da M2.

Hein? Mas não é assim? M1 tem 2 linhas, três colunas. M2 tem 3 linhas, 2 colunas.

Olha a definição de multiplicação entre matrizes:


Analisando a definição é possível facilmente escrever o algoritimo.

[]´s


Ah, perfeito, fui cabaço mesmo, li 13 linhas para uma e 22 linhas para outra. xD

"it's not what you know, it's when you know it"
alinecs
What is classpath?

Membro desde: 31/10/2010 01:04:40
Mensagens: 5
Offline

//Fazer um programa que leia uma matriz M13x2e uma matriz M22x3
// e calcule a multiplicação de M1 por M2.

#include <stdio.h>
#include <stdlib.h>

int main ()
{
int mt1 [3][2], mt2 [2][3];
int linha, coluna;
int mtRES[3][3];

//primeira matriz 3x2

printf ("Digite a matriz 1:\n");
for(linha=0; linha<3; linha++)
{
for(coluna=0; coluna<2; coluna++)
scanf("%10d", &mt1[linha][coluna]);
}
for (linha=0; linha<3; linha++)
{
for(coluna=0; coluna<2; coluna++)
printf ("%5d", mt1[linha] [coluna]);
printf("\n\n");
}

//segunda matriz 2x3

printf ("Digite a matriz 2:\n");
for(linha=0; linha<2; linha++)
{
for(coluna=0; coluna<3; coluna++)
scanf("%10d", &mt2[linha][coluna]);
}
for (linha=0; linha<2; linha++)
{
for(coluna=0; coluna<3; coluna++)
printf ("%5d", mt2[linha] [coluna]);
printf("\n\n");
}

//multiplicaçao da primeira com a segunda matriz= matriz quadrada [3][3]

printf("resultado da matriz Resultante");/*agora a multiplicação das duas*/
for (linha=0;linha<3;linha++)
{
for(coluna=0;coluna<3;coluna++)
mtRES[linha][coluna]=(mt1[linha][coluna]*mt2[linha][coluna]);/*armazenando em uma terceira*/
}
for(linha=0;linha<3;linha++)
{
for(coluna=0;coluna<3;coluna++)
printf("%5d",mtRES[linha][coluna]);
printf ("\n\n");
}
system ("pause");
return 0;
}

está lendo as duas matrizes bem certinho e tal!
mas na parte da multiplicaçao tentei uma coisa mas nao deu mto certo!
Andre Rosa
GUJ Master
[Avatar]

Membro desde: 22/01/2010 07:10:22
Mensagens: 1297
Offline

alinecs wrote://Fazer um programa que leia uma matriz M13x2e uma matriz M22x3
// e calcule a multiplicação de M1 por M2.

#include <stdio.h>
#include <stdlib.h>

int main ()
{
int mt1 [3][2], mt2 [2][3];
int linha, coluna;
int mtRES[3][3];

//primeira matriz 3x2

printf ("Digite a matriz 1:\n");
for(linha=0; linha<3; linha++)
{
for(coluna=0; coluna<2; coluna++)
scanf("%10d", &mt1[linha][coluna]);
}
for (linha=0; linha<3; linha++)
{
for(coluna=0; coluna<2; coluna++)
printf ("%5d", mt1[linha] [coluna]);
printf("\n\n");
}

//segunda matriz 2x3

printf ("Digite a matriz 2:\n");
for(linha=0; linha<2; linha++)
{
for(coluna=0; coluna<3; coluna++)
scanf("%10d", &mt2[linha][coluna]);
}
for (linha=0; linha<2; linha++)
{
for(coluna=0; coluna<3; coluna++)
printf ("%5d", mt2[linha] [coluna]);
printf("\n\n");
}

//multiplicaçao da primeira com a segunda matriz= matriz quadrada [3][3]

printf("resultado da matriz Resultante");/*agora a multiplicação das duas*/
for (linha=0;linha<3;linha++)
{
for(coluna=0;coluna<3;coluna++)
mtRES[linha][coluna]=(mt1[linha][coluna]*mt2[linha][coluna]);/*armazenando em uma terceira*/
}
for(linha=0;linha<3;linha++)
{
for(coluna=0;coluna<3;coluna++)
printf("%5d",mtRES[linha][coluna]);
printf ("\n\n");
}
system ("pause");
return 0;
}

está lendo as duas matrizes bem certinho e tal!
mas na parte da multiplicaçao tentei uma coisa mas nao deu mto certo!


Defina "coisa" e "não deu muito certo". O código esta compilando corretamente ? Se não, qual é o erro informado pelo compilador ? Qual é a saída que você espera que o programa dê ? Dê informações detalhadas como por exemplo:

Eu entro com X e o programa me retorna Y, sendo que deveria retornar J.

This message was edited 1 time. Last update was at 31/10/2010 13:35:17


Um programador pobre.
[ICQ]
alinecs
What is classpath?

Membro desde: 31/10/2010 01:04:40
Mensagens: 5
Offline

a matriz A e B, quando digitadas aparecem corretamente!

o programa esta compilando, porém o resultado, ao inves de ser uma matriz 3x3 está aparecendo essa matriz 3x3 e
mais uns numeros estranhos q nao tem nada a ver

por exemplo, digito as matrizes:
A- 2 2
2 2
2 2

B- 3 3 3
3 3 3

o resultado é uma matriz assim
6 6 6
6 6 6


4587120-31-690246 70


esses ultimos numeros q nao sei o q significam, e nem onde está meu erro!

Andre Rosa
GUJ Master
[Avatar]

Membro desde: 22/01/2010 07:10:22
Mensagens: 1297
Offline

alinecs wrote:a matriz A e B, quando digitadas aparecem corretamente!

o programa esta compilando, porém o resultado, ao inves de ser uma matriz 3x3 está aparecendo essa matriz 3x3 e
mais uns numeros estranhos q nao tem nada a ver

por exemplo, digito as matrizes:
A- 2 2
2 2
2 2

B- 3 3 3
3 3 3

o resultado é uma matriz assim
6 6 6
6 6 6


4587120-31-690246 70


esses ultimos numeros q nao sei o q significam, e nem onde está meu erro!



Compilei o seu código aqui,e foi normalmente, olhe só:

resultado da matriz Resultante 6 6 6

6 6 6

4 4 4


Estou usando o Debian Linux, compilei o código com o gcc versão 4.3.2. Qual plataforma, compilador e IDE (caso esteja tenha) você esta usando ?

This message was edited 1 time. Last update was at 31/10/2010 13:51:20


Um programador pobre.
[ICQ]
alinecs
What is classpath?

Membro desde: 31/10/2010 01:04:40
Mensagens: 5
Offline

eu uso o DEV C++ 4.9.9.2

deu certo msm???
que legal!

qual problema pode estar acontecendo entao q o resultado nao aparecer direito no meu pc??
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Oi.

Primeiro de tudo, o seu programa está em C, não em C++.

Segundo, ao postar códigos, por favor, use a tag code, como descrito aqui:
http://www.guj.com.br/posts/list/50115.java

Terceiro, o devcpp não é uma IDE adequada para o desenvolvimento hoje em dia. Além de ser cheia de bugs, seu compilador é bastante antigo. Recomendo que você substitua pelo Code::Blocks: http://www.codeblocks.org ou o Visual C++ Express: http://www.microsoft.com/express/

Como compilador o Code::Blocks também usa o MinGW32, mas tem o suporte correto a depuração e mostra as mensagens de erro por inteiro.
Já o Visual usa um compilador próprio, e é hoje a IDE C++ mais usada no mercado.


Quarto, sua fórmula de multiplicação de matrizes está completamente errada. A multiplicação correta segue o algoritmo:


E, finalmente, você esqueceu de zerar a matriz mtRES.

Em C++ e corrigido, seu programa ficaria assim:


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Se usar um pouco mais de C++, dá pra simplificar o código e evitar muita duplicação:

This message was edited 1 time. Last update was at 01/11/2010 08:31:24


@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

ViniGodoy wrote:
E, finalmente, você esqueceu de zerar a matriz mtRES.

Pois é. Cada vez que tenho de trocar de linguagem (de Java para C++ ou vice-versa) eu me ferro com essa diferença entre as linguagens. Em Java as matrizes já vêm limpinhas (e a partir de alguma build do JDK o Arrays.fill terá exatamente o mesmo desempenho de um memset). Em C++, as variáveis de instância você tem de limpar antes, o que é sempre um porre.
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

entanglement wrote:Pois é. Cada vez que tenho de trocar de linguagem (de Java para C++ ou vice-versa) eu me ferro com essa diferença entre as linguagens. Em Java as matrizes já vêm limpinhas (e a partir de alguma build do JDK o Arrays.fill terá exatamente o mesmo desempenho de um memset). Em C++, as variáveis de instância você tem de limpar antes, o que é sempre um porre.


Me confirme uma coisa.
No C++ não tem mesmo um jeito standard de passar matrizes bidimensionais de tamanho arbitrário por parâmetro, tem?

Isso aqui:


Até funciona com um reinterpret_cast (ouch), mas tem o funcionamento realmente garantido?


No segundo código, acabei recorrendo à templates (que na prática criará um método diferente para cada matriz).


A única alternativa portável seria recorrer mesmo ao boost::matrix?

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
alinecs
What is classpath?

Membro desde: 31/10/2010 01:04:40
Mensagens: 5
Offline

"Terceiro, o devcpp não é uma IDE adequada para o desenvolvimento hoje em dia. Além de ser cheia de bugs, seu compilador é bastante antigo. Recomendo que você substitua pelo Code::Blocks: http://www.codeblocks.org ou o Visual C++ Express: http://www.microsoft.com/express/

Como compilador o Code::Blocks também usa o MinGW32, mas tem o suporte correto a depuração e mostra as mensagens de erro por inteiro.
Já o Visual usa um compilador próprio, e é hoje a IDE C++ mais usada no mercado."


eu uso o dev c, porque apenas faço uma cadeira da faculdade de introduçao a programaçao, nem é para trabalho,
e o professor exige q seja com esse programaa!

obrigada!
 
Índice dos Fóruns » Outras Linguagens
Ir para:   
Powered by JForum 2.1.8 © JForum Team