Capítulo 13: Listas no Scratch (Armazenando Múltiplos Dados e Vetores)

🎯 Objetivo da Aula

Até agora, cada variável criada no Scratch só conseguia guardar um único dado por vez. Mas como um sistema logístico moderno gerencia uma fila de 20 caminhões aguardando na portaria ou um catálogo com centenas de códigos de peças? No Scratch, utilizamos as Listas (o equivalente visual aos Vetores / Arrays da Ciência da Computação).

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

  1. Compreender o conceito formal de Lista Dinâmica / Vetor Unidimensional.
  2. Compreender a regra de indexação do Scratch: As listas começam no índice 1 (e não no índice 0 como em outras linguagens).
  3. Dominar os blocos fundamentais da categoria 🔴 Variáveis / Listas:
    • adicione [item] a [lista]
    • apague (1) de [lista] / apague todos de [lista]
    • item (1) de [lista]
    • tamanho de [lista]
  4. Construir o Gerenciador de Fila de Espera de Caminhões 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 precisa de um sistema digital para gerenciar a Ordem de Chegada das carretas. Conforme os motoristas se apresentam na guarita, a placa do veículo é inserida na lista Fila_Chegada. O operador precisa ser capaz de:

  1. Cadastrar novos caminhões que chegam.
  2. Chamar o próximo caminhão da fila para a doca de descarga (atendendo o primeiro da fila).
  3. Exibir na tela quantos veículos ainda aguardam atendimento.

Missão: Programar o gerenciamento completo da fila de espera no Scratch com atualização visual no Palco.


🧠 Fundamentos: Como Funcionam as Listas no Scratch?

1. A Estrutura de uma Lista Visual

Uma lista no Scratch é uma tabela vertical numerada exibida no Palco. Cada linha possui um Índice (Posição) e um Conteúdo (Valor):

graph TD
    subgraph Lista_Fila_Chegada ["Lista: Fila_Chegada (Índice Base 1)"]
        L1["Índice [1] : Placa 'BRA-2E19' (Primeiro da Fila)"]
        L2["Índice [2] : Placa 'ABC-1234'"]
        L3["Índice [3] : Placa 'KML-9090'"]
        L4["Índice [4] : Placa 'XYZ-8877' (Último a Chegar)"]
    end
    
    style L1 fill:#27ae60,stroke:#fff,color:#fff
    style L2 fill:#2980b9,stroke:#fff,color:#fff
    style L3 fill:#2980b9,stroke:#fff,color:#fff
    style L4 fill:#e67e22,stroke:#fff,color:#fff

2. A Grande Diferença: O Índice Base 1 do Scratch!

Atenção Máxima para Quem Conhece C, Java, Python ou Portugol:
Na maioria das linguagens de programação, os vetores começam no índice 0.
No Scratch, a lista começa rigorosamente no índice 1!
Portanto, item (1) de [lista] é exatamente o primeiríssimo elemento cadastrado!


3. Operações Básicas de Listas no Scratch 3.0

BlocoO que faz?Exemplo Logístico
adicione [X] a [lista]Insere um novo item no final da lista.Novo caminhão chega na fila.
apague (1) de [lista]Remove o item daquela posição e desloca todos os outros para cima.Caminhão atendido sai da fila.
apague todos de [lista]Esvazia a lista por completo.Reset diário de abertura de pátio.
item (1) de [lista]Lê o dado gravado naquela posição sem apagá-lo.Descobrir quem é o próximo a descarregar.
tamanho de [lista]Retorna o total de itens atualmente cadastrados.Saber quantas carretas faltam atender.

📖 Exemplo Guiado: Controle da Fila de Veículos

Passo a Passo no Scratch 3.0:

  1. Vá até a categoria 🔴 Variáveis e clique em Criar uma Lista.
  2. Nomeie a lista como Fila_Chegada (selecione “Para todos os atores”).
  3. A lista se abrirá como uma caixa cinza no Palco.
  4. No ator Totem_Portaria, monte o script de cadastro e atendimento:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
quando clicar em 🏁
apague todos de [Fila_Chegada v]
diga [Fila de espera zerada para o novo turno.] por (2) segundos

// Simulando a chegada de 3 caminhões iniciais
adicione [BRA-2E19] a [Fila_Chegada v]
adicione [ABC-1234] a [Fila_Chegada v]
adicione [KML-9090] a [Fila_Chegada v]

diga (junte [Total de carretas aguardando: ] (tamanho de [Fila_Chegada v])) por (3) segundos

🛠️ Prática Obrigatória 1: Botão de Chamada da Próxima Carreta

O Desafio:

Crie um ator chamado Botao_Chamar_Proximo:

  1. Quando este ator for clicado:
    • Se (tamanho de [Fila_Chegada v]) > (0):
      • Diga (junte [CHAMANDO PARA A DOCA: ] com (item (1) de [Fila_Chegada v])) por 3 segundos.
      • Toque o som [Bell].
      • Apague a primeira posição: apague (1) de [Fila_Chegada v].
    • Senão:
      • Diga [PÁTIO VAZIO: Nenhuma carreta aguardando na fila.] por 2 segundos.

🛠️ Prática Obrigatória 2: Cadastro Interativo de Placas pelo Teclado

O Desafio:

Crie um ator chamado Botao_Cadastrar_Caminhao:

  1. Quando este ator for clicado:
    • Pergunte: [Digite a placa do novo caminhão que chegou:] e espere.
    • Adicione a resposta ao final da lista Fila_Chegada.
    • Toque o som [Pop].
    • Avise na tela: [Veículo adicionado com sucesso ao final da fila!] por 2 segundos.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo do projeto com o nome: Atividade_13_SeuNome_SeuSobrenome.sb3.
  2. Teste adicionando 3 placas pelo teclado e depois clique no botão de chamada para ver a lista diminuindo linha por linha.
  3. No Microsoft Teams, envie na tarefa “Scratch Cap 13 - Listas e Vetores”.
  4. Clique em Entregar (Turn In).

💡 Checkpoint de Lógica & Engenharia de Software

Você acabou de implementar a estrutura de dados mais clássica da computação: a Fila FIFO (First-In, First-Out - O primeiro que chega é o primeiro a ser atendido). Esse mesmo algoritmo gerencia filas de impressão no Windows, filas de atendimento bancário e buffers de mensagens em redes de computadores.


🔥 Desafio de Fixação: Inserção de Carga Prioritária no Topo

Crie o ator Botao_Emergencia_Carga. Ao ser clicado, pergunte a placa da carga de medicamentos e use o bloco insira [resposta] em (1) de [Fila_Chegada v] para furar a fila e colocar a placa na primeira posição!


🔑 Gabarito de Código (Blocos do Scratch)

Prática 1:

1
2
3
4
5
6
7
8
9
[Ator: Botao_Chamar_Proximo]
quando este ator for clicado
se <(tamanho de [Fila_Chegada v]) > (0)> então
    toque o som [Bell v]
    diga (junte [CHAMANDO PARA A DOCA: ] (item (1) de [Fila_Chegada v])) por (3) segundos
    apague (1) de [Fila_Chegada v]
senão
    diga [PÁTIO VAZIO: Nenhuma carreta aguardando na fila.] por (2) segundos
fim

Prática 2:

1
2
3
4
5
6
[Ator: Botao_Cadastrar_Caminhao]
quando este ator for clicado
pergunte [Digite a placa do novo caminhão que chegou:] e espere
adicione (resposta) a [Fila_Chegada v]
toque o som [Pop v]
diga (junte [Veículo ] (junte (resposta) [ adicionado à fila!])) por (2) segundos

Desafio:

1
2
3
4
5
6
[Ator: Botao_Emergencia_Carga]
quando este ator for clicado
pergunte [Digite a placa da CARGA PRIORITÁRIA:] e espere
insira (resposta) em (1) de [Fila_Chegada v]
toque o som [Alert v]
diga [PRIORIDADE CONCEDIDA: Veículo inserido na posição #1 da fila!] por (3) segundos

📥 Download do Roteiro Completo desta Aula:
Baixe o arquivo consolidado Capitulo_13.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. No Scratch, em qual índice começa a primeira posição de uma lista, diferentemente de linguagens como C, Java ou Python?
  2. Qual bloco insere um novo item no final de uma lista?
  3. Qual bloco remove o item de uma posição específica da lista, deslocando os demais itens para cima?
  4. Qual bloco lê o conteúdo gravado em uma posição da lista sem apagá-lo?
  5. Qual bloco retorna o total de itens atualmente cadastrados em uma lista?
  6. No Exemplo Guiado, qual é o nome da lista criada, e quais são as três placas adicionadas a ela logo no início do script?
  7. Na Prática Obrigatória 1, qual condição precisa ser verdadeira para que o sistema chame a próxima carreta para a doca, em vez de avisar que o pátio está vazio?
  8. Na Prática Obrigatória 2, qual bloco é usado para capturar a placa digitada pelo usuário antes de adicioná-la à lista Fila_Chegada?
  9. Segundo o Checkpoint de Lógica & Engenharia de Software, qual estrutura de dados clássica da computação foi implementada neste capítulo, e o que sua sigla significa?
  10. Segundo o Cenário Prático, qual é o nome da lista usada para gerenciar a ordem de chegada das carretas na guarita?