![Page 1: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/1.jpg)
Estruturas de DecisãoEstruturas de Decisão
Programação em Java
Prof. Maurício Braga
![Page 2: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/2.jpg)
2
Estruturas de decisão
Existem situações em que desejamos que nem todos os comandos incluídos em um algoritmo sejam executados.
Nestas situações, ensinamos o computador a tomar decisões, optando ou não por executar determinados comandos.
Como os computadores não tomam decisões sozinhos, devemos instruí-lo a seguir um determinado caminho no algoritmo. Para isto é necessário o teste do resultado de uma expressão
lógica.
![Page 3: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/3.jpg)
3
Comando SE
Estrutura de decisão básica em algoritmos Sintaxe:
se <expr_lógica> então <comandoV>;
se <expr_lógica> então <comandoV> senão <comandoF>;
ou
Apenas um dos doiscomandos é executado
ComandoV é executado se expr_lógica avaliar
para Verdadeiro
![Page 4: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/4.jpg)
4
Comando SE em Java
ifif (condição) // onde condição pode ser uma expressão (condição) // onde condição pode ser uma expressão
{{
Declarações ou blocos Declarações ou blocos
}}
elseelse // caso a condição anterior não seja satisfeita// caso a condição anterior não seja satisfeita
{ {
Declarações ou blocos Declarações ou blocos
}}
![Page 5: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/5.jpg)
5
Exemplo SE em Java
ifif (x >= y) (x >= y) {{ System.out.println(“X é maior ou igual a Y.”); System.out.println(“X é maior ou igual a Y.”); }}elseelse{ { System.out.println(“X é menor que Y.”);System.out.println(“X é menor que Y.”);}}
![Page 6: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/6.jpg)
6
Comando SE
Exemplo: Ler a idade de uma pessoa e imprimir a mensagem “Você é
maior de idade” se ela tiver 18 anos ou mais.
Solução Aplicação simples do comando SE. Única entrada é a idade de uma pessoa, que será armazenada
numa variável inteira. Não é possível resolver este problema utilizando apenas
seqüenciação.
![Page 7: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/7.jpg)
7
Comando SE
Solução (cont.) O algoritmo fica assim:
Variáveisidade : inteiro;
Inícioescrever “Forneça a idade: “;ler idade;se idade >= 18 então
escrever “Você é maior de idade”;Fim
![Page 8: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/8.jpg)
8
Exemplo SE em Javapublic static void main(String[] args) { // declaração de variáveis int idade=0; System.out.println(“Forneça a idade:"); idade=Leia(idade); if (idade >=18) System.out.println(“Você é maior de idade.”);
}
![Page 9: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/9.jpg)
9
Utilizando o exemplo SE
A função Leia utilizada até agora não funciona com variáveis inteiras.
Podemos converter a variável idade para double ou escrever uma função Leia que aceite variáveis inteiras.
![Page 10: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/10.jpg)
10
Função Leia com variáveis inteiraspublic static int Leia(int param) {
// objeto que contém o dado digitado pelo usuário
DataInputStream dado_lido;
// variável auxiliar cujo objetivo é facilitar a conversão dos dados
String stemporario;
int resultado = 0;
try {
dado_lido = new DataInputStream(System.in);
stemporario = dado_lido.readLine();
resultado =Integer.parseInt(stemporario);
}catch (Exception e) { }
return resultado;
}
![Page 11: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/11.jpg)
11
Comando SE com SENÃO
Modifique o programa anterior. Ele agora deverá: Ler a idade de uma pessoa e imprimir a mensagem “Você é
maior de idade” se ela tiver 18 anos ou mais, ou “Você é menor de idade” caso contrário.
![Page 12: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/12.jpg)
12
Comando SE
Solução (cont.) O algoritmo fica assim:
Variáveisidade : inteiro;
Inícioescrever “Forneça a idade: “;ler idade;se idade >= 18 então
escrever “Você é maior de idade”senão
escrever “Você é menor de idade”;Fim
![Page 13: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/13.jpg)
13
Exemplo SE com SENÃO em Javapublic static void main(String[] args) { // declaração de variáveis int idade=0; System.out.println(“Forneça a idade:"); idade=Leia(idade); if (idade >=18) System.out.println(“Você é maior de idade.”); else System.out.println(“Você é menor de idade.”);
}
![Page 14: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/14.jpg)
14
Comando SE
Exercício: Faça um programa em Java que leia um número inteiro
informado pelo usuário e diga se ele é par ou ímpar.
Sugestão: Use o % (resto da divisão inteira) para saber se o número é par ou ímpar.
![Page 15: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/15.jpg)
15
Comando SE
Exemplo 3: Ler um número inteiro e dizer se ele é par ou ímpar.
Solução
Variáveisnumero : inteiro;
Inícioescrever “Forneça o número: “;ler numero;se (numero % 2) = 0 então
escrever “O número é par”senão
escrever “O número é ímpar”;Fim
![Page 16: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/16.jpg)
16
Soluçãopublic static void main(String[] args) { // declaração de variáveis int numero=0; System.out.println(“Forneça o número:"); numero=Leia(numero); if (numero %2 == 0) System.out.println(“O número é par.”); else System.out.println(“O número é ímpar.”);
}
![Page 17: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/17.jpg)
17
Comando SE
Exercícios Ler um número inteiro e dizer se ele é par e divisível por 3. Ler o preço de dois produtos e imprimir qual é o maior.
Desconsidere empates. Imprimir se um número X é divisível por um número Y.
![Page 18: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/18.jpg)
18
Testes encadeados
Em determinadas situações é necessária a realização de testes dentro de outros testes.
Normalmente esta necessidade surge da combinação de decisões a serem tomadas.
Este tipo de estrutura é chamado de encadeamento ou aninhamento.
Quando ocorre um encadeamento de testes, o algoritmo possui um comando de decisão dentro de outro. Este comando mais interno pode estar localizado junto ao
ENTÃO ou junto ao SENÃO.
![Page 19: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/19.jpg)
19
Testes encadeados
Exemplos de encadeamento
se A > B entãose K > M então
C = Ksenão
C = M;...
se X < Y entãoS = X + Y
senãose X < A + B
A = C;senão
B = C;
![Page 20: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/20.jpg)
20
Instruções de seleção
Problema do else oscilante
if (x > 5)
if (y > 5)
System.out.println("x e y são > 5");
else
System.out.println("x é <= 5");
Não é o queparece
![Page 21: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/21.jpg)
21
Instruções de seleção
Problema do else oscilante (cont.)
if (x > 5) {{
if (y > 5)
System.out.println("x e y são > 5");
}} else
System.out.println("x é <= 5");
Agora sim
![Page 22: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/22.jpg)
22
Instruções de seleção
Cuidado com blocos
if (nota >= 7)
System.out.println("Aprovado");
else
System.out.println(“Prova final necessária");
System.out.println(“Verificar data na secretaria");
Não funcionacomo deveria
{
}
Agoraestá
correto
![Page 23: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/23.jpg)
23
Testes encadeados
Exemplo 4: Um quiosque de sorvetes vende casquinhas somente nos
sabores Chocolate (sabor = 1) e Morango (sabor = 2), não permitindo misturar os sabores num mesmo sorvete. Faça um programa para imprimir uma mensagem nas seguintes situações:
Sorvete de chocolate com mais de três bolas: “desconto de 10%”; Sorvete de chocolate com qualquer quantidade de bolas: “desconto
de 5%”; Sorvete de morango com qualquer quantidade de bolas: “sorvete
sem desconto”.
![Page 24: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/24.jpg)
24
Testes encadeados
Para imprimir a mensagem correta, o algoritmo precisa saber dois dados: o sabor do sorvete e a quantidade de bolas.
Imprimir a mensagem correta requer testar as variáveis de entrada.
![Page 25: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/25.jpg)
25
Testes encadeados Solução (cont.)
O corpo do algoritmo ficaria assim:
Variáveissabor : caractere;bolas : inteiro;
Inícioescrever “Entre com o sabor (1 ou 2): “;ler sabor;escrever “Entre com a quantidade de bolas: ”;ler bolas;se sabor = ‘1’ então
se bolas > 3 entãoescrever “Desconto de 10%”
senãoescrever “Desconto de 5%”;
senãoescrever “Sorvete sem desconto”;
Fim
![Page 26: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/26.jpg)
26
Testes encadeados
Exercícios Fazer um algoritmo para ler as três notas de um aluno em uma
disciplina, e depois imprimir a média aritmética das notas e a situação do aluno, a partir das seguintes regras:
Média >= 7.0 – Aprovado; 4 <= Média < 7 – Prova Final; Média < 4 – Reprovado.
Um casal possui três filhos: Marquinhos, Zezinho e Luluzinha. Faça um algoritmo para ler as idades dos filhos e exibir quem é o caçula da família; suponha que não haja empates.
Faça um algoritmo para ler as coordenadas de um ponto (x, y)do plano cartesiano, e exibir uma mensagem dizendo se pertence ao eixo X, ao eixo Y, à origem ou a nenhuma das situações.
![Page 27: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/27.jpg)
27
Comando CASO
O comando caso é útil em situações onde há necessidade de se testar uma mesma variável (ou expressão) que possa conter diversos valores Cada valor exige a execução de comandos diferentes.
Uma expressão é comparada a diversos valores de acordo com a ordem definida.
Ao encontrar uma ocorrência do valor correto, o comando relativo é executado e o algoritmo segue para o fim do CASO.
Se nenhum dos valores for igual ao conteúdo da variável, poderá ser executado um outro comando através do complemento SENÃO.
![Page 28: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/28.jpg)
28
Comando CASO
Sintaxe:
caso <var ou expr> seja<valor1> : <comando1>;<valor2> : <comando2>;<valor3> : <comando3>;...<valorN> : <comandoN>;senão <comandoF>;
fimcaso;
![Page 29: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/29.jpg)
29
Comando CASO em Java
A sintaxe do switch é:
switch (expressão) { case constante1:
expressões; break; case constante2:
expressões; break; default: expressões; }
![Page 30: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/30.jpg)
30
Comando CASO
Exemplo: Dado o número de matrícula de um sócio do clube Boa Social,
fornecido pelo usuário, faça um programa que imprima o mês de pagamento da anuidade, de acordo com as condições abaixo.
Final 0 – Pagamento em Janeiro; Final 1 – Pagamento em Fevereiro; Final 2 – Pagamento em Março; Final 3 – Pagamento em Abril; Outro final – Pagamento em Maio.
![Page 31: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/31.jpg)
31
Comando CASO
Solução: Teremos que receber o número de matrícula do usuário e
identificar o último dígito. Para isto podemos utilizar o resto da divisão do número de matrícula por 10.
Utilizar uma estrutura de decisão para imprimir corretamente o mês de pagamento da anuidade.
Podem ser utilizados o comando SE ou o comando CASO.
![Page 32: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/32.jpg)
32
Comando CASO
Solução:Variáveis
num_matricula, final : inteiro;Início
escrever “Forneça o número de matrícula: ”;ler num_matricula;
final = num_matricula % 10;
caso final seja0 : escrever “Pagamento em Janeiro”;1 : escrever “Pagamento em Fevereiro”;2 : escrever “Pagamento em Março”;3 : escrever “Pagamento em Abril”;senão
escrever “Pagamento em Maio”;fimcaso;
Fim
![Page 33: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/33.jpg)
33
Exemplo Caso em Javapublic static void main(String[] args) { // declaração de variáveis
int matricula = 0, final_numero =0;
System.out.println("Forneça o número da matrícula:");
matricula=Leia(matricula);
final_numero = matricula % 10;
switch (final_numero) {
case 0:
System.out.println("Pagamento em Janeiro.");
break;
case 1:
System.out.println("Pagamento em Fevereiro.");
break;
![Page 34: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/34.jpg)
34
Exemplo switch em Javapublic static void main(String[] args) { case 2:
System.out.println("Pagamento em Março.");
break;
case 3:
System.out.println("Pagamento em Abril.");
break;
default:
System.out.println("Pagamento em Maio.");
break;
}
}
![Page 35: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/35.jpg)
35
Comando CASO
Exemplo: Ler o número referente a um dia da semana e imprimir a
mensagem “dia útil” ou “fim-de-semana”, considerando que 1 = domingo, 2 = segunda-feira, etc.
Solução Para este algoritmo, iremos utilizar algumas facilidades providas
pelo comando CASO. Se precisarmos comparar mais de um valor para a execução de um
determinado comando, podemos separá-los por vírgulas; Se quisermos comparar um intervalo de valores, podemos indicá-
los por dois pontos seguidos.
![Page 36: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/36.jpg)
36
Comando CASO
Solução:
Variáveiscod_dia : inteiro;
Inícioescrever “Entre com o código do dia: ”;ler cod_dia;
caso cod_dia seja2..6 : escrever “Dia Útil”;1,7 : escrever “Fim-de-semana”;senão
escrever “Código inválido”;fimcaso;
Fim
Incluído caso ousuário forneça um
dia inválido
![Page 37: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/37.jpg)
37
Exemplo switch em Java 2public static void main(String[] args) { // declaração de variáveis
int cod_dia = 0;
System.out.println("Entre com o código do dia:");
cod_dia=Leia(cod_dia);
switch (cod_dia) {
case 1:
case 7:
System.out.println("Fim de semana.");
break;
![Page 38: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/38.jpg)
38
Exemplo switch em Java 2case 2:
case 3:
case 4:
case 5:
case 6:
System.out.println("Dia útil.");
break;
default:
System.out.println("Código inválido.");
}
}
![Page 39: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/39.jpg)
39
Comando CASO
Limitações do comando CASO Só pode ser usado para comparação de valores diretos e que
sejam inteiros. Não é possível comparar com números fracionários. É possível comparar com caracteres, que estarão entre aspas
simples (ex.: ‘a’, ‘b’, etc.). Permite apenas comparações de igualdade, não permitindo as
demais comparações relacionais (maior que, menor que, etc.). Compara apenas uma única variável ou expressão.
![Page 40: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/40.jpg)
40
Blocos de comando
Vimos que nos comandos SE e CASO, um determinado comando pode ser executado a depender do valor de uma variável.
Existem situações em que desejaremos executar mais de um comando de acordo com o resultado da expressão.
Nestas situações, será necessária a utilização de blocos de comandos.
![Page 41: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/41.jpg)
41
Blocos de comando
Sintaxe:
Os blocos de comandos são pacotes de comandos que podem ser utilizados nos locais em que espera-se um único comando.
[[<comando1>;<comando2>;...<comandoN>;]]
![Page 42: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/42.jpg)
42
Blocos de comando em Java
Sintaxe:
{<comando1>;<comando2>;...<comandoN>;}
![Page 43: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/43.jpg)
43
Blocos de comando
Exemplo:
Variáveisvalor1, valor2, divisao : real;
Inícioescrever “Entre com o primeiro número: ”;ler valor1;escrever “Entre com o segundo número: “;ler valor2;se valor2 = 0 então
escrever “Não há como dividir por 0”senão
divisao = valor1 / valor2;escrever “O valor da divisão é ”, divisao;
Fim
Existe algum erroneste algoritmo?
![Page 44: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/44.jpg)
44
Comando CASO
Algoritmo correto:Variáveis
valor1, valor2, divisao : real;Início
escrever “Entre com o primeiro número: ”;ler valor1;escrever “Entre com o segundo número: “;ler valor2;se valor2 == 0 então
escrever “Não há como dividir por 0”senão
[[divisao = valor1 / valor2;escrever “O valor da divisão é ”, divisao;]];
Fim
![Page 45: Estruturas de Decisão Programação em Java Prof. Maurício Braga](https://reader035.vdocuments.net/reader035/viewer/2022070310/552fc0f9497959413d8b75ec/html5/thumbnails/45.jpg)
Estruturas de DecisãoEstruturas de Decisão
Programação em Java
Prof. Maurício Braga