Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
1 Estruturas de Seleção Programação I 2 Estruturas de Seleçã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. 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 dois comandos é executado ComandoV é executado se expr_lógica avaliar para Verdadeiro 4 Comando SE em C/C++ e Java (simples) if (condição) // onde condição pode ser uma expressão Comando1; Ou em caso de mais de um comando if (condição) // onde condição pode ser uma expressão { Comando1; Comando2; ... } 5 Comando SE em C/C++ e Java (composta) if (condição) // onde condição pode ser uma expressão Comando1; else // caso a condição anterior não seja satisfeita Comando2; 6 Comando SE em C/C++ e Java (composta) Em caso de mais de um comando if (condição) // onde condição pode ser uma expressão { Comando1; Comando2; } else // caso a condição anterior não seja satisfeita { Comando3; Comando4; } 2 7 Exemplo SE em C/C++ if (x >= y) { cout << “X é maior ou igual a Y.”; } else { cout << “X é menor que Y.”; } 8 Exemplo SE em Java if (x >= y) { System.out.println(“X é maior ou igual a Y.”); } else { System.out.println(“X é menor que Y.”); } 9 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. 10 Comando SE � Solução (cont.) � O algoritmo fica assim: Variáveis idade : inteiro; Início escrever “Forneça a idade: “; ler idade; se idade >= 18 então escrever “Você é maior de idade”; Fim 11 Comando SE �Converta o algoritmo anterior para um programa em C/C++ e tente executá-lo. 12 Exemplo SE em C/C++ #include <iostream> using namespace std; int main() { // declaração de variáveis int idade=0; cout << "Forneça a idade: "; cin >> idade; if (idade >=18) cout << "Você é maior de idade."; return 0; } 3 13 Exemplo SE em Java public 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.”); } 14 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. 15 Comando SE � Solução (cont.) � O algoritmo fica assim: Variáveis idade : inteiro; Início escrever “Forneça a idade: “; ler idade; se idade >= 18 então escrever “Você é maior de idade” senão escrever “Você é menor de idade”; Fim 16 Exemplo SE com SENÃO em C/C++ #include <iostream> using namespace std; int main() { int idade=0; cout << "Forneça a idade: "; cin >> idade; if (idade >=18) cout << "Você é maior de idade."; else cout << "Você é menor de idade."; return 0; } 17 Exemplo SE com SENÃO em Java public 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.”); } 18 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. 4 19 Comando SE � Exemplo 3: � Ler um número inteiro e dizer se ele é par ou ímpar. � Solução Variáveis numero : inteiro; Início escrever “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 20 Solução em C/C++ #include <iostream> using namespace std; int main() { int numero=0; cout << "Forneça o número: "; cin >> numero; if (numero % 2 == 0) cout << "O número é par."; else cout << "O número é ímpar."; return 0; } 21 Solução em JAVA public 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.”); } 22 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. 23 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. 24 Testes encadeados � Exemplos de encadeamento se A > B então se K > M então C <- K senão C <- M; ... se X < Y então S <- X + Y senão se X < A + B A <- C; senão B <- C; 5 25 Instruções de seleção � Problema do else oscilante if (x > 5) if (y > 5) cout << "x e y são > 5"; else cout << "x é <= 5"; Não é o que parece 26 Instruções de seleção � Problema do else oscilante (cont.) if (x > 5) { if (y > 5) cout << "x e y são > 5"; } else cout << "x é <= 5"; Agora sim 27 Instruções de seleção � Cuidado com blocos if (nota >= 7) cout << "Aprovado"; else cout << “Prova final necessária"; cout << “Verificar data na secretaria"; Não funciona como deveria { } Agora está correto 28 Testes encadeados � Exemplo 4: � Um quiosque de sorvetes vende casquinhas somente nos sabores Chocolate (letra ‘C’) e Morango (letra ‘M’), não permitindo misturar os sabores num mesmo sorvete. Faça um algoritmo 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”. 29 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. 30 Testes encadeados � Solução (cont.) � O corpo do algoritmo ficaria assim: Variáveis sabor : caractere; bolas : inteiro; Início escreva “Entre com o sabor (C ou M): “; ler sabor; escreva “Entre com a quantidade de bolas: ”; ler bolas; se sabor = ‘C’ então se bolas > 3 então escreva “Desconto de 10%” senão escreva “Desconto de 5%”; senão escreva “Sorvete sem desconto”; Fim 6 31 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. 32 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. 33 Comando CASO � Sintaxe: caso <var ou expr> seja <valor1> : <comando1>; <valor2> : <comando2>; <valor3> : <comando3>; . . . <valorN> : <comandoN>; senão <comandoF>; fimcaso; 34 Comando CASO em C/C++ e Java A sintaxe do switch é: switch (expressão){ case constante1: expressões; break; case constante2: expressões; break; default: expressões;} 35 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 algoritmo 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. 36 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. 7 37 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 seja 0 : 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 38 Exemplo switch em C/C++ #include <iostream> using namespace std; int main() { // declaração de variáveis int matricula = 0, final_numero =0; cout << "Forneça o número da matrícula: "; cin >> matricula; final_numero = matricula % 10; switch (final_numero) { case 0: cout << "Pagamento em Janeiro."; break; 39 Exemplo switch em C/C++ case 1: cout << "Pagamento em Fevereiro."; break; case 2: cout << "Pagamento em Março."; break; case 3: cout << "Pagamento em Abril."; break; default: cout << "Pagamento em Maio."; break; } return 0; } 40 Exemplo switch em Java public 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; 41 Exemplo switch em Java 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; } } 42 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. 8 43 Comando CASO � Solução: Variáveis cod_dia : inteiro; Início escrever “Entre com o código do dia: ”; ler cod_dia; caso cod_dia seja 2..6 : escrever “Dia Útil”; 1,7 : escrever “Fim-de-semana”; senão escrever “Código inválido”; fimcaso; Fim Incluído caso o usuário forneça um dia inválido 44 Exemplo 2 switch em C/C++ #include <iostream> using namespace std; int main() { // declaração de variáveis int cod_dia = 0; cout << "Entre com o código do dia:"; cin >> cod_dia; switch (cod_dia) { case 1: case 7: cout << "Fim de semana."; break; 45 Exemplo 2 switch em C/C++ case 2: case 3: case 4: case 5: case 6: cout << "Dia útil."; break; default: cout << "Código inválido."; } return 0; } 46 Exemplo 2 switch em Java public 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; 47 Exemplo 2 switch em Java case 2: case 3: case 4: case 5: case 6: System.out.println("Dia útil."); break; default: System.out.println("Código inválido."); } } 48 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. 9 49 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. 50 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>; ]] 51 Blocos de comando em C/C++ e Java � Sintaxe: { <comando1>; <comando2>; . . . <comandoN>; } 52 Blocos de comando � Exemplo: 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 Existe algum erro neste algoritmo? 53 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 Dúvidas ?