Alg aula 04-2 - estruturas de-selecao tp1 (se - encadeado e caso)

6,886 views
6,675 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,886
On SlideShare
0
From Embeds
0
Number of Embeds
450
Actions
Shares
0
Downloads
22
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Alg aula 04-2 - estruturas de-selecao tp1 (se - encadeado e caso)

  1. 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. 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. 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. 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. 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

×