Buscar

Revisão de Vetores

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.

Continue navegando