Ficha 1 
Elementos de Programação
LMAC,MEBM  2011/12

10 minutos

Enunciado A (1.5 valores)
Não é permitido o uso de máquina de calcular nem de qualquer  tipo de consulta. 

Número:                                       Nome:

(a) Considere a seguinte definição recursiva em Mathematica.

fQ = Function[{x, n}, 
If[x==0,True,
If[x<n,False,
fQ[x-n,n]]]]

Descreva, sucintamente, a função calculada por fQ para argumentos x e n naturais com n ≠ 0.

fQ[x,n] devolve True se x é múltiplo de n, e False caso contrário.

(b) Defina recursivamente em Mathematica uma função contapares que recebe uma lista de naturais w, e devolve o número de elementos de w que são pares.
Nomeadamente, deverá ter-se contapares[{5,10,3,0,7,1,4}]=3, já que os elementos 10, 0 e 4 são pares. Sugestão: use a função fQ da alínea anterior para determinar se um número é ou não é par.

contapares=Function[w,
If[w=={},0,
If[fQ[First[w],2],1+contapares[Rest[w]],
contapares[Rest[w]]]]];

Ficha 1 
Elementos de Programação
LMAC,MEBM  2011/12

10 minutos

Enunciado B (1.5 valores)
Não é permitido o uso de máquina de calcular nem de qualquer  tipo de consulta. 

Número:                                       Nome:

(a) Considere a seguinte definição recursiva em Mathematica.

gQ = Function[{x, n}, 
If[x<n,x==0,
gQ[x-n,n]]]

Descreva, sucintamente, a função calculada por gQ para argumentos x e n naturais com n ≠ 0.

gQ[x,n] devolve True se x é múltiplo de n, e False caso contrário.

(b) Defina recursivamente em Mathematica uma função existemult3Q que recebe uma lista de naturais w, e devolve True ou False consoante exista ou não um múltiplo de 3 na lista w. Nomeadamente, deverá ter-se existemult3Q[{5,10,9,0,7,1,4}]=True, já que o elemento 9 é múltiplo de 3. Sugestão: use a função gQ da alínea anterior para determinar se um número é ou não é múltiplo de 3.

existemult3Q=Function[w,
If[w=={},False,
existemult3Q[Rest[w]]||fQ[First[w],3]]];

Ficha 1 
Elementos de Programação
LMAC,MEBM  2011/12

10 minutos

Enunciado C (1.5 valores)
Não é permitido o uso de máquina de calcular nem de qualquer  tipo de consulta. 

Número:                                       Nome:

(a) Considere a seguinte definição recursiva em Mathematica.

h = Function[{x, n}, 
If[x<n,x,
h[x-n,n]]]

Descreva, sucintamente, a função calculada por h para argumentos x e n naturais com n ≠ 0.

h[x,n] devolve o resto da divisão inteira de x por n.

(b) Defina recursivamente em Mathematica uma função todosmult5Q que recebe uma lista de naturais w, e devolve um valor Booleano, True ou False, que indica se todos os elementos da lista w são múltiplos de 5.
Nomeadamente, deverá ter-se todosmult5Q[{5,10,0,7}]=False, já que o elemento 7 não é múltiplo de 5. Sugestão: use a função h da alínea anterior para determinar se um número é ou não é múltiplo de 5.

todosmult5Q=Function[w,
If[w=={},True,
todosmult5Q[Rest[w]]&&h[First[w],5]==0]];

Ficha 1 
Elementos de Programação
LMAC,MEBM  2011/12

10 minutos

Enunciado D (1.5 valores)
Não é permitido o uso de máquina de calcular nem de qualquer  tipo de consulta. 

Número:                                       Nome:

(a) Considere a seguinte definição recursiva em Mathematica.

kQ = Function[{x, n}, 
If[x<n,
If[x==0,True,False],
kQ[x-n,n]]]

Descreva, sucintamente, a função calculada por kQ para argumentos x e n naturais com n ≠ 0.

kQ[x,n] devolve True se x é múltiplo de n, e False caso contrário.

(b) Defina recursivamente em Mathematica uma função impares que recebe uma lista de naturais w, e devolve a lista dos elementos ímpares de w. Nomeadamente, deverá ter-se impares[{5,9,0,7,4}]={5,9,7}. Sugestão: use a função kQ da alínea anterior para determinar se um número é ou não é ímpar.

impares=Function[w,
If[w=={},{},
If[kQ[First[w],2],impares[Rest[w]],
Prepend[impares[Rest[w]],First[w]]]]];