Herramientas de usuario

Herramientas del sitio


introalg:taller07_1

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_1 [2007/04/10 14:43] nicolaswintroalg:taller07_1 [2018/08/10 03:03] (actual) – editor externo 127.0.0.1
Línea 1: Línea 1:
 ====== Clase 1 ====== ====== Clase 1 ======
  
-Plan para hoy 
  
-  * Introducción al uso de Hugs 
-  * Cómo escribir programas Haskell 
-  * Escribiendo los primeros programas 
-    * Análisis por casos 
-    * Manejo de tuplas 
  
- +===== Introducción al uso de Hugs=====
- +
-===== Introducción =====+
  
 [[http://haskell.org/hugs/|Hugs]] es un intérprete del lenguaje funcional puro [[http://haskell.org/|Haskell]]. \\ [[http://haskell.org/hugs/|Hugs]] es un intérprete del lenguaje funcional puro [[http://haskell.org/|Haskell]]. \\
Línea 153: Línea 145:
 Esta maquinaria **impide** que escribamos cualquier expresión que esté mal tipada.   Esta maquinaria **impide** que escribamos cualquier expresión que esté mal tipada.  
  
 +
 +===== Tuplas =====
 +
 +Haskell maneja n-uplas de manera directa.
 +Incorporamos a ''cap8.hs'' las siguientes definiciones:
 +
 +  suma3upla :: (Int,Int,Int) -> Int
 +  suma3upla (x,y,z) = x+y+z
 +  
 +  sumaYResta :: Int -> Int -> (Int,Int)
 +  sumaYResta x y = (x+y, x-y)
 +
 +Y las probamos desde el //prompt//.
 +
 +  Main> suma3upla (2,3,4)
 +  9
 +  Main> sumaYResta 2 3
 +  (5,-1)
  
  
Línea 165: Línea 175:
   Un año es bisiesto si es divisible por 4, excepto los principios de siglo (aquellos divisibles por 100),   Un año es bisiesto si es divisible por 4, excepto los principios de siglo (aquellos divisibles por 100),
   que para ser bisiestos, también deben ser divisibles por 400.    que para ser bisiestos, también deben ser divisibles por 400. 
 +
 +Una definición matemática concisa sería //bisiesto n = 4|n /\ (100|n => 400|n)//.
  
 Entonces podemos seguir agregando definiciones de funciones a nuestro archivo ''cap8.hs'' con el comando '':e''. Entonces podemos seguir agregando definiciones de funciones a nuestro archivo ''cap8.hs'' con el comando '':e''.
Línea 199: Línea 211:
 Vemos que las tres funciones operan correctamente en el rango de números dados ((No queremos decir que sean correctas en su totalidad, solo decimos que en ese rango no tienen fallas)). Vemos que las tres funciones operan correctamente en el rango de números dados ((No queremos decir que sean correctas en su totalidad, solo decimos que en ese rango no tienen fallas)).
  
-===== Tuplas ===== 
  
-Haskell maneja n-uplas de manera directa. 
-Incorporamos a ''cap8.hs'' las siguientes definiciones: 
  
-  suma3upla:: (Int,Int,Int) -> Int 
-  suma3upla (x,y,z) = x+y+z 
-   
-  sumaYResta :: Int -> Int -> (Int,Int) 
-  sumaYResta x y = (x+y, x-y) 
  
-Y las probamos desde el //prompt//. 
  
-  Main> suma3upla (2,3,4) 
-  9 
-  Main> sumaYResta 2 3 
-  (5,-1) 
  
  
Línea 222: Línea 221:
 Para realizar en lo que resta de la clase. Para realizar en lo que resta de la clase.
  
-  * Ejercicio 8.7 +  * Definir la función //sumaRat (a,b) (c,d)//, //sumaRat : (Int,Int) -> (Int,Int) -> (Int,Int)// que suma dos números racionales.\\ No es necesario realizar ninguna simplificación al resultado. 
-Definir la función //edad : (NatNatNat) -> (NatNatNat) -> Int// que dadas dos fechas indica los años transcurridos entre ellas. Por ejemplo edad.(20,10,1968).(30,4,1987) = 18 + 
-  * Ejercicio 8.8+  probar con (1,2) y (1,2), (1,4) y (1,4). 
 + 
 + 
 +  * Definir una función //ordena.(x,y)//, //ordena : (Int,Int) -> (Int,Int)// que, dados dos enteros, los ordena de  menor a mayor. 
 + 
 +  probar con (0,1), (2,2), (3,1). 
 + 
 +  * Definir una función //ambospositivos.x.y//, //ambospositivos : Int -> Int -> Bool//, que dados dos enteros devuelve //True// si los dos son positivos. 
 + 
 +  probar con 5 y 9, con -8 y 9, con -10 y -1, con 0 y 0 y con 0 y 3 
 + 
 +  * Ejercicio 8.7 del Apunte\\ 
 +Definir la función //edad : (IntIntInt) -> (IntIntInt) -> Int// que dadas dos fechas indica los años transcurridos entre ellas. Por ejemplo edad.(20,10,1968).(30,4,1987) = 18
 +Suponer que las fechas están siempre bien formadas y que la primera es menor o igual a la segunda. 
 + 
 +  probar con (16,4,1980) y (17,5,1992), (16,4,1980) y (14,5,1992), (16,4,1980) y (15,4,1992) y con (16,4,1980) y (17,5,1972). 
 + 
 + 
 +  * Ejercicio 8.8 del Apunte.\\
 En un prisma rectangular, llamemos //h// a la altura, //b// al ancho y //d// a la profundidad. Completar En un prisma rectangular, llamemos //h// a la altura, //b// al ancho y //d// a la profundidad. Completar
 la siguiente definición del área del prisma: \\ la siguiente definición del área del prisma: \\
 //area.h.b.d = 2 ∗ frente + 2 ∗ lado + 2 ∗ arriba// \\ //area.h.b.d = 2 ∗ frente + 2 ∗ lado + 2 ∗ arriba// \\
 //|[   ...aca va la definicion...   ]|// \\ //|[   ...aca va la definicion...   ]|// \\
-donde //frente//, //lado// y //arriba// son las caras frontal, lateral y superior del prisma respectivamente.+donde //frente//, //lado// y //arriba// son las caras frontal, lateral y superior del prisma respectivamente.\\ 
 + 
 +Completar la función //area.h.b.d// //area : Int -> Int -> Int -> Int// que calcula el área de un prisma rectangular:
  
 +      area :: Int -> Int -> Int -> Int   
 +      area.h.b.d = 2*frente + 2*lado + 2*tapa
 +           where
 +              frente = ...
 +              lado   = ...
 +              tapa   = ...
introalg/taller07_1.1176216231.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)