semana03 - Matrizes

16 Pages • 3,376 Words • PDF • 680.1 KB
Uploaded at 2021-09-24 07:14

This document was submitted by our user and they confirm that they have the consent to share it. Assuming that you are writer or own the copyright of this document, report to us by using this DMCA report button.


FACULDADE DE COMPUTAÇÃO E INFORMÁTICA BACHARELADOS EM CIÊNCIA DA COMPUTAÇÃO E SISTEMAS DE INFORMAÇÃO E TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS Linguagem de Programação I – Semana 03 TEORIA: MATRIZES Nossos objetivos nesta semana são: 

Conhecer o conceito de matriz e como defini-las em Java.



Conhecer o processo de leitura e gravação de dados em arquivos em Java.

A referência para esta semana é o Capítulo 7 (Arrays e Listas de Arrays) do nosso livro da referencia básica: HORSTMANN, C. Conceitos de Computação com Java. 5.ed. Porto Alegre: Bookman, 2009. Não deixem de ler este capítulo depois desta aula! Para acessar a versão eletrônica deste livro:  Acesse o link da Biblioteca Virtual MINHA BIBLIOTECA (https://www3.mackenzie.com.br/biblioteca_virtual/index.php?tipoBiblio=minhabiblioteca&flashObg=n )  Faça o login conforme as instruções apresentadas na tela.  Faça a busca fornecendo os dados do livro. MATRIZES 

Até o momento, conhecemos o conceito de vetor. Essencialmente, um vetor armazena informações com indexação em uma única dimensão (índice). Assim, um vetor também é conhecido pelo nome de array unidimensional. Por exemplo: double data[] = new double [10]; data[2]=29.95;

1



Podemos pensar numa extensão para duas dimensões. Esta estrutura bidimensional é chamada array bidimensional ou, comumente, matriz. Arrays bidimensionais formam um arranjo bidimensional tabular. Você acessa os elementos com um par de índices a[i][j]. Abaixo temos um exemplo de matriz:



A declaração e alocação de matrizes em Java é bastante simples: tipo A[ ][ ] = new tipo [quantidade linhas][quantidade colunas]; Exemplos: int A[ ][ ]= new int[2][3]; char M[ ][ ] = new char[3][2];



Matrizes também podem ser declaradas e inicializadas junto com a declaração. Neste contexto, o tamanho da matriz é definido pela inicialização. Para os dois exemplos acima teríamos: int A[ ][ ] = { {0,4,5}, {-5,6,8}}; char M[ ][ ] = {{‘A’,’B’},{‘C’,’D’},{‘E’,’F’}};



O acesso aos elementos de uma matriz é feito através de dois índices: um para a linha e, outro, para a coluna. Por exemplo, considerando-se a matriz A, o acesso A[0][1] irá recuperar o valor 4 (linha 0, coluna 1).



De forma similar, podemos ter arrays de qualquer dimensão: A[ ][ ][ ], A[ ][ ][ ][ ],... . Para cada dimensão, utilizamos um índice de acesso.



Na verdade, uma array bidimensional em Java é uma array de arrays.

2

EXERCÍCIO COM DISCUSSÃO EM DUPLAS Construa uma função que receba a quantidade de linhas(lin) e de colunas(col) e devolva uma matriz de dimensão lin x col contendo números inteiros aleatórios entre 0 e 100. Teste sua função. public static int [ ][ ] generateMatrix (int lin,int col){

} EXERCÍCIO COM DISCUSSÃO EM DUPLAS Construa um procedimento que receba uma matriz de números inteiros e exiba o seu conteúdo na formatação gráfica de uma matriz. Teste seu procedimento. public static void printMatrix(int m[ ][ ]){

} EXERCÍCIO COM DISCUSSÃO EM DUPLAS Construa uma função que receba uma matriz de números inteiros e devolva o maior valor presente nesta matriz. Teste sua função. public static int max(int m[ ][ ]){

}

3

EXERCÍCIO 1 Em um jogo de batalha naval, os jogadores posicionam suas embarcações em um grid de 10 linhas por 10 colunas. Na nossa versão do jogo, as seguintes embarcações devem ser distribuídas no grid: • • • •

1 porta-aviões (ocupa 5 células lineares do grid) 1 encouraçado (ocupa 4 células lineares do grid) 1 cruzador (ocupa 3 células lineares do grid) 1 submarino (ocupa 2 células lineares do grid)

Cada embarcação pode ser posicionada na direção vertical ou na horizontal em relação ao grid. As embarcações não podem se sobrepor, e elas devem caber integralmente dentro do grid. Para desenvolver um jogo de batalha naval em Java, vamos utilizar uma matriz de caracteres de dimensão 10x10. Cada posição da matriz será preenchida usando a seguinte notação:     

O caractere ponto (.) indica que a célula não é ocupada por nenhuma embarcação. O caractere P indica que a célula está sendo ocupada por uma célula do porta-aviões. O caractere E indica que a célula está sendo ocupada por uma célula do encouraçado. O caractere C indica que a célula está sendo ocupada por uma célula do cruzador. O caractere S indica que a célula está sendo ocupada por uma célula do submarino.

A tabela abaixo apresenta um exemplo de preenchimento válido do grid com as embarcações: 0 1 2 3 4 5 6 7 8 9

0 . . . . . . . . . .

1 . P . . . . . . . .

2 . P . . . . . . . .

3 . P . E E E E . . .

4 . P . . . . . . . .

5 . P . . . . . . . .

6 . . . . . . C . . .

7 . . S S . . C . . .

8 . . . . . . C . . .

9 . . . . . . . . . .

a) Declara uma classe com o nome BatalhaNaval e desenvolva um método que retorne uma matriz 10x10 preenchida em todas as suas posições com o caractere ponto. public static char[][] inicializarGrid(){

} 4

b) Desenvolva um método para posicionar um porta-aviões no grid de batalha. O método receberá como parâmetros:   

a referência para a matriz do grid; os índices da linha e da coluna da primeira posição a ser preenchida; a informação indicando se o porta-aviões deverá ser posicionado na vertical (o valor true indica orientação vertical e false indica orientação horizontal).

Se a orientação for horizontal, as demais partes do porta-aviões deverão ocupar as células à direita da célula identificada pelos parâmetros linha e coluna. Se a orientação for horizontal, deverão ocupar as células abaixo da célula identificada. O método retornará um valor booleano indicando se foi ou não possível posicionar o portaaviões no grid. O porta-aviões só poderá ser posicionado se:  

Nenhuma de suas partes for ficar fora do grid. Não houver nenhuma outra embarcação nas células que o porta-aviões iria ocupar.

public static boolean posicionarPortaAvioes(char[][] grid, int linha, int coluna, boolean vertical){

} 5

c) Desenvolva um método para imprimir o conteúdo do grid na tela do computador. public static void imprimir(char[][] grid){

} d) Escreva o método main da classe BatalhaNaval de forma a:     

Inicializar o grid da batalha. Posicionar um porta-aviões em uma posição válida. Tentar posicionar um porta-aviões em uma posição que faria ele ficar fora do grid. Tentar posicionar um porta-aviões em uma posição que ocasionaria sobreposição com o primeiro porta-aviões. Imprimir o conteúdo do grid.

public static void main(String[] args){

} Execute e verifique se o resultado apresentado corresponde ao esperado. e) Utilizando como modelo o método posicionarPortaAvioes, desenvolva os métodos para posicionar encouraçado, cruzador e submarino. f) Acrescente ao método main chamadas aos métodos criados no item (e) e verifique se estão funcionando conforme o esperado.

6

EXERCÍCIO 2 O programa desenvolvido no exercício anterior só permite inicializar o grid e posicionar as embarcações. Incremente o programa de forma a gerar um jogo de batalha naval. a) Desenvolva o método atirar. O método receberá como parâmetros:  

a referência para a matriz do grid; os índices da linha e da coluna onde o tiro está sendo realizado.

O método retornará um caractere com o valor que estava armazenado naquela posição do grid. A execução do método deverá alterar o conteúdo do grid:  

Se a posição não tinha nenhuma embarcação (“água”), o novo valor deverá ser ‘x’ (minúsculo). Se a posição estava ocupada por uma embarcação, o novo valor deverá ser ‘X’ (maiúsculo).

public char void atirar(char[][] grid, int linha, int coluna){

} b) Implemente o fluxo principal do jogo no método main de forma a:   



Inicializar o grid da batalha. Posicionar de forma aleatória, em posições válidas, um porta-aviões, um encouraçado, um cruzador e um submarino. Dar ao jogador 20 chances para atirar. A cada tiro o programa deverá informar ao jogador o resultado do tiro (água ou parte de uma das embarcações). Caso o jogador tente atirar pela segunda vez em uma mesma posição, o programa deverá informá-lo disto e dar uma nova chance sem descontar esta tentativa do total de tiros. Imprimir o conteúdo do grid ao final do jogo.

7

MANIPULAÇÃO DE ARQUIVOS EM JAVA 

O processo de leitura e gravação de dados em arquivos, em Java, é feito através de streams. Existem diversas classes que implementam streams no pacote java.io. Neste primeiro contato, utilizaremos as classes BufferedReader e BufferedWriter.



Trabalhar com arquivos é muito parecido com trabalhar com livros. Para utilizar um livro, você tem que abri-lo. Quando você termina, você tem que fechá-lo. Enquanto o livro estiver aberto, você pode tanto ler quanto escrever nele. Na maioria das vezes, você lê o livro inteiro em sua ordem natural, uma página após a outra.



Para abrir um arquivo em Java utilizamos o seguinte trecho de código baixo, com a utilização das classes FileReader e BufferedReader do pacote java.io.* BufferedReader entrada=new BufferedReader(new FileReader());



Para realizar a leitura de uma linha de um arquivo texto, vamos supor entrada.txt, basta realizar a chamada da linha acima e após a abertura do arquivo basta ler as linhas do arquivo com o método readLine(), e ao final devemos fechar o arquivo com método close(). Note que no método main() informamos que caso ocorra um erro (exceção) este será repassado, isso será explicado melhor nas próximas aulas. import java.io.*; public class ManipulacaoArquivo { public static void main(String[] args) throws IOException { // abre o arquivo para leitura BufferedReader entrada=new BufferedReader( new FileReader("entrada.txt")); // le uma linha String linha = entrada.readLine(); System.out.println(linha); // fecha arquivo de entrada entrada.close(); } }

} EXERCÍCIO COM DISCUSSÃO EM DUPLAS Construa uma função que receba o nome de um arquivo de entrada (String file) e lê a matriz que está armazenada no arquivo de entrada com o seguinte formato: 34 10 20 30 40 50 60 70 80 90 100 110 120

8

Na primeira linha do arquivo temos dois inteiros informando o número de linhas e colunas da matriz seguir temos a matriz com várias linhas, e em cada linha os elementos separados por um espaço em branco. Ao final a função retorna uma matriz alocada com as informações do arquivo de entrada, depois de implementar a função tente escrever a função main() para testá-lo. public static int [ ][ ] readMatrixFile(String file) throws IOException {

} EXERCÍCIO COM DISCUSSÃO EM DUPLAS Construa uma função principal que receba uma matriz de números inteiros e devolva o maior valor presente nesta matriz a partir de dados armazenados em um arquivo.

9

ATIVIDADE DE LABORATÓRIO Uma agência bancária tem 5 clientes e cada cliente possui uma conta corrente e uma conta poupança. Cliente Marcos Júlia João Roberto Janaína

Saldo em conta corrente R$ 1.000,00 R$ 250,00 R$ 2.500,00 R$ 3.000,00 R$ 4.500,00

Saldo em conta poupança R$ 2.500,00 R$ 1.500,00 R$ 750,00 R$ 50,00 R$ 3.200,00

Vamos desenvolver uma aplicação em Java para gerenciar os saldos destas contas. Para armazenar os saldos, vamos utilizar uma matriz 5x2 e inicializar esta matriz com os saldos das contas. Para armazenar os nomes dos clientes, vamos utilizar um vetor de strings.

Inicialização public class BancoAppV1 { public static void main(String[] args) { String[] nomes = {"Marcos", "Júlia", "João", "Roberto", "Janaína"}; int[][] saldos = {{1000,2500},{250,1500},{2500,750},{3000,50},{4500,3200}}; } }

Impressão dos saldos Vamos adicionar um método que imprima na tela os saldos de todas as contas. O método mostrarSaldos recebe o vetor com os nomes dos clientes e a matriz com os saldos e imprime todas as informações na tela do computador. public class BancoAppV2 { public static void mostrarSaldos(String[] nomes, int[][] saldos) { System.out.println("Saldos de todos os clientes:"); for (int i=0; i
semana03 - Matrizes

Related documents

16 Pages • 3,376 Words • PDF • 680.1 KB

4 Pages • 647 Words • PDF • 582.9 KB

7 Pages • 1,283 Words • PDF • 587.8 KB

734 Pages • 111,591 Words • PDF • 3.8 MB

83 Pages • 11,155 Words • PDF • 3.4 MB

5 Pages • 697 Words • PDF • 313.1 KB