Herramientas de usuario

Herramientas del sitio


introalg:problemas07

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
introalg:problemas07 [2007/05/14 14:26] – fitro toma un predicado p nicolaswintroalg:problemas07 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1
Línea 113: Línea 113:
 Se pide: encontrar un predicado //pip.n//, //pip : Int -> Bool// que dado un número //0%%<=%%n<10000// devuelva diga cuando el jugador debe decir //pip//. \\ Se pide: encontrar un predicado //pip.n//, //pip : Int -> Bool// que dado un número //0%%<=%%n<10000// devuelva diga cuando el jugador debe decir //pip//. \\
 Para hacerlo habrá que definir previamente las siguientes funciones: //unidad,decena,centena,unidadDeMil : Int -> Int//. Para hacerlo habrá que definir previamente las siguientes funciones: //unidad,decena,centena,unidadDeMil : Int -> Int//.
 +
 +
  
  
Línea 220: Línea 222:
   probar con [], [0], [0,0,0], [0,1], [0,1,0,1,0,1,0,1]   probar con [], [0], [0,0,0], [0,1], [0,1,0,1,0,1,0,1]
  
 +   * A partir de la [[http://es.wikipedia.org/wiki/Serie_de_Taylor | Serie de Taylor]] es posible aproximar la base de los logaritmos naturales o neperianos "[[http://es.wikipedia.org/wiki/N%C3%BAmero_e | e]]". \\
 +Definir la función //numeroE//, //numeroE : Integer -> Double//, donde //numeroE.n// retorna la sumatoria //1/0! + 1/1! + 1/2! + ... 1/n!//. Ejemplo: //numeroE.10 = 2.71828180114638//. \\
 +Probar como se pueden ir obteniendo todas los dígitos, comparar con el [[http://antwrp.gsfc.nasa.gov/htmltest/gifcity/e.1mil | primer millón de dígitos]].
  
  
Línea 280: Línea 285:
   probar con acumulaBool.(||).False.(map entre0y9 [10,20,30,2,40]).   probar con acumulaBool.(||).False.(map entre0y9 [10,20,30,2,40]).
  
-  * Generalice la función anterior para operadores y listas de cualquier tipo. Definir //acumula.f.z.xs//, //acumula : (a->b->a) -> -> [b] -> a//, que dado un operador binario //f// (asociativo a izquierda), un elemento //z// neutro (a izquierda) del operador y una lista //xs//, retorna la acumulación del operador con //z// (cero) y con cada uno de los elementos de la lista. Ejemplo: //acumula.(++).[].["Hola", " ", "que", " ", "tal"] = "Hola que tal"//.+  * Generalice la función anterior para operadores y listas de cualquier tipo. Definir //acumula.f.z.xs//, //acumula : (a->b->b) -> -> [a] -> b//, que dado un operador binario //f// (asociativo a derecha), un elemento //z// neutro (a derecha) del operador y una lista //xs//, retorna la acumulación del operador con //z// (cero) y con cada uno de los elementos de la lista. Ejemplo: //acumula.(++).[].["Hola", " ", "que", " ", "tal"] = "Hola que tal"//.
  
   probar con todos los ejemplos de las versiones menos generales.   probar con todos los ejemplos de las versiones menos generales.
Línea 326: Línea 331:
   probar con [] [1,2,3], [1,2,3] [], [1,2,3] [4,5,6], [4,5,6] [1,2,3],   probar con [] [1,2,3], [1,2,3] [], [1,2,3] [4,5,6], [4,5,6] [1,2,3],
     [0,1,2,5] [3,4], [1,2,3] [1,2,3], [] [], [3,4] [0,1,2,5].     [0,1,2,5] [3,4], [1,2,3] [1,2,3], [] [], [3,4] [0,1,2,5].
 +
  
 ==== Para componer ==== ==== Para componer ====
Línea 338: Línea 344:
  
   * Escribir una definición de //paraTodo// utilizando **//acumular//**.   * Escribir una definición de //paraTodo// utilizando **//acumular//**.
 +
 +  * Escribir //factorial// utilizando //desdeHasta// y **//acumular//**.
  
   * Definir la función //insertaOrd : Int -> [Int] -> [Int]//, donde //insertaOrd.x.xs// inserta de manera ordenada el elemento //x// dentro de la lista //xs// que suponemos ordenada de menor a mayor. A partir de esta función definir //ordenaIns : [Int] -> [Int]// que ordena los elementos de una lista de menor a mayor.   * Definir la función //insertaOrd : Int -> [Int] -> [Int]//, donde //insertaOrd.x.xs// inserta de manera ordenada el elemento //x// dentro de la lista //xs// que suponemos ordenada de menor a mayor. A partir de esta función definir //ordenaIns : [Int] -> [Int]// que ordena los elementos de una lista de menor a mayor.
Línea 358: Línea 366:
  
   Ejemplo: escalaImpuesto [("Perez",30), ("Gomez",67), ("Martinez",55), ("Rodriguez",24)] = [("Gomez",201),("Rodriguez",72)]   Ejemplo: escalaImpuesto [("Perez",30), ("Gomez",67), ("Martinez",55), ("Rodriguez",24)] = [("Gomez",201),("Rodriguez",72)]
 +
  
 ==== Para lucirse ==== ==== Para lucirse ====
Línea 374: Línea 383:
  
   * **Redefinir** la función escalaImpuesto: [(String,Int)] → [(String,Int)], que toma una lista de tuplas con el nombre de un usuario y su gasto mensual de electricidad, y devuelve una lista de tuplas con el nombre de aquellos usuarios que gastan más de **la media** de electricidad y su gasto multiplicado por la diferencia entre su gasto y el gasto medio.   * **Redefinir** la función escalaImpuesto: [(String,Int)] → [(String,Int)], que toma una lista de tuplas con el nombre de un usuario y su gasto mensual de electricidad, y devuelve una lista de tuplas con el nombre de aquellos usuarios que gastan más de **la media** de electricidad y su gasto multiplicado por la diferencia entre su gasto y el gasto medio.
 +
 +  * La función //numeroE// puede ser extremadamente ineficiente para valores elevados de //n//, debido a que por cada sumando computa nuevamente el factorial. Generalizar la función de manera que tome un parámetro más y en ese se lleve el factorial que le corresponde a ese término. Comparar la eficiencia en término del tiempo.
introalg/problemas07.1179152784.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)