Logo Studenta

Reporte del desarrollo de software aplicando el paradigma funcional - Mauricio axel 20

¡Este material tiene más páginas!

Vista previa del material en texto

Reporte del desarrollo de software aplicando el paradigma funcional
DESARROLLO
Ejercicio 1
1.3 Comprobación de un número impar
Definir la función impar tal que impar x se verifica si el numero x es impar. Por ejemplo:
Impar 7 True 
Impar 6 False
Programa
Impar1 :: Integer -> Bool
Impar1 = odd
Explicación y documentación
Esta función recibe un entero y devuelve un boleano, para esto usa la función odd 
Como se puede observar esta función recibe una integral y devuelve un Bool, dependiendo de si el Integral es impar o par, devuelve un True o False, respectivamente, por ejemplo:
Ejercicio 2
1.5 Suma de cuadrados. 
Definir la función suma_de_cuadrados tal que suma_de_cuadrados l es la suma de los cuadrados de los elementos de la lista l. Por ejemplo:
	suma_de_cuadrados [1,2,3] 14
Programa
suma_de_cuadrados :: [Integer] -> Integer
cuadrado :: Integer -> Integer
cuadrado n = n*n
suma_de_cuadrados l = sum (map cuadrado l)
Explicación y documentación
La función suma_de_cuadrados_1, es una función que recibe un array de enteros y regresa un entero, para ello usa las funciones sum, map y cuadrado.
La función sum lo que es una función que recibe una lista de tipo num, y regresa un tipo num, esto sumando todos los elementos de la lista que recibe.
map es una función que recibe dos argumentos, una función y una lista, respectivamente, lo que hace es aplicar la función a la lista que recibe y regresa esa misma lista con la función aplicada.
<
En este ejemplo se observa como la función retorna una lista a la que aplica la “función” de multiplicar por 3
Cuadrado es una función que recibe un entero y devuelve el entero elevado al cuadrado.
Ejercicio 3
1.7 Valor de absoluto
Redefinir la función abs tal que abs x es el valor absoluto de x. Por ejemplo:
	abs (-3) 3
	abs 3 3
Programa
n_abs_1 :: (Num a, Ord a) => a -> a
n_abs_1 x = if x>0 then x else (-x) 
 
Explicación y documentación
n_abs_1 es una función que recibe dos parámetros, un tipo Num, que abarca enteros, doubles, floats, etc. Y un tipo Ord, que es un tipo que abarca tipos de símbolos de comparación, como mayor que, menor que, etc, y devuelve boleanos dependiendo de si la comparación es cierta o falsa, por ejemplo:
En sí, la función recibe un numero y con Ord lo compara con 0, si es mayor que 0 devuelve el mismo número, si es menor que 0, es decir, es negativo, multiplica el número por el signo – (menos), para así siempre devolver un numero positivo, lo que se podría ver como el valor absoluto del número.
Ejercicio 4
1.11 Potencia
Redefinir la función potencia tal que potencia x y es xy , por ejemplo: 
potencia 2 4 16
potencia 3.1 2 9.61
Programa
potencia :: Num a => a -> Int -> a
potencia x n = if n== 0 then 1
 else x * potencia x (n-1)
Explicación y documentación
La función “potencia” es una función que recibe dos parámetros, un Num y un Int, y devuelve un Num.
 A través de condicionales verifica si la potencia (n) es igual a 0, ya que, como sabemos cualquier numero elevado a cero es 1, si este es el caso, regresa 1.
En caso de que no sea 0, de forma recursiva calcula la potencia y la devuelve, ejemplificándolo de manera más clara, se podría ver de la siguiente manera
	funcion potencia (base, exponente)
		return base * potencia(base, exponente -1) 
Cabe mencionar que este progama tiene un problema muy evidente, y es que no tiene manera de verificar si la potencia que recibe es menor a 0, es decir es negativa, ya que como sabemos, esto nos devolvería una fracción, o un numero de tipo float.
Ejercicio 5
1.12 Función identidad
Redefinir la función id tal que id x es x. Por ejemplo:
	id 3 3 
Programa
n_id :: a -> a
n_id x = x
Explicación y documentación
Esta función es muy sencilla y no requiere una amplia explicación, es una función que recibe un dato (a) y regresa ese mismo dato.
Ejercicio 6
Ejercicio 2.2 Siguiente de un número
Definir la función siguiente tal que siguiente x sea el siguiente del numero entero x. Por ejemplo,
	siguiente 3 4
Programa
siguiente :: Integer -> Integer
siguiente = (+1) 
Explicación y documentación
Esta función, recibe un dato de tipo Integer y devuelve un tipo Integer. Esto sumándole 1 al integer recibido, mediante la notación prefija, esto, ya que la función tiene el primer elemento de la suma y como parámetro le estamos pasando el segundo argumento, un ejemplo de una suma en notación prefija: 
Esta suma da como resultado 7.
Ejercicio 7
2.4 Mitad
Definir la función mitad tal que mitad x es la mitad de x. Por ejemplo
	mitad 6 3.0
	mitad 5 2.5
Programa
mitad :: Doble -> Double
mitad x = x/2
Explicación y documentación
Esta función recibe un dato de tipo Double y devuelve un Double, resuelve el problema mediante la definición ecuacional (la mitad de un numero x es x/2). Para ello recibe un paramero x y lo divide entre dos, asignándole el valor calculado al parámetro y retornándolo.
Ejercicio 8
2.6 Potencia de dos
Definir la función dosElevadoA tal que dosElevadoA x es 2x. Por ejemplo:
dosElevadoA 3 8
Programa
dosElevadoA :: Int -> Int
dosElevadoA = (2^)
Explicación y documentación
Esta es una función que recibe un entero y devuelve un entero, el entero que devuelve es el resultado de una operación matemática, el entero que recibe es el exponente, aplicándolo a una base 2 y devuelve el resultado de 2 elevado al exponente que recibió.
Ejercicio 9
2.7 Reconocimiento de números positivos
Definir la función esPositivo tal que esPositivo se verifica si x es positivo. Por ejemplo:
esPositivo 3 True
esPositivo (-3) False
Programa
esPositivo :: Int -> Bool
esPositivo = (>0)
Explicación y documentación
Como podemos observar esta es una función que recibe un entero y regresa un booleano(true or false),el booleano es el resultado de una verificación, en este caso verifica que el entero siempre sea mayor a cero, en caso contrario este nos retornaría un falso.
Ejercicio 10
2.10 Suma de los elementos de una lista 
Redefinir la función sum tal que sum l es la suma de los elementos de l. por ejemplo.
n_sum [4,3,6] 13
Programa
 n_sum_1 :: Num a => [a] -> a
 n_sum_1 [] = 0
 n_sum_1 (x:xs) = x + n_sum_1 xs 
Explicación y documentación
En esta función tenemos que recibe el parámetro num. y los regresa en una lista, dicha lista regresaría la sumatoria de los números dentro de ella, si la lista esta vacía nos retornaría un cero, en caso de que la lista contenga un elemento, al momento de agregar más elementos, estos se irían sumando conforme se fueran agregando,siendo esto posible por (xs).
Esto lo podemos observar en las siguientes definiciones.
Donde en la primera función la lista contiene exactamente dos elementos y la segunda función contiene al menos dos elementos
f1 [x1, x2] = "The list contains exactly two elements (n = 2)"
f1 (x1:x2:xs) = "The list contains at least two elements (n >= 2)"
sucesivamente se irían agregando datos a la lista
(x1:x2:x3:xs) = "The list contains at least three elements (n >= 3)"
En general, una vez que vemos :xs, ya estamos capturando cualquier lista, sea vacia o no.
Ejercicio 11
2.3. Doble 
 2.3. Definir la función doble tal que doble x es el doble de x.
Programa
doble_1 :: Num a => a -> a 
doble_1 x = 2*x
Explicación y documentación
Este Ejercicio es sencillo ya que tenemos una función que tiene como parámetro un num y regresa un num, esta función resuelve el problema mediante una operación aritmética, multiplicando el numero introducido por dos, para asi dar con el doble del numero que se introdujo.

Continuar navegando