package matriz;
import java.util.Scanner;
public class MultiplicacaoDeMatrizes {
private static Scanner s;
/**
* @param args
*/
public static void main(String[] args) {
//variáveis usadas para ler as dimensões que a matriz terá
int n, m;
s = new Scanner(System.in);
System.out.println("Informe o número de linhas da primeira matriz");
n = s.nextInt();
System.out.println("Informe o número de colunas da primeira matriz");
m = s.nextInt();
//declaração da primeira matriz
int[][] m1 = new int[n][m];
System.out.println("Informe o número de linhas da segunda matriz");
n = s.nextInt();
System.out.println("Informe o número de colunas da segunda matriz");
m = s.nextInt();
//declaração da segunda matriz
int[][] m2 = new int[n][m];
/*
* A multiplicação de matrizes só é possível se o número de colunas dem1 for igual ao número de linhas de m2
*
* Exemplo de matrizes que são multiplicaveis entre si:
*
* m1 = 4x1 m2 = 1x4
* m1 = 2x2 m2 = 2x10
*
* Exemplo de matrizes que NÃO são multiplicáveis entre si:
*
* m1 = 3x3 m2 = 4x1
* m1 = 2x8 m2 = 2x8
*
* Então antes de multiplicarmos as matrizes propriamente ditas, devemos conferir se o número de colunas de m1 é igual ao número
* de linhas de m2.
* */
if (m1[0].length != m2.length) { //se número de colunas de m1 for diferente de número de linhas de m2 então não pode multiplicar
System.out.println("As matrizes não são multiplicáveis entre si!!!");
System.exit(1); //aborta o programa retornando um erro
} else { //caso contrário, se forem iguais ai podemos multiplicá-las
//realizar o preenchimento das matrizes
System.out.println("Preenchendo a primeira matriz!");
for(int i = 0; i < m1.length; i++) {
for(int j = 0; j < m1[0].length; j++) {
System.out.println("Informe um valor: ");
m1[i][j] = s.nextInt();
}
}
System.out.println("Preenchendo a segunda matriz!");
for(int i = 0; i < m2.length; i++) {
for(int j = 0; j < m2[0].length; j++) {
System.out.println("Informe um valor: ");
m2[i][j] = s.nextInt();
}
}
//devemos declarar uma terceira matriz que será o resultado da multiplicação entre as matrizes (produto das matrizes m1 x m2)
int[][] m3 = new int[m1.length][m2[0].length];
//multiplicando as matrizes
/*
* Os 2 primeiros for's representados por i e j respectivamente serão responsáveis por controlar o índice da matriz m3.
* Já o terceiro for 'k', é responsável por perconrrer todos os elementos da horizontal e vertical das duas matrizes.
*
* */
for (int i = 0; i < m1.length; i++) {
for (int j = 0; j < m1.length; j++) {
for (int k = 0; k < m2.length; k++) {
m3[i][j] += (m1[i][k] * m2[k][j]);
}
}
}
//imprimindo a matriz gerada
for(int i = 0; i < m3.length; i++) {
for(int j = 0; j < m3.length; j++) {
System.out.print(m3[i][j] + "\t");
}
System.out.println();
}
}
}
}
Exercício 2.(Desafio) Crie um programa Java que seja capaz de ler informações de N funcionários da Google, o programa deve armazenar: Nome (String), Apelido (String), Idade (int), código (int). Já sabemos que matrizes em Java são homogêneas portanto só conseguem guardar um tipo único de dados. O programa deve exibir os N funcionários em ordem crescente por idade.
package matriz;
import java.util.Scanner;
public class OrdenacaoDeMatrizes {
private static Scanner s;
/**
* @param args
*/
public static void main(String[] args) {
s = new Scanner(System.in);
String[][] m1 = new String[3][2];
int[][] m2 = new int[3][2];
for(int i = 0; i < 3; i++) {
System.out.println("Informe o nome do " + (i+1) + "º funcionário: ");
m1[i][0] = s.next();
System.out.println("Informe o apelido do " + (i+1) + "º funcionário: ");
m1[i][1] = s.next();
System.out.println("Informe o código do " + (i+1) + "º funcionário: ");
m2[i][0] = s.nextInt();
System.out.println("Informe a idade do " + (i+1) + "º funcionário: ");
m2[i][1] = s.nextInt();
}
/*
* Utilizando o método de ordenação Bubble Sort
* */
for(int i = 0; i < 3; i++) {
for(int j = i; j < 3; j++) {
if(m2[i][1] > m2[j][1]) { //Se o próximo elemento for maior então devemos trocar de lugar com seu antecessor
String nome, apelido;
int codigo, idade;
//armazenando o maior (guarda os valores do antecessor)
nome = m1[i][0];
apelido = m1[i][1];
codigo = m2[i][0];
idade = m2[i][1];
//maior recebe o menor (antecessor recebe próximo)
m1[i][0] = m1[j][0];
m1[i][1] = m1[j][1];
m2[i][0] = m2[j][0];
m2[i][1] = m2[j][1];
//menor recebe maior (próximo recebe seu valores guardados)
m1[j][0] = nome;
m1[j][1] = apelido;
m2[j][0] = codigo;
m2[j][1] = idade;
}
}
}
//exibindo os dados ordenados em ordem crescente por idade
for(int i = 0; i < 3; i++) {
System.out.println("Nome: " + m1[i][0]);
System.out.println("Apelido: " + m1[i][1]);
System.out.println("Código: " + m2[i][0]);
System.out.println("Idade: " + m2[i][1]);
System.out.println();
}
}
}
Nossa essa explicação me ajudou muito a compreender(me salvou de um mini infarto) Obrigada.
ResponderExcluir