O critério para aprovação em MC102 é composto por vários itens com pesos diferentes. Nesta tarefa, vamos fazer um programa em Python para podermos calcular com facilidade a média e situação final de um(a) aluno(a). Como o critério foi alterado ao longo dos oferecimentos, a proposta para este exercício é diferente das feitas em semestres anteriores!
Atividades conceituais: são os questionários que podem ser respondidos via Moodle. A nota atribuída a cada uma destas atividades é uma nota de participação, calculada de maneira proporcional ao número de questões respondidas pelo(a) aluno(a), independentemente do fato de estarem corretas ou não. A média das atividades conceituais MAC
será dada pela média aritmética simples das notas destas atividades.
Tarefas de laboratório: são os programas desenvolvidos e entregues para correção automática via SuSy. Para compor a média ML
das tarefas de laboratório, cada uma delas tem um peso indicado no enunciado da tarefa e previsto no Plano de Aulas.
Avaliações escritas: são provas e testes teóricos, realizados em papel. A média MP
destas avaliações será composta pela prova P1
de peso 2, o teste T
de peso 1 e a prova P2
de peso 4.
Considerando Freq
a porcentagem de frequência às aulas, o resultado final será computado seguindo as regras abaixo:
Caso Freq
≥ 75%:
Caso MP ≥ 5
e
ML ≥ 5
:
O(A) aluno(a) estará aprovado(a) por nota e frequência com Média Final:
MFinal =
max(5.0,
0.6 * MP + 0.3 * ML + 0.1 * MAC)
Caso o(a) aluno(a) não tenha sido aprovado(a)
pelas condições acima e MP ≥
2.5
e ML ≥ 2.5
:
O(A) aluno(a) deverá realizar o exame. O cálculo da Média Final será feito tendo como base a Média Preliminar, como descrito abaixo:
MPreliminar = min(4.9, 0.6 * MP +
0.3 * ML + 0.1 * MAC)
MFinal = (MPreliminar + Exame)/2
Caso MFinal ≥ 5.0
o(a) aluno(a)
estará aprovado(a) por nota e frequência.
Caso contrário, estará reprovado(a) por nota.
Caso MP < 2.5
ou
ML < 2.5
:
O(A) aluno(a) estará reprovado(a) por nota
com MFinal =
min(MP, ML)
.
Caso Freq
< 75%:
O(A) aluno(a) estará reprovado(a) por frequência com MFinal = min(MP, ML)
.
Os elementos da entrada estarão separados por linhas:
A primeira linha conterá n
valores nota_aci
indicando as notas das atividades conceituais.
A segunda linha conterá m
tuplas (nota_labi, peso_labi)
indicando a nota da tarefa de laboratório e seu respectivo peso para o cálculo da média das tarefas de laboratório.
A terceira linha conterá as notas das Prova 1, do Teste e da Prova 2, nesta ordem.
A quarta linha conterá um valor entre 0 e 100 indicando a porcentagem de frequência às aulas.
De maneira geral, o formato da entrada será:
<nota_ac1> ... <nota_acn>
(<nota_lab00>, <peso_lab00>) ... (<nota_labm-1>, <peso_labm-1>)
<nota_prova1> <nota_teste> <nota_prova2>
<freq>
<nota_exame>
A primeira parte da saída conterá as médias das atividades conceituais, tarefas de laboratório e avaliações escritas obtidas pelo(a) aluno(a), precedidas por strings explicativas escritas propositalmente sem acentos:
Media das atividades conceituais: <MAC>
Media das tarefas de laboratorio: <ML>
Media das avaliacoes escritas: <MP>
A frequência deverá ser indicada na quarta linha (note que não há espaço em branco entre o número e o sinal %
):
Frequencia: <Freq>%
Caso o(a) aluno(a) deva realizar o exame, a média preliminar e a nota no exame deverão ser indicadas nas próximas linhas:
Media preliminar: <Media preliminar>
Nota no exame: <Exame>
A situação final do(a) aluno(a) deverá ser indicada por uma das strings abaixo:
Aprovado(a) por nota e frequencia.
Reprovado(a) por nota.
Reprovado(a) por frequencia.
Por último, a média final deve ser indicada:
Media final: <MFinal>
Todos os valores deverão estar formatados com apenas uma casa decimal (veja as dicas para formatação).
Para ler a linha com as notas das atividades conceituais e montar uma lista com elementos do tipo float
você pode utilizar:
notas_ac = [float(x) for x in input().split()]
Para ler a linha com as notas das tarefas de laboratório podemos utilizar uma abordagem semelhante, mas definindo uma função especial que retornará uma tupla com dois elementos, sendo o primeiro um float
e o segundo um int
.
def tupla_float_int(x) :
x = x[1:-1] # remove parênteses
x = x.split(",") # separa em duas strings
f = float(x[0]) # converte primeiro elemento para float
i = int(x[1]) # converte segundo elemento para int
return (f,i) # retorna tupla
notas_lab = [tupla_float_int(x) for x in input().split()]
Para ler a linha com as notas da prova P1
, do teste T
e da prova P2
você poderá utilizar:
prova1, teste, prova2 = map(float,input().split())
Para facilitar a visualização e a conferência dos resultados, o número de atividades conceituais e de tarefas de laboratório é inferior ao que será proposto no semestre. Os oito testes abertos estão listados abaixo, acompanhados de alguns comentários sobre o desempenho do(a) aluno(a). Esta tarefa inclui mais dois fechados.
Entrada | Saída | Observações | ||
---|---|---|---|---|
arq1.in |
|
|
arq1.res | • Excelente desempenho em todos os itens. • Aprovado(a) sem exame. |
arq2.in |
|
|
arq2.res | • Ótimo desempenho em atividades conceituais e tarefas de laboratório. • Desempenho suficiente nas avaliações escritas. • Aprovado(a) sem exame. |
arq3.in |
|
|
arq3.res | • Não realizou as atividades conceituais. • Desempenho suficiente nas avaliações escritas e nas tarefas de laboratório. • Aprovado(a) sem exame. |
arq4.in |
|
|
arq4.res | • Excelente desempenho em atividades conceituais e tarefas de laboratório. • Desempenho insuficiente nas avaliações escritas. • Aprovado(a) após o exame. |
arq5.in |
|
|
arq5.res | • Ótimo desempenho nas atividades conceituais
e nas avaliações escritas. • Desempenho insuficiente nas tarefas de laboratório. • Aprovado(a) após o exame. |
arq6.in |
|
|
arq6.res | • Não realizou as atividades conceituais. • Desempenho insuficiente nas avaliações escritas e nas tarefas de laboratório. • Reprovado(a) após o exame. |
arq7.in |
|
|
arq7.res | • Desempenho insuficiente em todos os itens. • Média inferior a 2.5 nas avaliações escritas. • Reprovado(a) sem direito a exame. |
arq8.in |
|
|
arq8.res | • Desempenho insuficiente em todos os itens. • Não atingiu a frequência mínima. • Reprovado(a) sem direito a exame. |
Releia, se necessário, as instruções para fazer os testes em Testes com o SuSy.
O uso da biblioteca numpy
não está habilitado no SuSy. Portanto, seu código não poderá incluí-la.
Veja aqui a página de submissão da tarefa. O arquivo a ser submetido deve se chamar lab07.py. No link Arquivos auxiliares há um arquivo aux07.zip
que contém todos os arquivos de testes abertos e seus respectivos resultados compactados.
Utilize o sistema SuSy com o mesmo login e senha que você utiliza para fazer acesso ao sistema da DAC. Se você não estiver inscrito corretamente, envie email para .
O limite máximo será de 15 submissões. Serão considerados os resultados da última submissão.
O peso desta tarefa é 3.
O prazo final para submissão é 06/10/2019.
A nota desta tarefa é proporcional ao número de testes que executaram corretamente, desde que o código esteja coerente com o enunciado. A submissão de um código que não implementa o algoritmo requisitado, mas que exibe as saídas esperadas dos testes abertos a partir da comparação de trechos da entrada será considerada fraude e acarretará a atribuição de nota zero à média final da disciplina.