Estruturas de Decisão Programação em Java Prof. Maurício Braga.

45
Estruturas de Estruturas de Decisão Decisão Programação em Java Prof. Maurício Braga

Transcript of Estruturas de Decisão Programação em Java Prof. Maurício Braga.

Page 1: Estruturas de Decisão Programação em Java Prof. Maurício Braga.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

42

Blocos de comando em Java

Sintaxe:

{<comando1>;<comando2>;...<comandoN>;}

Page 43: Estruturas de Decisão Programação em Java Prof. Maurício Braga.

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.

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.

Estruturas de DecisãoEstruturas de Decisão

Programação em Java

Prof. Maurício Braga