Você está na página 1de 1

Computação e Programação

2h MEBiol MEBiom 2021-06-17

Os exame tem 10 valores, os restantes pontos são do projeto. Cada Grupo deve ser
resolvido numa folha separada. Boa Sorte...

Grupo I - Programação Recursiva 2.0


1. (2 points) Implemente recursivamente uma função que recebe duas listas w e z um natural n
retorna True sse há um prefixo de w de tamanho n que é sufixo de z. Só pode usar as funções
sobre sublistas que retiram um elemento, tais como “w[1:]”ou “w[:-1]”.

Grupo II - Programação Imperativa 2.0+1.0


1. (2 points) Implemente imperativamente uma função que recebe duas listas w e z e retorna
True sse existe uma sublista de z igual a w.
2. (1 point) Implemente imperativamente uma função que recebe uma lista w e um natural n e
retorna a lista de todos os prefixos de w de tamanho menor que n.

Grupo III - Programação Funcional 1.0


1. (1 point) Implemente funcionalmente (pode assumir, se lhe for útil, que o Python tem a função
Nest e FixPoint) uma função que recebe duas sequências de DNA w e z (implementadas como
Listas de 0,1,2 e 3) e retorna True sse w é a sequência complementar de z isto é, seja n o
tamanho das sequências, w[i] = 3 − z[n − 1 − i], ∀i∈{0...n−1} .

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


1. (2 points) Implemente um módulo para grafos com as seguintes funções:
• GRnew(n): recebe um natural n e retorna o grafo sem arestas com n nós (ou seja a matriz
n × n com todas as entradas a 0).
• GRadd(g,i,j,w): recebe um grafo g e 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 (ou seja, coloca w na entrada i,j da
matriz de adjacência de g
• GRnnodes(g): recebe um grafo e retorna o número de nós do grafo
• GRadjQ(g,i,j): recebe um grafo g e 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
• GRpathQ(g,i,j): recebe um grafo g e dois nós (que são dois naturais) i e j e retorna True
sse há um caminho (em que todas as arestas têm custo superior a 0) do nó i para o nó j.
Sugestão: note que há um caminho se houver um caminho com tamanho menor ou igual
ao número de nós do grafo. Considere um função auxiliar que vê se há um caminho com
pelo menos k nós (fazendo recursão em k) e use-a para resolver esta.
2. (2 points) Supondo que tem o módulo de grafos anterior e não sabe a implementação dos
mesmos, desenvolva uma função ispathQ 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
• w[i + 1] é adjacente a w[i].

Você também pode gostar