Track
/
Crystal
Crystal
/
Esercizi
/
L'interesse è interessante
L'interesse è interessante

L'interesse è interessante

Esercizio di apprendimento

Introduzione

Un ciclo è una struttura di controllo che permette di eseguire ripetutamente del codice in base a una determinata condizione.

Cicli while

Un ciclo while è una struttura di controllo che permette di eseguire ripetutamente del codice in base a una determinata condizione. Il codice all'interno di un ciclo while continua a essere eseguito finché la condizione è veritiera. I cicli while sono spesso usati quando il numero di iterazioni non è noto in anticipo; possono essere usati in qualsiasi situazione in cui serve un ciclo.

La condizione viene valutata prima che il codice all'interno del ciclo venga eseguito, il che significa che se la condizione è falsa, il codice all'interno del ciclo non verrà mai eseguito.

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

# Output:
# 0
# 1
# 2

Quando vuoi iterare su una stringa, puoi usare un ciclo sulla lunghezza della stringa.

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

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

Cicli until

I cicli until funzionano come i cicli while, con la differenza che il codice all'interno del ciclo continua a essere eseguito finché la condizione non è veritiera. È come la differenza tra if e unless.

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

Cicli infiniti

Un errore comune con i cicli while è entrare in un «ciclo infinito», che non termina mai. Un ciclo infinito può essere causato da una condizione che non restituisce mai un valore veritiero o falso. Spesso è dovuto a un errore del programmatore; per esempio, dimenticare di incrementare la variabile del ciclo. A volte, però, un ciclo infinito è il modo più chiaro per implementare la logica del programma. Oppure è essenziale avere un ciclo infinito; per esempio, un server HTTP attende una connessione in entrata, la gestisce e poi attende la connessione successiva.

Break

La parola chiave break può essere usata per uscire anticipatamente da un ciclo. Questo può essere comodo quando vuoi uscire da un ciclo in anticipo in determinate condizioni.

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

# Output:
# 0
# 1

Next

La parola chiave next può essere usata per saltare all'iterazione successiva di un ciclo. Questo può essere comodo quando vuoi saltare iterazioni specifiche di un ciclo.

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

# Output:
# 1
# 3

Tipi nei cicli

Il tipo della variabile può essere diverso durante i cicli. Nell'esempio seguente, il tipo di a è Int32 | String perché può essere Int32 o String nella prima parte del ciclo. La variabile a avrà il tipo Int32 | String solo nella prima parte del ciclo, dato che quando il ciclo inizia contiene Int32, e nella seconda iterazione contiene una String. Questo sistema a tipi multipli sarà spiegato in dettaglio più avanti. Ma poiché siamo sicuri che la seconda parte del ciclo conterrà solo String, il tipo di a è String nella seconda parte del ciclo. A runtime, non conterrà mai simultaneamente Int32 e String.

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

In Crystal, l'ultima espressione in un metodo restituisce il suo valore. Tuttavia, a volte è necessario restituire un valore prima dell'ultima espressione. Per questo, puoi usare la parola chiave return, che restituirà il valore dell'espressione seguente. Il codice scritto dopo una parola chiave return non verrà eseguito.

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 parola chiave return dovrebbe essere omessa quando l'ultima espressione in un metodo è il valore che dovrebbe essere restituito.

Istruzioni

In questo esercizio lavorerai con i conti di risparmio. Ogni anno, il saldo del tuo conto di risparmio viene aggiornato in base al suo tasso di interesse. Il tasso di interesse che la tua banca ti concede dipende dalla quantità di denaro presente sul conto (il suo saldo):

  • 3.213% per un saldo negativo (il saldo diventa ancora più negativo).
  • 0.5% per un saldo positivo inferiore a 1000 dollari.
  • 1.621% per un saldo positivo maggiore o uguale a 1000 dollari e inferiore a 5000 dollari.
  • 2.475% per un saldo positivo maggiore o uguale a 5000 dollari.

Hai quattro compiti, ognuno dei quali riguarda il saldo e il suo tasso di interesse.

1. Calcola il tasso di interesse

Implementa il metodo SavingsAccount.interest_rate(), che prende un saldo come argomento. Il metodo deve restituire il tasso di interesse per il saldo dato.

SavingsAccount.interest_rate(200.75)
# => 0.5

2. Calcola l'interesse

Implementa il metodo SavingsAccount.interest(), che prende un saldo come argomento. Il metodo deve restituire l'interesse per il saldo dato.

SavingsAccount.interest(200.75)
# => 1.00375

3. Calcola l'aggiornamento annuale del saldo

Implementa il metodo SavingsAccount.annual_balance_update(), che prende un saldo come argomento. Il metodo deve restituire il saldo dopo un anno.

SavingsAccount.annual_balance_update(200.75)
# => 201.75375

4. Calcola gli anni necessari per raggiungere il saldo desiderato

Implementa il metodo SavingsAccount.years_before_desired_balance(), che prende un saldo e un saldo obiettivo come argomenti. Il metodo deve restituire il numero di anni necessari per raggiungere il saldo obiettivo.

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

Quando si applica l'interesse semplice a un saldo iniziale, il saldo viene moltiplicato per il tasso di interesse e il prodotto dei due è l'importo dell'interesse.

L'interesse composto, invece, si applica a intervalli ricorrenti. A ogni applicazione, l'importo dell'interesse viene calcolato e aggiunto al saldo iniziale, così che i calcoli successivi degli interessi si basino su un saldo iniziale maggiore.

Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Crystal Exercism

Vuoi iniziare L'interesse è interessante?

Iscriviti a Exercism per imparare e padroneggiare Crystal con 26 concetti142 esercizi e il mentoring di persone reali, tutto gratis.