Elementos de Programação - LMAC, MEBiom 2018/19

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

Número:

Nome:

(a) Defina recursivamente em Python uma função digocs que dado um número natural n e um dígito d calcula o número de vezes que d ocorre na representação decimal de n. Por exemplo, digocs(1521,1) deverá ser 2.

In [1]:
def digocs(n,d):
    if n==d:
        return 1
    elif n<10:
        return 0
    elif n%10==d:
        return 1+digocs(n//10,d)
    else:
        return digocs(n//10,d)

(b) Usando digocs, defina recursivamente em Python uma função empates que dada uma lista de naturais w e dígitos d1 e d2 devolva o número de elementos de w cuja representação decimal tenha igual número de ocorrências de d1 e de d2. Por exemplo, empates([8,89,11,998],8,9) deverá ser 2 (correspondendo aos elementos 89 e 11).

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 empates(w,d1,d2):
    if w==[]:
        return 0
    elif digocs(w[0],d1)==digocs(w[0],d2):
        return 1+empates(w[1:],d1,d2)
    else:
        return empates(w[1:],d1,d2)  

Elementos de Programação - LMAC, MEBiom 2018/19

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

Número:

Nome:

(a) Defina recursivamente em Python uma função digsmaioreq que dado um número natural n e um dígito d calcula o número de dígitos maiores ou iguais a d que ocorrem na representação decimal de n. Por exemplo, digsmaioreq(25315,3) deverá ser 3.

In [1]:
def digsmaioreq(n,d):
    if n<10 and n>=d:
        return 1
    elif n<10:
        return 0
    elif n%10>=d:
        return 1+digsmaioreq(n//10,d)
    else:
        return digsmaioreq(n//10,d)

(b) Usando digsmaioreq, defina recursivamente em Python uma função noves que dada uma lista de naturais w devolva a lista com os elementos de w em cuja representação decimal ocorra o dígito 9. Por exemplo, noves([1597,0,11,678,9]) deverá ser [1597,9].

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 [1]:
def noves(w):
    if w==[]:
        return []
    elif digsmaioreq(w[0],9)>0:
        return [w[0]]+noves(w[1:])
    else:
        return noves(w[1:])

Elementos de Programação - LMAC, MEBiom 2018/19

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

Número:

Nome:

(a) Defina recursivamente em Python uma função digdifs que dado um número natural n e um dígito d calcula o número de dígitos da representação decimal de n que são diferentes de d. Por exemplo, digdifs(125147,1) deverá ser 4.

In [1]:
def digdifs(n,d):
    if n==d:
        return 0
    elif n<10:
        return 1
    elif n%10==d:
        return digdifs(n//10,d)
    else:
        return 1+digdifs(n//10,d)

(b) Usando digdifs, defina recursivamente em Python uma função digunico que dada uma lista de naturais w e um dígito d devolva a lista com os elementos de w cuja representação decimal tem todos os dígitos iguais a d. Por exemplo, digunico([8,809,191,5055,998,88],8) deverá ser [8, 88].

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 [2]:
def digunico(w,d):
    if w==[]:
        return []
    elif digdifs(w[0],d)==0:
        return [w[0]]+digunico(w[1:],d)
    else:
        return digunico(w[1:],d)

Elementos de Programação - LMAC, MEBiom 2018/19

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

Número:

Nome:

(a) Defina recursivamente em Python uma função digsmenoreq que dado um número natural n e um dígito d calcula o número de dígitos menores ou iguais a d que ocorrem na representação decimal de n. Por exemplo, digsmenoreq(25313,3) deverá ser 4.

In [1]:
def digsmenoreq(n,d):
    if n<=d:
        return 1
    elif n<10:
        return 0
    elif n%10<=d:
        return 1+digsmenoreq(n//10,d)
    else:
        return digsmenoreq(n//10,d)

(b) Usando digsmenoreq, defina recursivamente em Python uma função semzeros que dada uma lista de naturais w devolva o número de elementos de w em cuja representação decimal não ocorra o dígito 0. Por exemplo, semzeros([111,7,0,20,102]) deverá ser 2 (correspondendo aos elementos 111 e 7).

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 [3]:
def semzeros(w):
    if w==[]:
        return 0
    elif digsmenoreq(w[0],0)==0:
        return 1+semzeros(w[1:])
    else:
        return semzeros(w[1:])