Mit Schleifen kannst du eine Logik wiederholt ausführen.
Die beiden häufigsten Arten sind die while loop-Schleife (unbestimmtes Wiederholen) und die for-Schleife (bestimmtes oder gezähltes Wiederholen).
Außerdem gibt es die for each-Schleife, die in einem späteren Konzept behandelt wird.
Die for loop-Schleife besteht aus einem Kopf und einem Block, der den Schleifenblock in geschweifte Klammern eingeschlossen enthält.
Der Kopf besteht aus 3 Komponenten, die durch Semikolons ; getrennt sind: init-statement, condition und ein weiterer Ausdruck.
Jede davon kann leer sein.
for (init_statement; condition; expression) {
some_statement;
}
boolean ausgewertet wird, und steuert, wann die Schleife beendet werden soll.
Der Code innerhalb der Schleife läuft so lange, wie diese Bedingung zu true ausgewertet wird.
Sobald dieser Ausdruck zu false ausgewertet wird, laufen keine weiteren Iterationen der Schleife mehr.Die for loop-Schleife führt ihren Block so lange aus, wie die Prüfung ihrer condition true ergibt.
Das folgende Codebeispiel zeigt, wie du eine while loop-Schleife in eine while loop-Schleife umwandelst.
init_statement;
while(condition) {
some_statement;
expression;
}
Bei der Arbeit mit Schleifen musst du oft 1 zu einer Zählervariable addieren oder 1 davon subtrahieren, die die Iterationen mitzählt.
Das ist so üblich, dass das Erhöhen und Verringern eigene Operatoren hat: ++ und --.
Sie treten in einer Präfix- und einer Postfix-Form auf. Die Präfix-Version ändert die Variable vor ihrer Verwendung in der Anweisung, die Postfix-Version danach. Die meiste Zeit willst du wahrscheinlich die Präfix-Version.
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
Die Init-Komponente legt normalerweise eine Zählervariable fest, die Bedingung prüft, ob die Schleife fortgesetzt oder beendet werden soll, und die Post-Komponente erhöht normalerweise den Zähler am Ende jeder Wiederholung.
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
Diese Schleife summiert die Zahlen von 1 bis 9 (einschließlich 9).
Innerhalb eines Schleifenblocks kannst du das Schlüsselwort break verwenden, um die Ausführung der Schleife vollständig zu stoppen:
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
Im Gegensatz dazu stoppt das Schlüsselwort continue nur die Ausführung der aktuellen Iteration und fährt mit der nächsten fort:
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (i%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
Es ist normalerweise einfacher, die Logik der Schleife zu verstehen, wenn die Verwendung von break und continue minimiert oder ganz vermieden wird.
Beide Schlüsselwörter überspringen bestimmte Abschnitte des Codes und machen es oft schwieriger, dem Ablauf zu folgen.
In dieser Übung arbeitest du mit Sparkonten. Jedes Jahr wird der Kontostand deines Sparkontos anhand seines Zinssatzes aktualisiert. Der Zinssatz, den deine Bank dir gewährt, hängt davon ab, wie viel Geld auf deinem Konto ist (dem Kontostand):
0 Dollar (der Kontostand wird negativer).0 Dollar und weniger als 1000 Dollar.1000 Dollar und weniger als 5000 Dollar.5000 Dollar.Du hast vier Aufgaben, die sich jeweils mit dem Kontostand und seinem Zinssatz befassen.
Implementiere die Funktion interest_rate, um den Zinssatz anhand des angegebenen Kontostands zu berechnen:
interest_rate(200.75);
// => 0.5
Implementiere die Funktion yearly_interest, um die Zinsen anhand des angegebenen Kontostands zu berechnen:
yearly_interest(200.75):
// => 1.003750
Implementiere die Funktion annual_balance_update, um die jährliche Aktualisierung des Kontostands zu berechnen und dabei den Zinssatz zu berücksichtigen:
annual_balance_update(200.75);
// => 201.75375
Implementiere die Funktion years_until_desired_balance, um die Mindestanzahl an Jahren zu berechnen, die nötig ist, um den gewünschten Kontostand zu erreichen.
Dabei kommen jedes Jahr Zinsen zum Kontostand hinzu.
Das bedeutet, dass der Kontostand nach einem Jahr so aussieht: Anfangskontostand + Zinsen auf den Anfangskontostand.
Der Kontostand nach dem zweiten Jahr ist der Kontostand nach einem Jahr + Zinsen auf den Kontostand nach einem Jahr.
Und so weiter, bis der Kontostand des aktuellen Jahres größer oder gleich dem Zielkontostand ist.
double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14
Beachte, dass der zurückgegebene Wert ein int ist.
Melde dich bei Exercism an, um C++ mit 19 Konzepte100 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.