Menu Close

PFH: La semana en Exercitium (12 de agosto de 2022)

Esta semana he publicado en Exercitium las soluciones de los siguientes problemas:

A continuación se muestran las soluciones.

1. Media aritmética de tres números

Definir la función

   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,

   media3 1 3 8     ==  4.0
   media3 (-1) 0 7  ==  2.0
   media3 (-3) 0 3  ==  0.0

Solución en Haskell

media3 :: Float -> Float -> Float -> Float
media3 x y z = (x+y+z)/3

El código se encuentra en GitHub.

Soluciones en Python

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
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 e y se escribe en Python igual que en Haskell: x + y.
  • El cociente de dos números decimales x e y se escribe en Python igual que en Haskell: x / y.

2. Suma de monedas

Definir la función

   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,

   sumaMonedas 0 0 0 0 1  ==  20
   sumaMonedas 0 0 8 0 3  == 100
   sumaMonedas 1 1 1 1 1  ==  38

Soluciones en Haskell

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

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 e y se escribe en Python igual que en Haskell: x * y.

3. Volumen de la esfera

Definir la función

   volumenEsfera :: Double -> Double

tal que (volumenEsfera r) es el volumen de la esfera de radio r. Por ejemplo,

   volumenEsfera 10  ==  4188.790204786391

Solución en Haskell

volumenEsfera :: Double -> Double
volumenEsfera r = (4/3)*pi*r^3

El código se encuentra en GitHub.

Solución en Python

from math import pi
 
def volumenEsfera(r):
    return (4 / 3) * pi * r ** 3

El código se encuentra en GitHub.

Comentarios

  • El número \pi 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 entero n se escribe
    • en Haskell, x^n y
    • en Python, x ** n.

4. Área de la corona circular

Definir la función

   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,

   areaDeCoronaCircular 1 2 == 9.42477796076938
   areaDeCoronaCircular 2 5 == 65.97344572538566
   areaDeCoronaCircular 3 5 == 50.26548245743669

Solución en Haskell

areaDeCoronaCircular :: Double -> Double -> Double
areaDeCoronaCircular r1 r2 = pi*(r2^2 -r1^2)

El código se encuentra en GitHub.

Solución en Python

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 e y se escribe en Python igual que en Haskell: x - y.

5. Último dígito

Definir la función

   ultimoDigito :: Int -> Int

tal que (ultimoDigito x) es el último dígito del número x. Por ejemplo,

   ultimoDigito 325  ==  5

Solución en Haskell

ultimoDigito :: Int -> Int
ultimoDigito x = rem x 10

El código se encuentra en GitHub.

Solución en Python

def ultimoDigito(x):
    return x % 10

El código se encuentra en GitHub.

Comentarios

  • El resto de la división entera se x entre y sn ecribe
    • en Haskell, rem x y,
    • en Python, x % y.
PFH