Aula 6 – Instruções de Seleção Cleverton Hentz Sumário de Aula } } } 2 Instrução Condicional Instrução Escolha Teste de Mesa Introdução } O fluxo de execução é a sequência(ordem) em que as instruções são executadas no algoritmo; Cada instrução em um algoritmo é executada em seqüência, uma por vez, de cima para baixo; } Algumas estruturas básicas permitem um controle mais detalhado da execução do algoritmo } } 3 Desviar ou repetir parte do fluxo de execução são exemplos. Estrutura de Decisão } Uma estrutura de decisão permite a escolha do fluxo de execução a ser seguido em função do resultado da avaliação de uma ou mais condições (expressão) } } Uma condição é uma expressão lógica (retorna V ou F) Temos duas estruturas de decisão básicas: } A estrutura condicional IF simples: } } A estrutura de SWITCH ou IF composto: } 4 Utilizada quando apenas uma condição deve ser verificada. Utilizada quando mais de uma condição deve ser verificada. Estrutura Condicional IF Sintaxe: if (<expressão_lógica>) { <sequencia_instruções_V> } } } 5 Semântica: A expressão é avaliada. } Se for true, então os comandos no bloco do if (<sequencia_instruções_V>) são executados e o fluxo de execução prossegue com o primeiro comando após o símbolo }. } Caso contrário, o fluxo é desviado e continua após o símbolo }. Exemplo } 6 Escreva um algoritmo que, dada a idade de uma pessoa, informe se ela é maior de idade. Exemplo - Resolução int idade; Console.WriteLine(“Digite a idade (maior ou igual que zero): “); idade = int.Parse(Console.ReadLine()); if (idade >= 18) { Console.WriteLine(“Pessoa é maior de idade.“); } 7 Estrutura Condicional SE – Forma Completa } Sintaxe: if (<expressão>) { <sequencia_instruções_V> } else { <sequencia_intruções_F> } } Semântica: A condição é avaliada. } } 8 Se for true, então as instruções <sequencia_comandos_V> serão executadas e o fluxo de execução prossegue com o primeiro comando após }. Se a condição for false, então serão executadas as instruções <sequencia_comandos_F> e o fluxo prossegue após o }. Estrutura Condicional SE – Forma Completa Sintaxe: } if (<expressão_1>) { <sequencia_instruções_1> } else if (<expressão_2>) { <sequencia_instruções_2> } else { <sequencia_intruções_else> } Semântica: Cada uma das expressões é testada. } } } 9 A primeira expressão verdadeira encontrada, então as instruções referentes àquela expressão serão executadas e o fluxo de execução prossegue com o primeiro comando após }. Caso nenhuma expressão seja verdadeira, então serão executadas as instruções do else (<sequencia_comandos_else>) e o fluxo prossegue após o }. Exemplos de IF’s } Exemplo 1 if (a > 2) { Console.WriteLine(“a é maior que 2.”); } else { Console.WriteLine(“a é menor ou igual a 2.”); } } Exemplo 2 if (true) { Console.WriteLine(“Caso 1”); } else if (true) { Console.WriteLine(“Caso 2”); } 10 Situações de Uso Incorreto do SE } Situações Incorretas // É uma atribuição e não uma expressão if (A = B) { ... } // É uma expressão aritmética e não uma expressão lógica if (A + B) { ... } 11 Exercício } Modifique o algoritmo da maior Idade para imprimir “menor de idade ” caso a pessoa tenha menos de 18 anos e “recém nascido” caso tenha entre 0 e 1 ano. 12 IF’s Aninhados (Encadeados) Pode-se utilizar IF's dentro de outros IF's, no caso de uma alternativa envolver outras decisões } Exemplo: } if (<expressão_1>) { if (<expressão_2>) { <instruções> } } else { if (<expressão_3>) { <instruções> } } 13 Exemplo } Determinar o tipo de triângulo dados os valores dos seus três lados: } } } } 14 Triângulo: Figura geométrica de três lados, em que cada um é menor que a soma dos outros dois; Triângulo eqüilátero: três lados iguais; Triângulo isósceles: dois lados iguais; Triângulo escaleno: todos os lados diferentes. Exemplo: Condições para Classificação dos Tipos de Triângulos } Triângulo: } } } Equilátero: } } (a == b) e (b == c) Isósceles: } } Lados: a, b, c (a < b + c) e (b < a + c) e (c < a + b) (a == b) ou (a == c) ou (b == c) Escaleno: } 15 (a != b) e (b != c) e (c != a) Algoritmo para Classificar Triângulos Console.WriteLine("Digite os três lados do triângulo:"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int c = int.Parse(Console.ReadLine()); if ((a < b + c) && (b < a + c) && (c < a + b)) { if ((a == b) && (b == c)) { Console.WriteLine("Triângulo equilátero"); } else if ((a == b) || (a == c) || (b == c)) { Console.WriteLine("Triângulo isósceles"); } else { Console.WriteLine("Triângulo escaleno"); } } else { Console.WriteLine("Os valores dos lados não representam um triângulo!"); } Console.ReadLine(); 16 Estrutura de Decisão switch } Utilizada quando um conjunto de valores precisa ser testado e ações diferentes são associadas a esses valores; switch (<expressão-de-seleção>) { case <expressão_1>: <sequência-de-comandos-1> break; case <expressão_N>: <sequência-de-comandos-N> break; ... default: <sequência-de-comandos-padrão> break; } 17 Estrutura de Decisão switch } Equivalente a: if (<expressão-de-seleção> == <expressão_1>){ <sequência-de-comandos-1> } ... else if (<expressão-de-seleção> == <expressão_N>){ <sequência-de-comandos-N> } else { <sequência-de-comandos-padrão> } 18 Exemplo } Faça um algoritmo para imprimir o preço e a procedência de um produto dado o seu código. 19 Código Procedência 1 Sul 2 Norte 3, 4 Centro-oeste 7, 8 ou 9 Sudeste 5, 6, 10 até 13 Nordeste 20 Teste de Mesa A atividade de programação é inerentemente propensa à falhas; } Logo, é uma característica importante projetar e codificar algoritmos corretos: } } Um algoritmo é dito correto se produz o resultado esperado para todas entradas possíveis. O teste de mesa é um meio pelo qual podemos acompanhar um algoritmo passo à passo; } Este tipo de processo facilita a detecção de falhas contidas no algoritmo. } 21 Teste de Mesa O teste de mesa pode ser realizado através de uma tabela que representa a linha, variáveis e comentários sobre cada passo do algoritmo; } Cada linha da tabela deve conter as informações: } } } } Instrução; Linha de código; Variáveis. Os valores que foram colocados nas variáveis através do comando Console.ReadLine() deve ficar entre []; } Os valores que são escritos através do comando Console.WriteLine() na saída devem ficar entre {}. } 22 Exemplo Simples } Exemplo: 1. 2. 3. 4. 5. 23 Console.WrileLine(“Digite dois números:”); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int r = a + b; Instrução Linha a b Console.WriteLine(r) r 1 1 - - - 2 2 [1] - - 3 3 1 [2] - 4 4 1 2 3 5 5 1 2 {3} Exemplo com Condicional 1. 2. Console.WriteLine(“Entre com um número:”); int a = int.Parse(Console.ReadLine()); 4. if (a == 5) { Console.WriteLine(“condição é verdadeira”); 5. } 6. Console.WriteLine(“fim do algoritmo”); Instrução Linha Valor de a != 5 Instrução Linha 24 a 1 1 - 2 2 [1] 3 3 1 4 6 1 Valor de a == 5 3. a 1 1 - 2 2 [5] 3 3 5 4 4 5 5 6 5