====== for-Schleife ======
Die dritte Art von Schleifen ist die ''for''-Schleife, auch Zählschleife genannt. Sie wird meist verwendet, wenn die Anzahl der Schleifenbedingungen im Voraus feststeht, wobei eine sogenannte ''Laufvariable'' eingesetzt wird, um die Anzahl der Schleifendurchläufe zu zählen.
==== Beispiel ====
Realisiere das Programmbeispiel der while-Schleife, welches die Zahlen 1 bis n aufsummiert, mit Hilfe der for-Schleife!
**Lösung 1**:
for(int i=n; i>0; i--){
sum=sum+i;
}
**Lösung 2**:
for (int i=1;i<=n ;i++) {
sum=sum+i;
}
===== Syntax der for-Anweisung =====
for([Initialisierung];[Bedingungsausdruck]; [Aktualisierung])
{
Anweisung1;
Anweisung2;
...;
}
* Das Schlüsselwort ''for'' leitet die ''for''-Anweisung ein.
* In Klammern ''('' '')'' eingeschlossen und durch **Strichpunkt getrennt**, folgen der Initialisierungsteil, der Bedingungsausdruck und der Aktualisierungsteil.
* Im **Initialisierungsteil** steht die Anweisung, die vor der zu wiederholenden Anweisung auszuführen ist. Hier wird der Laufvariable ein Wert zugewiesen.
* Im **Bedingungsausdruck** steht die Abbruchbedingung, die jedesmal vor Betreten der Schleife geprüft wird.
* Im **Akualisierungsteil** wird der Wert der Laufvariable aktualisiert, beispielsweise um 1 erhöht (z.B. i++) oder um ein 1 vermindert (z.B. i - -).
====== Range-basierte for-Schleife in C++ ======
Die range-basierte for-Schleife ist eine moderne und vereinfachte Form der Schleife in C++, mit der man alle Elemente einer Sammlung (z. B. ''string'', ''vector'', Array) bequem durchlaufen kann – ganz ohne Zählvariable.
===== Syntax =====
for (Datentyp variable : sammlung)
{
// Anweisungen
}
* ''Datentyp'' ist der Typ eines einzelnen Elements (z. B. ''char'', ''int'' oder ''auto'')
* ''variable'' ist der Platzhalter für das aktuelle Element
* ''sammlung'' ist z. B. ein ''std::string'', ''std::vector'', Array usw.
===== Beispiel mit string =====
#include
#include
using namespace std;
int main()
{
string text = "Hallo";
for (char c : text)
{
cout << c << endl;
}
return 0;
}
**Ausgabe:**
H
a
l
l
o
===== Vorteile =====
* Einfach zu schreiben
* Keine Zählvariable oder Index notwendig
* Weniger Fehleranfällig (kein ''i++'', ''i < size()'' usw.)
* Ideal zum Durchlaufen von Zeichenketten, Arrays, Vektoren etc.
===== Hinweis zur Referenz =====
Wenn man die Elemente **verändern** möchte, muss man mit **Referenz** arbeiten:
vector zahlen = {1, 2, 3};
for (int& z : zahlen)
{
z = z * 2;
}
Ohne das ''&'' (Referenz) wird nur eine Kopie des Wertes verändert – nicht das Original.
===== Einschränkungen =====
* Kein direkter Zugriff auf den Index
* Nicht geeignet, wenn man z. B. das vorige oder nächste Element braucht
===== Fazit =====
Die range-basierte for-Schleife ist ideal, wenn man alle Elemente einer Sammlung **durchlaufen**, aber **keinen Index** braucht. Sie ist übersichtlich, kompakt und sicher.
==== Aufgabe 1====
Schreibe ein Programm das die gewünschte Malreihe ausgibt. Ein möglicher Benutzerdialog könnte folgendermaßen aussehen:
E: Willkommen! Diese Programm berechnet die von Ihnen gewünschte Malreihe!
E: Welche Malreihe wünschen Sie? A: 2
A:
1*2=2
2*2=4
...
10*2=20
==== Aufgabe 2 ====
Verändere das Programm aus Aufgabe 1 so, dass alle 1*1-Reihen (1-10) auf einmal ausgegeben werden.
//Hinweise: Schleifen können auch ineinander geschachtelt werden! //
Ausgabebeispiel:
Das folgende Programm gibt alle Einmaleins-Reihen aus:
1er-Reihe:
1*1=1
2*1=2
...
2er-Reihe:
1*2=2
2*2=4
...
==== Zusätzliche Beispiele zum Thema Schleifen ====
(Müssen nicht unbedingt mit der for-Schleife realisiert werden)
==== Aufgabe 3 ====
Schreibe ein Programm, das eine Quadratzahltabelle von 1 bis zu einem eingegebenen Wert //n// ausgibt. (Quadratzahl.cpp)
==== Aufgabe 4 - Fibonacci ====
Schreibe ein Programm, das die ersten //n// Fibonacci-Zahlen erzeugt und ausgibt! Eine Fibonacci-Zahl berechnet sich aus der Summe der beiden vorhergehenden Zahlen. Die ersten beiden Fibonacci-Zahlen sind gleich 1! (Fibonacci.cpp)
z.B.: 1, 1, 2, 3, 5, 8, 13, 21,...
==== Aufgabe 5 - Dezimal-Dual ====
Schreibe ein Programm, das die eingegebene Dezimalzahl in eine Dualzahl umwandelt.\\
Auf welches Problem stößt du dabei? (DeziDual.cpp)
==== Aufgabe 6 - Teiler ====
a) Schreibe ein Programm, das die Teiler einer eingegebenen natürlichen Zahl n auflistet. (Teilerliste.cpp)\\
b) Schreibe ein Programm, das die Anzahl der Teiler eingegebenen natürlichen Zahl n ausgibt. Wenn eine Zahl genau zwei Teiler hat, soll zusätzlich "Primzahl" ausgegeben werden.(Teileranzahl.cpp)
c) Erweitere die Programme so, dass sie von einer Untergrenze bis zu einer Obergrenze laufen.
==== Aufgabe 7 - Staffelrechnung/Rechenturm ====
Erstelle ein Programm, das eine Staffelrechnung / einen Rechenturm durchführt.
Der Benutzer gibt ein, mit welcher Zahl er die Staffelrechnung beginnen will und bis zu welcher Multiplikation die Rechnungen durchgeführt werden:
Z.B.\\
Anfangszahl: 385\\
Multiplikationen bis: 6\\
Ausgabe:\\
385*2=770
770*3=2310
2310*4=9240
9240*5=46200
46200*6=277200
277200/2=138600
138600/3=46200
46200/4=11550
11550/5=2310
2310/6=385
==== Aufgabe 8 - Temperaturtabelle ====
Schreibe ein C++-Programm zur Umrechnung der Temperaturen von Celsius in Fahrenheit. \\
Verwende die Formel celsius=18+2*zeile. \\
Verwende die Umrechnungsformel fahren = 1.8*celsius+32.0.\\
Es soll folgende Tabelle auf dem Bildschirm ausgegeben werden:
ZEILE CELSIUS FAHRENHEIT
--------------------------------
1 20 68.0
2 22 71.6
3 24 75.2
.
.
.
11 40 104.0