Rutas
/
Crystal
Crystal
/
Ejercicios
/
El interés es interesante
El interés es interesante

El interés es interesante

Ejercicio de aprendizaje

Introducción

Un bucle es una estructura de control que permite ejecutar código repetidamente en función de una condición dada.

Bucles while

Un bucle while es una estructura de control que permite ejecutar código repetidamente en función de una condición dada. El código dentro de un bucle while se seguirá ejecutando mientras la condición se evalúe como verdadera. Los bucles while se suelen usar cuando el número de iteraciones se desconoce de antemano, y sirven para cualquier situación en la que se necesite un bucle.

La condición se evalúa antes de que se ejecute el código dentro del bucle, lo que significa que, si la condición es falsa, el código del bucle no se ejecutará nunca.

i = 0
while i < 3
  puts i
  i += 1
end

# Output:
# 0
# 1
# 2

Cuando quieras iterar sobre un string, puedes recorrer su longitud con un bucle.

str = "Hello"
i = 0
while i < str.size
  puts str[i]
  i += 1
end

# Output:
# H
# e
# l
# l
# o

Bucles until

Los bucles until funcionan igual que los bucles while, salvo que el código dentro del bucle se seguirá ejecutando hasta que la condición se evalúe como verdadera. Es la misma diferencia que hay entre if y unless.

i = 0
until i == 3
  puts i
  i += 1
end

Bucles infinitos

Un error habitual con los bucles while es entrar en un «bucle infinito», que nunca termina. Un bucle infinito puede deberse a que una condición nunca se evalúe como verdadera ni como falsa. A menudo se debe a un error del programador; por ejemplo, olvidarse de incrementar la variable del bucle. Pero a veces un bucle infinito es la forma más clara de implementar la lógica del programa. O es imprescindible repetir el bucle para siempre; por ejemplo, un servidor HTTP espera una conexión entrante, la atiende y luego espera la siguiente conexión.

break

La palabra clave break permite salir de un bucle antes de tiempo. Puede resultar útil cuando quieres salir de un bucle antes de tiempo bajo ciertas condiciones.

i = 0
while i <= 3
  puts i
  i += 1
  if i == 2
    break
  end
end

# Output:
# 0
# 1

next

La palabra clave next permite saltar a la siguiente iteración de un bucle. Puede resultar útil cuando quieres saltarte iteraciones concretas de un bucle.

i = 0
while i <= 3
  i += 1
  if i == 2
    next
  end
  puts i
end

# Output:
# 1
# 3

Tipos dentro de los bucles

El tipo de la variable puede ser distinto dentro de un bucle. En el siguiente ejemplo, el tipo de a es Int32 | String porque puede ser Int32 o String en la primera parte del bucle. La variable a solo tendrá el tipo Int32 | String en la primera parte del bucle, ya que cuando el bucle empieza contiene un Int32 y, en la segunda iteración, contiene un String. Este sistema de tipos múltiples se explicará en detalle más adelante. Pero como tenemos la seguridad de que la segunda parte del bucle solo contendrá String, el tipo de a es String en la segunda parte del bucle. En tiempo de ejecución, nunca contendrá Int32 y String a la vez.

i = 0
a = 4
while i < 3
  p typeof(a)
  # => Int32 | String
  a = "4"
  p typeof(a)
  # => String
  i += 1
end

En Crystal, la última expresión de un método devuelve su valor. Sin embargo, a veces necesitas devolver un valor antes de la última expresión. Para ello puedes usar la palabra clave return, que devuelve el valor de la expresión siguiente. El código escrito después de una palabra clave return no se ejecutará.

def speed_limit(road_number)
    if road_number == 1
        return 50
        puts "This will not be executed"
    elsif road_number == 2
        return 80
        puts "This will not be executed"
    end
    100
end

p speed_limit(1) # => 50
p speed_limit(2) # => 80
p speed_limit(3) # => 100
Note

La palabra clave return debe omitirse cuando la última expresión de un método es el valor que se debe devolver.

Instrucciones

En este ejercicio vas a trabajar con cuentas de ahorros. Cada año, el saldo de tu cuenta de ahorros se actualiza según su tipo de interés. El tipo de interés que te da tu banco depende de la cantidad de dinero que haya en tu cuenta (su saldo):

  • 3,213 % para un saldo negativo (el saldo se vuelve más negativo).
  • 0,5 % para un saldo positivo inferior a 1000 dólares.
  • 1,621 % para un saldo positivo mayor o igual que 1000 dólares e inferior a 5000 dólares.
  • 2,475 % para un saldo positivo mayor o igual que 5000 dólares.

Tienes cuatro tareas, y cada una de ellas trabajará con tu saldo y su tipo de interés.

1. Calcula el tipo de interés

Implementa el método SavingsAccount.interest_rate(), que recibe un saldo como argumento. El método debe devolver el tipo de interés para el saldo dado.

SavingsAccount.interest_rate(200.75)
# => 0.5

2. Calcula los intereses

Implementa el método SavingsAccount.interest(), que recibe un saldo como argumento. El método debe devolver los intereses para el saldo dado.

SavingsAccount.interest(200.75)
# => 1.00375

3. Calcula la actualización anual del saldo

Implementa el método SavingsAccount.annual_balance_update(), que recibe un saldo como argumento. El método debe devolver el saldo después de un año.

SavingsAccount.annual_balance_update(200.75)
# => 201.75375

4. Calcula los años que faltan para alcanzar el saldo deseado

Implementa el método SavingsAccount.years_before_desired_balance(), que recibe un saldo y un saldo objetivo como argumentos. El método debe devolver el número de años que se tardaría en alcanzar el saldo objetivo.

balance = 200.75
target_balance = 214.88
SavingsAccount.years_before_desired_balance(balance, target_balance)
# => 14
Note

Cuando se aplica interés simple a un saldo principal, el saldo se multiplica por el tipo de interés y el producto de ambos es el importe de los intereses.

El interés compuesto, por otro lado, se calcula aplicando los intereses de forma recurrente. En cada aplicación se calcula el importe de los intereses y se suma al saldo principal, de modo que los cálculos de intereses posteriores se hacen sobre un saldo principal mayor.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Crystal Exercism

¿Listo para empezar El interés es interesante?

Regístrate en Exercism para aprender y dominar Crystal con 26 conceptos142 ejercicios y mentoría humana real, todo gratis.