Projete a assinatura de um algoritmo de ordenação generalizado que permita reutilizar o mesmo código para…
Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva
Comparar diferentes casos particulares (instâncias) de um mesmo problema, identificando as semelhanças e diferenças entre eles, e criar um algoritmo para resolver todos, fazendo uso de variáveis (parâmetros) para permitir o tratamento de todos os casos de forma genérica.
Fonte: Base Nacional Comum Curricular (MEC).Questão
Projete a assinatura de um algoritmo de ordenação generalizado que permita reutilizar o mesmo código para diferentes critérios de comparação (por exemplo, por preço ou por nome). Use termos 'comparador' ou 'função' e 'parâmetro'.
- A) function ordenar(lista: Lista<T>, criterio: function(T)->boolean) -> Lista<T>
- B) function ordenar(lista: Lista<T>, comparador: function(T,T)->inteiro) -> Lista<T>
- C) function ordenar(lista: Lista<T>, comparador: inteiro) -> Lista<T>
- D) function ordenar(lista: Lista<T>, criterio: string) -> Lista<T>
- E) function ordenar(lista: Lista<T>, comparador: string[]) -> Lista<T>
✅ Resposta correta: alternativa B
Resolução passo a passo
- O enunciado pede uma assinatura genérica de ordenação, reutilizável para diferentes critérios (preço, nome etc.), usando os termos 'comparador' ou 'função' e 'parâmetro'.
- Para ordenar uma lista de elementos de tipo genérico T, o algoritmo precisa saber, para quaisquer dois elementos, qual deve vir antes. A forma mais geral é receber uma função de comparação que recebe dois elementos (T, T) e devolve um inteiro: negativo se o primeiro vem antes, zero se são equivalentes e positivo se o primeiro vem depois.
- A alternativa B expressa exatamente isso: a lista é do tipo Lista<T>, o parâmetro 'comparador' é uma function(T,T)->inteiro, e o retorno é Lista<T>. Como o critério fica encapsulado no comparador, o mesmo código de ordenação serve para ordenar por preço, por nome ou por qualquer outro campo, bastando passar outra função.
- Por que as outras estão erradas: A usa um predicado de um argumento que devolve booleano, o que não informa a ordem relativa entre dois elementos; C recebe um inteiro, que não representa critério algum; D recebe uma string, que não é um critério executável e não permite lógica personalizada; E recebe um vetor de strings, que não generaliza para qualquer tipo T nem para comparações arbitrárias.
- Conclusão: a assinatura correta e generalizada é a da alternativa B, em conformidade com o gabarito oficial.
💡 Dica: Pense em como a função de comparação pode ser implementada.
Alternativa por alternativa
O aluno acredita que basta um critério que classifique cada elemento como válido ou não (predicado booleano), esquecendo que ordenar exige comparar dois elementos entre si.
Por que engana: Confundir o tipo de retorno da função, escolhendo uma alternativa que não define corretamente o comparador como uma função que recebe dois parâmetros.
Recebendo um parâmetro comparador (função) o algoritmo aplica regras distintas de ordenação sem alterar sua implementação, promovendo reúso e generalização.
O aluno confunde o parâmetro de comparação com um número, talvez imaginando um índice ou código de campo, sem perceber que um inteiro não carrega a lógica de comparação.
O aluno acha que indicar o critério pelo nome em texto (como 'preco' ou 'nome') é suficiente, sem considerar que a função precisaria interpretar a string e que isso não é genérico para qualquer tipo.
O aluno pensa que um vetor de strings com os nomes dos campos a comparar generaliza a ordenação, sem notar que isso limita o algoritmo a campos textuais e não permite comparações personalizadas.
Raio-X da questão
algoritmo de ordenação
fixacao
funções e parâmetros em programação · tipos de dados genéricos
Revisar conceitos de algoritmos e funções em programação.
Confundir o tipo de retorno da função, escolhendo uma alternativa que não define corretamente o comparador como uma função que recebe dois parâmetros.
ciencia_tecnologia
pensamento_critico
abstrato
Questões parecidas com resolução
- Um algoritmo de ordenação atualmente compara itens pelo campo "preço". Qual parâmetro permite reutilizar o mesmo…
- Dado dois algoritmos de ordenação que usam critérios distintos (por preço e por nome), que mudança permite criar um…
- Ao generalizar um algoritmo de ordenação para aceitar critérios distintos, que tipo de variável deve ser passada como…
- Projete um algoritmo generalizado que compare várias instâncias de cálculo de frete — por peso (tabela por faixa)…
- Projete um plano para reutilizar um algoritmo de ordenação por pontuação de alunos em três contextos distintos (ranking…
- Projete a assinatura e descreva em alto nível um algoritmo generalizado que calcule o custo total de uma lista de itens…
Todas as questões de Estratégias de solução de problemas - Generalização
🔎 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
