PFH: La semana en Exercitium (12 de agosto de 2022)
Esta semana he publicado en Exercitium las soluciones de los siguientes problemas:
- 1. Media aritmética de tres números
- 2. Suma de monedas
- 3. Volumen de la esfera
- 4. Área de la corona circular
- 5. Último dígito
A continuación se muestran las soluciones.
1. Media aritmética de tres números
Definir la función
1 |
media3 :: Float -> Float -> Float -> Float |
tal que (media3 x y z)
es la media aritmética de los números x
, y
y z
. Por ejemplo,
1 2 3 |
media3 1 3 8 == 4.0 media3 (-1) 0 7 == 2.0 media3 (-3) 0 3 == 0.0 |
Solución en Haskell
1 2 |
media3 :: Float -> Float -> Float -> Float media3 x y z = (x+y+z)/3 |
El código se encuentra en GitHub.
Soluciones en Python
1 2 |
def media(x, y, z): return (x + y + z)/3 |
El código se encuentra en GitHub.
Comentarios
- Los comentarios irán resaltando las diferencias de la solución en Python respecto de la de Haskell (que no se hayan comentado en ningún ejercicio anterior).
- La estructura de la definición en Python es
1 2 3 4 |
def <nombre de la función>(<argumento 1>,...,<argumento n>): # type: <signatura de la función> ... return <resultado> |
- La suma de dos números
x
ey
se escribe en Python igual que en Haskell:x + y
. - El cociente de dos números decimales
x
ey
se escribe en Python igual que en Haskell:x / y
.
2. Suma de monedas
Definir la función
1 |
sumaMonedas :: Int -> Int -> Int -> Int -> Int -> Int |
tal que (sumaMonedas a b c d e)
es la suma de los euros correspondientes a a
monedas de 1 euro, b
de 2 euros, c
de 5 euros, d
de 10 euros y e
de 20 euros. Por ejemplo,
1 2 3 |
sumaMonedas 0 0 0 0 1 == 20 sumaMonedas 0 0 8 0 3 == 100 sumaMonedas 1 1 1 1 1 == 38 |
Soluciones en Haskell
1 2 |
sumaMonedas :: Int -> Int -> Int -> Int -> Int -> Int sumaMonedas a b c d e = 1*a+2*b+5*c+10*d+20*e |
El código se encuentra en GitHub.
Soluciones en Python
1 2 |
def sumaMonedas(a, b, c, d, e): return 1 * a + 2 * b + 5 * c + 10 * d + 20 * e |
El código se encuentra en GitHub.
Comentarios
- El producto de dos números
x
ey
se escribe en Python igual que en Haskell:x * y
.
3. Volumen de la esfera
Definir la función
1 |
volumenEsfera :: Double -> Double |
tal que (volumenEsfera r)
es el volumen de la esfera de radio r
. Por ejemplo,
1 |
volumenEsfera 10 == 4188.790204786391 |
Solución en Haskell
1 2 |
volumenEsfera :: Double -> Double volumenEsfera r = (4/3)*pi*r^3 |
El código se encuentra en GitHub.
Solución en Python
1 2 3 4 |
from math import pi def volumenEsfera(r): return (4 / 3) * pi * r ** 3 |
El código se encuentra en GitHub.
Comentarios
- El número se representa igual en Python que en Haskell; pero, en Python. para usarlo hay que importarlo de la librería
math
. - La potencia de número
x
elevado al enteron
se escribe- en Haskell,
x^n
y - en Python,
x ** n
.
- en Haskell,
4. Área de la corona circular
Definir la función
1 |
areaDeCoronaCircular :: Double -> Double -> Double |
tal que (areaDeCoronaCircular r1 r2)
es el área de una corona circular de radio interior r1
y radio exterior r2
. Por ejemplo,
1 2 3 |
areaDeCoronaCircular 1 2 == 9.42477796076938 areaDeCoronaCircular 2 5 == 65.97344572538566 areaDeCoronaCircular 3 5 == 50.26548245743669 |
Solución en Haskell
1 2 |
areaDeCoronaCircular :: Double -> Double -> Double areaDeCoronaCircular r1 r2 = pi*(r2^2 -r1^2) |
El código se encuentra en GitHub.
Solución en Python
1 2 3 4 |
from math import pi def areaDeCoronaCircular(r1, r2): return pi * (r2 ** 2 - r1 ** 2) |
El código se encuentra en GitHub.
Comentarios
- La diferencia de dos números
x
ey
se escribe en Python igual que en Haskell:x - y
.
5. Último dígito
Definir la función
1 |
ultimoDigito :: Int -> Int |
tal que (ultimoDigito x)
es el último dígito del número x
. Por ejemplo,
1 |
ultimoDigito 325 == 5 |
Solución en Haskell
1 2 |
ultimoDigito :: Int -> Int ultimoDigito x = rem x 10 |
El código se encuentra en GitHub.
Solución en Python
1 2 |
def ultimoDigito(x): return x % 10 |
El código se encuentra en GitHub.
Comentarios
- El resto de la división entera se
x
entrey
sn ecribe- en Haskell,
rem x y
, - en Python,
x % y
.
- en Haskell,