Tracks
/
Crystal
Crystal
/
Übungen
/
Zinsen sind interessant
Zinsen sind interessant

Zinsen sind interessant

Lernübung

Einführung

Eine Schleife ist eine Kontrollstruktur, mit der Code abhängig von einer Bedingung wiederholt ausgeführt werden kann.

while-Schleifen

Eine while-Schleife ist eine Kontrollstruktur, mit der Code abhängig von einer Bedingung wiederholt ausgeführt werden kann. Der Code innerhalb einer while-Schleife wird so lange ausgeführt, wie die Bedingung truthy ergibt. while-Schleifen werden oft verwendet, wenn die Anzahl der Iterationen im Voraus nicht bekannt ist; sie können in jeder Situation eingesetzt werden, in der eine Schleife gebraucht wird.

Die Bedingung wird ausgewertet, bevor der Code innerhalb der Schleife ausgeführt wird. Ist die Bedingung also falsch, wird der Code innerhalb der Schleife nie ausgeführt.

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

# Output:
# 0
# 1
# 2

Wenn du über einen String iterieren möchtest, kannst du über die Länge des Strings schleifen.

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

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

until-Schleifen

until-Schleifen funktionieren genauso wie while-Schleifen, nur dass der Code innerhalb der Schleife so lange ausgeführt wird, bis die Bedingung truthy ergibt. Das ist derselbe Unterschied wie zwischen if und unless.

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

Endlosschleifen

Ein häufiger Fehler bei while-Schleifen ist eine „Endlosschleife“, die nie endet. Eine Endlosschleife kann entstehen, wenn eine Bedingung nie truthy oder falsey ergibt. Das liegt oft an einem Programmierfehler, zum Beispiel daran, dass man vergisst, die Schleifenvariable zu erhöhen. Manchmal ist eine Endlosschleife aber der klarste Weg, die Logik des Programms umzusetzen. Oder es ist unerlässlich, für immer zu schleifen. Ein HTTP-Server zum Beispiel wartet auf eine eingehende Verbindung, verarbeitet sie und wartet dann auf die nächste Verbindung.

Break

Mit dem Schlüsselwort break kannst du eine Schleife vorzeitig verlassen. Das ist praktisch, wenn du eine Schleife unter bestimmten Bedingungen vorzeitig verlassen möchtest.

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

# Output:
# 0
# 1

Next

Mit dem Schlüsselwort next kannst du zur nächsten Iteration einer Schleife springen. Das ist praktisch, wenn du bestimmte Iterationen einer Schleife überspringen möchtest.

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

# Output:
# 1
# 3

Typen in Schleifen

Der Typ einer Variable kann sich innerhalb einer Schleife ändern. Im folgenden Beispiel ist der Typ von a gleich Int32 | String, weil er im ersten Teil der Schleife Int32 oder String sein kann. Die Variable a hat nur im ersten Teil der Schleife den Typ Int32 | String, denn beim Start der Schleife enthält sie Int32 und in der zweiten Iteration einen String. Dieses System mit mehreren Typen wird später ausführlich erklärt. Da wir aber sicher sind, dass im zweiten Teil der Schleife nur String vorkommt, ist der Typ von a im zweiten Teil der Schleife String. Zur Laufzeit enthält sie nie gleichzeitig Int32 und String.

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

In Crystal gibt der letzte Ausdruck in einer Methode seinen Wert zurück. Manchmal musst du aber einen Wert vor dem letzten Ausdruck zurückgeben. Dafür kannst du das Schlüsselwort return verwenden, das den Wert des folgenden Ausdrucks zurückgibt. Code, der nach einem return-Schlüsselwort steht, wird nicht ausgeführt.

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

Das Schlüsselwort return solltest du weglassen, wenn der letzte Ausdruck in einer Methode bereits der Wert ist, der zurückgegeben werden soll.

Anleitung

In dieser Übung arbeitest du mit Sparkonten. Jedes Jahr wird der Kontostand deines Sparkontos auf Basis seines Zinssatzes aktualisiert. Der Zinssatz, den deine Bank dir gibt, hängt vom Betrag auf deinem Konto ab (dem Kontostand):

  • 3,213 % für einen negativen Kontostand (der Kontostand wird negativer).
  • 0,5 % für einen positiven Kontostand von weniger als 1000 Dollar.
  • 1,621 % für einen positiven Kontostand von mindestens 1000 Dollar und weniger als 5000 Dollar.
  • 2,475 % für einen positiven Kontostand von mindestens 5000 Dollar.

Du hast vier Aufgaben, von denen sich jede mit deinem Kontostand und seinem Zinssatz befasst.

1. Berechne den Zinssatz

Implementiere die Methode SavingsAccount.interest_rate(), die einen Kontostand als Argument entgegennimmt. Die Methode soll den Zinssatz für den gegebenen Kontostand zurückgeben.

SavingsAccount.interest_rate(200.75)
# => 0.5

2. Berechne die Zinsen

Implementiere die Methode SavingsAccount.interest(), die einen Kontostand als Argument entgegennimmt. Die Methode soll die Zinsen für den gegebenen Kontostand zurückgeben.

SavingsAccount.interest(200.75)
# => 1.00375

3. Berechne die jährliche Aktualisierung des Kontostands

Implementiere die Methode SavingsAccount.annual_balance_update(), die einen Kontostand als Argument entgegennimmt. Die Methode soll den Kontostand nach einem Jahr zurückgeben.

SavingsAccount.annual_balance_update(200.75)
# => 201.75375

4. Berechne die Jahre bis zum Erreichen des gewünschten Kontostands

Implementiere die Methode SavingsAccount.years_before_desired_balance(), die einen Kontostand und einen Zielkontostand als Argumente entgegennimmt. Die Methode soll die Anzahl der Jahre zurückgeben, die es dauern würde, den Zielkontostand zu erreichen.

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

Wenn du einfache Zinsen auf ein Kapital anwendest, wird das Kapital mit dem Zinssatz multipliziert, und das Produkt der beiden ist der Zinsbetrag.

Zinseszinsen hingegen entstehen dadurch, dass du Zinsen wiederholt anwendest. Bei jeder Anwendung berechnest du den Zinsbetrag und addierst ihn zum Kapital, sodass nachfolgende Zinsberechnungen auf ein größeres Kapital angewendet werden.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
Crystal Exercism

Bereit, mit Zinsen sind interessant zu starten?

Melde dich bei Exercism an, um Crystal mit 26 Konzepte142 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.