Projete um algoritmo recursivo em pseudocódigo que, dada uma lista de registros 'alunos' onde cada registro…
Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva
Elaborar algoritmos que envolvam instruções sequenciais, de repetição e de seleção usando uma linguagem de programação.
Fonte: Base Nacional Comum Curricular (MEC).Questão
Projete um algoritmo recursivo em pseudocódigo que, dada uma lista de registros 'alunos' onde cada registro tem campos (nome, notas) e 'notas' é uma lista de inteiros, calcule a média geral da turma. No seu texto, explique (1) como a recursão percorre a lista de registros e, se desejar, a lista de notas; (2) qual estrutura de dados você escolheu para representar cada aluno e por que; (3) como tratar o caso de lista vazia e entradas sem notas; e (4) a complexidade temporal do algoritmo.
✍️ Questão dissertativa: veja abaixo a resposta esperada e a explicação.
Resposta esperada
Resposta modelo (pseudocódigo e justificativa): // Função auxiliar: soma recursiva de uma lista de inteiros fun soma_notas(notas): se notas == [] então retorne 0 senão retorne notas[0] + soma_notas(notas[1:]) // Função principal: retorna par (soma_total, quantidade_total) fun acumula_alunos(alunos): se alunos == [] então retorne (0, 0) // soma 0, quantidade 0 senão aluno = alunos[0] // registro com aluno.nome e aluno.notas (lista) soma_atual = soma_notas(aluno.notas) qtd_atual = tamanho(aluno.notas) (soma_rest, qtd_rest) = acumula_alunos(alunos[1:]) retorne (soma_atual + soma_rest, qtd_atual + qtd_rest) // Função que usa o acumulador para obter a média fun media_turma(alunos): (soma_total, qtd_total) = acumula_alunos(alunos) se qtd_total == 0 então retorne 0 // ou apropriado: "sem notas" senão retorne soma_total / qtd_total Justificativa e explicação: - Estrutura de dados: cada aluno é um registro (registro.nome, registro.notas) porque agrupa campos heterogêneos e permite acessar facilmente a lista de notas. Usar uma lista de registros facilita percorrer sequencialmente os alunos. - Recursão: a função acumula_alunos usa recursão sobre a lista de registros (cada chamada processa o primeiro registro e combina com o resultado recursivo do resto). soma_notas demonstra recursão aninhada para somar as notas de um único aluno; alternativamente pode-se somar iterativamente para reduzir profundidade de pilha. - Casos de borda: lista vazia devolve (0,0). Se algum registro tiver notas vazias, soma_atual será 0 e qtd_atual 0, então não afeta a média. Evitar divisão por zero testando qtd_total==0. - Complexidade: seja N o total de notas em toda a turma. soma_notas visita cada nota uma vez e acumula_alunos visita cada aluno; no total todas as notas são somadas uma vez, portanto tempo O(N). A profundidade máxima de recursão é O(A + M) dependendo se soma_notas é chamada recursivamente por aluno (A = número de alunos, M = máximo de notas por aluno); para reduzir profundidade, pode-se implementar soma_notas de forma iterativa ou usar tail recursion/um acumulador. - Observações práticas: escolher nomes de variáveis claros (alunos, aluno, notas, soma_total), validar entradas e, em linguagens sem otimização de tail recursion, preferir versão iterativa se listas muito longas para evitar estouro de pilha.
Explicação
A solução apresentada utiliza recursão de forma eficiente para percorrer tanto a lista de alunos quanto a lista de notas, garantindo que cada elemento seja processado uma única vez. A escolha de registros para representar alunos permite uma estrutura clara e acessível, facilitando a manipulação dos dados. Além disso, a abordagem lida adequadamente com casos de borda, como listas vazias e alunos sem notas, e a análise de complexidade temporal demonstra que o algoritmo é escalável e eficiente.
Raio-X da questão
algoritmo recursivo
avaliacao
estrutura de dados · recursão
Revisar conceitos de recursão e estruturas de dados em programação.
O aluno pode confundir a lógica de recursão, tentando usar um loop em vez de uma chamada recursiva para percorrer a lista de alunos.
ciencia_tecnologia
pensamento_critico
abstrato
Questões parecidas com resolução
- Descreva como decompor e generalizar a solução para um algoritmo que recebe como entrada uma lista de notas de alunos…
- Projete um algoritmo generalizado que receba uma coleção de registros de alunos com notas em várias disciplinas e…
- Descreva com precisão o algoritmo e as estruturas de dados (registros, matrizes e listas) para um programa que recebe N…
- Descreva como implementar um algoritmo que calcula a média de notas de uma lista de alunos e discuta a estrutura de…
- Elabore em pseudocódigo um algoritmo que, dado um array de registros 'alunos' com campos (nome, notas[4]…
- Proponha um algoritmo em pseudocódigo que, dado um conjunto de registros de alunos com campos (nome, notas[3], faltas)…
🔎 Procurar outra questão
Procure no banco do GeraProva pelo tema ou por um trecho do enunciado. Cada questão já vem com resolução comentada e a análise de cada alternativa.
Professor: monte a prova com questões como esta, com gabarito e folha de respostas, em 30 segundos. Ver planos · Blog
