Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 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 01 TEORIA: REVISÃO DE VETORES Nossos objetivos nesta aula são: Revisar os principais conceitos de vetores como declaração, preenchimento e percurso Implementar estes conceitos na Linguagem Java A referência para esta aula é o Capítulo 7, Seção 7.1 (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 esta seção após a aula de hoje! 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. Após entrar no conteúdo do livro, o capítulo 7 pode ser acessado diretamente digitando o número 268 no campo "página" localizado na parte inferior da tela (conforme acesso realizado em 10/08/2015. 2 DECLARAÇÃO E INICIALIZAÇÃO DE VETORES Conforme estudamos nas disciplinas de Introdução a Programação e Laboratório de Programação, um vetor (ou array) é uma sequência de valores do mesmo tipo. A cada valor da sequência é identificado por um número inteiro chamado índice. Na Linguagem Java, estes índices começam no valor zero. A figura abaixo ilustra um exemplo de vetor de números inteiros, que vamos identificar com a letra v: 0 1 2 3 4 5 6 8 7 5 6 7 -3 4 Neste exemplo, temos um vetor de tamanho 7. Os índices dos valores 8 e -3, por exemplo, são 0 e 5, respectivamente. Assim, dizemos que v[0]=8 e v[5]=-3. Uma das grandes vantagens do uso de vetores é que utilizamos somente um nome (v) para identificar uma sequência inteira da valores, economizando vários nomes de variáveis. Além disto, como os valores estão numa sequência, podemos utilizar comandos de repetição para percorrê-la e realizar algum processamento dos valores. É comum utilizarmos o comando for, pois podemos utilizar o contador como índice no vetor. O primeiro passo para uso de um vetor é declará-lo e alocar espaço para os seus elementos. Assim, é importante que saibamos, a priori, quantos elementos (possivelmente) vamos usar no vetor. Abaixo, temos um exemplo de declaração de um vetor de 10 números inteiros em Java: int v[ ] = new int[10]; Embora não seja muito comum, é possível também se utilizar uma notação alternativa na declaração do vetor, colocando os colchetes antes da variável que identifica o vetor: int [ ] v = new int[10]; A mesma variável v pode ser utilizada para se alocar outro vetor. Para isto, basta utilizar uma nova alocação com new. Porém, é importante ressaltar que, se os valores anteriores à nova alocação não forem referenciados por uma outra variável, seu conteúdo estará perdido após a nova alocação. Uma vez que o vetor foi corretamente alocado, podemos passar à tarefa de preenchimento. No exemplo abaixo, preenchemos as 10 primeiras posições do vetor com os números de 0 a 9: int [ ] v = new int[10]; for(int i=0;i<10;i++) { v[i]=i; } 3 Em um programa, nem sempre as instruções de alocação de um vetor estão imediatamente antes da manipulação de seu conteúdo. No exemplo abaixo, a função manipulaVetor está recebendo como parâmetro um vetor. Para verificar se realmente há um vetor sendo referenciado pela variável antes de começar a manipulá-lo, deve-se checar se o seu valor não é nulo. public void manipulaVetor(int[ ] vet) { if (vet != null) { // verifica se a variável referencia um vetor // instruções que manipulam o conteúdo do vetor } } EXERCÍCIO TUTORIADO A partir do esqueleto de código abaixo, implemente em Java a função generateVector, que recebe um número inteiro maior que zero e devolve um vetor de números inicializado com os valores de 0 a 50. Adicionalmente, leia o número inteiro n na função main e invoque generateVector. public class Revisao { public static int[ ] generateVector(int n){ } public static void main(String args[]){ } } 4 PERCURSO EM VETORES Dado um vetor v inicializado, há dois percursos sequenciais possíveis em v: da esquerda para a direita (do índice 0 até o último índice) e da direita para a esquerda (do último índice para o índice 0). Ambos os percursos, podem ser realizados com o comando for: PERCURSO ESQUERDA DIREITA PERCURSO DIREITA ESQUERDA for(int i=0;i<v.length;i++) // processa elemento v[i] for(int i= v.length-1;i>=0;i--) // processa elemento v[i] EXERCÍCIO TUTORIADO Implemente os procedimentos printVector e printReverseVector para exibir os elementos do vetor v da esquerda para a direita e da direita para a esquerda, respectivamente. Invoque estes procedimentos na função main. public class Revisao { public static int[ ] generateVector(int n){ ... } public static void printVector(int v[ ]){ } public static void printReverseVector(int v[ ]){ } public static void main(String args[]){ } } 5 ATIVIDADE DE LABORATÓRIO Utilizando o código desenvolvido na aula teórica, implemente as duas funções abaixo: public static int[ ] union(int v[ ], int w[ ]): calcula e devolve o resultado da união entre os vetores v e w. public static int[ ] intersection(int v[ ], int w[ ]): calcula e devolve o resultado da intersecção entre os vetores v e w. Invoque estas duas funções na função main e verifique se o resultado está correto observando a saída do procedimento printVector. public class Revisao { public static int[ ] generateVector(int n){ ... } public static void printVector(int v[ ]){ ... } public static void printReverseVector(int v[ ]){ ... } public static int[ ] union(int v[ ], int w[ ]){ } public static int[ ] intersection(int v[ ], int w[ ]){ } public static void main(String args[]){ } } 6 EXERCÍCIOS EXTRA-CLASSE 1. Implemente uma função em Java que retorna um valor booleano verdade ou falso para fazer a busca de um valor em um vetor de elementos do tipo inteiro. 2. Implemente uma função em Java que gere o vetor dos n primeiros números pares. 3. Implemente uma função em Java que gere o vetor dos n primeiros números múltiplos de 5. 4. Implemente uma função em Java que gere o vetor dos n primeiros números primos. 5. Implemente uma função em Java que receba um vetor de números inteiros e devolva a sua versão invertida. 6. Dizemos que uma palavra é um palíndromo se ela for a mesma tanto numa leitura da esquerda para a direita quanto da direita para a esquerda. Por exemplo, MOM é um palíndromo. Implemente uma função em Java que receba um vetor de caracteres (char) representando uma palavra e verifique se a palavra é um palíndromo ou não. 7. Implemente uma função em Java que receba dois vetores de números inteiros e verifique se eles são iguais. 8. Implemente uma função em Java que receba dois vetores de números inteiros e devolva a diferença entre eles. 9. Implemente uma função em Java que receba um vetorde números inteiros representando um número binário, ou seja, contendo somente os dígitos 0 e 1 e devolva o número decimal correspondente. 10. Implemente uma função em Java que receba um vetor de números inteiros e verifique se ele está ordenado de forma crescente. 11. Implemente uma função em Java que receba dois vetores de números inteiros em ordem crescente e produza um terceiro vetor, resultante da intercalação ordenada dos dois vetores ordenados passados como parâmetro. 7 12. Problema: Coleção de Elementos O objetivo desta atividade é implementar um programa para administrar uma coleção elementos. Por questões de conveniências, os elementos da coleção serão números inteiros, mas poderiam, em uma aplicação mais complexa, ser uma coleção de sprites, de imagens ou contas bancárias, etc. No seu programa o usuário pode solicitar as seguintes operações: 1. Adicionar um elemento no final da coleção; 2. Adicionar um dado elemento em uma dada posição; 3. Remover o elemento de uma dada posição; 4. Remover todas as ocorrências de um elemento na coleção; 5. Verificar se dado um elemento está contido na coleção; 6. Verificar se dado um elemento existem dois números na coleção que somados é igual ao elemento informado. Para o usuário escolher as opções, o seu programa deverá mostrar um menu de opções, sendo que para cada opção deverá ser executada a operação correspondente, por exemplo, para adicionar um número no final da coleção, o usuário deve escolher a opção Adicionar no Final e digitar um número inteiro que será inserido no final da coleção. Ao final da execução de cada operação o vetor com os elementos deverá ser impresso. Para armazenar a coleção de números utilizaremos um vetor de inteiro. A quantidade de elementos na coleção é limitada a 100, mas o seu programa deverá ter uma variável para controlar a quantidade de elementos válidos armazenados no vetor, além disso, a coleção pode conter mais de uma cópia de um mesmo número. A coleção é armazenada de forma continua e estável, ou seja, não poderemos ter “buracos” no meio do vetor e as operações de adicionar e de remover não alteram a posição relativa dos elementos no vetor. 8 As operações propostas deverão ser implementas através de funções conforme as definições abaixo. Na implementação das funções as informações necessárias para execução da operação deverão ser passadas por parâmetro, ou seja, dentro da função não deverá ser feito leitura e nem saída de dados. Para as operações que adicionam e removem elementos no vetor, sempre que eles tiverem sucesso, as funções deverão retornar a quantidade de elementos do vetor atualizada, caso contrário as funções devolvem o valor da quantidade sem atualização. 1. Adicionar um elemento no final da coleção. A função adiciona o elemento na primeira posição disponível no final da coleção. Caso a coleção já esteja no limite, o elemento não é adicionado e a quantidade de elementos não é modificada. 2. Adicionar um dado elemento em uma dada posição. A operação de adicionar um elemento em uma determinada posição é mais delicada. Primeiro, precisamos verificar se a posição faz sentido ou não. Só podemos adicionar um elemento em alguma posição que já estava ocupada ou na primeira posição disponível no final da coleção. Caso a posição seja válida, devemos tomar cuidado para não colocar um elemento sobre outro. É preciso deslocar todos os elementos a “direita” da posição onde vamos inserir uma vez para a “frente”. Isso abrirá um espaço para guardar o novo elemento. 3. Remover o elemento de uma dada posição; Para essa operação precisamos verificar se a posição está ocupada ou não, se a posição estiver ocupada então podemos remover o elemento assim, basta deslocar os elementos que estavam a direita daquele que removemos uma vez para esquerda e fechamos o “buraco” aberto pela remoção. 4. Remover todas as ocorrências de um elemento na coleção; Essa operação remove todas as ocorrências de um elemento no vetor, e também não pode deixar “buracos” após a remoção. 5. Verificar se dado um elemento está contido na coleção; Nessa operação será informado para a função o valor de um elemento e a função devolve o índice onde o elemento foi encontrado. Caso o elemento não esteja no vetor a função devolve -1. 9 6. Verificar se dado um elemento existem dois números na coleção que somados é igual ao elemento informado. E por fim, temos a função que verifica se existe no vetor dois elementos em posições distintas que somados tem como resultado o elemento informado por parâmetro. Se tiver sucesso na busca, a função devolve 1 e 0 caso contrário. Restrições do projeto O programa entregue será avaliado de acordo com os seguintes itens: Funcionamento do programa; O programa deve estar na linguagem Java. O quão fiel é o programa quanto à descrição do enunciado; Identação, comentários e legibilidade do código; Clareza na nomenclatura de variáveis e funções.
Compartilhar