Atividades de algoritmos e soluções computacionais para a 3ª série do Ensino Médio com gabarito
Reúna atividades de Computação para a 3ª série sobre algoritmos, estruturas de dados, grafos e análise de soluções. As oito questões vêm com gabarito comentado para apoiar a revisão e a avaliação.
Quando trabalho construção de soluções computacionais com uma turma de 3ª série, procuro aproximar duas tarefas que às vezes aparecem separadas: representar um problema de modo claro e avaliar se a solução escolhida funciona bem. Não basta escrever instruções; é preciso entender o que cada representação comunica, acompanhar a execução e considerar o custo de buscar ou organizar informações.
As questões desta sequência passam por pseudocódigo, estruturas de controle, arrays, grafos, busca e complexidade. Eu as uso para observar tanto a compreensão dos conceitos quanto o cuidado com detalhes, como o índice inicial de um array ou a diferença entre uma lista de vizinhos e o conjunto de todas as arestas. O gabarito comentado ajuda a transformar cada resposta em uma oportunidade de revisar o raciocínio.
O que o aluno de 3ª série precisa saber sobre construir soluções computacionais
Na 3ª série, espero que o estudante consiga interpretar um problema, reconhecer que há diferentes maneiras de representar uma solução e escolher uma forma adequada para explicar ou executar um algoritmo. Isso inclui distinguir requisitos, protótipos, fluxogramas, pseudocódigo e código-fonte; acompanhar laços e condicionais; e relacionar instruções a resultados concretos, como identificar números pares ou acessar um elemento de um array. Também é importante compreender estruturas de dados e representações de grafos: uma lista de adjacência registra, para cada vértice, seus vizinhos, e uma aresta não orientada aparece nos dois sentidos. Ao avaliar uma solução, o estudante deve considerar não apenas se ela produz a resposta esperada, mas também como realiza a busca e qual é seu custo. Assim, pode comparar uma lista com uma tabela hash, estimar operações e identificar melhorias possíveis sem confundir eficiência média, pior caso e funcionamento correto.
O que ele precisa saber antes
Antes das atividades, vale retomar representações de algoritmos e estruturas básicas de controle. O estudante precisa ler pseudocódigo, reconhecer o papel de uma condição e acompanhar o valor de uma variável durante um laço. Para as questões sobre sequências, ajudam noções de paridade, incremento e limite de repetição. Para arrays, é necessário relacionar a ordem dos elementos aos índices que começam em zero.
Na parte de grafos, revise vértices, arestas, adjacência e grau de um vértice. É importante saber que, em um grafo não orientado, uma aresta entre dois vértices indica vizinhança recíproca. Para discutir eficiência, os pré-requisitos são noções de estruturas de dados e leitura da notação de complexidade, como O(1), O(log n) e O(n). Não é necessário transformar a aula em uma sessão de fórmulas: o foco é entender que o custo depende da representação e da quantidade de elementos que podem precisar ser examinados.
Onde os alunos mais erram
Um erro recorrente nas questões de algoritmos é aproximar conceitos que têm aparência semelhante, mas funções diferentes. Pseudocódigo e código-fonte descrevem instruções, porém só o segundo segue a sintaxe formal de uma linguagem específica. Para ajudar, peço que a turma identifique o propósito e a forma de cada artefato antes de escolher uma alternativa.
Em estruturas de controle, os enganos aparecem ao não acompanhar os valores efetivamente percorridos. Um passo de laço não é apenas um detalhe visual: muda a sequência gerada. Do mesmo modo, iniciar a contagem de um array em zero exige associar o terceiro elemento ao índice 2, e não ao número ordinal 3. Na condição de paridade, dividir por dois não substitui o operador módulo; também é preciso distinguir comparação de atribuição e conferir se a saída corresponde à condição.
Nas questões de grafos, o distrator mais provável pode parecer plausível por conter algumas conexões corretas. Ainda assim, basta esquecer uma aresta, registrar apenas um sentido ou incluir um vizinho inexistente para a lista ficar incompleta. Já em busca e eficiência, é comum supor que qualquer consulta é O(1), ou confundir uma busca na lista de um vértice com a varredura do grafo inteiro. Minha orientação é pedir que o estudante diga em voz alta o que está sendo percorrido e quantos elementos podem ser examinados.
Como trabalhar em sala
- Compare representações: apresente um mesmo problema simples e peça que a turma descreva requisitos, desenhe um fluxo e escreva pseudocódigo. Depois, discutam qual informação cada forma destaca e o que ainda falta para chegar a código executável.
- Faça a execução a seco: em duplas, os estudantes acompanham um laço em uma tabela feita no caderno. Registram valor inicial, incremento, condição de parada e saída. Essa prática torna visível por que uma sequência inclui ou não determinado número.
- Modele grafos com papel e lápis: desenhe vértices e arestas, depois converta o desenho em lista de adjacência. Para cada aresta não orientada, verifiquem os dois registros correspondentes. A atividade não exige equipamento específico.
- Peça justificativas sobre eficiência: comparem a busca por um item percorrendo uma lista com uma consulta por chave em uma tabela hash. A pergunta central é qual estrutura está sendo examinada e quantas operações podem ser necessárias.
- Use alternativas como diagnóstico: após responder, cada estudante explica por que um distrator está errado. A justificativa revela se houve confusão de conceito ou apenas descuido com um índice, uma condição ou uma conexão.
Questões prontas de algoritmos e soluções computacionais para a 3ª série do Ensino Médio (com gabarito comentado)
As oito questões a seguir podem funcionar como revisão, atividade individual ou parte de uma avaliação. Sugiro pedir que os estudantes registrem uma justificativa curta antes de consultar o comentário do gabarito. Assim, fica mais fácil perceber o raciocínio por trás da escolha, inclusive quando a alternativa correta foi marcada por tentativa.
1. Qual artefato descreve estruturas de controle em texto sem a sintaxe formal de uma linguagem?
Em uma equipe que desenvolve um aplicativo de reserva de salas, requisitos em linguagem natural explicam o que o sistema deve fazer; um protótipo mostra telas; um diagrama de fluxo representa decisões com símbolos e setas; e o programador escreve código Java. Outro membro usa estruturas “se”, “então” e “enquanto”, sem sintaxe de uma linguagem específica. Qual é esse artefato?
- ❌ A) Código-fonte em Java com sintaxe formal. Está errado porque o código Java depende das regras formais da linguagem, como chaves e parênteses.
- ❌ B) Diagrama de fluxo com símbolos e setas. Está errado porque descreve o fluxo visualmente, não em forma textual estruturada.
- ❌ C) Protótipo de interface gráfica. Está errado porque apresenta telas e elementos de interface, não a lógica em estruturas de controle textuais.
- ✅ D) Pseudocódigo com estruturas “se” e “enquanto” em texto. Correto: descreve a lógica com estruturas de controle, mas sem exigir a sintaxe de uma linguagem de programação.
- ❌ E) Documento de requisitos em linguagem natural. Está errado porque requisitos registram o que o sistema deve fazer, sem necessariamente detalhar a lógica em instruções estruturadas.
Gabarito comentado: D. A distinção importante é entre explicar requisitos, representar visualmente uma interface ou um fluxo e descrever os passos de um algoritmo. O pseudocódigo favorece a leitura da lógica sem compromisso com a sintaxe executável de Java ou de outra linguagem.
2. Como representar o grafo não orientado em uma lista de adjacência?
Considere o grafo representado pelas arestas [(1,2),(2,3),(3,1),(3,4)]. Qual lista de adjacência apresenta os vizinhos de cada vértice em ordem crescente?
- ❌ A) {1: [3], 2: [1], 3: [2], 4: []}. Está errada porque deixa de registrar vários vizinhos e trata o vértice 4 como isolado.
- ❌ B) {1: [2,4], 2: [1,3], 3: [1,4], 4: [2]}. Está errada porque inclui conexões que não aparecem nas arestas, como 1–4 e 2–4, e omite vizinhos.
- ❌ C) {1: [2,3], 2: [3], 3: [], 4: []}. Está errada porque não registra a reciprocidade das arestas não orientadas e omite conexões de 3 e 4.
- ✅ D) {1: [2,3], 2: [1,3], 3: [1,2,4], 4: [3]}. Correta: cada aresta acrescenta cada extremo à lista de vizinhos do outro, e as listas estão ordenadas.
- ❌ E) {1: [2], 2: [1,3,4], 3: [2], 4: [3]}. Está errada porque não corresponde à aresta (1,3) e inclui a conexão inexistente entre 2 e 4.
Gabarito comentado: D. Para conferir, percorra as arestas uma a uma. A aresta (1,2) liga 1 a 2 nos dois registros; (2,3) e (3,1) acrescentam as outras conexões do triângulo; e (3,4) inclui 4 na lista de 3 e 3 na lista de 4.
3. Qual pseudocódigo imprime os números pares de 2 a 10, inclusive?
- ❌ A) para i de 2 até 10: escreva(i); i ← i + 3. Está errada: somar 3 no corpo junto ao avanço padrão do laço faz a variável avançar de modo diferente do pretendido; a sequência não percorre todos os pares consecutivos.
- ❌ B) para i de 2 até 10 passo 3: escreva(i). Está errada porque a sequência avança de três em três e não produz todos os pares.
- ✅ C) para i de 2 até 10 passo 2: escreva(i). Correta: começa em 2 e avança dois valores por repetição, imprimindo 2, 4, 6, 8 e 10.
- ❌ D) para i de 0 até 5: escreva(i*2). Está errada porque imprime também 0, que não pertence ao intervalo solicitado.
- ❌ E) para i de 1 até 10: escreva(i). Está errada porque imprime todos os números do intervalo, inclusive ímpares.
Gabarito comentado: C. Convém acompanhar o valor de i em cada repetição, em vez de concluir que qualquer intervalo com limite 10 gera apenas pares. O início e o passo determinam a sequência.
4. Qual índice acessa a temperatura do terceiro dia?
No programa, os índices de um array começam em 0: o primeiro valor fica na posição 0 e os seguintes ocupam as posições seguintes. Como acessar a temperatura do terceiro dia?
- ❌ A) temperaturas[0]. Esse índice corresponde ao primeiro valor, ou ao primeiro dia.
- ❌ B) temperaturas[4]. Esse índice corresponde ao quinto valor.
- ❌ C) temperaturas[1]. Esse índice corresponde ao segundo valor.
- ✅ D) temperaturas[2]. Correta: contando o primeiro dia no índice 0, o terceiro fica no índice 2.
- ❌ E) temperaturas[3]. Esse índice corresponde ao quarto valor; confunde o número ordinal do dia com o índice.
Gabarito comentado: D. Uma forma direta de conferir é escrever a correspondência: dia 1 → índice 0; dia 2 → índice 1; dia 3 → índice 2. Essa associação evita o deslocamento de uma posição.
5. Como usar seleção para verificar se um número é par ou ímpar?
- ✅ A) if (num % 2 == 0) { print('Par'); } else { print('Ímpar'); }. Correta: o resto da divisão por 2 é zero para números pares; caso contrário, a saída indica ímpar.
- ❌ B) if (num / 2 == 0) { print('Par'); } else { print('Ímpar'); }. Está errada porque a divisão por dois não verifica se há resto zero e não identifica corretamente todos os pares.
- ❌ C) if (num = 0) { print('Par'); } else { print('Ímpar'); }. Está errada porque = representa atribuição, não a comparação indicada pela condição.
- ❌ D) if (num % 2 != 0) { print('Par'); } else { print('Ímpar'); }. Está errada porque a condição identifica resto diferente de zero, isto é, a situação de ímpar, mas imprime “Par”.
- ❌ E) if (num == 2) { print('Par'); } else { print('Ímpar'); }. Está errada porque testa se o número é exatamente 2, não se qualquer número é divisível por 2.
Gabarito comentado: A. Aqui, o operador módulo permite testar o resto da divisão. A turma também pode verificar separadamente a condição e as mensagens, pois uma condição correta com saídas invertidas ainda produziria uma solução errada.
6. Qual é o custo de procurar v na lista de adjacência de u?
Em uma lista de adjacência, qual é a complexidade para verificar se existe aresta entre os vértices u e v examinando a lista de u?
- ❌ A) O(deg(v)) ao percorrer a lista de v. Está errada porque a busca indicada examina a lista de u, não a de v.
- ❌ B) O(log(deg(u))) ao dividir a lista de u. Está errada porque pressupõe uma busca binária; o enunciado não informa uma estrutura ordenada com busca por divisão.
- ✅ C) O(deg(u)) no vértice u, no pior caso O(V). Correta: pode ser necessário percorrer todos os vizinhos de u para verificar se v aparece.
- ❌ D) O(1) em qualquer lista de adjacência. Está errada porque uma lista não oferece acesso direto garantido a qualquer vizinho.
- ❌ E) O(E) ao percorrer todas as arestas do grafo. Está errada porque considera a varredura global, embora a busca descrita se limite à lista de u.
Gabarito comentado: C. O tamanho da lista examinada é o grau de u. No pior caso, v está no fim ou não está na lista, então é preciso verificar até deg(u) elementos. A notação O(V) funciona como limite amplo, já que o grau não supera o número de vértices.
7. Para que serve a variável booleana visitado em uma busca em grafos?
- ❌ A) Indicar se o vértice é o ponto de partida. Está errada porque a variável registra o estado de visita, não define a origem da busca.
- ❌ B) Armazenar o custo de explorar um vértice. Está errada porque um valor booleano de visita não representa o custo de exploração.
- ❌ C) Marcar os vértices que formam ciclos no grafo. Está errada porque a marcação informa se um vértice já foi explorado; não identifica ciclos por si só.
- ❌ D) Contar o número de arestas ligadas ao vértice. Está errada porque essa quantidade é o grau do vértice.
- ✅ E) Marcar se o vértice já foi explorado para evitar visitas repetidas. Correta: o registro permite controlar o percurso e evitar reprocessamento, inclusive quando há ciclos.
Gabarito comentado: E. Em buscas em grafos, registrar os vértices visitados ajuda a garantir que cada vértice seja explorado no máximo uma vez. Peça à turma que diferencie essa informação de origem, grau, custo e detecção de ciclos.
8. Que estrutura permite buscar um registro por matrícula em tempo médio O(1)?
Em uma base grande de registros de alunos, qual estrutura permite buscar um registro por matrícula em tempo médio O(1)?
- ❌ A) Árvore balanceada. Está errada porque a busca costuma ter custo O(log n), não O(1).
- ❌ B) Vetor ordenado. Está errada porque a busca binária costuma exigir O(log n) operações.
- ❌ C) Lista encadeada. Está errada porque, sem outro índice, pode ser necessário percorrer O(n) elementos.
- ❌ D) Matriz bidimensional. Está errada porque a organização em linhas e colunas não garante, por si só, busca por matrícula em O(1).
- ✅ E) Tabela hash (hashtable ou dicionário). Correta: permite localizar valores por chave em tempo médio O(1), embora colisões possam ocorrer e precisem ser tratadas.
Gabarito comentado: E. A expressão “tempo médio” é relevante: tabelas hash oferecem acesso rápido por chave em média, mas não significa que todas as consultas em qualquer circunstância custem exatamente uma operação. Comparar essa estrutura com vetor e árvore ajuda a avaliar qual solução é adequada a uma busca por matrícula.
Fechamento: da resposta à melhoria
Depois de aplicar as questões, retomo os itens em que a justificativa revela confusão entre representação, execução e eficiência. Você também pode selecionar atividades pelas habilidades: questões da habilidade EM13CO02, questões da habilidade EM13CO01 e questões da habilidade EM13CO03. Para organizar uma avaliação com questões adequadas ao seu planejamento, experimente o gerador de provas do GeraProva e faça seu cadastro grátis.
Use este material como ponto de partida e ajuste a seleção, o tempo e a abordagem ao percurso da sua turma. No GeraProva, você pode montar provas e atividades com apoio de IA, mantendo a decisão pedagógica nas suas mãos.
O GeraProva busca questões com gabarito comentado e BNCC no acervo e monta a prova pronta para imprimir.
Criar minha prova