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