Elementos de Programação - LMAC, MEBiom 2017/18

Ficha 1 - Enunciado A (1 valor, 10 minutos)

Número:

Nome:

(a) Considere a seguinte definição recursiva em Python e descreva sucintamente qual a função calculada por aaa.

In [1]:
def aaa(x,w):
    if w==[]:
        return False
    elif x==w[0]:
        return True
    else:
        return aaa(x,w[1:])

aaa(x,w) é True se o elemento x pertence a lista w, e False caso contrário.

(b) Usando aaa, defina recursivamente em Python uma função dist que dada uma lista de inteiros w devolva o número de valores distintos que ocorrem em w.

Por exemplo, dist([1,2,3,2,3,0,3]) deve ser 4 (na lista ocorrem os valores 0, 1, 2 e 3).

Neste exercício não pode usar definições por compreensão nem métodos. As únicas construções sobre listas permitidas são: lista vazia ([]), acesso aos elementos da lista por posição (lista[posição]), seccionamento da lista (lista[posição:posição]), comparação com a lista vazia (==[]) e concatenação (+).

In [ ]:
def dist(w):
    if w==[]:
        return 0
    elif aaa(w[0],w[1:]):
        return dist(w[1:])
    else:
        return 1+dist(w[1:])      

Elementos de Programação - LMAC, MEBiom 2017/18

Ficha 1 - Enunciado B (1 valor, 10 minutos)

Número:

Nome:

(a) Considere a seguinte definição recursiva em Python e descreva sucintamente qual a função calculada por bbb.

In [1]:
def bbb(x,w):
    if w!=[]:
        return (1 if x==w[0] else 0)+bbb(x,w[1:])
    else:
        return 0

bbb(x,w) é o número de ocorrências do elemento x na lista w.

(b) Usando bbb, defina recursivamente em Python uma função quantos que dada uma lista de inteiros w e um valor r devolva como resultado o número de formas de se obter r como a soma de dois elementos de w.

Por exemplo, quantos([1,2,1,3,4],5) deve ser 3 (pois 1+4, 2+3 e 1+4 são todas 5).

Neste exercício não pode usar definições por compreensão nem métodos. As únicas construções sobre listas permitidas são: lista vazia ([]), acesso aos elementos da lista por posição (lista[posição]), seccionamento da lista (lista[posição:posição]), comparação com a lista vazia (==[]) e concatenação (+).

In [ ]:
def quantos(w,r):
    if w==[]:
        return 0
    else: 
        return bbb(r-w[0],w[1:])+quantos(w[1:],r)

Elementos de Programação - LMAC, MEBiom 2017/18

Ficha 1 - Enunciado C (1 valor, 10 minutos)

Número:

Nome:

(a) Considere a seguinte definição recursiva em Python e descreva sucintamente qual a função calculada por ccc.

In [1]:
def ccc(x,w):
    if w==[]:
        return False
    else:
        return x==w[0] or ccc(x,w[1:])

ccc(x,w) é True se o elemento x pertence a lista w, e False caso contrário.

(b) Usando ccc, defina recursivamente em Python uma função parsomaQ que dada uma lista de inteiros w e um valor r devolva como resultado True se se pode obter r como a soma de dois elementos de w, e False caso contrário.

Por exemplo, parsomaQ([1,2,3],4) deve ser True (pois 1+3 é 4), mas parsomaQ([1,2,3],6) deve ser False (pois a maior soma possível é 2+3, ou seja, 5).

Neste exercício não pode usar definições por compreensão nem métodos. As únicas construções sobre listas permitidas são: lista vazia ([]), acesso aos elementos da lista por posição (lista[posição]), seccionamento da lista (lista[posição:posição]), comparação com a lista vazia (==[]) e concatenação (+).

In [ ]:
def parsomaQ(w,r):
    if w==[]:
        return False
    elif ccc(r-w[0],w[1:]):
        return True
    else:
        return parsomaQ(w[1:],r)

Elementos de Programação - LMAC, MEBiom 2017/18

Ficha 1 - Enunciado D (1 valor, 10 minutos)

Número:

Nome:

(a) Considere a seguinte definição recursiva em Python e descreva sucintamente qual a função calculada por ddd.

In [1]:
def ddd(x,w):
    if w==[]:
        return 0
    elif x==w[0]:
        return 1+ddd(x,w[1:])
    else:
        return ddd(x,w[1:])

ddd(x,w) é o número de ocorrências do elemento x na lista w.

(b) Usando ddd, defina recursivamente em Python uma função reps que dada uma lista de inteiros w devolva o número de valores repetidos que ocorrem em w.

Por exemplo, reps([1,2,3,1,1,3]) deve ser 2 (os valores 1 e 3 ocorrem repetidos).

Neste exercício não pode usar definições por compreensão nem métodos. As únicas construções sobre listas permitidas são: lista vazia ([]), acesso aos elementos da lista por posição (lista[posição]), seccionamento da lista (lista[posição:posição]), comparação com a lista vazia (==[]) e concatenação (+).

In [ ]:
def reps(w):
    if w==[]:
        return 0
    elif ddd(w[0],w[1:])==1:
        return 1+reps(w[1:])
    else:
        return reps(w[1:])