Trilhas
/
Crystal
Crystal
/
Exercícios
/
Juros são interessantes
Juros são interessantes

Juros são interessantes

Exercício de aprendizagem

Introdução

Um laço é uma estrutura de controle que permite executar código repetidamente com base em uma determinada condição.

Laços while

Um laço while é uma estrutura de controle que permite executar código repetidamente com base em uma determinada condição. O código dentro de um laço while continua sendo executado enquanto a condição for avaliada como verdadeira. Laços while costumam ser usados quando o número de iterações é desconhecido de antemão. Eles podem ser usados em qualquer situação em que um laço seja necessário.

A condição é avaliada antes de o código dentro do laço ser executado. Isso significa que, se a condição for falsa, o código dentro do laço nunca será executado.

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

# Output:
# 0
# 1
# 2

Quando você quer iterar sobre uma string, pode fazer um laço sobre o comprimento dela.

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

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

Laços until

Laços until funcionam da mesma forma que os laços while, exceto que o código dentro do laço continua sendo executado até que a condição seja avaliada como verdadeira. É a mesma diferença que existe entre if e unless.

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

Laços infinitos

Um erro comum com laços while é entrar em um "laço infinito", que nunca termina. Um laço infinito pode ser causado por uma condição que nunca é avaliada como verdadeira ou falsa. Isso geralmente acontece por erro do programador, por exemplo, esquecer de incrementar a variável do laço. Mas às vezes um laço infinito é a forma mais clara de implementar a lógica do programa. Ou é essencial repetir para sempre. Por exemplo, um servidor HTTP espera por uma conexão de entrada, trata essa conexão e depois espera pela próxima.

Break

A palavra-chave break pode ser usada para sair de um laço antes do fim. Isso pode ser conveniente quando você quer sair de um laço antes do fim em determinadas condições.

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

# Output:
# 0
# 1

Next

A palavra-chave next pode ser usada para pular para a próxima iteração de um laço. Isso pode ser conveniente quando você quer pular iterações específicas de um laço.

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

# Output:
# 1
# 3

Tipos dentro de laços

O tipo da variável pode ser diferente dentro de um laço. No exemplo a seguir, o tipo de a é Int32 | String porque pode ser Int32 ou String na primeira parte do laço. A variável a só carrega o tipo Int32 | String na primeira parte do laço, já que, quando o laço começa, ela contém Int32 e, na segunda iteração, contém uma String. Esse sistema de múltiplos tipos será explicado em detalhes mais adiante. Mas, como temos certeza de que a segunda parte do laço só conterá String, o tipo de a é String na segunda parte do laço. Em tempo de execução, ela nunca conterá Int32 e String ao mesmo tempo.

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

Em Crystal, a última expressão de um método retorna seu valor. No entanto, às vezes você precisa retornar um valor antes da última expressão. Para isso, você pode usar a palavra-chave return, que retorna o valor da expressão seguinte. O código escrito depois de uma palavra-chave return não será executado.

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

A palavra-chave return deve ser omitida quando a última expressão de um método é o valor que deve ser retornado.

Instruções

Neste exercício, você vai trabalhar com contas poupança. A cada ano, o saldo da sua conta poupança é atualizado com base na taxa de juros dela. A taxa de juros que o seu banco oferece depende da quantidade de dinheiro na sua conta (o saldo):

  • 3,213% para um saldo negativo (o saldo fica ainda mais negativo).
  • 0,5% para um saldo positivo menor que 1000 dólares.
  • 1,621% para um saldo positivo maior ou igual a 1000 dólares e menor que 5000 dólares.
  • 2,475% para um saldo positivo maior ou igual a 5000 dólares.

Você tem quatro tarefas, e cada uma delas vai lidar com o seu saldo e a sua taxa de juros.

1. Calcule a taxa de juros

Implemente o método SavingsAccount.interest_rate(), que recebe um saldo como argumento. O método deve retornar a taxa de juros para o saldo informado.

SavingsAccount.interest_rate(200.75)
# => 0.5

2. Calcule os juros

Implemente o método SavingsAccount.interest(), que recebe um saldo como argumento. O método deve retornar os juros para o saldo informado.

SavingsAccount.interest(200.75)
# => 1.00375

3. Calcule a atualização anual do saldo

Implemente o método SavingsAccount.annual_balance_update(), que recebe um saldo como argumento. O método deve retornar o saldo depois de um ano.

SavingsAccount.annual_balance_update(200.75)
# => 201.75375

4. Calcule quantos anos faltam para atingir o saldo desejado

Implemente o método SavingsAccount.years_before_desired_balance(), que recebe um saldo e um saldo alvo como argumentos. O método deve retornar o número de anos necessários para atingir o saldo alvo.

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

Ao aplicar juros simples a um saldo principal, o saldo é multiplicado pela taxa de juros e o produto dos dois é o valor dos juros.

Os juros compostos, por outro lado, são aplicados de forma recorrente. A cada aplicação, o valor dos juros é calculado e somado ao saldo principal, de modo que os cálculos de juros seguintes incidem sobre um saldo principal maior.

Editar via GitHub O link abre em uma nova janela ou aba
Crystal Exercism

Tudo pronto para começar Juros são interessantes?

Crie sua conta no Exercism para aprender e dominar Crystal com 26 conceitos142 exercícios e mentoria humana de verdade, tudo de graça.