Post on 17-Apr-2015
Aula 4 - V. 2 - Cida Livi
Algoritmos com Seleção
Comando CASE
Aula 4 - V. 2 - Cida Livi
Valor de Código Resultado1 Resultado + 52 inalterado3 resultado - 24 inalterado5 resultado - 26 2* (resultado + 1)7 inalterado8 09 0
10 0
Sejam os seguintes códigos
e expressões para cálculo da variável Resultado
Aula 4 - V. 2 - Cida Livi
Código = 1
Código = 3 ou 5
Código = 6
Código > 7 e < 11
Resultado <- Resultado + 5
Resultado <- Resultado -2
Resultado <- 2 * (Resultado + 1)
Resultado <- 0
S
S
S
S
N
N
N
N
{uso de seleção simples}
Aula 4 - V. 2 - Cida Livi
(…)
Código = 1
Código = 3 ou Código = 5
Código > 7 e < 11
Resultado <- Resultado + 5
Resultado <- Resultado -2
Resultado <- 0
S
S
S
N
N
N
{uso de seleção simples}
Aula 4 - V. 2 - Cida Livi
{uso de seleção simples}
if (Codigo = 1)
then
Resultado := Resultado + 5;
if (Codigo = 3) or (Codigo = 5)
then
Resultado := Resultado - 2;
if (Codigo = 6)
then
Resultado := 2 * (Resultado + 1);
if (Codigo > 7) and (Codigo < 11)
then
Resultado := 0;
Aula 4 - V. 2 - Cida Livi
Código = 1
Código=3 ou 5
Código = 6
Resultado <-
Resultado + 5
Resultado <-
Resultado +-2
Resultado <- 2*
(Resultado + 1)
Código >= 8 e <= 10
Resultado <-0
S SS
NN NN
S
{uso de seleção composta}
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)
then
Resultado := Resultado - 2
else
if Codigo = 6
then
Resultado := 2 * (Resultado + 1)
else
if (Codigo >= 8) and (Codigo <= 10)
then
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 Código13 ou 5
6 8 a 10
<> 2, 4 ou 7Resultad
o <-
Resultado
+ 5
Resultado <-
Resultado
- 2
Resultado <- 2*
(Resultado
+ 1)
Resultado <- 0
´Código inválido!´
CASE: funciona como uma condição composta
Aula 4 - V. 2 - Cida Livi
Código = 1
Resultado <-
Resultado + 5
Código >= 8 e <= 10
Resultado <-0
S
N N
CASE: funciona como uma condição composta
S
...Código<> 2
4 ou 7
Código Inválido
S
N
Aula 4 - V. 2 - Cida Livi
write ('Valor de Codigo: '); readln (Codigo); Resultado := 0; 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; if (Codigo >= 1) and (Codigo <= 10) then writeln('Resultado: ', Resultado);
Aula 4 - V. 2 - Cida Livi
var LetraCor : char;begin Case LetraCor of 'V': writeln ('Vermelho'); 'B': writeln ('Branco'); 'A': writeln ('Azul') end;end.
Aula 4 - V. 2 - Cida Livi
TipPizza : char;NomePizza : string;
case TipPizza of 'A' , 'a' : NomePizza := 'Brotinho'; 'B' , 'b' : NomePizza := 'Media'; 'C' , 'c' : NomePizza := 'Grande'; 'D' , 'd' : NomePizza := 'Calzone'; else writeln
('Tipo de pizza desconhecido!')end;
Aula 4 - V. 2 - Cida Livi
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
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.Ex.: 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
case expressão of
Sintaxe
. .
,
: constante
constante
Comando*
;
else Comando* end
* Comando simples ou composto
Aula 4 - V. 2 - Cida Livi
Vantagens e Desvantagens do CASE
DesvantagemServe 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!!)
VantagemO código produzido é mais claro.
A lógica fica mais evidente.