Você está na página 1de 1

Computação e Programação

2h LEBiol LEBiom Tipo

Os exame tem 10 valores, os restantes valores são do projeto. Podem fazer funções
auxiliares (desde que no mesmo tipo de programação). Cada Grupo deve ser resolvido
numa folha separada. Boa Sorte...

Grupo I - Programação Recursiva 2.0


1. (2 valores) Implemente recursivamente uma função que recebe uma lista de inteiros w e retorna a lista de elementos
que ocorrem repetidos na lista. A ordem dos elementos na lista resultado, bem como o número de vezes que ocorrem
é deixado ao critério do aluno. Apenas pode usar as funções sobre sublistas que retiram um elemento como “w[1:]”ou
“w[:-1]”.
Grupo II - Programação Imperativa 2.0+1.0
1. (2 valores) Implemente imperativamente uma função que recebe duas listas w e z do mesmo comprimento e retorna a
lista com os elementos que ocorrem em w e não ocorrem em z. A ordem dos elementos na lista resultado, bem como
o número de vezes que ocorrem é deixado ao critério do aluno.
2. (1 valor) Implemente imperativamente uma função que recebe uma matriz A, uma linha i e uma coluna j e retorna a
matriz menor que resulta em retirar a linha i e a coluna j a A.
Grupo III - Programação Funcional 1.0
1. (1 valor) Implemente funcionalmente (pode assumir, se lhe for útil, que o Python tem a função Nest e FixPoint) uma
função que recebe uma lista w e devolve a lista dos elementos que ocorrem apenas uma vez em w. A ordem dos elementos
na lista resultado é deixada ao critério do aluno.

Grupo IV - Programação em Larga Escala 2.0+2.0


1. (2 valores) Implemente uma classe para o tipo de dados grafo com a seguinte interface:
• graph(n): construtor recebe um natural n e constrói um grafo sem arestas com n nós.
• add(i,j,w): recebe dois nós (que são dois naturais) i e j e um peso natural w e adiciona a aresta de i para j com peso
w.
• nnodes(): retorna o número de nós do grafo.
• adjQ(i,j): recebe dois nós (que são dois naturais) i e j e retorna True sse há uma aresta (com peso superior a 0) do
nó i para o nó j.
• EulerQ(w): recebe uma lista de nós (em que todas as entradas são naturais) e retorna True sse a lista representa
um caminho Euleriano no grafo. Note que para a lista w representar um caminho Euleriano, w[i + 1] tem que
ser adjacente a w[i] para todo o 0 ≤ i < len(w) − 1 e todas as arestas do grafo aparecem uma e só uma vez no
caminho. Sugestão: crie uma matriz Aux de zeros n por n e para cada aresta (w[i], w[i + 1]) no caminho marque-a
com 1 nesta matriz (ou seja, coloque Aux[w[i]][w[i + 1]] = 1). Confirme que não marca duas vezes a mesma aresta
e que no fim todas as arestas do Grafo foram marcadas em Aux.
2. (2 valores) Supondo que tem o módulo de grafos anterior e não sabe a implementação do mesmos, desenvolva uma função
isloopQ que recebe um grafo g e uma lista w de inteiros e que retorna True sse
• w[i] é não negativo e menor que o número de nós do grafo, para todo o 0 ≤ i < len(w).
• w[i + 1] é adjacente a w[i], para todo o 0 ≤ i < len(w) − 1.
• Há elementos repetidos em w.

Você também pode gostar