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
3
} 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
} Desviar ou repetir parte do fluxo de execução são exemplos.
Estrutura de Decisão
4
} 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:
} Utilizada quando apenas uma condição deve ser verificada.
} A estrutura de SWITCH ou IF composto: } Utilizada quando mais de uma condição deve ser verificada.
Estrutura Condicional IF
5
} Sintaxe: if (<expressão_lógica>) {
<sequencia_instruções_V> }
} 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
7
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.“);
}
Estrutura Condicional SE – Forma Completa
8
} Sintaxe: if (<expressão>) { <sequencia_instruções_V> } else { <sequencia_intruções_F> } } Semântica: A condição é avaliada.
} 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
9
} 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.
} 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
10
} 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”); }
Situações de Uso Incorreto do SE
11
} 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) {
...
}
Exercício
12
} 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.
IF’s Aninhados (Encadeados)
13
} 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> } }
Exemplo
14
} Determinar o tipo de triângulo dados os valores dos seus três lados: } 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
15
} Triângulo: } Lados: a, b, c } (a < b + c) e (b < a + c) e (c < a + b)
} Equilátero: } (a == b) e (b == c)
} Isósceles: } (a == b) ou (a == c) ou (b == c)
} Escaleno: } (a != b) e (b != c) e (c != a)
Algoritmo para Classificar Triângulos
16
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();
Estrutura de Decisão switch
17
} 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; }
Estrutura de Decisão switch
18
} 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> }
Exemplo
19
} Faça um algoritmo para imprimir o preço e a procedência de um produto dado o seu código.
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
21
} 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.
Teste de Mesa
22
} 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 {}.
Exemplo Simples
23
} Exemplo: 1. Console.WrileLine(“Digite dois números:”); 2. int a = int.Parse(Console.ReadLine()); 3. int b = int.Parse(Console.ReadLine()); 4. int r = a + b; 5. Console.WriteLine(r)
Instrução Linha a b r
1 1 - - -
2 2 [1] - -
3 3 1 [2] -
4 4 1 2 3
5 5 1 2 {3}
Exemplo com Condicional
24
1. Console.WriteLine(“Entre com um número:”);
2. int a = int.Parse(Console.ReadLine());
3. if (a == 5) {
4. Console.WriteLine(“condição é verdadeira”);
5. }
6. Console.WriteLine(“fim do algoritmo”);
Instrução Linha a
1 1 -
2 2 [1]
3 3 1
4 6 1
Instrução Linha a
1 1 -
2 2 [5]
3 3 5
4 4 5
5 6 5
Valo
r de
a !=
5
Valo
r de
a =
= 5