Introducción a la Programación

Anuncio
Cali
Introducción a la Programación
Cali
Segundo Parcial
Octubre 2 de 2006
Nombre:
Pregunta
1
2
3
Total
Puntos
30
30
40
100
Cal.
Recuerde que:
cab(L) retorna la cabeza de la lista L (el primer elemento).
col(L) retorna la cola de la lista L (una lista con todos los elementos, excepto
el primero).
vacia(L) retorna T rue si la lista es vacı́a o F alse si la lista contiene elementos.
a % b calcula el residuo de dividir a por b. Por ejemplo 16 % 5 calcula 1.
1 (30 Puntos)
Haga el seguimiento, paso a paso, del siguiente procedimiento:
def x (L ) :
i f v a c i a (L ) :
return 0
else :
i f cab (L) % 5 == 1 :
return cab (L) + x ( c o l (L ) )
else :
return x ( c o l (L ) )
Cuando se llama de la siguiente forma: x([1, 5, 6, 10, 11, 15, 16, 20, 21])
Solución:
Suma todos los numeros que divididos entre 5 dan como residuo 1. En el caso de la lista
dada retorna 55.
2 (30 Puntos)
El general McCarthur del ejercito de los estados unidos se acaba de ver la pelı́cula ”Rescatando
al soldado Ryan” y teme que ocurra la misma situación con los soldados estadounidenses
que están en Irak y Afganistán (Que por razones de fuerza tenga que retirar a alguno del
Página 1 de 2
Introducción a la Programación
Segundo Parcial
frente de combate). Necesita que usted desarrolle un programa que tome como entrada una
lista de códigos de soldados (números enteros) y el código de un soldado determinado. Con
estos datos debe retornar la lista de códigos de soldados sin incluir al soldado. Por ejemplo:
rescatar([1, 5, 6, 10, 11, 15, 16, 20, 16, 21], 16) retorna [1, 5, 6, 10, 11, 15, 20, 16, 21]. Para realizar
ésta asignación usted debe utilizar recursión (definir un procedimiento que se llame a si mismo)
y no puede utilizar el procedimiento filter.
Solución:
## L : l i s t a de c o d i g o s de s o l d a d o s
## s : c o d i g o de s o l d a d o a r e s c a t a r
def r e s c a t a r (L , s ) :
i f v a c i a (L ) :
return L
e l i f cab (L) == s :
return c o l (L)
else :
return c o n s ( cab (L ) , r e s c a t a r ( c o l (L ) , s ) )
print r e s c a t a r ( [ 1 , 5 , 6 , 1 0 , 1 1 , 1 5 , 1 6 , 2 0 , 1 6 , 2 1 ] , 1 6 )
3 (40 Puntos)
En ésta ocasión el general McCarthur debe realizar un programa que rescate a todos los soldados
que tienen un mismo código. Por ejemplo: rescatartodos([1, 5, 16, 10, 16, 11, 15, 16, 20, 21, 16], 16)
retorna [1, 5, 10, 11, 15, 20, 21]. Para realizar ésta asignación usted debe utilizar recursión (definir
un procedimiento que se llame a si mismo) y puede utilizar el procedimiento filter.
Solución:
## L : l i s t a de c o d i g o s de s o l d a d o s
## s : c o d i g o de s o l d a d o a r e s c a t a r
def r e s c a t a r t o d o s (L , s ) :
i f v a c i a (L ) :
return L
e l i f cab (L) == s :
return r e s c a t a r t o d o s ( c o l (L ) , s )
else :
return c o n s ( cab (L ) , r e s c a t a r t o d o s ( c o l (L ) , s ) )
print r e s c a t a r t o d o s ( [ 1 , 5 , 1 6 , 1 0 , 1 6 , 1 1 , 1 5 , 1 6 , 2 0 , 2 1 , 1 6 ] , 1 6 )
Página 2 de 2
Descargar