Você está na página 1de 31

Estruturas de Deciso

Programao em Java
Prof. Maurcio Braga

Estruturas de deciso

Existem situaes em que desejamos que nem todos os


comandos includos em um programa sejam
executados.
Nestas situaes, ensinamos o computador a tomar
decises, optando ou no por executar determinados
comandos.
Como os computadores no tomam decises sozinhos,
devemos instru-lo a seguir um determinado caminho no
programa.

Para isto necessrio o teste do resultado de uma expresso


lgica.

2/31

ComandoV executado
se expr_lgica avaliar
para Verdadeiro

Comando SE

Estrutura de deciso bsica em algoritmos


Sintaxe:
se <expr_lgica> ento <comandoV>;
ou

se <expr_lgica> ento <comandoV> seno <comandoF>;

Apenas um dos dois


comandos executado

3/31

Comando SE em Java
if (condio) // onde condio pode ser uma expresso
{
Declaraes ou blocos
}
else // caso a condio anterior no seja satisfeita
{
Declaraes ou blocos
}

4/31

Exemplo SE em Java
int x = 5, y = 10;
if (x >= y) {
System.out.println(X maior ou igual a Y.);
}
else {
System.out.println(X menor que Y.);
}
5/31

Exemplo Comando SE com SENO

Fazer um programa que solicite ao usurio a sua idade


e imprimir a mensagem Voc maior de idade se ela
tiver 18 anos ou mais, ou Voc menor de idade caso
contrrio.

6/31

Exemplo SE com SENO em Java


public static void main(String[] args) {
// declarao de variveis
int idade=0;
System.out.println(Digite a sua idade:");
Scanner s = new Scanner (System.in);
idade=s.nextInt();
if (idade >=18) {
System.out.println(Voc maior de idade.);
}
else {
System.out.println(Voc menor de idade.);
}
}
7/31

Comando SE

Exerccio:

Faa um programa em Java que leia um nmero inteiro


informado pelo usurio e diga se ele par ou mpar.

Sugesto: Use o % (resto da diviso inteira) para saber se o


nmero par ou mpar.

8/31

Soluo
public static void main(String[] args) {
// declarao de variveis
int numero=0;
System.out.println(Fornea o nmero:");
Scanner s = new Scanner (System.in);
numero=s.nextInt();
if (numero %2 == 0) {
System.out.println(O nmero par.);
}
else {
System.out.println(O nmero mpar.);
}
}
9/31

Testes encadeados

Em determinadas situaes necessria a realizao


de testes dentro de outros testes.
Normalmente esta necessidade surge da combinao
de decises a serem tomadas.
Este tipo de estrutura chamado de encadeamento ou
aninhamento.
Quando ocorre um encadeamento de testes, o programa
possui um comando de deciso dentro de outro.

Este comando mais interno pode estar localizado junto ao


ENTO ou junto ao SENO.
10/31

Testes encadeados

Exemplos de encadeamento
se X < Y ento
S=X+Y
seno
se X < A + B
A = C;
seno
B = C;

se A > B ento
se K > M ento
C=K
seno
C = M;
...

11/31

Instrues de seleo

Problema do else oscilante


No o que
parece

int x = 8;
int y = 4;
if (x > 5)
if (y > 5)
System.out.println("x e y so > 5");
else
System.out.println("x <= 5");
12/31

Instrues de seleo

Problema do else oscilante (cont.)


Agora sim

int x = 8;
int y = 4;
if (x > 5) {
if (y > 5)
System.out.println("x e y so > 5");
} else
System.out.println("x <= 5");
13/31

Instrues de seleo

Cuidado com blocos

No funciona
como deveria

if (media >= 7)
System.out.println("Aprovado");
else {
System.out.println(Prova final necessria");
System.out.println(Verificar data na secretaria");
}

14/31

Agora
est
correto

Testes encadeados

Exemplo 4:

Um quiosque de sorvetes vende casquinhas somente nos


sabores Chocolate (sabor = 1) e Morango (sabor = 2), no
permitindo misturar os sabores num mesmo sorvete. Faa um
programa para imprimir uma mensagem nas seguintes
situaes:

Sorvete de chocolate com mais de trs bolas: desconto de 10%;


Sorvete de chocolate com 3 ou menos bolas: desconto de 5%;
Sorvete de morango com qualquer quantidade de bolas: sorvete
sem desconto.

15/31

Testes encadeados

Para imprimir a mensagem correta, o programa precisa


saber dois dados: o sabor do sorvete e a quantidade de
bolas.

Imprimir a mensagem correta requer testar as variveis


de entrada.

16/31

Testes encadeados

Soluo (cont.)

O corpo do algoritmo ficaria assim:


Variveis
sabor : inteiro;
bolas : inteiro;
Incio
escrever Entre com o sabor (1 ou 2): ;
ler sabor;
escrever Entre com a quantidade de bolas: ;
ler bolas;
se sabor = 1 ento
se bolas > 3 ento
escrever Desconto de 10%
seno
escrever Desconto de 5%;
seno
escrever Sorvete sem desconto;

Fim
17/31

Soluo
public static void main(String[] args) {
// declarao de variveis
int sabor=0, qtd_bolas = 0;
System.out.println(Digite o sabor:");
Scanner s = new Scanner (System.in);
sabor=s.nextInt();
System.out.println(Digite a quantidade:");
qtd_bolas=s.nextInt();
if (sabor == 1) {
if (qtd_bolas > 3)
System.out.println(Desconto 10%.);
else
System.out.println(Desconto 5%.);
}
else
System.out.println(Sorvete sem desconto.);
}

18/31

Comando CASO

O comando caso til em situaes onde h necessidade de se


testar uma mesma varivel (ou expresso) que possa conter
diversos valores

Cada valor exige a execuo de comandos diferentes.

Uma expresso comparada a diversos valores de acordo com a


ordem definida.
Ao encontrar uma ocorrncia do valor correto, o comando relativo
executado e o algoritmo segue para o fim do CASO.
Se nenhum dos valores for igual ao contedo da varivel, poder
ser executado um outro comando atravs do complemento SENO.

19/31

Comando CASO

Sintaxe:
caso <var ou expr> seja
<valor1> : <comando1>;
<valor2> : <comando2>;
<valor3> : <comando3>;
.
.
.
<valorN> : <comandoN>;
seno <comandoF>;
fimcaso;

20/31

Comando CASO em Java


A sintaxe do switch :
switch (expresso)
{
case constante1:
expresses;
break;
case constante2:
expresses;
break;
default:
expresses;
}
21/31

Comando CASO

Exemplo:

Dado o nmero de matrcula de um scio do clube Boa Social,


fornecido pelo usurio, faa um programa que imprima o ms de
pagamento da anuidade, de acordo com as condies abaixo.

Final 0 Pagamento em Janeiro;


Final 1 Pagamento em Fevereiro;
Final 2 Pagamento em Maro;
Final 3 Pagamento em Abril;
Outro final Pagamento em Maio.

22/31

Comando CASO

Soluo:

Teremos que receber o nmero de matrcula do usurio e


identificar o ltimo dgito. Para isto podemos utilizar o resto da
diviso do nmero de matrcula por 10.
Utilizar uma estrutura de deciso para imprimir corretamente o
ms de pagamento da anuidade.

Podem ser utilizados o comando SE ou o comando CASO.

23/31

Exemplo Caso em Java


public static void main(String[] args) {
// declarao de variveis
int matricula = 0, final_numero =0;
System.out.println("Fornea o nmero da matrcula:");
Scanner s = new Scanner (System.in);
matricula=s.nextInt();
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;
24/31

Exemplo Caso em Java


case 2:
System.out.println("Pagamento em Maro.");
break;
case 3:
System.out.println("Pagamento em Abril.");
break;

default:
System.out.println("Pagamento em Maio.");
break;
}

25/31

Comando CASO

Exerccio:
Ler

o nmero referente a um dia da semana e


imprimir a mensagem dia til ou fim-de-semana,
considerando que 1 = domingo, 2 = segunda-feira,
etc.

26/31

Comando CASO

Soluo
Para

este programa, iremos utilizar algumas


facilidades providas pelo comando CASO.

Usaremos o mesmo cdigo para dois ou mais valores da


varivel de controle do comando Caso.

27/31

Exerccio Caso em Java


public static void main(String[] args) {
// declarao de variveis
int cod_dia = 0;
System.out.println("Entre com o cdigo do dia:");
Scanner s = new Scanner (System.in);
cod_dia=s.nextInt();
switch (cod_dia) {
case 1:
case 7:
System.out.println("Fim de semana.");
break;

28/31

Exerccio Caso em Java


case 2:
case 3:
case 4:
case 5:
case 6:
System.out.println("Dia til.");
break;
default:
System.out.println("Cdigo invlido.");
}
}

29/31

Comando CASO

Limitaes do comando CASO

S pode ser usado para comparao de valores diretos e que


sejam inteiros.

No possvel comparar com nmeros fracionrios.


possvel comparar com caracteres, que estaro entre aspas
simples (ex.: a, b, etc.).

Permite apenas comparaes de igualdade, no permitindo as


demais comparaes relacionais (maior que, menor que, etc.).
Compara apenas uma nica varivel ou expresso.

30/31

Estruturas de Deciso

Programao em Java
Prof. Maurcio Braga

Você também pode gostar