Algoritmos com Seleção Comando CASE Aula 4 - V. 2 - Cida Livi
Sejam os seguintes códigos e expressões para cálculo da variável Resultado Aula 4 - V. 2 - Cida Livi
{uso de seleção simples} Código = 1 Resultado <- Resultado + 5 N Código = 3 ou 5 S Resultado <- Resultado -2 N Código = 6 S Resultado <- 2 * (Resultado + 1) N Código > 7 e < 11 S Resultado <- 0 N Aula 4 - V. 2 - Cida Livi
{uso de seleção simples} Código = 1 S N Resultado <- Resultado + 5 Código = 3 ou Código = 5 S N Resultado <- Resultado -2 (…) Código > 7 e < 11 N S Resultado <- 0 Aula 4 - V. 2 - Cida Livi
{uso de seleção simples} if (Codigo = 1) then Resultado := Resultado + 5; if (Codigo = 3) or (Codigo = 5) Resultado := Resultado - 2; if (Codigo = 6) Resultado := 2 * (Resultado + 1); if (Codigo > 7) and (Codigo < 11) Resultado := 0; Aula 4 - V. 2 - Cida Livi
{uso de seleção composta} N N N Código = 1 Código =3 ou 5 Código = 6 N Código >= 8 e <= 10 S S S S Resultado <- Resultado + 5 Resultado <- Resultado +-2 Resultado <- 2* (Resultado + 1) Resultado <- Aula 4 - V. 2 - Cida Livi
{uso de seleção composta} if (Codigo = 1) then Resultado := Resultado + 5 else if (Codigo = 3) or (Codigo = 5) Resultado := Resultado - 2 if Codigo = 6 Resultado := 2 * (Resultado + 1) if (Codigo >= 8) and (Codigo <= 10) Resultado := 0; Aula 4 - V. 2 - Cida Livi
{uso de seleção múltipla} case Codigo of 1 : Resultado := Resultado + 5; 3 , 5 : Resultado := Resultado - 2; 6 : Resultado := 2 * (Resultado + 1); 8..10 : Resultado := 0; else if (Codigo <> 2) and (Codigo <> 4) and (Codigo <> 7) then writeln(´Codigo invalido´) end; Aula 4 - V. 2 - Cida Livi
CASE: funciona como uma condição composta 1 Case Código <> 2, 4 ou 7 3 ou 5 Resultado <- + 5 6 8 a 10 Resultado <- - 2 ´Código inválido!´ Resultado <- 2* (Resultado + 1) Resultado <- Aula 4 - V. 2 - Cida Livi
CASE: funciona como uma condição composta Código = 1 Código >= 8 e <= 10 Código<> 2 4 ou 7 ... S S S Resultado <- Resultado + 5 Resultado <- Código Inválido Aula 4 - V. 2 - Cida Livi
Aula 4 - V. 2 - Cida Livi
Aula 4 - V. 2 - Cida Livi
Aula 4 - V. 2 - Cida Livi
Classificado : boolean; Case Classificado of Var Classificado : boolean; Case Classificado of true : writeln (´Candidato ´, Inscricao , classificado!´); false: writeln (´Candidato ´, Inscricao, ´desclassificado!´) end; Aula 4 - V. 2 - Cida Livi
Comando CASE Estrutura de controle condicional. Permite que grupos particulares de instruções sejam escolhidos entre grupos possíveis. Escolha é baseada no valor correspondente de uma expressão. Aula 4 - V. 2 - Cida Livi
Expressão De qualquer tipo ordinal Tipo ordinal: Tipo onde os elementos aparecem em uma determinada ordem e são distintos e descontínuos. Aula 4 - V. 2 - Cida Livi
Tipos ordinais simples padrão char ; boolean; byte; shortint ; integer Aula 4 - V. 2 - Cida Livi
Instrução Simples Composta ou Composta (duas ou mais instruções simples delimitadas por begin end) Aula 4 - V. 2 - Cida Livi
Funcionamento do CASE Aula 4 - V. 2 - Cida Livi
As seqüências de constantes não precisam aparecer numa ordem específica, mas devem ser únicas (ou seja, mesmo valor não pode aparecer implícita ou explicitamente em mais de uma seqüência!) Ex.: case ValorInteiro of 9: writeln(´Valor 9´); 4..8: writeln(´Entre 4 e 8´´); { 7: writeln(´valor 7´); ERRADO! O valor 7 está implícito no rótulo anterior.} end; Aula 4 - V. 2 - Cida Livi
Valores nas listas de constantes devem pertencer ao mesmo tipo ordinal do valor da expressão. case ValorChar of ´A´: writeln(´A maiusculo´); a : writeln(´Vai dar erro´); { a deveria ser uma constante caractere, logo deveria estar entre apostrofos} 1: writeln(´Tambem vai dar erro!´); {idem acima, o um tambem deveria estar entre apostofros} end; Aula 4 - V. 2 - Cida Livi
Uma instrução será executada sempre que uma das constantes de uma seqüência coincidir com o valor corrente da expressão. Ex.: SoNumeros := 5; case SoNumeros of 1..3: (…); 7: (…); 5: (…); {a instrução do rotulo acima sera executada, já que a constante 5 vai coincidir com o valor corrente da expressao (SoNumeros) que eh 5 no momento} 4:(…); end; Aula 4 - V. 2 - Cida Livi
Se valor corrente da expressão não coincidir com qualquer valor de uma seqüência, nada será executado (o Turbo Pascal possibilita o tratamento de valores não previstos através do Else). Ex.: Valor := 10 Case Valor of 1..9: Somatorio := Somatorio + Valor; {observar que antes de ELSE de CASE pode ponto e vírgula} else writeln(´Valor não valido!´) end; Aula 4 - V. 2 - Cida Livi
* Comando simples ou composto Sintaxe of case expressão : constante Comando* . . constante , ; else Comando* end Aula 4 - V. 2 - Cida Livi * Comando simples ou composto
Vantagens e Desvantagens do CASE Desvantagem Serve como alternativa apenas para estruturas aninhadas IF-THEN-ELSE que testam igualdades valendo-se de variáveis ordinais. Não pode ser usada com strings ou reais, por exemplo!!! (IF-THEN-ELSE é mais abrangente!!) Vantagem O código produzido é mais claro. A lógica fica mais evidente. Aula 4 - V. 2 - Cida Livi