Exemplo de Matriz com Multiplicação)

9 respostas
E

Olá todos.

Gostaria compartilhar um exemplo que fiz (com ajuda) de uma matriz.
Agora eu gostaria de implementar a multiplicação, mas não tenho a mínima idéia de como fazer.

Estou perguntando aqui porque já perguntei a 2 professores e nessa parte os mesmos não conseguiram resolver ou não explicararam com clareza. (Claro, eles olharam rapidamente, creio que por isso que não souberam me informar).

Agradeço

import java.util.Scanner;

public class matriz {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		/**
		 * author: Eduardo Alves
		 * 
		 * @param args
		 */

		int quantLinhasA, quantColunasA, quantLinhasB, quantColunasB;

		Scanner entrada = new Scanner(System.in);
		
		/*Define o tamanho da matriz, de acordo com o que o usuário digitar*/
		System.out.println("Matriz A:");
		System.out.println("Digite a Quantidade de linhas ");
		quantLinhasA = entrada.nextInt();

		System.out.println("Digite a Quantidade de Colunas: ");
		quantColunasA = entrada.nextInt();

		System.out.println("Matriz B:");
		System.out.println("Digite a Quantidade de linhas ");
		quantLinhasB = entrada.nextInt();

		System.out.println("Digite a Quantidade de Colunas: ");
		quantColunasB = entrada.nextInt();
		
		/*Define o array de acordo com o que foi digitado (ex: Matriz 2x3)*/
		/*"i"  corresponde ao valor da linha e "j" corresponde a coluna, "A" é Matriz*/
		int a[][] = new int[quantLinhasA][quantColunasA];
		int iA, jA;	 

		int b[][] = new int[quantLinhasB][quantColunasB];
		int iB, jB;
   
                /*Desenha a matriz e recebe os valores*/
		System.out.println("Matriz A*");
		for (iA = 0; iA < quantLinhasA; iA++) {
			for (jA = 0; jA < quantColunasA; jA++) {
				System.out.println("Digite a linha: " + iA + " Digite a Coluna: " + jA);
				a[iA][jA] = entrada.nextInt();

			}

		}

		for (iA = 0; iA < quantLinhasA; iA++) {
			for (jA = 0; jA < quantColunasA; jA++) {
				
				/*Imprime 'bonitinho'(Formatado)*/
				System.out.printf("%3d   ", a[iA][jA]);
			}

			System.out.println();

		}
                  
                 /*Mesma coisa, só que aqui é a Matriz B*/
		System.out.println("Matriz B*");
		for (iB = 0; iB < quantColunasB; iB++) {
			for (jB = 0; jB < quantColunasB; jB++) {

				System.out.println("Digite a Linha: " + iB+ " Digite a Coluna: " + jB);
				b[iB][jB] = entrada.nextInt();

			}
		}

		for (iB = 0; iB < quantLinhasB; iB++) {
			for (jB = 0; jB < quantColunasB; jB++) {

				System.out.printf("%3d    ", b[iB][jB]);
			}
		
			System.out.println();
		}
		
		/*Condição necessária para Multiplicar a Matriz*/
		if (quantColunasA == quantLinhasB) {
                 /*Aqui eu não sei o que fazer
                   eu poderia simplesmente  fazer a[0][0]*b[0][0] por exemplo, mas não dá pra definir isso no código, visto que  a matriz pode ter tamanhos diferentes*/

		}


	}

}

9 Respostas

Allexb10

Ola edudx,

Da uma olhada nestes exemplos talvez te ajude.

http://jgabriellima.wordpress.com/2009/09/04/matrizes-com-java-trasposta-inversa-multiplicacao-sem-complicacao

luxu

mas se as matrizes terão mesmo tamanho esse ex. a[0][0]*b[0][0] serve não?

E

luxu, as matrizes não terão mesmo tamanho.
Porque eu quero digitar por exemplo Matriz A: 2x3 Matriz B 3x2
A Condição para a multiplicação é que o número de colunas da matriz A seja igual ao número de linhas da matriz B.

Allexb10, olhei lá, mas já tinha visto algo semelhante, ainda não é o que quero pois lá já tem definido o tamanho e valores das matrizes, mas eu acho complicado o cálculo (neste caso o produto) quando é para inserir esses valores manualmente.

Obrigado pelas respostas.

luxu

exemplifique o q ker…tá meio confuso…

E

Quando pedir a matriz A, digite por exemplo 2 x 3 (2 linhas, 3 colunas)

Quando pedir a matriz B, digite por exemplo 3 x 2 (3 linhas, 2 colunas)

O que eu quero ?
O Produto da Matriz A pela Matriz B.

Exemplo:

Entende que não é só multiplicar os índices (a[0][0]*b[0][0] a[0][1]*b[1][0] …) ?
Porque essa multiplicação vai depender do tamanho da matriz.

É mais ou menos por ai.

luxu

kra pq vc num programa primeiro esse exemplo e dps vai alterando…

E

Sim, já fiz assim.

Agora estava tentando fazer dessa outra forma.
Mostrei ainda agora pra um professor ele disse “É, vou analisar isso porque é meio complicado” rsrs.

angeliski
for(int i=0;i<quantLinhasA;i++)
		{
			for(int j=0;i<quantColunasb){
				b[i][j]*b[j][i];
			}
		}

Você vai fazer algo desse tipo, de modo que o for interno percorra uma mesma linha multiplicando uma coluna, logico que você precisa de uma “terceira” matriz, onde guardar os valores. mas o PRINCIPIO é esse. tente entender melhor como fazer o laço, a solução vai ficar mais clara depois disso.

Abraço

E

Após muita briga, consegui fazer a multiplicação, o problema era porque eu não estava criando uma variável para percorrer a matriz.

Implemente o Swing, agora a pergunta, como faço para exibir o resultado final em uma janelinha ? JTextArea ?

import java.util.Scanner;

import javax.swing.JOptionPane;

public class MatrizFinal {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		Scanner entrada = new Scanner(System.in);

		int quantLinhasA, quantColunasA, quantLinhasB, quantColunasB, linhaA, colunaA, linhaB, colunaB, aux = 0;

		quantLinhasA = Integer.parseInt(JOptionPane("[Matriz A] Digite a quantidade de Linhas:"));
		quantColunasA = Integer.parseInt(JOptionPane("[Matriz A] Digite a quantidade de Colunas:"));

		quantLinhasB = Integer.parseInt(JOptionPane("[Matriz B] Digite a quantidade de Linhas:"));
		quantColunasB = Integer.parseInt(JOptionPane("[Matriz B] Digite a quantidade de Colunas:"));

		int matrizA[][] = new int[quantLinhasA][quantColunasA];
		int matrizB[][] = new int[quantLinhasB][quantColunasB];
		int resultante[][] = new int[quantLinhasA][quantColunasB];

		for (linhaA = 0; linhaA < quantLinhasA; linhaA++) {
			for (colunaA = 0; colunaA < quantColunasA; colunaA++) {
				matrizA[linhaA][colunaA] = Integer.parseInt(JOptionPane("[Matriz A] Informe o valor da  "+ linhaA + " coluna " + colunaA + " :"));
			}
		}

		for (linhaB = 0; linhaB < quantLinhasB; linhaB++) {
			for (colunaB = 0; colunaB < quantColunasB; colunaB++) {
				matrizB[linhaB][colunaB] = Integer.parseInt(JOptionPane("[Matriz B] Informe o valor da  "+ linhaB + " coluna " + colunaB + " :"));

				for (linhaA = 0; linhaA < quantLinhasA; linhaA++) {
					for (colunaA = 0; colunaA < quantColunasB; colunaA++) {
						for (int k = 0; k < quantLinhasB; k++) {
							aux = aux + matrizA[linhaA][k]* matrizB[k][colunaA];
						}

						resultante[linhaA][colunaA] = aux;
						aux = 0;
					}
				}
			}
		}

		System.out.println("Resultante:-");

		for (linhaA = 0; linhaA < quantLinhasA; linhaA++) {
			for (colunaA = 0; colunaA < quantColunasB; colunaA++)
				System.out.print(resultante[linhaA][colunaA] + "\t");

			System.out.print("\n");
		}
	}
}

Obs: ainda tá faltando alguns critérios, mas o que eu queria já consegui, que é multiplicar.

Criado 20 de abril de 2012
Ultima resposta 26 de abr. de 2012
Respostas 9
Participantes 4