Capítulo 08: Seleção Múltipla (ESCOLHA-CASO-OUTROCASO)
🎯 Objetivo da Aula
Quando um sistema precisa processar um menu com 5, 10 ou 20 opções numéricas (como uma Central de Atendimento ao Cliente - SAC), encadear dezenas de comandos se ... senao se ... senao se torna o código poluído, difícil de ler e lento para manter.
Nesta aula, você aprenderá a:
- Compreender o funcionamento da Seleção Múltipla (Switch / Case).
- Dominar a sintaxe da estrutura
escolha (variavel) caso ... outrocaso ... fimescolha. - Identificar quando utilizar
escolhaem vez dese-senao. - Construir menus executivos de navegação e tarifadores por categorias de transporte.
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.alg): Baixar Capitulo_08.alg (abra diretamente no VisuAlg 3.0)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_08.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: A central de suporte telefônico da FastLog atende motoristas, clientes e fornecedores. Ao ligar para o 0800, a URA (Unidade de Resposta Audível) solicita que o usuário digite um número no teclado:
1: Rastreamento de Carga em Trânsito2: Agendamento de Descarga em Docas3: Cotação de Novos Fretes4: Central de Ocorrências e Sinistros5: Falar com Atendente Humano
Missão: Criar o algoritmo da URA Inteligente FastLog, direcionando o usuário para o setor competente e tratando qualquer digitação de número inválido com a cláusula outrocaso.
🧠 Fundamentos: A Arquitetura do escolha-caso
1. Como Funciona a Seleção Múltipla?
O comando escolha avalia o valor de uma única variável (geralmente do tipo inteiro ou caractere) e salta diretamente para o rótulo caso correspondente:
graph TD
A[Opção Digitada pelo Usuário] --> Switch{escolha opcao}
Switch -- "caso 1" --> C1[1. Rastreamento de Carga]
Switch -- "caso 2" --> C2[2. Agendamento de Docas]
Switch -- "caso 3" --> C3[3. Cotação de Novos Fretes]
Switch -- "caso 4" --> C4[4. Central de Sinistros]
Switch -- "outrocaso" --> Def[Opção Inválida! Tente Novamente.]
C1 --> Fim[fimescolha]
C2 --> Fim
C3 --> Fim
C4 --> Fim
Def --> Fim
style Switch fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
style C1 fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style C2 fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style C3 fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style C4 fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style Def fill:#c0392b,stroke:#fff,stroke-width:2px,color:#fff2. A Comparação: Quando Usar se e Quando Usar escolha?
| Característica | Estrutura se-senao | Estrutura escolha-caso |
|---|---|---|
| Tipo de Avaliação | Faixas contínuas, intervalos (>= 10 e <= 50), expressões booleanas complexas. | Valores pontuais e exatos (1, 2, "S"). |
| Operadores Aceitos | >, <, >=, <=, <>, =, e, ou. | Apenas igualdade pontual com os casos listados. |
| Legibilidade em Menus | Baixa (muitas linhas e parênteses). | Altíssima (limpo, direto e padronizado). |
| Comportamento no VisuAlg | Testa linha por linha em cascata. | Pula direto para o bloco do caso correto. |
= e <> também comparam texto (caractere)
Os operadores = (igual) e <> (diferente) não se limitam a números: nomeModal <> "INVÁLIDO" compara diretamente o conteúdo de duas variáveis caractere, sem precisar de nenhuma função especial.
3. A Sintaxe no VisuAlg
No VisuAlg não precisa de break / pare:
Ao contrário de linguagens como C, Java e JavaScript (onde você precisa escrever break; para não vazar para o próximo caso), no VisuAlg e Pascal a estrutura encerra automaticamente ao fim do bloco do caso!
📖 Exemplo Guiado: Menu de Atendimento da URA
Código do Algoritmo:
✅ Exemplo de Execução no Console (F9):
🛠️ Prática Obrigatória 1: Tarifador por Modal de Transporte
Passo 1: O Desafio
Crie um algoritmo chamado "Tarifador_Modal" que receba o peso da carga em kg e o código do modal de transporte:
1➔ Rodoviário: R$ 2,50 por kg2➔ Ferroviário: R$ 1,40 por kg3➔ Aéreo: R$ 9,80 por kg4➔ Marítimo (Cabotagem): R$ 0,90 por kgoutrocaso➔ Exibir"Modal não cadastrado".
✅ Resultado Esperado (Prática 1):
🛠️ Prática Obrigatória 2: Classificador de Região de Entrega
Crie um algoritmo "Classificador_Regiao" que receba o código numérico do estado de destino (códigos fictícios, criados apenas para fins didáticos deste exercício — não correspondem aos códigos reais do IBGE):
11,12,13➔ Exibir:"Região Sudeste - Prazo: 24h"21,22➔ Exibir:"Região Sul - Prazo: 48h"31➔ Exibir:"Região Centro-Oeste - Prazo: 72h"outrocaso➔ Exibir:"Região Norte/Nordeste - Prazo: 120h".
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_08_SeuNome_SeuSobrenome.alg. - Teste digitando todas as opções e também um número inválido (ex:
99) para validar ooutrocaso. - No Microsoft Teams, envie na tarefa “VisuAlg Cap 08 - Seleção Múltipla”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de dominar a base de Máquinas de Estados Finitos (State Machines) e do padrão de projeto de software Factory / Strategy Pattern. Roteadores Web (como Express no Node.js ou Django no Python) usam tabelas de correspondência para direcionar requisições para a rota correta.
🔥 Desafio de Fixação: Calculadora de Descontos por Categoria de Cliente
Crie um algoritmo que receba o valor total da compra e a categoria do cliente:
- Categoria
1(Bronze): 5% de desconto. - Categoria
2(Prata): 10% de desconto. - Categoria
3(Ouro): 15% de desconto. - Categoria
4(Diamante VIP): 20% de desconto. outrocaso: Sem desconto (preço integral).
🔑 Gabarito de Código Completo
Prática 1:
Prática 2:
Desafio:
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.
- Segundo o capítulo, o que o comando
escolhaavalia, e para onde ele salta diretamente após a avaliação? - Segundo a tabela comparativa do capítulo, quando é mais indicado usar
se-senaoem vez deescolha-caso, e quando é mais indicado o contrário? - Na sintaxe do
escolha-caso, para que serve a cláusulaoutrocaso? - É possível associar múltiplos valores a um único bloco
caso? Dê o exemplo de sintaxe apresentado no capítulo. - Segundo a nota do capítulo, o que é diferente entre o VisuAlg/Pascal e linguagens como C, Java e JavaScript quanto à necessidade do comando
break? - No Exemplo Guiado (Menu de Atendimento da URA), quais são as 5 opções numéricas apresentadas no menu da Central de Atendimento FastLog?
- Na Prática Obrigatória 1 (Tarifador por Modal de Transporte), qual valor por kg é cobrado no modal Aéreo (código
3)? - Na Prática Obrigatória 2 (Classificador de Região de Entrega), qual prazo de entrega é atribuído aos códigos de estado
21e22? - Segundo o Checkpoint de Lógica, quais dois conceitos de engenharia de software o
escolha-casoexemplifica? - Segundo as Instruções de Entrega, além de testar todas as opções válidas, que outro tipo de teste deve ser feito para validar o
outrocaso?