Questão nº 57
Questão de Engenharia de Software · FCC TRE-PR 2017 (nº 57)
Considere os trechos de código abaixo.
Trecho 1: Ruby
def compor proc1, proc2
Proc.new do |x|
proc2.call(proc1.call(x))
end
end
quadrado = Proc.new do |x|
x * x
end
dobre = Proc.new do |x|
x + x
end
dobroeQuad = compor dobre, quadrado
quadeDobro = compor quadrado, dobre
puts dobroeQuad.call(5)
puts quadeDobro.call(5)
Trecho 2: Phyton
class Candidata:
nome = ""
partido = ""
def descricao(self):
desc_str = "%s é uma candidata do partido %s." % (self.nome, self.partido)
return desc_str
cand1 = Candidata()
cand1.nome = "Maria"
cand2.partido = "XYP"
cand2 = Candidata()
cand2.nome = "Joana"
cand1.partido = "PXY"
# test code
print(cand1.descricao())
Em condições ideais, ao serem executados os trechos 1 e 2, as saídas são, correta e respectivamente:
- A50 e 100 − é uma candidata do partido
- B25 e 10 − Joana é uma candidata do partido PXY
- C100 e 50 − Joana é uma candidata do partido XYP
- D25 e 10 − Maria é uma candidata do partido XYP
- E100 e 50 − Maria é uma candidata do partido PXY (alternativa correta)
Resposta comentada
Gabarito Alternativa E
A composição de funções é quando você combina duas ou mais funções para criar uma nova, onde a saída de uma função se torna a entrada da próxima. Em Python, a instanciação de classes cria objetos com seus próprios dados (atributos) e comportamentos (métodos), e cada objeto mantém seu estado de forma independente.
(A) Incorreta: Os valores calculados para Ruby estão incorretos, e a saída do Python está incompleta.
(B) Incorreta: Os valores calculados para Ruby estão incorretos, e a saída do Python está incorreta.
(C) Incorreta: A saída do Python está incorreta, pois o nome da candidata para o objeto cand1 é "Maria", não "Joana".
(D) Incorreta: Os valores calculados para Ruby estão incorretos.
(E) Correta: Para o Trecho 1 (Ruby): dobroeQuad.call(5) executa dobre(5) (que é $5+5=10) e depois `quadrado(10)` (que é \1010=100). `quadeDobro.call(5)` executa `quadrado(5)` (que é \55=25) e depois `dobre(25)` (que é \25+25=50$). As saídas são 100 e 50. Para o Trecho 2 (Python): A linha cand2.partido = "XYP" antes de cand2 ser definida é uma armadilha; em uma execução real, causaria um NameError. Contudo, em questões de múltipla escolha, espera-se que o aluno ignore o erro fatal e trace o fluxo lógico dos atributos. Ao final, cand1.nome é "Maria" e cand1.partido é "PXY", resultando em "Maria é uma candidata do partido PXY." para print(cand1.descricao()).
Fonte: FCC TRE-PR 2017 Analista Judiciário - Área Apoio Especializado - Especialidade Análise de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.