1. Testes encadeados
Em determinadas situações é necessária a realização
de testes dentro de outros testes.
Estruturas de Seleção - II Normalmente esta necessidade surge da combinação
de decisões a serem tomadas.
Este tipo de estrutura é chamado de encadeamento ou
aninhamento.
Programação I Quando ocorre um encadeamento de testes, o algoritmo
possui um comando de decisão dentro de outro.
ALG Este comando mais interno pode estar localizado junto ao
ENTÃO ou junto ao SENÃO.
2
Testes encadeados Instruções de seleção
Exemplos de encadeamento Problema do senão oscilante
Não é o que
se A > B então se X < Y então parece
se K > M então S <- X + Y
C <- K senão
senão se X < A + B se (x > 5) entao
C <- M; A <- C;
senão
se (y > 5) entao
...
B <- C; escrevaL("x e y são > 5")
escrevaL("x
senao
escrevaL("x é <= 5")
escrevaL("x
fimse
fimse
3 4
Instruções de seleção Instruções de seleção
Problema do else oscilante (cont.) Cuidado com blocos Não funciona
como deveria
Agora sim
se (x > 5) entao se (nota >= 7) entao
se (y > 5) entao escreva("Aprovado");
escrevaL("x e y são > 5")
escrevaL("x senao {
fimse escreva(“Prova final necessária");
senao escreva(“Verificar data na secretaria"); Agora
escrevaL("x é <= 5")
escrevaL("x } está
correto
fimse
5 6
1
2. Testes encadeados Testes encadeados
Exemplo 4: Para imprimir a mensagem correta, o algoritmo precisa
Um quiosque de sorvetes vende casquinhas somente nos saber dois dados: o sabor do sorvete e a quantidade de
sabores Chocolate (letra ‘C’) e Morango (letra ‘M’), não bolas.
permitindo misturar os sabores num mesmo sorvete. Faça um
algoritmo para imprimir uma mensagem nas seguintes
situações: Imprimir a mensagem correta requer testar as variáveis
Sorvete de chocolate com mais de três bolas: “desconto de 10%”; de entrada.
Sorvete de chocolate com qualquer quantidade de bolas: “desconto
de 5%”;
Sorvete de morango com qualquer quantidade de bolas: “sorvete
sem desconto”.
7 8
Testes encadeados Testes encadeados
Solução (cont.)
O corpo do algoritmo ficaria assim: Exercícios
Fazer um algoritmo para ler as três notas de um aluno em uma
Variáveis disciplina, e depois imprimir a média aritmética das notas e a
sabor : caractere; situação do aluno, a partir das seguintes regras:
bolas : inteiro; Média >= 7.0 – Aprovado;
Início 4 <= Média < 7 – Prova Final;
escreva (“Entre com o sabor (C ou M): “);
leia (sabor);
Média < 4 – Reprovado.
escreva (“Entre com a quantidade de bolas: ”); Um casal possui três filhos: Marquinhos, Zezinho e Luluzinha.
leia (bolas); Faça um algoritmo para ler as idades dos filhos e exibir quem é
se sabor = ‘C’ então o caçula da família; suponha que não haja empates.
se bolas > 3 então
escrever “Desconto de 10%” Faça um algoritmo para ler as coordenadas de um ponto (x, y)do
senão plano cartesiano, e exibir uma mensagem dizendo se pertence
escrever “Desconto de 5%”; ao eixo X, ao eixo Y, à origem ou a nenhuma das situações.
senão
escrever “Sorvete sem desconto”;
Fim
9 10
Comando CASO Comando CASO
O comando caso é útil em situações onde há necessidade de se Sintaxe:
testar uma mesma variável (ou expressão) que possa conter
diversos valores caso <var ou expr> seja
Cada valor exige a execução de comandos diferentes. <valor1> : <comando1>;
Uma expressão é comparada a diversos valores de acordo com a <valor2> : <comando2>;
ordem definida. <valor3> : <comando3>;
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á
<valorN> : <comandoN>;
ser executado um outro comando através do complemento SENÃO.
senão <comandoF>;
fimcaso;
11 12
2
3. Comando CASO em VisuAlg Comando CASO em VisuAlg
Veja o exemplo a seguir, que ilustra bem o que faz este comando:
A sintaxe do escolha é:
algoritmo "Times"
escolha <expressão-de-seleção> var time: caractere
inicio
caso <exp11>, <exp12>, ..., <exp1n> escreva ("Entre com o nome de um time de futebol: ")
<seqüência-de-comandos-1> leia (time)
caso <exp21>, <exp22>, ..., <exp2n> escolha time
caso "Flamengo", "Fluminense", "Vasco", "Botafogo"
<seqüência-de-comandos-2> escreval ("É um time carioca.")
... caso "São Paulo", "Palmeiras", "Santos", "Corínthians"
escreval ("É um time paulista.")
outrocaso outrocaso
<seqüência-de-comandos-extra> escreval ("É de outro estado.")
fimescolha fimescolha
fimalgoritmo
13 14
Comando CASO Comando CASO
Exemplo: Solução:
Dado o número de matrícula de um sócio do clube Boa Social, Teremos que receber o número de matrícula do usuário e
fornecido pelo usuário, faça um algoritmo que imprima o mês de identificar o último dígito. Para isto podemos utilizar o resto da
pagamento da anuidade, de acordo com as condições abaixo. divisão do número de matrícula por 10.
Final 0 – Pagamento em Janeiro; Utilizar uma estrutura de decisão para imprimir corretamente o
Final 1 – Pagamento em Fevereiro; mês de pagamento da anuidade.
Final 2 – Pagamento em Março; Podem ser utilizados o comando SE ou o comando CASO.
Final 3 – Pagamento em Abril;
Outro final – Pagamento em Maio.
15 16
Reescreva o exemplo em VisuAlg
Comando CASO var
num_matricula, final : inteiro
Variáveis Inicio
num_matricula, final : inteiro; escreva (“Forneça o número de matrícula: ”)
Solução: Início leia (num_matricula)
escrever “Forneça o número de matrícula: ”;
ler num_matricula; final <- num_matricula % 10
final <- num_matricula % 10; escolha final
caso 0
caso final seja escreva ( “Pagamento em Janeiro” )
0: escrever “Pagamento em Janeiro”; caso 1
1: escrever “Pagamento em Fevereiro”; escreva ( “Pagamento em Fevereiro” )
2: escrever “Pagamento em Março”; caso 2
3: escrever “Pagamento em Abril”; escreva ( “Pagamento em Março” )
senão caso 3
escrever “Pagamento em Maio”; escreva ( “Pagamento em Abril” )
fimcaso; outrocaso
Fim escreva ( “Pagamento em Maio” )
fimescolha
fimalgoritmo
17 18
3
4. Comando CASO Comando CASO
Exemplo: Solução:
Ler o número referente a um dia da semana e imprimir a
mensagem “dia útil” ou “fim-de-semana”, considerando que 1 = Variáveis
domingo, 2 = segunda-feira, etc. cod_dia : inteiro;
Início Incluído caso o
Solução escrever “Entre com o código do dia: ”; usuário forneça um
ler cod_dia; dia inválido
Para este algoritmo, iremos utilizar algumas facilidades providas
pelo comando CASO. caso cod_dia seja
Se precisarmos comparar mais de um valor para a execução de um 2..6 : escrever “Dia Útil”;
determinado comando, podemos separá-los por vírgulas; 1,7 : escrever “Fim-de-semana”;
senão
Se quisermos comparar um intervalo de valores, podemos indicá- escrever “Código inválido”;
los por dois pontos seguidos. fimcaso;
Fim
19 20
Comando CASO Blocos de comando
Limitações do comando CASO Vimos que nos comandos SE e CASO, um determinado
Só pode ser usado para comparação de valores diretos e que comando pode ser executado a depender do valor de
sejam inteiros. uma variável.
Não é possível comparar com números fracionários.
Existem situações em que desejaremos executar mais
É possível comparar com caracteres, que estarão entre aspas
simples (ex.: ‘a’, ‘b’, etc.). de um comando de acordo com o resultado da
Permite apenas comparações de igualdade, não permitindo as expressão.
demais comparações relacionais (maior que, menor que, etc.). Nestas situações, será necessária a utilização de blocos
Compara apenas uma única variável ou expressão. de comandos.
21 22
Blocos de comando Blocos de comando em Java
Sintaxe: [[ Sintaxe:
<comando1>;
<comando2>; {
. <comando1>;
. <comando2>;
. .
<comandoN>; .
]] .
<comandoN>;
Os blocos de comandos são pacotes de comandos que }
podem ser utilizados nos locais em que espera-se um
único comando.
23 24
4
5. Blocos de comando Blocos de comando
Existe algum erro
neste algoritmo?
Exemplo: Algoritmo correto:
Var Var
valor1, valor2, divisao : real
valor1, valor2, divisao : real
Início
Início escreva (“Entre com o primeiro número: ”)
escreva (“Entre com o primeiro número: ”) leia (valor1)
leia (valor1) escreva (“Entre com o segundo número: “)
escreva (“Entre com o segundo número: “) leia (valor2)
leia (valor2) se valor2 = 0 então
se valor2 = 0 então escreva (“Não há como dividir por 0”)
senão
escreva (“Não há como dividir por 0”)
[[
senão
divisao <- valor1 / valor2;
divisao <- valor1 / valor2;
escreva (“O valor da divisão é ”, divisao)
escreva (“O valor da divisão é ”, divisao)
]];
Fim
Fim
25 26
5