Arrays - PUC-SP

Propaganda
Pontifícia Universidade Católica de São Paulo
Departamento de Ciência da Computação
Apontamento 13
Maio de 2004
LP: Laboratório de Programação
Prof. ISVega
Arrays
CONTEÚDO
13.1 Arrays e Seqüências de Variáveis
13.2 Estrutura de Dados array . . . .
13.3 Declaração de arrays . . . . . . .
13.4 Criação de Arrays . . . . . . . . .
13.5 Acesso aos Valores de um Array .
13.6 Iniciadores de Arrays . . . . . . .
Exercícios . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
2
3
3
4
5
6
Objetivos • Apresentar a estrutura de dados array da linguagem
Java. • Estudar a sua aplicação em diferentes estudos de caso.
13.1 Arrays e Seqüências de Variáveis
Existem computações nas quais é necessário o uso de diversas variáveis para armazenar valores intermediários.
Exemplo 13.1 Seja uma aplicação que realiza cálculos sobre os valores diários das
temperaturas de uma máquina a vapor, apontados durante o período de um ano.
Duas dificuldades aparecem na elaboração desta aplicação:
1
Laboratório de Programação
Maio de 2004
• como representar 365 variáveis para armazenar os valores das temperaturas; e
• como descrever computações envolvendo estas variáveis.
¨
A linguagem Java oferece um mecanismo que pode ser utilizado para criar este universo de variáveis. O mecanismo, conhecido como array, pode ser utilizado para
criar uma quantidade pré-determinada de variáveis, convenientemente encapsuladas em uma estrutura, e com capacidade para armazenar valores do mesmo tipo.
Exemplo 13.2 Um array pode ser criado de modo a manter 365 variáveis com capacidade para armazenar valores de um mesmo tipo. As variáveis criadas a partir
de um array são organizadas em uma ordem particular. Todas elas compartilham
o mesmo nome, sendo diferenciadas pela sua ordem (índice) na lista. O padrão normal de processamento dos valores faz uso de uma variável-ordem adicional, capaz
de armazenar um valor entre 0 e 364.
¨
13.2 Estrutura de Dados array
Um array é um mecanismo (da linguagem Java) utilizado para fabricar uma estrutura de dados contendo uma lista ordenada de variáveis que armazenam valores do
mesmo tipo. Cada variável é identificada pela sua ordem na estrutura. Recupera-se
o valor da variável utilizando-se o operador de ordem [].
Desenho de um array A Figura 13.1 mostra a representação gráfica de uma variável x que aponta (referencia) para um valor estruturado criada pelo mecanismo
array. É comum afirmar-se que o valor tem tipo array.
x=
0
1
2
3
4
5
n-1
...
length =
n
Figura 13.1: Visualização de uma variável chamada x, que
aponta para um valor criado pelo mecanismo array.
Observa-se que o valor da variável x é uma referência para uma estrutura de dados
construída pelo mecanismo gerador array da linguagem Java.
Variáveis Internas Internamente a esta estrutura, encontram-se n variáveis organizadas em uma ordem pré-estabelecida. O nome de cada uma delas corresponde a
sua ordem dentro da estrutura: a primeira variável tem ordem 0, a segunda variável
tem ordem 1, e assim por diante. A última variável tem ordem n − 1. O valor da variável com ordem 0 pode ser recuperado utilizando-se o operador de ordem da seguinte
forma: x[0].
c
Copyright °1998-2004,
Dr. Italo S. Vega
13-2
Laboratório de Programação
Maio de 2004
Tamanho de um array Além disso, a estrutura também comporta uma variável
conhecida por length, cujo valor denota a quantidade de variáveis dentro do valor
array. Neste caso, a quantidade de variáveis da estrutura apontada por x pode ser
conhecida avaliando-se a expressão x.length.
OBS: tecnicamente, a variável x aponta para uma estrutura criada pelo mecanismo
array da linguagem Java. Entretanto, é comum a expressão “... seja x um array
de inteiros...”, que se refere a x como se fosse um array. Nos apontamentos, a
distinção será feita apenas quando houver dificuldade de entendimento.
13.3 Declaração de arrays
Declara-se uma variável array especificando-se o tipo do array – tipo de cada valor
seguido por [] – e o nome da variável array.
Exemplo 13.3 A variável temperatura, com capacidade para armazenar diversos
números inteiros pode ser declarada como:
int[] temperatura;
Esta frase em Java apenas declara a variável temperatura. A declaração não cria a
estrutura array por ela apontada (Figura 13.2).
temperatura =
Figura 13.2: Efeito da declaração da variável temperatura.
¨
13.4 Criação de Arrays
A criação de um valor do tipo array envolve a ativação do operador new sobre o
mecanismo array. A ativação do operador new exige a presença de um valor inteiro,
indicando a quantidade de variáveis a serem criadas pelo mecanismo array. Assim,
quando se ativa o operador com o valor n, o mecanismo, n variáveis e as encapsula
em uma nova estrutura que pode ser acessada por um ponteiro.
Exemplo 13.4 Para criar um array contendo 365 variáveis, deve-se escrever:
temperatura = new int[365];
Esta frase em Java cria uma instância de array contendo 365 variáveis com a capacidade para armazenar valores do tipo int (Figura 13.3).
c
Copyright °1998-2004,
Dr. Italo S. Vega
13-3
Laboratório de Programação
temperatura =
Maio de 2004
0
0
1
0
2
0
length =
3
0
4
0
5
0
363 364
0
... 0
365
Figura 13.3: Efeito da construção do array de ints pelo operador new.
Ou seja, o operador new, aciona o mecanismo array para que este fabrique uma nova
estrutura contendo uma seqüência ordenada de 365 variáveis do tipo int.
O mesmo efeito pode ser obtido declarando-se o ponteiro e imediatamente
construindo-se o array:
int[] temperatura = new int[365];
Esta frase declara a variável-ponteiro temperatura e imediatamente a faz apontar
para a estrutura array contendo uma seqüência ordenada de 365 variáveis do tipo
int.
¨
13.5 Acesso aos Valores de um Array
O acesso às variáveis da seqüência de uma estrutura de dados fabricada por um
array é feito pelo operador de ordem []. Este operador recebe o nome de uma
variável da seqüência – um valor no intervalo 0 . . (n − 1). Ao ser avaliado, o operador
de ordem retorna o valor armazenado na variável indicada.
Exemplo 13.5 Para mostrar a temperatura do terceiro dia da máquina a vapor,
escreve-se:
System.out.println( temperatura[2] );
O registro da temperatura do sexto dia seria escrito como:
temperatura[5] = 65;
supondo uma temperatura de 65 graus neste dia.
A Figura 13.4 ilustra uma situação do array apontado pela variável temperatura
depois de um ano.
temperatura =
0 1 2 3 4 5
363 364
75 79 82 70 68 65 ... 58 63
length =
365
Figura 13.4: Valores do array apontado pela variável-ponteiro
temperatura depois de 1 ano.
¨
c
Copyright °1998-2004,
Dr. Italo S. Vega
13-4
Laboratório de Programação
Maio de 2004
13.6 Iniciadores de Arrays
A linguagem Java oferece uma abreviação para o processo de declarar, construir e
iniciar os valores de estruturas array. A abreviação consiste, basicamente, do nome
do ponteiro e dos valores da seqüência do array listados entre chaves e separados
por vírgula.
Exemplo 13.6 Um exemplo desta sintaxe em Java é:
int[] primos = {2,3,5,7};
Observa-se que esta frase não faz uso do operador new.
c
Copyright °1998-2004,
Dr. Italo S. Vega
¨
13-5
Laboratório de Programação
Maio de 2004
E XERCÍCIOS
13.1 E STRUTURA DE UM HISTÓRICO DE TEMPERATURAS
Considere o problema de
registrar as temperaturas diárias de uma máquina a vapor. O registro deve cobrir
um ano (365 dias) de operação da máquina a vapor. O valor de cada dia é armazenado
em uma variável interna a uma estrutura array conhecida pela variável-apontador
temperatura.
Tarefa 13.1.1
Crie o projeto ex13.1.
Tarefa 13.1.2 Crie a classe Historico contendo uma variável temperatura capaz
de apontar para um valor do tipo array de 365 temperaturas int.
Tarefa 13.1.3 Crie o objeto h:Historico e inspecione a sua estrutura interna.
Em particular, qual o valor de h.length?
13.2 P ROCESSAMENTO
DE TEMPERATURAS
(refinamento do exercício anterior.)
Tarefa 13.2.1 Proponha um mapa de execução baseado em repetição com contador para limpar as temperaturas do array temperatura. Neste caso, “limpar”
significa inserir o valor -1 em todas as variáveis do array.
Tarefa 13.2.2
Refaça o mapa proposto acrescentando o contexto de execução:
• Historico: obtém a variável temperatura e é capaz de executar o método limpar():void, que armazena o valor −1 em todas as variáveis da
temperatura.
Tarefa 13.2.3
Implemente o mapa proposto em Java.
Tarefa 13.2.4 Crie o objeto h:Historico e mostre que, após receber a mensagem h.limpar(), a variável interna temperatura aponta para um array contendo
apenas valores -1.
Tarefa 13.2.5 Proponha uma extensão do mapa de execução anterior da seguinte
forma. Depois de limpar os valores das temperaturas, o usuário pode indicar um
dia e o valor da temperatura naquele dia, armazenando-o de forma adequada na
variável temperatura. Quando o dia informado assumir o valor -1, todos os valores
armazenados no array deverão ser apresentados, encerrando a computação.
(OBS: denomine este novo método de obterTemperatura(d:int, t:int):void,
com d representando um particular dia de medição, e t, a respectiva temperatura
naquele dia.)
Tarefa 13.2.6
13.3 E RRO
Altere a classe Historico para implementar esta extensão.
A CESSO
(Exercício inspirado em Lewis & Loftus, Java Software
Solutions: Foundations of Program Design, 2001, Addison-Wesley.) Tarefa 13.3.1
Crie o projeto ex13.3 e a classe Sequencia da seguinte forma:
DE
c
Copyright °1998-2004,
Dr. Italo S. Vega
13-6
Laboratório de Programação
Maio de 2004
public class Sequencia {
public int[] numeros = {3,2,3,6,9,10,12,32,3,12,6};
pubilc void mostrar() {
for( int i = 1; i <= numeros.length;i ++ ) {
System.out.println( numeros[ i ] );
}
}
}
Tarefa 13.3.2 Crie o objeto s:Sequencia e envie a mensagem s.mostrar(). Descreva o que acontece nesta computação.
Tarefa 13.3.3 Quais alterações devem ser feitas no código para corrigir o erro,
supondo que a meta é mostrar todos os valores de numero?
13.4 I NVERSÃO
DE S EQÜÊNCIAS
(Exercício inspirado em Lewis & Loftus, Java
Software Solutions: Foundations of Program Design, 2001, Addison-Wesley.) Descreva uma computação que leia uma lista contendo quatro números (do tipo double)
do usuário, armazene-os em um array e depois apresente-os em ordem oposta na
tela.
Tarefa 13.4.1 Elabore um mapa de execução contendo os passos de uma computação que atenda à meta proposta.
Tarefa 13.4.2
Refaça o mapa acrescentando o contexto:
• Sequencia: armazena os números informados pelo usuário na variávelarray numeros. Cada número é armazenado quando se executa o método obterNumero(n:double):void. Esta classe também oferece o método reverter():void, que troca os números do array, e o método
mostrar():void, que mostra os valores armazenados na variável numeros.
Tarefa 13.4.3
Crie o objeto s:Sequencia e informe os números:
h45.7, 55.2, 69.0, 29.03i
Tarefa 13.4.4 Após receber a mensagem s.reverter(), quais valores são apresentados na execução do método mostrar()?
13.5 A RGUMENTOS
M ÉTODO P RINCIPAL
Toda aplicação em Java tem um
método main com o parâmetro String[] args. Este parâmetro indica que o método
main() recebe um array de Strings, cada um deles representando um argumento
quando da execução da aplicação.
Tarefa 13.5.1
DO
Crie o projeto ex13.5 e a classe Aplicacao da seguinte forma:
public class Aplicacao {
public static void main( String[] args ) {
if( args[0].equals(" -h") ) {
c
Copyright °1998-2004,
Dr. Italo S. Vega
13-7
Laboratório de Programação
Maio de 2004
System.out.println( "Uso: -d <dia>" );
}
else if( args[0].equals(" -d") ) {
System.out.print( "Dia " + args[1]);
}
for( int i = 0; i < args.length; i++ ) {
System.out.println( " " + args[ i ] );
}
}
}
Tarefa 13.5.2 Execute o método main() com os seguintes argumentos, e preencha
o correspondente resultado:
Argumentos
" -h"
" -d 7"
" -d 5 -t 65"
Resultado
Tarefa 13.5.3
Descreva as computações realizadas por esta aplicação (uma
para cada argumento) utilizando um mapa de execução. O que acontece quando
args.length == 0?
Tarefa 13.5.4
Proponha um mapa de execução de modo que, quando
args.length == 0, a aplicação entre em uma repetição solicitando o par
(dia:int,temperatura:int) para o usuário, e armazenando em uma variável
temperatura que aponta para uma estrutura array contendo 365 variáveis do tipo
int. (Sugestão: reutilize a classe Historico.)
Adote o “dia” -1 como sentinela da aplicação. Ao sair da repetição, a aplicação
deverá mostrar os valores armazenados na estrutura.
Tarefa 13.5.5
Implemente o mapa proposto em Java, alterando a classe
Aplicacao de forma apropriada.
c
Copyright °1998-2004,
Dr. Italo S. Vega
13-8
Laboratório de Programação
Maio de 2004
13.6 M ÁXIMO
E M ÍNIMO
Considere uma aplicação que solicite uma seqüência
de números inteiros positivos para o usuário, e informe o maior e o menor deles.
A seqüência não pode conter mais do que 10 números. Internamente, a aplicação
deverá armazenar os números fornecidos pelo usuário em um array apontado pela
variável numeros. Somente depois que o usuário fornecer o sentinela (-1) é que a
aplicação deverá determinar os limites da seqüência e apresentá-los para o usuário. Tarefa 13.6.1 Proponha um mapa de execução descrevendo os passos desta
computação.
Tarefa 13.6.2 Refaça o mapa proposto acrescentando o contexto Sequencia. Este
contexto deverá conter a variável numeros, capaz de apontar para um array de
ints. Também deverá oferecer os métodos: obterNumero(n:int):void (que insere
n em numeros), e mostrarMaior():int e mostrarMenor():int (acionados apenas
quando o usuário digitar -1).
Tarefa 13.6.3
anterior.
Tarefa 13.6.4
Crie o projeto ex13.6 e implemente o mapa elaborado na tarefa
Considerando que o usuário tenha fornecido a seqüência:
h56, 34, 123, 8, 333, −1i
quais os valores apresentados pela aplicação? Faça um desenho mostrando a situação final da variável-ponteiro numeros(bem como do array por ela apontado).
Tarefa 13.6.5
Antes de encerrar a aplicação, acrescente a seguinte linha:
int[] outra = numeros;
Crie uma forma de mostrar, alterando a aplicação a partir deste ponto, que a variável outra aponta para o mesmo array apontado pela variável numeros. Faça um
desenho da situação das variáveis numeros e outra.
Tarefa 13.6.6 A linguagem Java oferece uma operação arraycopy(), que copia
os valores de um array para outro. A sintaxe é dada por:
System.arraycopy( origem, i, destino, j, n );
Descubra (consultando alguma bibliografia de referência) como utilizar esta operação para copiar os valores da variável numeros para a variável outra. Crie uma
forma de mostrar que estas variáveis não mais compartilham o mesmo array. Faça
um desenho das estruturas array ilustrando a sua proposta.
13.7 C LASSIFICAÇÃO
POR S ELEÇÃO
(Exercício inspirado em Lewis & Loftus,
Java Software Solutions: Foundations of Program Design, 2001, Addison-Wesley.) O
mapa de execução apresentado na Figura 13.6 descreve o algoritmo de classificação
conhecido por selection sort.
c
Copyright °1998-2004,
Dr. Italo S. Vega
13-9
Laboratório de Programação
Maio de 2004
ordenarPorClassificacao( int[ ] lista )
i
0
i++
[ i < ( lista.length-1) ]
min
i
k
i +1
[ k < lista.length ]
k++
[lista [k] < lista [min] ]
min k
anterior lista[ min ]
lista[ min ]
lista[ i ]
lista[ i ]
anterior
Figura 13.5: Mapa de execução descrevendo o algoritmo de
classificação por seleção.
O mapa mostra que o método ordenarPorClassificação recebe um array conhecido
por lista como argumento.
Tarefa 13.7.1 Supondo que o mapa é parte do contexto Classificador, codifique
esta classe no projeto ex13.7.
Tarefa 13.7.2 Acrescente a variável notas na classe Classificador, usando a
forma Java abreviada para arrays com os seguintes valores:
h89, 94, 69, 80, 97, 85, 73, 91, 77, 85, 93i
Tarefa 13.7.3 Altere o mapa de execução proposto de modo a ser possível visualizar o array notas depois de classificado. Implemente a alteração e execute a
aplicação.
13.8 H ISTOGRAMA
(Exercício inspirado em Lewis & Loftus, Java Software Solutions: Foundations of Program Design, 2001, Addison-Wesley.) Desenhe e implemente
uma aplicação que crie um histograma a partir de um conjunto de valores. A aplicação deverá ler uma quantidade arbitrária de números inteiros no intervalo 1. .100; em
seguida, produzirá uma carta similar àquela apresentada a seguir, que indica quantos valores de entrada pertenciam ao intervalo 1 − 10, 11 − 20, e assim por diante. Um
asterisco deverá ser mostrado para cada valor de entrada.
1
11
21
31
41
51
61
71
81
91
-
10
20
30
40
50
60
70
80
90
100
|
|
|
|
|
|
|
|
|
|
****
**
*********************
***
**********
*****
*
*********
***************
c
Copyright °1998-2004,
Dr. Italo S. Vega
13-10
Laboratório de Programação
Maio de 2004
13.9 R EVISÃO
1
2
3
4
5
6
7
8
9
10
11
12
13
Horizontais: 2 Tipo de instrução que reduz o
universo de objetos em uma aplicação.
4
Conjunto de operações de um objeto.
6
Aquilo que se observa quando um objeto executa um método. 8 Valor Java normalmente
utilizado em instruções de destruição de objetos. 11 Categoria de um atributo equivalente
a uma operação [[<query>]]. 12 Tipo de instrução para fabricar novos objetos a partir de
uma classe. 13 Tipo de instrução que, ao ser
executada, provoca um efeito colateral.
Verticais: 1 Ao ser avaliada, produz um resultado. 3 Mecanismo que permite o agrupamento de atributos e métodos no paradigma
de objetos. 5 Tipo de operação que cria um
novo objeto a partir de um pré-existente, com
o mesmo estado. 7 Série finita de instruções
executadas por um objeto quando ele recebe
uma mensagem. 9 Estereótipo UML para representar operações-comando. 10 Categoria
de um atributo equivalente a uma operação
[[<update>]].
13.10
M EDIÇÃO DE T EMPERATURAS
Considere o problema de registrar as temperaturas diárias de uma máquina a vapor. O registro deve cobrir um ano (365 dias)
de operação da máquina a vapor. O valor de cada dia é armazenado em uma variável
interna a uma estrutura array conhecida pelo apontador temperatura.
Tarefa 13.10.1 Proponha um mapa de execução baseado em repetição com contador para zerar as temperaturas do array temperatura.
Tarefa 13.10.2 Refaça o mapa proposto acrescentando os contextos da aplicação,
do teclado e da tela.
Tarefa 13.10.3 Implemente o mapa proposto em Java, utilizando a classe
do diretório ex13.10. Mostre que a aplicação zerou a variável array.
Aplicacao
Tarefa 13.10.4 Proponha uma extensão do mapa de execução anterior da seguinte forma. Depois de zerar os valores das temperaturas a aplicação solicita que
c
Copyright °1998-2004,
Dr. Italo S. Vega
13-11
Laboratório de Programação
Maio de 2004
o usuário indique o dia e o valor da temperatura naquele dia, armazenando-o de
forma adequada na variável temperatura. Quando o dado de entrada representando o
dia assumir o valor zero, a aplicação mostra os valores de todas as variáveis do array
e termina.
Tarefa 13.10.5
extensão.
Altere a classe
Aplicacao
do diretório ex13.10para implementar esta
13.11
E RRO DE A CESSO
(Exercício inspirado em Lewis & Loftus, Java Software
Solutions: Foundations of Program Design, 2001, Addison-Wesley.) Descreva o que
acontece no seguinte código em Java. Quais alterações devem ser feitas no código?
int[] numeros = {3,2,3,6,9,10,12,32,3,12,6};
for( int i = 1; i <= numeros.length;i ++ ) {
System.out.println( numeros[ i ] );
}
13.12
I NVERSÃO DE S EQÜÊNCIAS
(Exercício inspirado em Lewis & Loftus, Java
Software Solutions: Foundations of Program Design, 2001, Addison-Wesley.) Crie
uma aplicação que leia uma lista contendo quatro números do usuário, armazeneos em um array e depois apresente-os na ordem oposta na tela.
Tarefa 13.12.1 Proponha um mapa de execução descrevendo uma seqüência de
eventos para esta aplicação.
Tarefa 13.12.2 Refaça o mapa proposto acrescentando os contextos da aplicação,
do teclado e da tela.
Tarefa 13.12.3 Crie as classes no diretório ex13.12, implementando o mapa elaborado na tarefa anterior.
Tarefa 13.12.4
Considerando que o usuário tenha fornecido a seqüência:
h45.7, 55.2, 69.0, 29.03i
quais os valores apresentados pela aplicação? Faça um desenho mostrando a situação final da variável-ponteiro numero (bem como do array por ela apontado).
13.13
A RGUMENTOS DO P ROCESSO P RINCIPAL
Toda aplicação em Java tem um
método main com o parâmetro String[] args. Este parâmetro indica que o método main
recebe um array de strings, cada um deles representando um argumento quando da
execução da aplicação. Considere a seguinte aplicação:
public class Aplicacao {
public static void main( String[] args ) {
if( args[0].equals( "-h" ) ) {
System.out.println( "Uso: java Aplicacao -d <dia>" );
}
else if( args[0].equals( "-d" ) ) {
System.out.print( "Dia " + args[1]);
}
for( int i = 0; i < args.length; i++ ) {
System.out.println( " " + args[ i ] );
}
}
}
c
Copyright °1998-2004,
Dr. Italo S. Vega
13-12
Laboratório de Programação
Maio de 2004
Tarefa 13.13.1 Implemente esta classe no diretório ex13.13. Execute a aplicação
proposta utilizando as seguintes linhas de execução:
java Aplicacao -h
java Aplicacao -d 7
java Aplicacao -d 5 -t 65
Tarefa 13.13.2 Descreva as computações realizadas por esta aplicação utilizando
um mapa de execução. O que acontece quando args.length == 0?
Tarefa 13.13.3
Proponha um mapa de execução de modo que, quando
args.length == 0,
a aplicação entre em uma repetição solicitando o par
(dia:int,temperatura:int) para o usuário, e armazenando em uma variável temperatura
que aponta para uma estrutura array contendo 365 variáveis do tipo int. Adote o
“dia” zero como sentinela da aplicação. Ao sair da repetição, a aplicação deverá
mostrar os valores armazenados na estrutura.
Tarefa 13.13.4 Implemente o mapa proposto em Java, alterando a classe
do diretório ex13.13.
Aplicacao
13.14
M ÁXIMO E M ÍNIMO
Considere uma aplicação que solicite uma seqüência
de números inteiros positivos para o usuário, e informe o maior e o menor deles.
A seqüência não pode conter mais do que 10 números. Internamente, a aplicação
armazena os números fornecidos pelo usuário em um array apontado pela variável
numero. Somente depois que o usuário fornecer o sentinela (−1) é que a aplicação
deverá determinar os limites da seqüência e apresentá-los para o usuário.
Tarefa 13.14.1 Proponha um mapa de execução descrevendo uma seqüência de
eventos para esta aplicação.
Tarefa 13.14.2 Refaça o mapa proposto acrescentando os contextos da aplicação,
do teclado e da tela.
Tarefa 13.14.3 Crie as classes no diretório ex13.14, implementando o mapa elaborado na tarefa anterior.
Tarefa 13.14.4
Considerando que o usuário tenha fornecido a seqüência:
h56, 34, 123, 8, 333, −1i
quais os valores apresentados pela aplicação? Faça um desenho mostrando a situação final da variável-ponteiro numero (bem como do array por ela apontado).
Tarefa 13.14.5
Antes de encerrar a aplicação, acrescente a seguinte linha:
int[] outro = numero;
Crie uma forma de mostrar, alterando a aplicação a partir deste ponto, que a variável
outro aponta para o mesmo array apontado pela variável numero. Faça um desenho da
situação das variáveis numero e outro.
Tarefa 13.14.6 A linguagem Java oferece uma operação
valores de um array para outro. A sintaxe é dada por:
c
Copyright °1998-2004,
Dr. Italo S. Vega
arraycopy,
que copia os
13-13
Laboratório de Programação
Maio de 2004
System.arraycopy( origem, i, destino, j, n );
Descubra (consultando alguma bibliografia de referência) como utilizar esta operação para copiar os valores da variável numero para a variável outro. Crie uma forma
de mostrar que estas variáveis não mais compartilham o mesmo array. Faça um
desenho das estruturas array ilustrando a sua proposta.
13.15
C LASSIFICAÇÃO POR S ELEÇÃO
(Exercício inspirado em Lewis & Loftus,
Java Software Solutions: Foundations of Program Design, 2001, Addison-Wesley.) O
mapa de execução apresentado na Figura 13.6 descreve o algoritmo de classificação
conhecido por selection sort.
ordenarPorClassificacao( int[ ] lista )
i
0
min
i++
[ i < ( lista.length-1) ]
i
k
i +1
[ k < lista.length ]
k++
[lista [k] < lista [min] ]
min
k
anterior lista[ min ]
lista[ min ]
lista[ i ]
lista[ i ]
anterior
Figura 13.6: Mapa de execução descrevendo o algoritmo de
classificação por seleção.
O mapa mostra que o método ordenarPorClassificação recebe um array conhecido
por lista como argumento.
Tarefa 13.15.1
Supondo que o mapa é parte do contexto da aplicação,
implemente-o na classe Aplicacao, parte do diretório ex13.15.
Tarefa 13.15.2 Crie o método main da aplicação, de forma que um array conhecido
por notas seja declarado de forma abreviada com os seguintes valores:
h89, 94, 69, 80, 97, 85, 73, 91, 77, 85, 93i
Tarefa 13.15.3
sualizar o array
aplicação.
Altere o mapa de execução proposto de modo a ser possível videpois de classificado. Implemente a alteração e execute a
notas
c
Copyright °1998-2004,
Dr. Italo S. Vega
13-14
Laboratório de Programação
Maio de 2004
13.16
H ISTOGRAMA
(Exercício inspirado em Lewis & Loftus, Java Software
Solutions: Foundations of Program Design, 2001, Addison-Wesley.) Desenhe e implemente uma aplicação que crie um histograma a partir de um conjunto de valores.
A aplicação deverá ler uma quantidade arbitrária de números inteiros no intervalo
1 . . 100; em seguida, produzirá uma carta similar àquela apresentada a seguir, que
indica quantos valores de entrada pertenciam ao intervalo 1 − 10, 11 − 20, e assim por
diante. Um asterisco deverá ser mostrado para cada valor de entrada.
1
11
21
31
41
51
61
71
81
91
-
10
20
30
40
50
60
70
80
90
100
|
|
|
|
|
|
|
|
|
|
****
**
*********************
***
**********
*****
*
*********
***************
c
Copyright °1998-2004,
Dr. Italo S. Vega
13-15
Download