Computação e Programação (LEMat, MEAmb, MEBiol, MEQ) Departamento de Matemática, IST Exame Tipo 2016 Duração: 2h30 Curso: Número: não preencher I– II – III – T: Nome: Grupo I [2,0+2,0+2,0] a) Defina em Python uma função f que recebe como argumento uma lista v de números inteiros não vazia, percorre-a posição a posição recorrendo a um ciclo e devolve o par [p,q] tal que: • p é a amplitude de v, isto é, a diferença entre a maior e a menor entrada de v; • q é 1 se o vector v é decrescente e é 0 caso contrário. b) Defina em Python uma função recursiva g que recebe como argumento uma lista de listas de números inteiros w e devolve a soma de todos os elementos nas sublistas de w. Pode, se achar conveniente, definir funções recursivas auxiliares. c) Defina em Python uma função h que recebe como argumento uma lista de listas w e devolve a lista dos máximos de cada uma das listas em w. Grupo II [4,0+2,0+2,0] a) Considere grafos dirigidos em que cada arco tem associado um custo (inteiro positivo). Desenvolva em Python uma implementação que disponibilize as operações seguintes sobre este tipo de grafos, escolhendo uma implementação eficiente de modo a que cada grafo seja representado por uma matriz quadrada cuja entrada na linha i, coluna j é o custo associado ao arco do nó i para o nó j, se existir, e infinito caso contrário: semarcos(n): grafo com n nós e sem arcos; arco(g,o,d,k): adiciona ao grafo g um arco de o para d com custo associado k; dim(g): número de nós do grafo g; arcoQ(g,o,d): True sse existe em g um arco de o para d; custo(g,o,d): custo do arco de o para d no grafo g ; semsaida(g,o,k): True sse não existe em g um arco a partir de o com custo não superior a k; 1 b) 1) Um caminho num grafo g, é uma lista de nós do grafo em que quaisquer dois elementos consecutivos na lista estão ligados por um arco em g. O primeiro elemento da lista diz-se a origem do caminho e o último diz-se o seu destino. Desenvolva em Python, sobre a camada de abstracção acima desenvolvida e assegurando a independência da implementação, uma função caminhoQ que recebe uma lista e um grafo g e devolve True se essa lista for um caminho em g. 2) Desenvolva em Python, sobre a camada de abstracção acima desenvolvida e assegurando a independência da implementação, uma função itinerario que recebe um grafo g, e dois nós o e d, e devolve, caso exista, uma lista com um caminho com origem o e destino d e o seu custo. Caso não exista, deverá devolver [[],inf]. Grupo III [3,0+3,0] a) Defina, funcionalmente, em Pyhton uma função ordenadaQ que recebe como argumento uma lista de números inteiros e devolve True se a lista está ordenada por ordem crescente e False em caso contrário. b) Uma matriz quadrada A diz-se uma menor da matriz quadrada B se, ao retirar uma linha e uma coluna a B, se obtém a matriz A. Implemente em Python uma função que recebe duas matrizes quadradas A e B e testa se A é uma matriz menor de B. Pode, se achar conveniente, definir funções auxiliares em qualquer paradigma. 2