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].