Herramientas de usuario

Herramientas del sitio


introalg:taller07_2

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:taller07_2 [2007/04/17 16:03] nicolaswintroalg:taller07_2 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1
Línea 223: Línea 223:
   Main> digitos 123123123   Main> digitos 123123123
   [3,2,1,3,2,1,3,2,1]   [3,2,1,3,2,1,3,2,1]
 +
 +
 +
  
  
Línea 232: Línea 235:
  
 <code> <code>
-descuento :: (Int,Bool) -> (Float,Int,Float) +descuento :: (Float,Bool) -> (Float,Float,Float) 
--- argumento: una tupla (Int,Bool) que representa el monto (Int) y si tenemos tickets (Bool) +-- argumento: un par que representa el monto (Float) y si tenemos tickets (Bool) 
--- resultado: una tresupla (Float,Int,Float) que representa el monto total, +-- resultado: una tresupla (Float,Float,Float) que representa el monto total, 
 --            restando el descuento correspondiente, el número de puntos  --            restando el descuento correspondiente, el número de puntos 
 --            y el descuento en tickets, respectivamente. --            y el descuento en tickets, respectivamente.
  
-descuento x y | x == 257 && y == True = ( x - 0.2*x , 10*x, 0.1*x) +descuento (x,y| x == 257 && y     = ( x - 0.2*x , 10*x, 0.1*x) 
-              | x == 257 && y == False = ( x - 0.2*x , 10*x, 0) +                | x == 257 && not y = ( x - 0.2*x , 10*x, 0) 
-              | x == 350 && y == True = ( x - 0.2*x , 10*x, 0.1*x) +                | x == 350 && y     = ( x - 0.2*x , 10*x, 0.1*x) 
-              | x == 350 && y == False = ( x - 0.2*x , 10*x, 0) +                | x == 350 && not y = ( x - 0.2*x , 10*x, 0) 
-              | x == 489 && y == True = ( x - 0.2*x , 10*x, 0.1*x) +                | x == 489 && y     = ( x - 0.2*x , 10*x, 0.1*x) 
-              | x == 489 && y == False = ( x - 0.2*x , 10*x, 0) +                | x == 489 && not y = ( x - 0.2*x , 10*x, 0) 
-              | x > 1000 && y == True = ( x - 0.2*x , 10*x, 0.1*x) +                | x > 1000 && y     = ( x - 0.2*x , 10*x, 0.1*x) 
-              | x > 1000  && y == False = ( x - 0.2*x , 10*x, 0) +                | x > 1000 && not y = ( x - 0.2*x , 10*x, 0) 
-              | x == 768 && y == True = ( x - 0.2*x , 10*x, 0.1*x) +                | x == 768 && y     = ( x - 0.2*x , 10*x, 0.1*x) 
-              | x == 768 && y == False = ( x - 0.2*x , 10*x, 0) +                | x == 768 && not y = ( x - 0.2*x , 10*x, 0) 
-              | x == 999 && y == True = ( x - 0.2*x , 10*x, 0.1*x) +                | x == 999 && y     = ( x - 0.2*x , 10*x, 0.1*x) 
-              | x == 573 && y == False = ( x - 0.2*x , 10*x, 0) +                | x == 573 && not y = ( x - 0.2*x , 10*x, 0) 
-              | x > 500 && x <= 1000 && y == True = ( x - 0.15*x , 5*x, 0.05*x) +                | x > 500 && x <= 1000 && y      = ( x - 0.15*x , 5*x, 0.05*x) 
-              | x > 500 && x <= 1000 && y == False = ( x - 0.15*x , 5*x, 0) +                | x > 500 && x <= 1000 && not  = ( x - 0.15*x , 5*x, 0) 
-              | x > 200 && x <= 500 && y == True = ( x - 0.1*x , 2*x, 0.02*x) +                | x > 200 && x <= 500  && y      = ( x - 0.1*x , 2*x, 0.02*x) 
-              | x > 200 && x <= 500 && y == False = ( x - 0.1*x , 2*x, 0) +                | x > 200 && x <= 500  && not  = ( x - 0.1*x , 2*x, 0) 
-              | x <= 200 = ( x , x , 0 )+                | x <= 200 = ( x , x , 0)
 </code> </code>
  
Línea 260: Línea 263:
  
 <code> <code>
-descuento :: (Int,Bool) -> (Float,Int,Float) +descuento:: (Float,Bool) -> (Float,Float,Float) 
-descuento (x,y) | x == 257 || x == 350 || x == 489 || x == 768 || x == 999 || x == 573 = descuento20 (x,y) +descuento(x,y) | x == 257 || x == 350 || x == 489 || x == 768 || x == 999 || x == 573 = descuento20 (x,y) 
-                | x > 1000 = descuento20 (x,y) +                 | x > 1000 = descuento20 (x,y) 
-                | x > 500 && x <= 1000 = descuento15 (x,y) +                 | x > 500 && x <= 1000 = descuento15 (x,y) 
-                | x > 200 && x <= 500 = descuento10 (x,y) +                 | x > 200 && x <= 500 = descuento10 (x,y) 
-                | x <= 200 = descuento0 (x,y)+                 | x <= 200 = descuento0 (x,y)
  
-descuento20 :: (Int,Bool) -> (Float,Int,Float)+descuento20 :: (Float,Bool) -> (Float,Float,Float)
 descuento20 (x,y) | y == True = ( x - 0.2*x , 10*x, 0.1*x) descuento20 (x,y) | y == True = ( x - 0.2*x , 10*x, 0.1*x)
                   | y == False = ( x - 0.2*x , 10*x, 0)                   | y == False = ( x - 0.2*x , 10*x, 0)
  
-descuento15 :: (Int,Bool) -> (Float,Int,Float)+descuento15 :: (Float,Bool) -> (Float,Float,Float)
 descuento15 (x,y) | y == True = ( x - 0.15*x , 5*x, 0.05*x) descuento15 (x,y) | y == True = ( x - 0.15*x , 5*x, 0.05*x)
                   | y == False = ( x - 0.15*x , 5*x, 0)                   | y == False = ( x - 0.15*x , 5*x, 0)
  
-descuento10 :: (Int,Bool) -> (Float,Int,Float)+descuento10 :: (Float,Bool) -> (Float,Float,Float)
 descuento10 (x,y) | y == True = ( x - 0.1*x , 2*x, 0.02*x) descuento10 (x,y) | y == True = ( x - 0.1*x , 2*x, 0.02*x)
                   | y == False = ( x - 0.1*x , 2*x, 0)                   | y == False = ( x - 0.1*x , 2*x, 0)
  
-descuento0 :: (Int,Bool) -> (Float,Int,Float) +descuento0 :: (Float,Bool) -> (Float,Float,Float) 
-descuento0 (x,y) = ( x , x , 0 )+descuento0 (x,y) = ( x , x , 0)
 </code> </code>
  
Línea 361: Línea 364:
  
   * los nombres de **funciones y variables** comienzan con **minúscula**   * los nombres de **funciones y variables** comienzan con **minúscula**
 +
  
  
Línea 378: Línea 382:
 o bien de manera equivalente e igualmente eficiente, pero mucho más comprensible: o bien de manera equivalente e igualmente eficiente, pero mucho más comprensible:
  
-  area base altura profundidad = 2*frente + 2*lado + 2*tapa+  area b a p = 2*frente + 2*lado + 2*tapa
      where      where
-        frente = base altura +        frente = a 
-        lado = profundidad altura +        lado = a 
-        tapa = base profundidad+        tapa = 
  
 ===== Ejercicios ===== ===== Ejercicios =====
Línea 395: Línea 400:
   probar con [1,2,3], con [3,3,3] y con [].   probar con [1,2,3], con [3,3,3] y con [].
  
-  * Definir una función //esVaciaOPrimer0.xs//, //esVaciaOPrimer0 : [a] -> Bool// que dada una lista //xs// decida si //xs// es vacía o bien su primer elemento es 0.+  * Definir una función //esVaciaOPrimer0.xs//, //esVaciaOPrimer0 : [Int] -> Bool// que dada una lista //xs// decida si //xs// es vacía o bien su primer elemento es 0.
  
   probar con [1,2,3], con [3,3,3], con [0], con [0,1] y con [].   probar con [1,2,3], con [3,3,3], con [0], con [0,1] y con [].
  
-  * Definir una función //segundoEssegundo.(x,y).zs//, //segundoEssegundo : (Int,Int) -> [Int] -> Bool// que dada una tupla de enteros //(x,y)// y una lista de enteros //zs// comprueba si el segundo elemento de la tupla es igual al segundo elemento de la lista.+  * Definir una función //segundoEsSegundo.(x,y).zs//, //segundoEsSegundo : (Int,Int) -> [Int] -> Bool// que dada una tupla de enteros //(x,y)// y una lista de enteros //zs// comprueba si el segundo elemento de la tupla es igual al segundo elemento de la lista.
  
   probar con (1,2) y [3,2,4,5], (0,0) y [], (1,2) y [2,3,4,5].   probar con (1,2) y [3,2,4,5], (0,0) y [], (1,2) y [2,3,4,5].
  
-  * Definir una función //recortaDia.xs//, //recortaDia : [Char] -> [Char]// que dada una lista de caracteres //xs//, comprueba si las letras de la lista forman el nombre de un día de la semana, si es así, si el día es de diario, devuelven la primera letra solamente, en cambio, si el día es de fin de semana, devuelven el nombre del día completo.+  * Definir una función //recortaDia.xs//, //recortaDia : [Char] -> [Char]// que dada una lista de caracteres //xs//, comprueba si las letras de la lista forman el nombre de un día de la semana, si es así, si el día no es del fin de semana, devuelven la primera letra solamente, en cambio, si el día es de fin de semana, devuelven el nombre del día completo.
 Ayuda: fíjense que el resultado siempre debe ser una lista de caracteres! Ayuda: fíjense que el resultado siempre debe ser una lista de caracteres!
  
introalg/taller07_2.1176825810.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)