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
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
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
[quote=alinecs]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[/quote]
Poste o que você já fez.
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[/quote]
Ah, perfeito, fui cabaço mesmo, li 13 linhas para uma e 22 linhas para outra. xD
//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!
[quote=alinecs]//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!
[/quote]
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.
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!
[quote=alinecs]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!
[/quote]
Compilei o seu código aqui,e foi normalmente, olhe só:
[quote][b]resultado da matriz Resultante 6 6 6
6 6 6
4 4 4
[/b][/quote]
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 ?
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??
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:
[code]
//Fazer um programa que leia uma matriz M1 3x2e uma matriz M2 2x3
// e calcule a multiplicação de M1 por M2.
#include <iostream>
using namespace std;
int main ()
{
//primeira matriz 3x2
int mt1 [3][2];
cout << "Digite a matriz 1:" << endl;
for(int linha=0; linha < 3; linha++)
for(int coluna=0; coluna < 2; coluna++)
cin >> mt1[linha][coluna];
for (int linha=0; linha < 3; linha++)
{
for(int coluna=0; coluna < 2; coluna++)
cout << mt1[linha][coluna] << " ";
cout << endl;
}
cout << endl;
int mt2 [2][3];
//segunda matriz 2x3
cout << "Digite a matriz 2:" << endl;
for(int linha=0; linha < 2; linha++)
for(int coluna=0; coluna < 3; coluna++)
cin >> mt2[linha][coluna];
for (int linha=0; linha < 2; linha++)
{
for(int coluna=0; coluna < 3; coluna++)
cout << mt2[linha][coluna] << " ";
cout << endl;
}
cout << endl;
//multiplicaçao da primeira com a segunda matriz= matriz quadrada [3][3]
cout << "resultado da matriz Resultante" << endl;
int mtRES[3][3];
/*Zera a matriz resultado */
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
mtRES[i][j] = 0;
/*agora a multiplicação das duas*/
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
for(int k = 0; k < 2; k++)
mtRES[i][j] += mt1[i][k]*mt2[k][j];
for(int linha=0; linha < 3; linha++)
{
for(int coluna=0;coluna<3;coluna++)
cout << mtRES[linha][coluna] << " ";
cout << endl;
}
return 0;
} [/code]
Se usar um pouco mais de C++, dá pra simplificar o código e evitar muita duplicação:
[code]//Fazer um programa que leia uma matriz M1 3x2e uma matriz M2 2x3
// e calcule a multiplicação de M1 por M2.
#include <iostream>
using namespace std;
template<typename T>
void lerMatriz(T matriz, int linhas, int colunas)
{
for(int linha=0; linha < linhas; linha++)
for(int coluna=0; coluna < colunas; coluna++)
{
cout << "Entre com o elemento m[" << linha << "][" << coluna << "]: ";
cin >> matriz[linha][coluna];
}
cout << endl;
}
template<typename T>
void imprimirMatriz(T matriz, int linhas, int colunas)
{
for (int linha = 0; linha < linhas; linha++)
{
for (int coluna = 0; coluna < colunas; coluna++)
cout << matriz[linha][coluna] << " ";
cout << endl;
}
cout << endl;
}
int main ()
{
//primeira matriz 3x2
int mt1[3][2];
cout << "Digite a matriz 1:" << endl;
lerMatriz(mt1, 3, 2);
imprimirMatriz(mt1, 3, 2);
//segunda matriz 2x3
int mt2[2][3];
cout << "Digite a matriz 2:" << endl;
lerMatriz(mt2, 2, 3);
imprimirMatriz(mt2, 2, 3);
//multiplicaçao da primeira com a segunda matriz= matriz quadrada [3][3]
cout << "resultado da matriz Resultante" << endl;
int mtRES[3][3];
/*Zera a matriz resultado */
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
mtRES[i][j] = 0;
/*agora a multiplicação das duas*/
for(int i = 0; i < 3; i++)
for(int j = 0; j < 3; j++)
for(int k = 0; k < 2; k++)
mtRES[i][j] += mt1[i][k]*mt2[k][j];
imprimirMatriz(mtRES, 3, 3);
return 0;
} [/code]
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?
"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!
[quote=alinecs]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![/quote]
Converse com seu professor, e comente sobre o Code::Blocks.
Como o compilador é equivalente ao dev, ele não terá que fazer nenhum tipo de adaptação nos programas.
O problema do dev é que ele tem o péssimo hábito de engolir uma ou outra mensagem de erro de vez enquando. E aí, temos alunos frustrados, procurando por horas por um bug que não está corretamente descrito.
Infelizmente, não. Não tenho aqui um compilador C99 para indicar a sintaxe C99 (que não foi incorporada pelos compiladores C++) para esse tipo de coisas. Isso é porque o C e o C++, como o Java, na verdade não têm um bom conceito de matrizes bidimensionais. Mal e mal o C e o C++ conseguem usar matrizes bidimensionais de tamanhos fixos (e usar uma multiplicação simples para achar os índices dentro de um bloco de memória). O Java, nesse ponto, é pior ainda, porque nem consegue fazer esse tipo de acesso. Se ele tivesse uma sintaxe como a do C# (onde cada índice é separado por vírgulas, em vez de usar essa gambiarra dos infernos de [][][]) o Java poderia ser até uma alternativa razoável para cálculo numérico.