Percursos
/
Crystal
Crystal
/
Exercícios
/
Os juros são interessantes
Os juros são interessantes

Os juros são interessantes

Exercício de aprendizagem

Introdução

Um ciclo é uma estrutura de controlo que permite executar código repetidamente com base numa determinada condição.

Ciclos while

Um ciclo while é uma estrutura de controlo que permite executar código repetidamente com base numa determinada condição. O código dentro de um ciclo while continua a ser executado enquanto a condição for avaliada como verdadeira. Os ciclos while são frequentemente usados quando o número de iterações é desconhecido à partida; no entanto, podem ser usados em qualquer situação em que seja necessário um ciclo.

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

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

# Output:
# 0
# 1
# 2

Quando queres iterar sobre uma string, podes percorrer o comprimento da string.

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

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

Ciclos until

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

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

Ciclos infinitos

Um erro comum com os ciclos while é entrar num "ciclo infinito", que nunca termina. Um ciclo infinito pode ser causado por uma condição que nunca é avaliada como verdadeira nem como falsa. Isto deve-se muitas vezes a um erro do programador; por exemplo, esquecer-se de incrementar a variável do ciclo. Mas, por vezes, um ciclo infinito é a forma mais clara de implementar a lógica do programa. Ou então é vital repetir indefinidamente; por exemplo, um servidor HTTP espera por uma ligação de entrada, trata-a e depois espera pela ligação seguinte.

Break

A palavra-chave break pode ser usada para sair de um ciclo mais cedo. Isto pode ser útil quando queres sair de um ciclo mais cedo 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 saltar para a iteração seguinte de um ciclo. Isto pode ser útil quando queres saltar iterações específicas de um ciclo.

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

# Output:
# 1
# 3

Tipos durante os ciclos

O tipo da variável pode ser diferente durante os ciclos. No exemplo seguinte, o tipo de a é Int32 | String, porque pode ser Int32 ou String na primeira parte do ciclo. A variável a só terá o tipo Int32 | String na primeira parte do ciclo, uma vez que, quando o ciclo começa, contém Int32 e, na segunda iteração, contém uma String. Este sistema de tipos múltiplos será explicado em detalhe mais adiante. Mas, como temos a certeza de que a segunda parte do ciclo só conterá String, o tipo de a é String na segunda parte do ciclo. Em tempo de execução, nunca conterá Int32 e String em simultâneo.

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 devolve o seu valor. No entanto, por vezes precisas de devolver um valor antes da última expressão. Para isso, podes usar a palavra-chave return, que devolve o valor da expressão seguinte. O código escrito depois de uma palavra-chave return não é 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 devolvido.

Instruções

Neste exercício vais trabalhar com contas poupança. Todos os anos, o saldo da tua conta poupança é atualizado com base na taxa de juro. A taxa de juro que o teu banco te dá depende da quantidade de dinheiro na tua conta (o seu saldo):

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

Tens quatro tarefas, cada uma delas relacionada com o teu saldo e a sua taxa de juro.

1. Calcula a taxa de juro

Implementa o método SavingsAccount.interest_rate(), que recebe um saldo como argumento. O método deve devolver a taxa de juro para o saldo indicado.

SavingsAccount.interest_rate(200.75)
# => 0.5

2. Calcula o juro

Implementa o método SavingsAccount.interest(), que recebe um saldo como argumento. O método deve devolver o juro para o saldo indicado.

SavingsAccount.interest(200.75)
# => 1.00375

3. Calcula a atualização anual do saldo

Implementa o método SavingsAccount.annual_balance_update(), que recebe um saldo como argumento. O método deve devolver o saldo ao fim de um ano.

SavingsAccount.annual_balance_update(200.75)
# => 201.75375

4. Calcula os anos necessários para atingir o saldo pretendido

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

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

Quando aplicas juro simples a um saldo principal, o saldo é multiplicado pela taxa de juro e o produto dos dois é o valor do juro.

O juro composto, por outro lado, é aplicado de forma recorrente. Em cada aplicação, o valor do juro é calculado e adicionado ao saldo principal, para que os cálculos de juro seguintes incidam sobre um saldo principal maior.

Editar via GitHub A ligação abre numa nova janela ou separador
Crystal Exercism

Estás pronto para começar Os juros são interessantes?

Inscreve-te no Exercism para aprenderes e dominares Crystal com 26 conceitos142 exercícios, e mentoria humana real, tudo grátis.