Capítulo 14: Pesquisa em Listas (Onde Está o Produto no WMS?)
🎯 Objetivo da Aula
Armazenar dados em listas é apenas o primeiro passo: o verdadeiro valor de um software de armazém (WMS - Warehouse Management System) está na capacidade de Localizar uma Informação Rapidamente. Como saber se a peça "FILTRO-OLEO-10" está no estoque? Em qual prateleira ela se encontra? No Scratch, implementamos essa busca através do algoritmo clássico de Busca Linear (Linear Search).
Ao final desta aula, você será capaz de:
- Compreender a lógica do algoritmo de Busca Linear (Varredura de Vetor).
- Utilizar uma variável de controle
[índice]para percorrer uma lista do item 1 até o último. - Utilizar a técnica de Sinalizador Lógico (Boolean Flag) para identificar se o item foi ou não localizado.
- Conhecer o atalho nativo do sensor hexagonal
<[lista] contém [coisa]?>. - Construir o Localizador Eletrônico de Peças do Almoxarifado da FastLog.
📥 Material de Apoio e Roteiro de Blocos:
- 📄 Roteiro Estruturado (.txt): Baixar Capitulo_14.txt (guia textual com a sequência de blocos)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_14.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O almoxarifado de manutenção da frota da FastLog possui uma lista com centenas de códigos de peças (SKUs). Quando o mecânico chega ao balcão solicitando uma peça específica (ex: "PASTILHA-FREIO"), o sistema deve:
- Varrer a lista de itens cadastrados.
- Se encontrar: Informar em qual gaveta (número do índice) a peça está guardada.
- Se não encontrar após olhar a lista inteira: Emitir o alerta “Peça em falta no estoque ou código não cadastrado!”.
Missão: Programar o motor de busca linear no Scratch.
🧠 Fundamentos: O Algoritmo de Busca Linear
1. Como a Busca Linear Funciona Passo a Passo?
Imagine procurar uma pasta em um arquivo de aço:
- Você abre a pasta 1. É o que procura? Não. Avança para a pasta 2.
- É o que procura? Sim! Você avisa onde achou e para a busca.
- Se chegar na última pasta e não achar, conclui que o documento não existe.
graph TD
A["Início: Operador digita Peça Desejada"] --> B["Inicializa: Indice = 1 e Achou = 'nao'"]
B --> C{"Indice <= Tamanho da Lista?"}
C -- "SIM" --> D{"item (Indice) da Lista = Peça Desejada?"}
D -- "SIM" --> E["Exibe Gaveta Encontrada e muda Achou para 'sim'"]
D -- "NÃO" --> F["Incrementa: adicione 1 ao Indice"]
E --> F
F --> C
C -- "NÃO (Varreu tudo)" --> G{"Achou = 'nao'?"}
G -- "SIM" --> H["Alerta: Produto não localizado no armazém!"]
G -- "NÃO" --> I["Fim com Sucesso"]
style B fill:#e67e22,stroke:#fff,color:#fff
style C fill:#f39c12,stroke:#fff,color:#fff
style D fill:#3498db,stroke:#fff,color:#fff
style E fill:#27ae60,stroke:#fff,color:#fff
style H fill:#c0392b,stroke:#fff,color:#fff2. O Sensor Rápido: <[lista] contém [item]?>
O Scratch possui um bloco hexagonal verde-azulado que faz uma verificação instantânea:
se <[Estoque v] contém (resposta)?> então: Retorna verdadeiro se a palavra estiver em qualquer posição da lista. É excelente para verificações rápidas de “Sim ou Não”!
📖 Exemplo Guiado: Motor de Busca do Almoxarifado
Passo a Passo no Scratch 3.0:
- Crie a lista
Catalogo_Pecas. - Crie as variáveis
Item_Buscado,IndiceeLocalizado. - Adicione o ator
Atendente_Pecase monte o script:
🛠️ Prática Obrigatória 1: Verificador Rápido com <lista contém>
O Desafio:
Crie uma validação expressa na portaria:
- Crie a lista
Motoristas_Autorizadoscontendo os nomes:"Carlos","Mariana"e"Roberto". - Pergunte:
[Qual é o seu primeiro nome?]. - Se
<[Motoristas_Autorizados v] contém (resposta)?>:- Diga
[Acesso Liberado à Área Restrita!]com semáforo verde.
- Diga
- Senão:
- Diga
[ACESSO NEGADO: Motorista não possui cadastro ativo!]com som de erro.
- Diga
🛠️ Prática Obrigatória 2: Contador de Ocorrências de Cargas Avariadas
O Desafio:
Crie uma lista chamada Status_Cargas contendo 5 status: Aprovado, Avariado, Aprovado, Avariado, Aprovado.
- Percorra a lista com uma variável
Indicede 1 até o tamanho da lista. - Conte quantas vezes a palavra
"Avariado"aparece na lista, acumulando emTotal_Avarias. - Ao final, exiba:
[Relatório de Qualidade: X cargas avariadas encontradas!].
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo do projeto com o nome:
Atividade_14_SeuNome_SeuSobrenome.sb3. - Teste buscando tanto uma peça que existe (ex:
PASTILHA-FREIO) quanto uma inexistente para certificar-se de que ambas as mensagens funcionam. - No Microsoft Teams, envie na tarefa “Scratch Cap 14 - Pesquisa em Listas”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de aplicar o conceito de Varredura Sequencial e Complexidade $O(N)$. Em bancos de dados relacionais como Oracle e PostgreSQL, quando uma coluna não possui índice (Index), o banco executa essa mesma busca linear (Table Scan) linha por linha para localizar os registros.
🔥 Desafio de Fixação: Interrupção Imediata da Busca (Early Exit)
No exemplo guiado, o laço continua varrendo até o final mesmo depois de já ter achado a peça na posição 1. Modifique a lógica usando repita até que <<(Indice) > (tamanho de [Catalogo_Pecas])> ou <(Localizado) = [sim]>> para que a busca encerre no exato instante em que o item for encontrado, economizando processamento!
🔑 Gabarito de Código (Blocos do Scratch)
Prática 1:
Prática 2:
Desafio:
📥 Download do Roteiro Completo desta Aula:
Baixe o arquivo consolidado Capitulo_14.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.
- Como se chama o algoritmo, apresentado nos Fundamentos, que percorre uma lista item por item até encontrar (ou não) o valor procurado?
- Qual bloco hexagonal verde-azulado permite verificar rapidamente se um item existe em qualquer posição de uma lista, sem precisar montar um laço de busca?
- No Exemplo Guiado, qual é o nome da lista criada e quais são as quatro peças cadastradas nela no início do script?
- Além da lista, quais são os nomes das três variáveis criadas no Exemplo Guiado para controlar a busca?
- No Exemplo Guiado, qual valor inicial é atribuído à variável
Localizadoantes do laço de busca começar, e para que serve essa técnica de sinalizador? - Na Prática Obrigatória 1, quais são os três nomes cadastrados na lista
Motoristas_Autorizados? - Na Prática Obrigatória 2, quais são os 5 status cadastrados na lista
Status_Cargas, e qual variável acumula quantas vezes o status “Avariado” aparece? - Segundo o Checkpoint de Lógica & Engenharia de Software, a que operação de bancos de dados (quando uma coluna não possui índice) a busca linear é comparada?
- Segundo os Fundamentos, o que se conclui quando o índice varre a lista inteira e a variável de sinalizador permanece igual a “nao”?
- Qual é a complexidade (notação matemática) associada à varredura sequencial, citada no Checkpoint de Lógica & Engenharia de Software?