Laboratório de
Programação
Dr. Italo Santiago Vega
Curso de Graduação Ciência da Computação Pontifícia Universidade de São Paulo
Semana Data Tópico
1 2004-02-18 Apresentação: algoritmo e computação. Bibliografia básica. Critérios de Avaliação.
2 2004-02-25 Recesso: Carnaval
3 2004-03-03 Organização de programas. Ambiente de programação (Java). 4 2004-03-10 BlueJ: apresentação e computação com objetos.
5 2004-03-17 Variáveis e valores. Expressões com operações aritméticas. 6 2004-03-24 Representação de computações. Entrada e saída. Seleção
sim-ples.
Conteúdo
1 Seleção Entre Duas Rotas 3
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 a seguir.
[ condição = false ]
a
[ condição = true ]
b
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.
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
No caso do mapa da Figura a seguir, 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
Exercício 8.1
SELEÇÃO DE DUAS ROTASTarefa 8.1.1 Crie o projeto ex8.1.
Tarefa 8.1.2 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 {
} }
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 Monitor 4
5
6
Tarefa 8.1.5 O mapa de execução mostrado na Figura a seguir procura descrever computações realizadas por objetos das classes Tanque e Detetor.
obterNivel( ) [ dado > 5 ] mostrar( msg ) “Normal” “Acima do limite” dado:Int msg:String nivel:Int
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 Refaça o mapa da Figura a seguir, acrescentando os contextos
Exercício 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 Crie o projeto ex8.2.
Tarefa 8.2.5 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 "$$$$$".
Exercício 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
Tarefa 8.3.3 Crie o projeto ex8.3.
Tarefa 8.3.4 Codifique o mapa anteriormente elaborado.
Tarefa 8.3.5 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
Exercício 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%, retorna-se 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.
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 Crie o projeto ex8.4.
Tarefa 8.4.4 Codifique o mapa anteriormente elaborado.
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
Exercício 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.
p:Professor e a:Aluno. Proponha uma distribuição “razoável” dos passos da computação.
Tarefa 8.5.3 Crie o projeto ex8.5.
Tarefa 8.5.4 Escreva as classes que implementam o mapa elaborado na tarefa anterior.
Tarefa 8.5.5 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
Exercício 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.
Exercício 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.
tela.
c) Escreva as classes que implementam o mapa elaborado na tarefa anterior no
Semana Data Tópico
1 2004-02-18 Apresentação: algoritmo e computação. Bibliografia básica. Critérios de Avaliação.
2 2004-02-25 Recesso: Carnaval
3 2004-03-03 Organização de programas. Ambiente de programação (Java). 4 2004-03-10 BlueJ: apresentação e computação com objetos.
5 2004-03-17 Variáveis e valores. Expressões com operações aritméticas. 6 2004-03-24 Representação de computações. Entrada e saída. Seleção
sim-ples.