Tracks
/
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 según una condición dada.

Bucles while

Un bucle while es una estructura de control que permite ejecutar código repetidamente según 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 no se conoce de antemano el número de iteraciones, pero pueden usarse en cualquier situación en la que se necesite un bucle.

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

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

# Output:
# 0
# 1
# 2

Cuando quieras recorrer un string, puedes iterar sobre la longitud del string.

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 lo mismo que la diferencia entre if y unless.

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

Bucles infinitos

Un error común 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 o falsa. A menudo se debe a un error del programador; por ejemplo, olvidar 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 vital 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 se puede usar para salir de un bucle antes de tiempo. Esto puede resultar cómodo 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 se puede usar para saltar a la siguiente iteración de un bucle. Esto puede resultar cómodo cuando quieres saltarte iteraciones específicas de un bucle.

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

# Output:
# 1
# 3

Tipos dentro de un bucle

El tipo de la variable puede ser diferente 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 comienza 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 certeza de que la segunda parte del bucle solo contendrá un String, el tipo de a es String en la segunda parte del bucle. En tiempo de ejecución, nunca contendrá Int32 y String al mismo tiempo.

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 eso puedes usar la palabra clave return, que devolverá el valor de la expresión que le sigue. El código que se escriba después de la 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 se debe omitir 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 ahorro. Cada año, el saldo de tu cuenta de ahorro se actualiza según su tasa de interés. La tasa 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 menor que 1000 dólares.
  • 1.621% para un saldo positivo mayor o igual que 1000 dólares y menor que 5000 dólares.
  • 2.475% para un saldo positivo mayor o igual que 5000 dólares.

Tienes cuatro tareas, y cada una se ocupará de tu saldo y su tasa de interés.

1. Calcula la tasa de interés

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

SavingsAccount.interest_rate(200.75)
# => 0.5

2. Calcula el interés

Implementa el método SavingsAccount.interest() que recibe un saldo como argumento. El método debe devolver el interés 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 antes de 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 la cantidad de años que tomaría alcanzar el saldo objetivo.

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

Al aplicar interés simple a un saldo principal, el saldo se multiplica por la tasa de interés y el producto de ambos es el monto del interés.

El interés compuesto, en cambio, se calcula aplicando el interés de forma recurrente. En cada aplicación, se calcula el monto del interés y se suma al saldo principal, de modo que los cálculos de interés posteriores se hacen sobre un saldo principal mayor.

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

¿Todo 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.