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