Taller de Recursión en Listas

Anuncio
Pontificia Universidad Javeriana
Introducción a la Programación
Taller de Recursión en Listas
Nombre:
¨El estudiante de la Pontificia Universidad Javeriana, como agente de su propia
formación, es corresponsable de la Identidad Institucional, uno de cuyos cimientos
es tener como hábito un comportamiento ético en todos los ámbitos de la vida.
En este sentido me comprometo a realizar con total integridad esta evaluación,
solamente empleando los recursos autorizados para su desarrollo¨.
Consejo Académico, Acta Nro 79, abril 19 de 2004
0
1. Para cada una de las siguientes funciones, realice una prueba de escritorio (seguimiento) con el
llamado que aparece.
(a) from l i s t import ∗
def f u n c (L ) :
i f v a c i a (L ) :
return [ ]
e l i f e s l i s t a ( cab (L ) ) :
return c o n s ( f u n c ( cab (L ) ) ,
f u n c ( c o l (L ) ) ) ;
else :
return c o n s ( cab (L ) , f u n c ( c o l (L ) ) )
Llamado: func
([1,[2,3],[[[[5,6],7],8],9],20])
(b) from l i s t import ∗
def f u n c 2 (L ,M) :
i f v a c i a (L ) :
return M
else :
return c o n s ( cab (L ) , f u n c 2 ( c o l (L ) ,M) )
Llamado: func2 ([1,2,4,5],
[2,7,5,2])
2. Diseñe un programa que construya una lista con los n primeros números primos. Cuidado: no
los primos entre 1 y n, sino los n primeros números primos.
3. Un corredor de bolsa al final del dı́a necesita conocer el estado de todas las acciones que manejó.
Para esto, requiere de un programa en Python que tome una lista con todas las acciones, otra
con el porcentaje de valorización de cada acción y otra con el número de acciones que tiene de
cada tipo. Por ejemplo, si la primera lista es [”bancolombia”, ”paz del rio”, ”suramericana”,
çementos del valle”], la segunda es [0.05, -0.012, 0.03, -0.007], y la tercera lista es [100, 27,
203,1000] ; quiere decir:
La acción de bancolombia durante el dı́a se valorizo un 5 %. (signo positivo).
Página 1 de 4
Introducción a la Programación
Taller de Recursión en Listas
La acción de paz del rio durante el dı́a se desvalorizo un 1.2 %. (signo negativo).
La acción de suramericana durante el dı́a se valorizo un 3 %. (signo positivo).
La acción de cementos del valle durante el dı́a se desvalorizo un 0.7 %. (signo negativo).
(a) Escriba un programa en Python que dadas las 3 listas, retorne la lista de las acciones que
tuvieron pérdidas, esto es, las que tuvieron una valorización negativa.
(b) Escriba un programa en python que dadas las 3 listas, retorne la acción que más se
valorizó en el dı́a.
(c) Escriba un programa en python que dadas las 3 listas y un número que corresponde a la
posición de la acción en la primera lista, retorne el porcentaje en el que creció el capital
del corredor por cuenta de la acción dada.
4. Desarrolle un programa para verificar si dos listas A y B contienen los mismos elementos. En
las dos listas pueden haber elementos repetidos, y el orden en que están los elementos en A
puede diferir del orden en que están en B.
5. Realiza un programa que calcule el desglose en billetes y monedas de una cantidad exacta de
pesos. el programa deberá mostrar 2 listas, la primera con la cantidad de billetes o monedas
y la segunda la denominación del billete o moneda. Hay billetes de 1000, 2000, 5000, 10000,
20000 y 50000? y monedas de 500, 200, 100 y 50?. Por ejemplo, si deseamos conocer el desglose
de 47750?, esta serı́a la información que debe incluirse en las listas:
2 billetes de 20000 pesos.
1 billete de 5000 pesos
1 billete de 2000 pesos
1 moneda de 500 pesos.
1 moneda de 200 pesos.
1 moneda de 50 pesos.
¿Que cómo se efectúa el desglose? Muy fácil. Empieza por calcular la división entera entre la
cantidad y 47750 (el valor de la mayor moneda): 47750 entre 50000 da 0, ası́ que no hay billetes
de 50000 ? en el desglose; divide a continuación la cantidad 47750 entre 20000, cabe a 2 y
sobran 7750, ası́ que en el desglose hay 2 billetes de 20000 ?; dividimos a continuación 7750
entre 10000 y vemos que no hay ningún billete de 10000 en el desglose (cabe a 0); como el resto
de la última división es 7750, pasamos a dividir 7750 entre 5000 y vemos que el desglose incluye
un billete de 5000 ? y aun nos faltan 2750 ? por desglosar...)
6. Desarrollar un procedimiento recursivo (con cab, col y vacia) que dado un valor x de entrada
y una lista L, retorne la posición de éste dentro de L, contando desde cero, por ejemplo:
posicion(0,[0,4,3]) retorna 0
posicion(0,[4,0,3]) retorna 1
posicion(0,[4,3,0]) retorna 2
Página 2 de 4
Introducción a la Programación
Taller de Recursión en Listas
7. Un viajero quiere conocer diferentes lugares del mundo pero cuenta con una cantidad limitada
de dinero. Para hacerlo, necesita de un programa de computador que reciba la distancia que
hay a los lugares que quiere visitar (en el orden que lo quiere hacer), la cantidad de dinero que
tiene y lo que cuesta cada kilómetro de recorrido. Por ejemplo, la lista de distancias podrı́a
ser la siguiente [0,1000,500,800,200,2000,3583,300], esto quiere decir que para ir al primer
lugar hay que recorrer 1000 kilómetros, de ahı́ al segundo lugar hay 500 kilómetros mas y
ası́ sucesivamente. Supongamos que cada kilómetro de viaje cueste $10000, entonces ir hacia el
segundo sitio le costará (1000+500)*10000. El programa calculará los sitios a los que es posible
ir con el dinero que se cuenta.
8. Desarrollar un procedimiento recursivo (con cab, col y vacia) que dado un valor i de entrada y
una lista L, retorne el elemento de L que está en la posición i contando desde uno, por ejemplo:
elemento(1,[0,4,3]) retorna 4
elemento(2,[0,4,3]) retorna 3
elemento(0,[0,4,3]) retorna 0
9. (a) Escriba una función en Python que dado un número retorne una lista con todos sus
divisores. Por ejemplo, si el número es 125, la función retornará la lista [1,....].
(b) Utilice la función anterior para saber si un número es primo o no.
10. Desarrollar un procedimiento recursivo (con cab, col y vacia) que reciba dos listas de entrada
con la misma longitud y retorne una lista con los elementos de ambas intercalados, por ejemplo:
intercalar([1,2,3],[7,8,9]) retorna [1,7,2,8,3,9]
11. Se necesita el desarrollo de un programa para facturar productos en un almacen de cadena que
calcule el precio total de una compra. Se ha definido que la entrada al programa estará compuesta por tres listas con el mismo número de elementos.
La primera lista contendrá la cantidad de productos que se van a comprar.
La segunda lista contendrá el precio de productos que se van a comprar.
La tercera lista contendrá el porcentaje de IVA que se aplica a cada producto.
12. Haga un procedimiento recursivo (con cab, col y vacia) que reciba una lista de entrada y retorne
los elementos que están en posición impar, por ejemplo:
elementos−en−pos−impar([”a”, ”b”, ”c”, ”e”, ”f ”, ”g”, ”h”, ”i”, ”j”, ”k”])retorna[”a”, ”c”, ”f ”, ”h”, ”j”]
13. Desarrolle un procedimiento que tome una lista y un número n, y retorne una nueva lista con
los primeros n elementos, por ejemplo: tomar([5,6,3,4,8,9,10],4) retorna [5,6,3,4]
14. Cree un procedimiento que tome una lista L y dos números a, b. Debe retornar una nueva lista
en la que todas las ocurrencias de a se cambian por b. Por ejemplo: cambiar([1,2,3,2,4],2,8)
retorna [1,8,3,8,4]
15. Elabore un procedimiento que tome dos listas como entrada y calcule la unión de ellas, sin
incluir los elementos repetidos.
Página 3 de 4
Introducción a la Programación
Taller de Recursión en Listas
16. Realice un procedimiento que tome una lista de listas y produzca una lista sencilla con todos
los elementos que están alli, por ejemplo:
listasimple([ [1],[2]]) retorna [1,2]
listasimple([ [1],[2,[3],[9,[[7],[8]]]]]) retorna [1,2,3,9,7,8]
17. En sus palabras describa para cada una de las siguientes funciones que hace, interpretando las
pruebas de escritorio (seguimiento).
(a) from l i s t import ∗
def c (L , x ) :
if
v a c i a (L ) :
return 0
else :
i f cab (L)== x :
return 1+c ( c o l (L ) , x )
else :
return c ( c o l (L ) , x )
(b) from l i s t import ∗
def m(L ) :
i f l e n (L)==1:
return cab (L)
else :
temp=m( c o l (L ) )
i f temp>=cab (L ) :
return temp
else :
return cab (L)
(c) from l i s t import ∗
def p ( x , L ) :
i f v a c i a (L ) :
return 0
else :
i f cab (L)==x :
return 1
else :
return 1+p ( x , c o l (L ) )
(d) from l i s t import ∗
def e (L , i ) :
i f i ==0:
return cab (L)
else :
return e ( c o l (L ) , ( i −1))
Página 4 de 4
Descargar