MC346 - Exame

      Criada: 2017-12-14
    

Enunciado distribuído na sala.

Gabarito

%%% questao 1

Prolog, Haskell e Python.

%%% questao 2
mesmaSoma([]).
mesmaSoma([X|R]) :-
    soma(X, S),
    tudoSoma(R, S).

tudoSoma([], _).
tudoSoma([X|R], S) :-
    soma(X, S),
    tudoSoma(R, S).

soma([], 0).
soma([A|R], S) :-
    soma(R, S1),
    S is S1 + A.
	
%%% questao 3

disjuntas :: (Eq a) => [[a]] -> Bool
disjuntas [] = True
disjuntas (a:r) = disj2 a r && disjuntas r

disj2 :: (Eq a) => [a] -> [[a]] -> Bool
disj2 x y = not $ any (\z -> any (elem z) y) x

%%% questao 4

def insere(item, node):
    if node is None:
        node = Node(item)
    elif item < node.item:
        node.left = insere(item, node.left)
    elif item > node.item:
        node.right = insere(item, node.right)
    return node

Critérios de correção

Em todas as questões, o critério de correção começou por decidir como seria a pontuação: de cima para baixo ou de baixo para cima. Se a resposta estava bem escrita, com sintaxe Lisp correta, resolução do problema pedido (e não de outro) e com comprimento proporcional à complexidade da questão, então a correção procedeu de cima para baixo, ou seja, parte-se do valor integral e vão sendo subtraidas frações de pontos para cada defeito encontrado.

Por outro lado, se a resposta estava mal escrita, com sintaxe errada, resolvendo o problema errado ou incompleta, então a correção procedeu de baixo para cima: parte-se de zero e vão sendo adicionadas frações de pontos a cada indício de conhecimento importante encontrado.

A seguir, critérios específicos para cada questão. Os valores negativos se aplicam à correção de cima para baixo, e os valores positivos ou nulos se aplicam à correção de baixo para cima.

Questão 1

todos acertaram tudo

Questão 2

faltou chamada recursiva -1,0
número de argumentos diferente do que devia ser -1,0
faltou caso base -0,5
corpo vazio -0,5
: em vez de , -0,5
variável com inicial minúscula -0,5
ordem das cláusulas -0,5
faltaram colchetes -0,5
confusão com nomes de variáveis -0,5
confusão com nomes de funções -0,5
[0] em vez de [] -0,5

Questão 3

estratégia: só testa listas consecutivas -1,0
usa guardas como "ou" -0,7
esqueceu condição -0,6
faltaram/sobraram de parênteses -0,5
faltou or -0,5
faltou import Data.List -0,5
faltou && -0,5
confusão entre head e tail -0,5
! em vez de not, ou faltou not -0,2
erro em assinatura -0,2
= no lugar errado -0,2
=> em lugar de -> -0,1
bool, boolean em vez de Bool -0,1
inicial maiúscula/minúscula -0,1
elems em lugar de elem -0,1
: em lugar de = -0,1

apenas verifica se duas listas têm elementos em comum +1,1
apenas lista vazia +0,3

Questão 4

faltou função: -1,0
esqueceu parte da árvore -1,0
retorna None ou nó errado em alguns casos -1,0
acesso a campo de None -0,7
não cria nó -0,7
variável não definida -0,5
inicial maiúscula/minúscula -0,1


MC346 Home

© 2017 João Meidanis