Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação LP: Laboratório de Programação Apontamento 8 Prof. ISVega Março de 2004 Controle de Execução: Seleção Múltipla CONTEÚDO 8.1 Seleção Entre Duas Rotas............. 1 Exercícios.......................... 3 Objetivos Apresentar e estudar a estrutura de controle simples. 8.1 Seleção Entre Duas Rotas A bifurcação de uma rota também pode ser utilizada para representar o caso onde há a necessidade de se escolher uma dentre duas seqüências de responsabilidades de interesse. A escolha pode ser representada por uma condição associada a cada ramo da bifurcação. Este padrão estrutural de mapas é mostrado na Figura 8.1. A bifurcação da rota é guardada por uma condição. Se a sua avaliação produzir o valor true, desvia para um trecho distinto do caso da produção de false. [ condição = true ] a [ condição = false ] b Figura 8.1: Estrutura de um mapa de execução representando a escolha de uma entre duas rotas, baseada em uma condição. 1
Cada ramo da bifurcação encontra-se associado a uma expressão que representa a condição. Quando a condição é válida, prossegue-se a computação por um ramo da bifurcação. No caso da condição ser inválida, a computação prossegue pelo outro ramo. No caso do mapa da Figura 8.1, se o valor produzido pela avaliação da expressão for o valor true, a computação seguirá a rota que cruza a responsabilidade a. Entretanto, se a condição for inválida, a computação seguirá o outro ramo da bifurcação, cruzando a responsabilidade b. O diagrama sintático para a descrição de computações com seleção dupla é: CmdSelecao if ( Condicao ) Comando else Comando Tais estruturas podem ser programadas segundo o padrão: if( <condição> == true ) { // seqüência de passos quando a condição for true else { // seqüência de passos quando a condição for false Copyright c 1998-2004, Dr. Italo S. Vega 8-2
EXERCÍCIOS 8.1 SELEÇÃO DE DUAS ROTAS Tarefa 8.1.1 Tarefa 8.1.2 Crie o projeto ex8.1. Crie a classe Tanque da seguinte forma: public class Tanque { public int nivel; public void obternivel( int novo ) { nivel = novo; Tarefa 8.1.3 Crie a classe Detetor da seguinte forma: public class Detetor { public Tanque t; public void detetar() { String msg = ""; int dado = t.nivel; if( dado > 5 ) { msg = "Acima do limite"; else { msg = "Normal"; public void mostrar( String resultado ) { System.out.println( resultado ); Tarefa 8.1.4 Crie os objetos d:detetor e t:tanque. Com mensagens apropriadas enviadas para estes objetos, preencha a seguinte tabela: dado 4 5 6 Monitor Tarefa 8.1.5 O mapa de execução mostrado na Figura 8.2 procura descrever computações realizadas por objetos das classes Tanque e Detetor. Copyright c 1998-2004, Dr. Italo S. Vega 8-3
dado:int [ dado > 5 ] obternivel( ) nivel:int Acima do limite msg:string Normal mostrar( msg ) Figura 8.2: Mapa de execução para a computação descrita pela aplicação Java. A seqüência de responsabilidades do mapa corresponde à seqüência de ações descritas pelo código Java anteriormente proposto? Justifique a sua resposta. Tarefa 8.1.6 e t:tanque. Refaça o mapa da Figura 8.2, acrescentando os contextos d:detetor 8.2 ELSE PERDIDO (Adaptado de Deitel & Deitel, ex. 4.21, p. 153.) Considere a seguinte Aplicacao no diretório ex8.2: public class Aplicacao { public int x; public void mudarx( int novo ) { x = novo; public int y; public void mudary( int novo ) { y = novo; public void f() { if( x < 10 ) if( y > 10 ) System.out.println( "*****" ); else System.out.println( "#####" ); System.out.println( "$$$$$" ); Tarefa 8.2.1 Elabore um mapa de execução para a seqüência de responsabilidades produzida por esta aplicação. Suponha que os valores das variáveis x e y sejam definidos antes do passo f(). Tarefa 8.2.2 Qual o resultado da execução desta aplicação quando x for igual a 9 e y for igual a 11? Tarefa 8.2.3 Qual o resultado da execução desta aplicação quando x for igual a 11 e y for igual a 9? Tarefa 8.2.4 Tarefa 8.2.5 Crie o projeto ex8.2. Codifique a aplicação e verifique os resultados da sua execução. Tarefa 8.2.6 Altere a lógica da computação de modo que, quando y <= 10, a aplicação mostre "#####" e "$$$$$". Copyright c 1998-2004, Dr. Italo S. Vega 8-4
Tarefa 8.2.7 Reescreva a aplicação utilizando as regras de estilo do laboratório. 8.3 AVALIAÇÃO DE PESO Considere o problema de transformar o peso e a altura de um paciente em uma de três mensagens: "Paciente com pouco peso" "Paciente com peso normal" "Paciente com muito peso" O resultado deve ser gerado a partir de três informações numéricas: (i) o peso do paciente em kg, (ii) a altura do paciente em metros, e (iii) o código do sexo ( 0 para homens, 1 para mulheres). Pode-se assumir que o peso ideal de um paciente é proporcional a sua altura, e que as mensagens de subpeso ou sobrepeso nao devem aparecer, a não ser em casos nos quais o peso do paciente difere do peso ideal por mais do que 10%. Tarefa 8.3.1 Proponha um mapa de execução destacando passos importantes de uma computação que produza os resultados solicitados. Tarefa 8.3.2 Organize os passos em contextos de execução apropriados. Considere, no mínimo, a existência do contexto p:paciente para a execução de passos da computação. Tarefa 8.3.3 Tarefa 8.3.4 Tarefa 8.3.5 Crie o projeto ex8.3. Codifique o mapa anteriormente elaborado. Preencha a tabela com a ajuda do seu programa: Peso Altura Sexo Mensagem 50 kg 1, 55 m 1 60 kg 1, 75 m 1 80 kg 1, 80 m 0 65 kg 1, 80 m 1 130 kg 1, 60 m 0 8.4 ANÁLISE DE UM ATLETA Baseado na no ritmo cardíaco de um atleta (medido em batimentos por minuto), deseja-se produzir um número da seguinte forma: (i) se o ritmo é menor do que 60, deve-se retornar -1; (ii) se o ritmo é maior do que 80, retorna-se 1; (iii) senão retorna-se 0. Uma outra necessidade, é transformar a gordura de uma atleta, representada como uma percentagem do seu peso, em um de três inteiros: (i) se a percentagem de gordura for inferior a 10%, deve-se retornar -1; (ii) se for maior do que 20%, retornase 1; (iii) senão retorna-se 0. Tarefa 8.4.1 Proponha um mapa de execução destacando passos importantes de uma computação que produza os resultados solicitados. Copyright c 1998-2004, Dr. Italo S. Vega 8-5
Tarefa 8.4.2 Organize os passos em contextos de execução apropriados. Considere, no mínimo, a existência do contexto a:atleta para a execução de passos da computação. Tarefa 8.4.3 Tarefa 8.4.4 Tarefa 8.4.5 Crie o projeto ex8.4. Codifique o mapa anteriormente elaborado. Preencha a tabela com a ajuda do seu programa: Ritmo Gordura Resultado Ritmo Resultado Gordura 60 bpm 5% m 65 bpm 10% m 70 bpm 15% m 80 bpm 20% m 90 bpm 25% m 8.5 SITUAÇÃO DE UM ALUNO COM RECUPERAÇÃO A situação final de um aluno depende das notas obtidas nas provas P1 e P2. Com base nestas notas, a sua média é calculada pela fórmula: MF = (P1 + P2)/2 A situação final do aluno será APROVADO, caso o valor de MF seja maior ou igual a 5. Se o aluno não foi aprovado, ele faz uma prova de recuperação PR. A média a ser utilizada para determinar a situação do aluno neste caso é: MFR = 0, 3MF + 0, 7PR A situação do aluno, neste caso, será APROVADO, se MFR for maior do que 5; senão, será REPROVADO. Tarefa 8.5.1 Proponha um mapa de execução onde se garanta uma seqüência de responsabilidades que apresente a situação final de um aluno. Tarefa 8.5.2 Refaça o mapa proposto acrescentando os contextos de execução p:professor e a:aluno. Proponha uma distribuição razoável dos passos da computação. Tarefa 8.5.3 Tarefa 8.5.4 anterior. Tarefa 8.5.5 Crie o projeto ex8.5. Escreva as classes que implementam o mapa elaborado na tarefa Execute a aplicação e preencha a seguinte tabela: P1 P2 PR MF MFR Situação 6 4-3 7-5 5-3 2 7 3 2 4 Copyright c 1998-2004, Dr. Italo S. Vega 8-6
8.6 COMPARAÇÃO DE NÚMEROS O jogo careta tem a seguinte regra: em 10% das jogadas, se o número inteiro gerado pelo computador for menor do que o indicado pelo jogador, o computador ganha. Caso contrário, o jogador ganha. (A biblioteca Java oferece um mecanismo para gerar números inteiros aleatoriamente. Importe a classse java.util.random. Crie um objeto desta classe. Ao enviar a mensagem nextint(), este objeto retorna o próximo inteiro da seqüência aleatória.) Tarefa 8.6.1 Proponha um mapa de execução destacando passos importantes de uma computação que reproduza este jogo computacionalmente. Se o jogador for vitorioso, deve-se mostrar :); senão, deve-se mostrar :(. Tarefa 8.6.2 Organize os passos em contextos de execução apropriados. Considere, no mínimo, a existência dos contextos j:jogador e c:computador para a execução de passos da computação. Distribua os passos convenientemente entre estes contextos. Suponha que j apresente uma variável aposta:int que armazene o número apostado pelo jogador. Também acrescente a variável aleatorio:int em c, que armazena o valor gerado aleatoriamente. Tarefa 8.6.3 Crie o projeto ex8.6. Tarefa 8.6.4 Codifique o mapa anteriormente elaborado. Acrescente passos de computação que apresentem os valores envolvidos na decisão do vitorioso. 8.7 CONTA DE CRÉDITO Desenvolva uma aplicação em Java que determine se a conta de crédito de um cliente em um supermercado excedeu ou não o seu limite. Para cada cliente, são conhecidos: Número da conta Saldo no início do mês Total das compras realizadas no mês Total de bônus oferecidos ao cliente como prêmio Limite de crédito da conta A aplicação deverá obter cada uma destas informações como inteiros, calcular o novo saldo da conta (=saldo inicial + compras - bônus), mostrar o novo saldo, e determinar se este novo saldo excede o limite de crédito do cliente. Para os clientes que excederam o limite, a aplicação deverá mostrar a mensagem: Limite de crédito excedido. a) Elabore um mapa de execução representando as diferentes seqüências de responsabilidades desta aplicação. b) Refaça o mapa proposto acrescentando os contextos da aplicação, do teclado e da tela. c) Escreva as classes que implementam o mapa elaborado na tarefa anterior no diretório ex8.7. Copyright c 1998-2004, Dr. Italo S. Vega 8-7