Capítulo 08: Seleção Múltipla (ESCOLHA-CASO)

🎯 Objetivo da Aula

Nem tudo na vida é sim ou não. Às vezes temos uma lista de opções. Nesta aula, você aprenderá a estrutura ESCOLHA-CASO. O objetivo é evitar o excesso de “Se-Senão” aninhados, criando menus de atendimento e classificação de dados de forma muito mais organizada e legível.


🏢 O Cenário Prático (Seu Desafio)

Situação: O SAC da FastLog precisa de um menu inicial no terminal para direcionar as chamadas. O Menu:

  1. Falar com Atendimento
  2. Rastrear Pedido
  3. Financeiro
  4. Sair

Missão: Criar um programa que receba a opção do usuário e exiba a mensagem correta para cada setor.


🧠 Fundamentos: A Teoria Traduzida

1. A Estrutura do Escolha

O escolha olha para uma única variável e pula direto para o caso que corresponde ao valor dela.

🚦 Exemplo 1: Cotidiano (Semáforo)

escolha (cor) caso "verde": seguir caso "vermelho": parar fimescolha

📦 Exemplo 2: Técnico (Status de Pedido)

escolha (status) caso 1: "Processando" caso 2: "Despachado" caso 3: "Entregue" fimescolha

graph TD
    A[Usuário consulta Pedido] --> B{Status?}
    B -->|1| C[Em Processamento]
    B -->|2| D[Despachado / Em Rota]
    B -->|3| E[Entregue ao Cliente]
    
    style B fill:#8e44ad,stroke:#fff,color:#fff

2. A Sintaxe no VisuAlg

No VisuAlg, você não precisa do comando “pare” (break). Ele executa apenas o caso correspondente e já pula para o fim da estrutura.

1
2
3
4
5
6
7
8
escolha (variável)
   caso valor1
      // comandos
   caso valor2
      // comandos
   outrocaso
      // se nenhuma opção acima servir
fimescolha

📖 Exemplo Guiado: Menu do SAC

O comando escolha pula direto para o caso correspondente ao valor da variável. O outrocaso funciona como uma resposta padrão para opções inválidas.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
algoritmo "Menu_SAC"
var
   opcao : inteiro
inicio
   escreval("1. Suporte | 2. Rastreio | 3. Sair")
   escreva("Opção: ")
   leia(opcao)
   
   escolha opcao
      caso 1
         escreval(">> Suporte Técnico")
      caso 2
         escreval(">> Rastreamento")
      caso 3
         escreval(">> Saindo...")
      outrocaso
         escreval("Opção Inválida")
   fimescolha
fimalgoritmo

🛠️ Prática Obrigatória 1: Classificador de Região

Crie um algoritmo que peça o codigo_regiao (inteiro). Use o escolha para exibir: Caso 1: “Sudeste”, Caso 2: “Sul”, Caso 3: “Norte/Nordeste”. Para qualquer outro número, exiba “Região não atendida”.

✅ Resultado Esperado

1
2
Código: 2
REGIÃO: Sul

🛠️ Prática Obrigatória 2: Classificação de Clientes FastLog

Peça o código da categoria do cliente (1 - Bronze, 2 - Prata, 3 - Ouro). Use o escolha para exibir qual o desconto de cada um: Bronze (5%), Prata (10%) ou Ouro (15%).

✅ Resultado Esperado

1
2
Categoria: 3
DESCONTO LIBERADO: 15%

🔥 Desafio de Fixação (Opcional): Frete por Modal

Crie um programa que peça o peso da carga e o código do modal de transporte: 1. Terrestre (R$ 10/kg), 2. Aéreo (R$ 50/kg), 3. Marítimo (R$ 5/kg). Calcule e exiba o valor final do frete.


📤 Instruções de Entrega (Microsoft Teams)

Após validar seus códigos:

  1. No VisuAlg, não é necessário o comando “pare” entre os casos.
  2. Salve os arquivos com a extensão .alg (Ex: Atividade_08_SeuNome.alg).
  3. Envie no Microsoft Teams na tarefa “VisuAlg Cap 08 - Seleção Múltipla”.

🔑 Gabarito de Código

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
algoritmo "Regioes"
var
   cod : inteiro
inicio
   escreva("Código: ") leia(cod)
   escolha cod
      caso 1
         escreva("Sudeste")
      caso 2
         escreva("Sul")
      caso 3
         escreva("Norte/Nordeste")
      outrocaso
         escreva("Região não atendida")
   fimescolha
fimalgoritmo

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
algoritmo "FreteModal"
var
   peso, total : real
   modal : inteiro
inicio
   escreva("Peso: ") leia(peso)
   escreva("Modal (1, 2, 3): ") leia(modal)
   escolha modal
      caso 1
         total <- peso * 10
      caso 2
         total <- peso * 50
      caso 3
         total <- peso * 5
   fimescolha
   escreva("Total Frete: R$ ", total)
fimalgoritmo