Exercicios sobre Matriz

Exemplo:

public class ExemploMatriz {
    public static void main(String[] args) {
        // declara uma matriz com 10 linhas e 10 colunas
        int[][] m = new int[10][10];
 
        System.out.println("Sorteando números...");
        // preenche os 100 elementos da matriz com números de 1 a 9
        for(int l = 0; l < 10; l++) {
            for(int c = 0; c < 10; c++) {
                // sorteia um número de 1 a 9 e põe na linha l e na coluna c da matriz
                m[l][c] = (int)(Math.random()*9)+1; 
            }
        }
        System.out.println("Matriz preenchida!");
        // exibe o conteúdo da matriz de várias formas
        System.out.println("Conteúdo de cada posição da matriz:");
        for(int l = 0; l < 10; l++) {
            for(int c = 0; c < 10; c++) {
                System.out.println("m["+l+"]["+c+"] = "+m[l][c]);
            }
        }
        System.out.println("Conteúdo da matriz completa:");
        for(int l = 0; l < 10; l++) {
            for(int c = 0; c < 10; c++) {
                System.out.print(m[l][c]+" ");
            }
            System.out.println();
        }
        System.out.print("Soma dos elementos da 5ª coluna: ");
        int somaColuna5 = 0;
        for(int l = 0; l < 10; l++) {
            somaColuna5 = somaColuna5 + m[l][4];
        }
        System.out.println(somaColuna5);
    }
}

Exercícios: Para cada um dos itens escreva um programa em Java para solucionar o problema.

1. A partir do exemplo fornecido, complete o código para exibir:
a. A soma dos elementos da 10ª coluna.
b. A soma dos elementos da primeira coluna.
c. A soma dos elementos da primeira linha.
d. A soma dos elementos da 5ª linha.
e. A soma de todos os elementos da matriz.
f. A soma dos elementos das 5 primeiras linhas.
g. A soma dos elementos das 3 primeiras colunas.
h. A soma dos elementos da diagonal principal.
i. A soma dos elementos do triângulo superior da diagonal principal.
j. A soma dos elementos do triângulo inferior da diagonal principal.
k. A soma dos elementos da diagonal secundária
l. A soma dos elementos do triângulo superior da diagonal secundária.
m. A soma dos elementos do triângulo inferior da diagonal secundária.

2. Refaça o exercício anterior para que seja exibido, além da soma solicitada, todos os elementos usados na soma.

3. Preencha uma matriz de 10 linhas por 15 colunas com números aleatórios de 1000 a 2000. Em seguida exiba todo o seu conteúdo.

package exerMatrizes;
public class Principal {
    public static void main(String[] args) {
        // Declaração da matriz.
        int m [][] = new int [10][15];
        // preenchemento da matriz com numeros de 1000 a 2000.(Na verdade só até 1999)
        for (int l = 0; l < 10; l++){
            for (int c = 0; c < 15; c++){
            m[l][c] = (int) (Math.random() * 1000) + 1000;
 
          }
      }
        //Exibição dos numeros contidos na matriz
        for (int l = 0; l < 10; l++){
            for (int c = 0; c < 10; c++){
                System.out.print(m[l][c]+" ");
 
            }
            System.out.println();
        }
    }
}
// Dorly Junior.

4. Preencha uma matriz com números aleatórios (inteiros). Para isto solicite ao usuário quantas linhas e colunas a matriz possui, e a faixa de números que devem ser sorteados.
Exiba todo o conteúdo da matriz de forma organizada, por exemplo, uma matriz de 3 linhas e 6 colunas com números sorteados entre 1000 e 3000, seria exibida desta forma:
1003 1569 1789 1110 2000 1212
1103 1662 1989 1200 2406 1819
1045 1749 1980 1310 2507 1815
package exerMatrizes04;
import java.util.Scanner;
public class Principal {
    public static void main(String[] args) {
        // Declaração das variáveis.
        int quantLinhas, quantColunas;
        int faixaN1, faixaN2;
 
        // Entrada de dados: linhas e colunas.
        System.out.println("Entre com a quantidade de linhas e de colunas, respectivamente.");
        quantLinhas  = new Scanner(System.in).nextInt();
        quantColunas = new Scanner(System.in).nextInt();
 
        //Entrada da faixa de numeros a serem sortiados.
        System.out.println("Entre com a faixa de numeros a serem sortiados");
        faixaN1 = new Scanner(System.in).nextInt();
        System.out.println("A");
        faixaN2 = new Scanner(System.in).nextInt();
        faixaN2 = (faixaN2 - faixaN1) +1;
 
        // Declaração da Matriz m.
        int m[][] = new int [quantLinhas][quantColunas];
 
        // Exibição dos resultados.
        for (int l = 0; l < quantLinhas; l++){
            for (int c = 0; c < quantColunas; c++){
                m[l][c] = (int) (Math.random() * faixaN2) + faixaN1;
                System.out.print(m[l][c]+" ");
            }
        System.out.println();
        }
    }
 
}
// Dorly Junior
// Obs.: faixaN2 = (faixaN2 - faixaN1)+1; 
// Obs2.: VlW ae!

5. Faça a validação de um jogo da velha, ou seja, se houve vencedor ou não e, se for o caso, quem foi o vencedor X ou O. Para isto leia do usuário uma matriz 3x3 de Strings que representa as marcações realizadas com ‘X’ , ‘O’ ou vazio.

Exiba também o jogo fornecido em formato texto. Por exemplo:

X | X | O
--+---+---
X | O | X
--+---+---
O |__| O

O jogador ‘O’ foi o vencedor!

import java.util.*;
public class tictactoe {
 
    static class board {
        String squares[][] = new String [3][3];
        String vencedor = null;
 
        // Chama funções de validação
        boolean validaCampos() {
            if (validaHorizontais() || validaVerticais() || validaDiagonais()) 
                return true;
            else
                return false;    
        }
        // Verifica se a string do vencedor ("O" ou "X") foram inseridas e retorna
        boolean checkVencedor() {
            if (this.vencedor != null)
                return true;
            else
                return false;
        }
        // Valida linhas horizontais
        boolean validaHorizontais(){
            for (int linha = 0; linha < 3; linha++ ) {
                    if(this.squares[linha][0]==this.squares[linha][1]
                    && this.squares[linha][1]==this.squares[linha][2]) {
                        this.vencedor = this.squares[linha][0];
                        break;
                    }
            }
            return checkVencedor();
        }
        // Valida linhas verticais
        boolean validaVerticais() {
            for (int coluna = 0; coluna < 3; coluna++) {
                if(this.squares[0][coluna]==this.squares[1][coluna]
                && this.squares[1][coluna]==this.squares[2][coluna]) {
                    this.vencedor = this.squares[0][coluna];
                    break;
                }
            }
            return checkVencedor();
        }
        // Valida linhas diagonais
        boolean validaDiagonais() {
            if((this.squares[0][0]==this.squares[1][1] && this.squares[1][1]==this.squares[2][2]) 
            || (this.squares[2][2]==this.squares[1][1] && this.squares[1][1]==this.squares[2][0])) {
                this.vencedor = this.squares[1][1];
            }
            return checkVencedor();
        }
    }
 
    public static void main (String[] args) {
        board TicTacToe = new board();
 
    }
}
 
// por: Vitor Oliveira
// OBS.: Ainda está incompleto vou terminar depois... =o

6. Preencha, com números randômicos, uma matriz de 8 linhas por 20 colunas. A faixa dos números aleatórios deverá ser solicitada ao usuário. Calcule a quantidade de números pares e impares em cada linha da matriz. Calcule também o percentual destes em relação a quantidade total de números da matriz.
Exiba a matriz num formato tabular indicando as quantidades e percentuais calculados.
Dica: para verificar se um número é par, basta ver se o resto da divisão dele por 2 é igual a zero. O operador de resto da divisão é “%”.

package Exercício_06;
import java.util.Scanner;
public class Principal {
    public static void main(String[] args) {
        int primeiroNumero, ultimoNumero, numeroPar=0, numeroImpar=0, cont=0;;
        int[][]matriz = new int [8][20];
        int[]par = new int[8];
        int[]impar = new int[8];
        System.out.println("Entre com a faixa de números a serem sorteados(ex.: de 0 a 10) ");
        System.out.print("De: ");
        primeiroNumero = new Scanner(System.in).nextInt();
        System.out.print("a: ");
        ultimoNumero = new Scanner(System.in).nextInt();
        ultimoNumero =     (ultimoNumero - primeiroNumero)+1;
        for(int l = 0; l < 8; l++){
            for(int c = 0; c < 20; c++){
                matriz[l][c] = (int) (Math.random()*ultimoNumero)+primeiroNumero;
            }
        }
        for(int l = 0; l < 8; l++){
            numeroPar = 0;
            numeroImpar = 0;
            for(int c = 0; c < 20; c++){
                System.out.print(matriz[l][c]+"  ");
                if((matriz[l][c]%2) == 0){
                    numeroPar++;    
                }    
                else{
                    numeroImpar++;
                }
            }
            par[cont] = numeroPar;
            impar[cont] = numeroImpar;
            cont++;
            System.out.print("\n");
        }
        cont = 0;
        double percentPar=0, percentImpar=0, total=0;
        while(cont<8){
            System.out.println("pares na "+(cont+1)+"ª linha: "+par[cont]);
            percentPar = percentPar + par[cont]; 
            System.out.println("impares na "+(cont+1)+"ª linha: "+impar[cont]);
            percentImpar = percentImpar + impar[cont]; 
            cont++;    
        }
        total = percentPar + percentImpar;
        System.out.println("Percentual de números pares: "+(percentPar*100)/total+"%");
        System.out.println("Percentual de números impares: "+(percentImpar*100)/total+"%");
    }
}
// Matheus

7. Armazene numa matriz 12x2 de inteiros o número do mês com a quantidade de dias que o mês possui. Para fevereiro considere 29 dias. Armazene num vetor os nomes dos meses.
Em seguida, pergunte ao usuário qual o número do mês que ele quer consultar. Após a sua resposta exiba o nome do mês e a quantidade de dias que ele possui.

// Exercício resolvido em sala de aula.
 
package exerMatrizes07;
import java.util.Scanner;
public class Principal {
    public static void main(String[] args) {
        int m[][] = new int [12][2];
        m[0][0] = 1;
        m[0][1] = 31;
        m[1][0] = 2;
        m[1][1] = 28;
        m[2][0] = 3;
        m[2][1] = 31;
        m[3][0] = 4;
        m[3][1] = 30;
        m[4][0] = 5;
        m[4][1] = 31;
        m[5][0] = 6;
        m[5][1] = 30;
        m[6][0] = 7;
        m[6][1] = 31;
        m[7][0] = 8;
        m[7][1] = 31;
        m[8][0] = 9;
        m[8][1] = 30;
        m[9][0] = 10;
        m[9][1] = 31;
        m[10][0] = 11;
        m[10][1] = 30;
        m[11][0] = 12;
        m[11][1] = 31;
 
        String [] nomeMes;
            nomeMes = new String [12];
            nomeMes [0]  = "janeiro";
            nomeMes [1]  = "Fevereiro";
            nomeMes [2]  = "Março";
            nomeMes [3]  = "Abril";
            nomeMes [4]  = "Maio";
            nomeMes [5]  = "Junho";
            nomeMes [6]  = "Julho";
            nomeMes [7]  = "Agosto";
            nomeMes [8]  = "Setembro";
            nomeMes [9]  = "Outubro";
            nomeMes [10] = "Novembro";
            nomeMes [11] = "Dezembro";
 
            System.out.println("Entre com o numero do mês a ser consultado.");
            int Nmes = new Scanner(System.in).nextInt();
 
            System.out.println(" O Mês de N° "+Nmes+" é o mês de "+nomeMes[Nmes-1]+" que possui "+m[Nmes-1][1]+" dias.");
 
    }
}
// Dorly Junior.

8. Receba do usuário duas matrizes de mesmo tamanho. Crie uma matriz que é o resultado da soma da primera pela segunda. Em seguida exiba esta terceira matriz.
// Eu não entendi muito bem esse exercício...
//O que fiz foi pegar os valores que o usuário entrou e determinar o tamanho das dua primeiras matrizes.
//Depois somei esses valores linha com linha, coluna com coluna e determinei o tamanho da 3° Matriz.
//Por fim, preenchi as 3 com valores randômicos com uma faixa que o usuário determina.
// Alguem poderia me dizer se está certo ou se ficou faltando algo, pq tenho a impressão que sim...
 
package exerMatrizes08;
import java.util.Scanner;
public class Principal {
    public static void main(String[] args) {
        System.out.println("Entre com os valores das matrizes.");
        System.out.println("Valor de linhas:");
        int quantLinhas = new Scanner(System.in).nextInt();
        System.out.println("Valor de Colunas:");
        int quantColunas = new Scanner(System.in).nextInt();
        int m3linhas  = quantLinhas + quantLinhas;
        int m3colunas = quantColunas + quantColunas;
 
        System.out.println("Entre com faixa de valores para o preenchimento das matrizes.");
        int Fn1 = new Scanner(System.in).nextInt();
        int Fn2 = new Scanner(System.in).nextInt();
        Fn2 = (Fn2 - Fn1) + 1;
 
        int m1[][] = new int [quantLinhas][quantColunas];
        int m2[][] = new int [quantLinhas][quantColunas];
        int m3[][] = new int [m3linhas][m3colunas];
 
        System.out.println("Matriz numero 1");
        for(int l = 0; l < quantLinhas; l++){
            for (int c = 0; c < quantColunas; c++){
                m1[l][c] = (int) (Math.random() * Fn2) + Fn1;
            System.out.print(m1[l][c]+ " ");
 
            }
        System.out.println();
        }
 
        System.out.println();
        System.out.println("Matriz numero 2");
        for(int l = 0; l < quantLinhas; l++){
            for (int c = 0; c < quantColunas;c++){
                m2[l][c] = (int) (Math.random() * Fn2) + Fn1;
                System.out.print(m2[l][c]+ " ");
            }
            System.out.println();
        }
 
        System.out.println();
        System.out.println("Matriz numero 3");
        for(int l = 0; l < m3linhas; l++){
            for (int c = 0; c < m3colunas; c++){
                m3[l][c] = (int) (Math.random() * Fn2) + Fn1;
                System.out.print(m3[l][c]+ " ");
            }
            System.out.println();
        }
    }
}
 
//Dorly Junior.

9. Valide uma matriz que representa um Sudoku de 9x9 (se você ainda não conhece este jogo, experimente em: http://sudoku.hex.com.br/).
Para isto, indique ao usuário se existem os erros descritos:
ERRO LINHA – quando houver repetição de números em uma das 9 linhas.
ERRO COLUNA – quando houver repetição de números em uma das 9 colunas.
ERRO SUB-MATRIZ – quando houver repetição de números em uma das 9 sub-matrizes 3x3.

Sugestão para facilitar a entrada de dados dos 81 números quando for testar o programa: faça uma inicialização da matriz com zeros, para indicar que a posição ainda não está preenchida, e depois coloque os outros números usando o código do programa.
Por exemplo:
m[0][0] = 5;
m[0][1] = 7;
m[2][1] = 8;
m[3][1] = 7; // neste caso há um erro na coluna 1 (repetição do número 7)
m[3][4] = 9;

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License