Ficha 1 
Elementos de Programação
LMAC,MEBM  2012/13

10 minutos

Enunciado A (1 valor)
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.

fa = Function[{w,x},
If[w=={},{},
If[First[w]==x,fa[Rest[w],x],
Prepend[fa[Rest[w],x],First[w]]]]]

Descreva, sucintamente, qual é a função calculada por fa.

fa recebe uma lista w e um elemento x e devolve a lista dos elementos de w que são diferentes de x.

(b) Defina recursivamente em Mathematica uma função nprec que recebe uma lista w e um elemento e e calcula o número de elementos de w que são imediatamente precedidos por e.
Nomeadamente, deverá ter-se nprec[{1,1,2,3,7,1},1]=2 pois o elemento imediatamente anterior aos dois elementos sublinhados é precisamente 1.

nprec=Function[{w,x},
If[Length[w]<2,0,
If[First[w]==x,1+nprec[Rest[w],x],nprec[Rest[w],x]]
]
]

Ficha 1 
Elementos de Programação
LMAC,MEBM  2012/13

10 minutos

Enunciado B (1 valor)
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.

fb=Function[{w,x},
If[w=={},0,
If[Last[w]<x,1+fb[Most[w],x],
fb[Most[w],x]]]
]

Descreva, sucintamente, qual é a função calculada por fb.

fb recebe uma lista w e um valor x e devolve o número de elementos de w menores que x

(b) Defina recursivamente em Mathematica uma função lsuc que recebe uma lista w e um elemento e e devolve a lista dos elementos de w que são imediatamente seguidos de e.
Nomeadamente, deverá ter-se lsuc[{1,1,2,3,7,1},1]={1,7} pois o elemento imediatamente seguinte aos dois elementos sublinhados é precisamente 1.

lsuc=Function[{w,x},
If[Length[w]<2,{},
If[First[Rest[w]]==x,Prepend[lsuc[Rest[w],x],First[w]],lsuc[Rest[w],x]]
]
]

Ficha 1 
Elementos de Programação
LMAC,MEBM  2012/13

10 minutos

Enunciado C (1 valor)
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.

fc=Function[{w,x},
If[w=={},{},
If[First[w]<=x,fc[Rest[w],x],
Prepend[fc[Rest[w],x],First[w]]]]
]

Descreva, sucintamente, qual é a função calculada por fc.

fc recebe uma lista w e um valor x e devolve a lista dos elementos de w maiores que x

(b) Defina recursivamente em Mathematica uma função nenq que recebe uma lista w e um elemento e e calcula o número de elementos de w que ocorrem entre dois es.
Nomeadamente, deverá ter-se nenq[{1,1,1,2,1,3},1]=2 pois os elementos sublinhados têm 1 imediatamente antes e depois.

nenq=Function[{w,x},
If[Length[w]<3,0,
If[First[w]==x&&First[Rest[Rest[w]]]==x,1+nenq[Rest[w],x],nenq[Rest[w],x]]
]
]

Ficha 1 
Elementos de Programação
LMAC,MEBM  2012/13

10 minutos

Enunciado D (1 valor)
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.

fd=Function[{w,x},
If[w=={},0,
If[First[w]==x,fd[Rest[w],x],
1+fd[Rest[w],x]]]
]

Descreva, sucintamente, qual é a função calculada por fd.

fd recebe uma lista w e um elemento x e calcula o número de elementos de w diferentes de x

(b) Defina recursivamente em Mathematica uma função lprec que recebe uma lista w e um elemento e e devolve a lista dos elementos de w que são imediatamente precedidos de e.
Nomeadamente, deverá ter-se lprec[{1,1,2,3,7,1},1]={1,2} pois o elemento imediatamente antes dos dois elementos sublinhados é precisamente 1.

lprec=Function[{w,x},
If[Length[w]<2,{},
If[First[w]==x,Prepend[lprec[Rest[w],x],First[Rest[w]]],lprec[Rest[w],x]]
]
]