Atividades sobre Programação com gabarito — 8º ano (EF08CO02)
Quando recebo a EF08CO02 no planejamento do 8º ano, meu primeiro cuidado é não transformar a aula em uma coleção de comandos soltos. O código fala de programação, mas o centro da habilidade é fazer a turma perceber quando uma lista resolve um problema melhor do que várias variáveis isoladas.
Na prática, eu parto de situações que eles reconhecem: notas de uma turma, itens de um jogo, telefones de contato ou leituras de sensores. A partir daí, fica mais fácil planejar uma aula e uma avaliação que observem raciocínio, e não apenas a memorização de sintaxe.
O que a habilidade EF08CO02 pede, de verdade?
Na minha leitura, a EF08CO02 pede que o estudante identifique problemas em que há uma quantidade variável ou repetida de informações e crie uma solução programável para tratá-las. Não basta saber dizer que uma lista “guarda dados”: ele precisa decidir por que ela é mais adequada do que criar nota1, nota2 e nota3, por exemplo, e pensar em como percorrer esses valores para calcular, buscar, registrar ou atualizar informações. A habilidade também envolve organizar dados em estruturas coerentes, como um perfil de aluno com campos fixos e uma lista de notas, além de automatizar procedimentos por meio de uma linguagem de programação. A recursão pode aparecer como técnica de resolução, mas não é uma exigência para toda atividade. O ponto principal é propor uma solução que funcione para coleções de tamanhos diferentes, sem depender de casos previstos manualmente pelo programador.
Criar soluções de problemas para os quais seja adequado o uso de listas para descrever suas informações e automatizá-las usando uma linguagem de programação, empregando ou não a recursão como uma técnica de resolver o problema.
Estamos na unidade temática Pensamento Computacional, no objeto de conhecimento Programação, para o 8º ano de Computação. Vale consultar a consulta completa do código EF08CO02 quando eu quiser ampliar o repertório de atividades alinhadas.
Como trabalhar EF08CO02 em sala?
1. Começar pelo inventário de um jogo. Eu peço que a turma imagine um personagem que coleta itens: chave, mapa, poção, moeda e escudo. Primeiro, eles tentam registrar isso com variáveis separadas; depois, usam uma lista. A comparação mostra por que incluir um sexto item é muito mais simples em uma coleção.
2. Criar uma calculadora de médias. Em pseudocódigo, Scratch ou outra linguagem disponível, proponho uma lista de notas e um algoritmo que some todos os valores e divida pela quantidade de elementos. Depois, mudo o número de notas. Se o programa continua funcionando, a turma entende a vantagem da automação.
3. Modelar o perfil de um aluno. No quadro, organizo nome e identificação como campos fixos e as notas como lista. Essa atividade ajuda a diferenciar registro, lista e matriz sem exigir computador para começar. A pergunta-chave é: o que pode variar e o que permanece fixo?
4. Usar dados da própria sala. Posso trabalhar com uma lista anônima de livros lidos, tempos de deslocamento ou quantidades de irmãos. A turma propõe operações: contar, calcular média, encontrar o maior valor ou acrescentar um novo dado. São problemas próximos e possíveis mesmo com poucos equipamentos.
5. Revisar com rastreamento. Entrego um pequeno algoritmo que percorre uma lista e peço que os estudantes acompanhem, linha a linha, o valor da soma e do contador. Esse momento é ótimo para localizar erros como ignorar o último elemento da lista.
Como avaliar essa habilidade?
Uma boa questão de EF08CO02 precisa apresentar um problema e pedir uma decisão ou ação coerente com dados organizados em listas. Ela pode cobrar a escolha da estrutura de dados, a leitura de um algoritmo, a correção de um erro de percurso, a criação de uma função que receba uma coleção ou a combinação entre campos fixos e informações variáveis.
Eu evito avaliar apenas o nome de comandos específicos de uma linguagem. Também tomo cuidado com pegadinhas em que o aluno acerta por decorar que “lista é a resposta”. O enunciado precisa deixar claro por que há vários dados, por que a quantidade pode mudar e qual operação será feita. Outro erro comum é usar uma matriz quando uma lista simples já resolve o problema, aumentando a dificuldade sem avaliar melhor a habilidade.
Questões prontas de EF08CO02 (com gabarito comentado)
1. Em um algoritmo que registra múltiplos telefones por aluno, qual estrutura de dado (variável) é mais adequada para armazenar esse conjunto de números e permitir inserções e iterações eficientes?
- ❌ A) Registro com campos fixos para cada telefone. Registros fixos não suportam uma quantidade variável de telefones.
- ✅ B) Lista (array dinâmico) de valores (strings) — uma lista de telefones por aluno. Listas permitem quantidade variável de elementos, inserções e iteração eficiente.
- ❌ C) Dicionário (mapa) onde as chaves são os telefones. Dicionários não são a opção adequada para representar uma lista de valores nesse caso.
- ❌ D) Lista estática com tamanho fixo de 10. Ela não permite registrar mais de 10 telefones por aluno.
- ❌ E) Estrutura de conjunto (set) para armazenar números. Conjuntos não permitem múltiplas ocorrências do mesmo número.
2. Em um algoritmo que armazena uma matriz de registros 'tab' em um vetor linear em row-major com n colunas, qual fórmula calcula o índice linear do elemento tab[i][j]?
- ❌ A) Índice linear = j * n + i. Essa fórmula inverte a ordem de linhas e colunas.
- ❌ B) Índice linear = i - j. Subtrair não calcula a posição linear do elemento.
- ✅ C) Índice linear = i * n + j. Cada linha tem n elementos; avançamos i blocos de n e depois j posições na linha.
- ❌ D) Índice linear = n * n + (i + j). A expressão não representa a organização de uma matriz em row-major.
- ❌ E) Índice linear = i + j. Ela ignora o total de colunas em cada linha.
3. Indique a estrutura genérica (assinatura) de um algoritmo que recebe leituras de sensores em coleções de tamanhos variados e retorna a média; inclua o nome da variável/parâmetro principal.
- ❌ A) função media(dados: lista) retorna soma(dados) sem dividir pela contagem. Isso calcula a soma, não a média.
- ❌ B) função media(dados: int). Um inteiro não representa a coleção de leituras necessária.
- ✅ C) função media(dados: lista) retorna soma(dados)/len(dados). O parâmetro dados recebe coleções de qualquer tamanho e o cálculo retorna a média.
- ❌ D) função media() sem parâmetros, lê variáveis globais de sensores. A solução depende de valores externos e perde reutilização.
- ❌ E) função media(dados: lista) retorna mediana(dados). Mediana e média aritmética são medidas diferentes.
4. Qual combinação de estruturas é mais adequada para armazenar perfis de alunos com campos fixos e número variável de notas: registro, lista, matriz ou outra variável? Explique brevemente.
- ❌ A) Registro com matriz fixa de notas. A matriz fixa pode impor limite ou desperdiçar espaço.
- ❌ B) Pilha de notas no registro que só permite acessar a última nota. Uma pilha não favorece a consulta de todo o histórico.
- ✅ C) Usar um registro para os campos fixos do aluno (nome, id) contendo uma lista dinâmica (vetor dinâmico) de notas. O registro organiza o que é fixo e a lista acolhe a quantidade variável de notas.
- ❌ D) Tabela hash aluno-média das notas, sem armazenar cada nota. Guardar somente a média impede recuperar notas individuais.
- ❌ E) Apenas uma lista de registros misturando alunos e notas, sem registro aluno. Os campos do aluno ficam dispersos e difíceis de acessar.
5. Em um programa que calcula a média de notas de alunos, um erro faz com que a última nota não seja considerada. Qual estrutura de dados você utilizaria para corrigir esse problema e garantir que todas as notas sejam contabilizadas?
- ❌ A) Matriz. É mais complexa do que o necessário para uma sequência de notas.
- ✅ B) Lista. Listas são adequadas para armazenar todos os valores de uma sequência e percorrê-los no cálculo.
- ❌ C) Registro. Registros agrupam tipos diferentes de dados, mas não resolvem diretamente uma coleção de notas.
- ❌ D) Grafo. Grafos representam relações em redes, o que não se aplica ao cálculo de média.
- ❌ E) Fila. A ordem de processamento de uma fila não é necessária para resolver o problema.
6. Em um jogo, o jogador precisa coletar 5 itens diferentes. O algoritmo para registrar esses itens utiliza uma lista. Qual é a função de uma lista na programação?
- ❌ A) Uma lista é usada para armazenar apenas um dado. Uma lista pode reunir múltiplos dados.
- ✅ B) Uma lista serve para organizar dados de forma sequencial. Ela permite acessar e manipular os elementos armazenados.
- ❌ C) Listas não permitem a manipulação dos dados armazenados. Listas permitem incluir, remover e alterar elementos por funções ou comandos.
- ❌ D) Uma lista é somente um meio de visualização de dados. Ela é uma estrutura de dados, não apenas uma visualização.
- ❌ E) Listas não podem conter diferentes tipos de dados. Dependendo da linguagem, listas podem conter diferentes tipos.
Próximos passos
Eu usaria essas questões depois de uma atividade prática curta, pedindo que cada estudante explique sua escolha antes de marcar a alternativa. Para montar versões diferentes da mesma avaliação, posso recorrer a o gerador de provas do GeraProva: o acervo reúne 47 questões alinhadas a este código.
Se você quer ganhar tempo no planejamento sem abrir mão de olhar pedagógico, faça seu cadastro grátis e adapte as questões à realidade da sua turma.
