Capítulo 08: Decisões Encadeadas e Seleção Múltipla

🎯 Objetivo da Aula

Nos sistemas empresariais, as opções disponíveis para o usuário frequentemente ultrapassam a escolha simples entre dois caminhos. Um centro de distribuição possui dezenas de docas especializadas, e cada tipo de carga precisa ser direcionado com base em seu código de classificação fiscal. No Scratch, construímos rotas de seleção múltipla através de Condicionais Encadeadas (Aninhadas).

Ao final desta aula, você será capaz de:

  1. Compreender o conceito de Aninhamento Condicional (Nested If-Else).
  2. Simular estruturas de Menu de Opções e Escolha/Caso (Switch/Case) utilizando blocos se então senão em cascata.
  3. Garantir o tratamento seguro da cláusula padrão (Default / Opção Inválida).
  4. Construir o Roteador Inteligente de Docas de Descarregamento da FastLog.

📥 Material de Apoio e Roteiro de Blocos:


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

Situação: O pátio de triagem da FastLog recebe carretas com perfis de carga completamente distintos:

  • Código 1 (Alimentos Perecíveis / Frios): Deve ir para a Doca 1 (Câmara Frigorífica).
  • Código 2 (Eletrônicos e Medicamentos de Alto Valor): Deve ir para a Doca 2 (Cofre / Alta Segurança).
  • Código 3 (Carga Seca Geral e Embalagens): Deve ir para a Doca 3 (Galpão Geral).
  • Qualquer outro número: Sistema deve alertar: “Código de Doca Inexistente! Pare o veículo na guarita.”.

Missão: Programar a triagem automática de veículos no Scratch, direcionando o motorista e alterando a fantasia do caminhão com base no código digitado.


🧠 Fundamentos: Como Montar Condicionais em Cascata no Scratch?

1. O Encaixe de um Bloco Dentro do Outro

Para criar três ou mais caminhos no Scratch, colocamos um novo bloco 🟠 se então senão dentro da “boca” do senão do bloco anterior:

graph TD
    A["Início: Captura Código da Carga"] --> B{"Código = 1?"}
    B -- "SIM" --> C["Doca 1: Alimentos Frigorificados"]
    B -- "NÃO" --> D{"Código = 2?"}
    D -- "SIM" --> E["Doca 2: Eletrônicos (Alta Segurança)"]
    D -- "NÃO" --> F{"Código = 3?"}
    F -- "SIM" --> G["Doca 3: Carga Seca Geral"]
    F -- "NÃO" --> H["ALERTA: Código Inválido!"]
    
    style B fill:#f39c12,stroke:#fff,color:#fff
    style C fill:#27ae60,stroke:#fff,color:#fff
    style D fill:#e67e22,stroke:#fff,color:#fff
    style E fill:#2980b9,stroke:#fff,color:#fff
    style F fill:#d35400,stroke:#fff,color:#fff
    style G fill:#8e44ad,stroke:#fff,color:#fff
    style H fill:#c0392b,stroke:#fff,color:#fff

2. A Importância da Última Porta: O Tratamento de Erros

O último senão da pilha nunca deve ser deixado em branco. Ele funciona como uma Rede de Proteção: se o operador digitar por engano o número 9 ou uma letra qualquer, o sistema não ficará travado em silêncio; ele emitirá o alerta de código incorreto.


📖 Exemplo Guiado: Roteador de Docas da FastLog

Passo a Passo no Scratch 3.0:

  1. Crie a variável: Codigo_Carga.
  2. Adicione o ator Painel_Triagem e insira o script abaixo:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
quando clicar em 🏁
diga [=== TERMINAL DE TRIAGEM AUTOMÁTICA ===] por (2) segundos
pergunte [Digite o tipo de carga (1-Perecíveis | 2-Valiosos | 3-Geral):] e espere
mude [Codigo_Carga v] para (resposta)

se <(Codigo_Carga) = (1)> então
    mude o efeito [cor v] para (100) // Azul Gelado
    toque o som [Chime v]
    diga [ROTA APROVADA: Siga para a DOCA 01 (Câmara Fria).] por (3) segundos
senão
    se <(Codigo_Carga) = (2)> então
        mude o efeito [cor v] para (25) // Dourado
        toque o som [Bell v]
        diga [ROTA APROVADA: Siga para a DOCA 02 (Galpão Blindado).] por (3) segundos
    senão
        se <(Codigo_Carga) = (3)> então
            mude o efeito [cor v] para (50) // Verde
            toque o som [Pop v]
            diga [ROTA APROVADA: Siga para a DOCA 03 (Galpão de Carga Seca).] por (3) segundos
        senão
            mude o efeito [cor v] para (0) // Vermelho
            toque o som [Buzz v]
            diga [CÓDIGO INVÁLIDO: Aguarde atendimento de um conferente!] por (3) segundos
        fim
    fim
fim

🛠️ Prática Obrigatória 1: Menu de Operações do Almoxarifado

O Desafio:

Crie um menu interativo para o atendente do armazém:

  • Opção 1: Consultar Saldo de Paletes.
  • Opção 2: Registrar Entrada de Mercadoria.
  • Opção 3: Solicitar Manutenção de Empilhadeira.
  • Outra Opção: "Opção inexistente no menu do terminal.". Programe o ator para exibir uma mensagem específica para cada opção escolhida.

🛠️ Prática Obrigatória 2: Tarifador de Modais de Envio

Crie um sistema que calcule o custo de envio de 100 kg com base no modal selecionado:

  1. Pergunte: [Escolha o modal de transporte (1-Rodoviário | 2-Ferroviário | 3-Aéreo):].
  2. Se 1: Custo de R$ 150,00 e prazo de 3 dias.
  3. Se 2: Custo de R$ 80,00 e prazo de 7 dias (Mais econômico para grãos).
  4. Se 3: Custo de R$ 450,00 e prazo de 24 horas (Expresso).
  5. Senão: Alerte que o modal não opera na região.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo do projeto com o nome: Atividade_08_SeuNome_SeuSobrenome.sb3.
  2. Teste todas as 4 opções (1, 2, 3 e uma opção inválida como 99).
  3. No Microsoft Teams, envie na tarefa “Scratch Cap 08 - Decisões Encadeadas”.
  4. Clique em Entregar (Turn In).

💡 Checkpoint de Lógica & Engenharia de Software

Você acabou de aplicar o conceito de Roteamento em Árvore de Decisão (Decision Trees). Em sistemas de inteligência de negócios (Business Intelligence e Machine Learning), árvores de decisão como essa são usadas para aprovar limites de crédito, prever churn de clientes e otimizar frotas de distribuição.


🔥 Desafio de Fixação: Classificador de Severidade de Avarias

Pergunte a nota de avaria da embalagem de 1 a 4:

  • 1: Avaria Leve (Reparo de fita stretch).
  • 2: Avaria Média (Troca da caixa de papelão).
  • 3: Avaria Grave (Devolução imediata ao remetente).
  • 4: Avaria Crítica (Acionamento de perito de seguro).
  • Outro: Código não reconhecido.

🔑 Gabarito de Código (Blocos do Scratch)

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[Ator: Terminal_Menu]
quando clicar em 🏁
pergunte [MENU: 1-Saldo | 2-Entrada | 3-Manutenção:] e espere
mude [Opcao v] para (resposta)

se <(Opcao) = (1)> então
    diga [Consultando saldo atual: 340 paletes em estoque.] por (3) segundos
senão
    se <(Opcao) = (2)> então
        diga [Abrindo tela de registro de entrada de carretas...] por (3) segundos
    senão
        se <(Opcao) = (3)> então
            diga [Chamado de manutenção enviado para oficina mecânica!] por (3) segundos
        senão
            diga [Opção inexistente no menu do terminal.] por (3) segundos
        fim
    fim
fim

Prática 2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
[Ator: Cotador_Modal]
quando clicar em 🏁
pergunte [Escolha o modal (1-Rodoviário | 2-Ferroviário | 3-Aéreo):] e espere
mude [Modal v] para (resposta)

se <(Modal) = (1)> então
    diga [MODAL RODOVIÁRIO: Custo R$ 150,00 | Prazo: 3 dias úteis.] por (3) segundos
senão
    se <(Modal) = (2)> então
        diga [MODAL FERROVIÁRIO: Custo R$ 80,00 | Prazo: 7 dias úteis.] por (3) segundos
    senão
        se <(Modal) = (3)> então
            diga [MODAL AÉREO: Custo R$ 450,00 | Prazo: 24 horas.] por (3) segundos
        senão
            diga [ERRO: Modal não disponível para este trecho!] por (3) segundos
        fim
    fim
fim

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[Ator: Perito_Qualidade]
quando clicar em 🏁
pergunte [Nível de avaria (1 a 4):] e espere
mude [Grau_Avaria v] para (resposta)

se <(Grau_Avaria) = (1)> então
    diga [AVARIA LEVE: Reforço com fita stretch autorizado.] por (3) segundos
senão
    se <(Grau_Avaria) = (2)> então
        diga [AVARIA MÉDIA: Reembalar produto em nova caixa.] por (3) segundos
    senão
        se <(Grau_Avaria) = (3)> então
            diga [AVARIA GRAVE: Recusa de recebimento e devolução ao remetente!] por (3) segundos
        senão
            se <(Grau_Avaria) = (4)> então
                toque o som [Alert v]
                diga [AVARIA CRÍTICA: Acionamento imediato da seguradora de cargas!] por (3) segundos
            senão
                diga [Código de avaria não reconhecido pelo protocolo de qualidade.] por (3) segundos
            fim
        fim
    fim
fim

📥 Download do Roteiro Completo desta Aula:
Baixe o arquivo consolidado Capitulo_08.txt ou o pacote compactado (.zip) com os scripts e desafios da aula.


📝 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.

  1. Como se constrói uma terceira (ou mais) opção de caminho no Scratch, encaixando blocos se então senão?
  2. Por que o último senão da pilha nunca deve ser deixado em branco, segundo o capítulo?
  3. No Exemplo Guiado, para qual doca (número) vai a carga com Código 1?
  4. No Exemplo Guiado, o que o sistema deve responder se o operador digitar um código diferente de 1, 2 ou 3?
  5. Na Prática Obrigatória 1, quais são as três opções do menu do almoxarifado?
  6. Na Prática Obrigatória 2, qual é o custo do frete (em R$) e o prazo (em dias) do modal “Ferroviário”?
  7. Segundo o Checkpoint, em que área da computação (relacionada a negócios) árvores de decisão como essa são usadas?
  8. No Exemplo Guiado, quantos blocos se então senão estão aninhados um dentro do outro para tratar os 3 códigos de doca mais o caso inválido?
  9. Segundo o Cenário Prático, o que deve ser feito quando a carreta chega com um código de doca que não seja 1, 2 ou 3?
  10. Na Prática Obrigatória 2, qual é o modal de transporte mais caro e mais rápido, e qual é o seu custo (R$) e prazo?