Benutzer-Werkzeuge

Webseiten-Werkzeuge


wiederholung:kontrollstrukturen

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
wiederholung:kontrollstrukturen [2022/11/12 14:49] – angelegt Martin Pabstwiederholung:kontrollstrukturen [2022/11/12 15:49] (aktuell) – [A. while-Loop] Martin Pabst
Zeile 1: Zeile 1:
 ====== Kontrollstrukturen ====== ====== Kontrollstrukturen ======
-===== Wiederholung mit while ===== +===== A. while-loop ===== 
-==== Beispiel: ====+==== Beispiel 1: ====
 <HTML> <HTML>
  
Zeile 20: Zeile 20:
 </script> </script>
 </div> </div>
 +</HTML>
  
 <WRAP center round info 80%> <WRAP center round info 80%>
Zeile 29: Zeile 30:
 Kurz: Der Block in geschweiften Klammern wird so lange immer wieder ausgeführt, bis die Bedingung in runden Klammern ''false'' ergibt. Kurz: Der Block in geschweiften Klammern wird so lange immer wieder ausgeführt, bis die Bedingung in runden Klammern ''false'' ergibt.
 </WRAP> </WRAP>
 +
 +
 +==== Beispiel 2: Zweierpotenzen ====
 +Oft ist es nützlich, noch zusätzliche Variablen zu deklarieren, die bei jedem Wiederholungsschritt geändert werden. Wir schreiben ein Programm, das die ersten 10 Zweierpotenzen ausgibt, also $2^0 = 1$, $2^1 = 2$, $2^2 = 4$, $2^3 = 8$ usw.
 +<HTML>
 +<div class="java-online" style="height: 300px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Wiederholung4'}">
 +<script type="text/plain" title="Main.java">
 +int i = 0;
 +int zp = 1;
 +
 +while(i <= 10){
 +
 +   println("2 ^ " + i + " = " + zp);
 +   i++;            // i wird um 1 erhöht
 +   zp = zp * 2;        
 +
 +}
 +</script>
 +</div>
 +
 +</HTML>
 ==== Aufgaben ==== ==== Aufgaben ====
 [[.aufgabenwhile:start|Hier findest Du Aufgaben zur while-Wiederholung mit aufsteigendem Schwierigkeitsgrad.]] [[.aufgabenwhile:start|Hier findest Du Aufgaben zur while-Wiederholung mit aufsteigendem Schwierigkeitsgrad.]]
 +
 +
 +
 +
 +===== B. Die for-loop=====
 +Die ''while''-loop hat zwei große Nachteile:
 +  * Zum bloßen Zählen ist sie sehr umständlich, da insgesamt drei Zeilen benötigt werden:
 +<code learnj>
 +int i = 0;         // Deklaration der Zählvariable
 +while(i <= 10){    // Bedingung
 +   // Anweisungen
 +   i++;            // Erhöhung der Zählvariable
 +}
 +</code>
 +  * Oft stehen zwischen der Deklaration der Zählvariable und der Bedingung sowie zwischen der Bedingung und der Erhöhung der Zählvariable sehr viele Anweisungen und es ist schwer, "auf einen Blick" zu erfassen, wie oft wiederholt wird und welche Werte die Zählvariable bei jedem Wiederholungsschritt annimmt.
 +
 +Für alle Anwendungsfälle, in denen auf irgendeine Art und Weise gezählt wird, verwendet man daher üblicherweise eine Kurzschreibweise der ''while''-loop, die ''for''-loop. Hier eine Gegenüberstellung der beiden. Beide Programme sind gleichwertig:
 +
 +^ While-loop ^ For-loop ^
 +| <code java>
 +int i = 1;
 +while(i <= 10){
 +   // Anweisungen
 +   i++;
 +}
 +</code> | <code java>
 +for(int i = 1; i <= 10; i++){
 +   // Anweisungen
 +}
 +</code> |
 +
 +<WRAP center round info 100%>
 +Die ''for''-loop ist eine Kurzform der ''while''-loop. Sie besteht aus drei Bestandteilen: \\ 
 +<code learnj>for(Startanweisung; Bedingung; Anweisung am Ende jedes Wiederholungsschrittes){
 +   // Anweisungen
 +}
 +</code>
 +  * Die **Startanweisung** wird genau 1-mal zu Beginn aufgerufen.
 +  * Die **Bedingung** wird vor jedem Wiederholungsschritt ausgewertet. Ist ihr Wert ''true'', so werden die Anweisungen in den ''{}'' ausgeführt. Ist der Wert ''false'', so werden die Anweisungen in den ''{}'' übersprungen und es wird mit der Anweisung hinter der for-loop fortgefahren.
 +  * Die **Anweisung am Ende jedes Wiederholungsschrittes** wird am Ende jedes Wiederholungsschrittes ausgeführt.
 +Für Einsteiger ist die ''for''-loop oft schwer zu verstehen, weil ihre drei Bestandteile jeweils ganz unterschiedliche Bedeutung haben. Noch dazu ist der 1. und 3. Bestandteil eine Anweisung, der 2. Bestandteil eine Bedingung (genauer: eine Aussage). \\ \\ **Lass' Dich nicht entmutigen:** Meist wird die ''for''-loop zum **Zählen** benutzt und sieht so oder ähnlich aus:
 +<code learnj>
 +for(int i = 1; i <= 10; i++){
 +   // Anweisungen
 +}
 +</code>
 +Dieses Muster (das in diesem Fall die Anweisungen für ''i''-Werte von 0 bis 9 durchführt) wirst Du sehr schnell beherrschen und - von diesem Muster ausgehend - bald auch schwierigere Konstruktionen mit ''for'' verstehen.
 +</WRAP>
 +
 +==== Beispiel 3: Zählen mit "for" ====
 +Wir schreiben den Text "Hallo Welt!" 10-mal untereinander in die Ausgabe. Mit der Variablen ''i'' zählen wir dabei, wie oft wir ihn schon ausgegeben haben.
 +<HTML>
 +
 +<div class="java-online" style="height: 300px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Wiederholung6'}">
 +
 +<script type="text/plain" title="Main.java">
 +for(int i = 1; i <= 10; i++){
 +   println("Hallo Welt (zum " + i + "-ten Mal)!");
 +}
 +println("Fertig!", Color.lightgreen);
 +</script>
 +</div>
 +
 +</HTML>
 +
 +== Erklärung == 
 +Die ''for''-loop bewirkt, dass der Rechner folgendes macht:
 +^Anweisung^Erklärung^Wert von ''i'' nach der Anweisung^
 +|''int i = 1;''|Die Startanweisung wird genau ein Mal zu Beginn ausgeführt.|1|
 +|Prüfe: Ist ''i <= 10''? |Das Ergebnis der Prüfung ist ''true'', da $1 \le 10$ ist. Daher wird als nächste die Anweisung in ''{}'' ausgeführt.|1|
 +|''println("Hallo Welt (zum " + i + "-ten Mal)!");''| Es wird ausgegeben: ''Hallo Welt (zum 1. Mal)!'' |1|
 +|''i++;''| Am Ende des Wiederholungsschrittes wird ''i++'' ausgeführt und damit der Wert von ''i'' um 1 erhöht. Der Rechner setzt die Ausführung in Zeile 1 fort.|2|
 +|Prüfe: Ist ''i <= 10''? |Das Ergebnis der Prüfung ist ''true'', da $2 \le 10$ ist. Daher wird als nächste die Anweisung in ''{}'' ausgeführt.|2|
 +|''println("Hallo Welt (zum " + i + "-ten Mal)!");''| Es wird ausgegeben: ''Hallo Welt (zum 2. Mal)!'' |2|
 +|''i++;''| Am Ende des Wiederholungsschrittes wird ''i++'' ausgeführt und damit der Wert von ''i'' um 1 erhöht. Der Rechner setzt die Ausführung in Zeile 1 fort.|3|
 +
 +usw... \\ \\ Die letzten Schritte sehen so aus:
 +|''println("Hallo Welt (zum " + i + "-ten Mal)!");''| Es wird ausgegeben: ''Hallo Welt (zum 9. Mal)!'' |9|
 +|''i++;''| Am Ende des Wiederholungsschrittes wird ''i++'' ausgeführt und damit der Wert von ''i'' um 1 erhöht. Der Rechner setzt die Ausführung in Zeile 1 fort.|10|
 +|Prüfe: Ist ''i <= 10''? |Das Ergebnis der Prüfung ist ''true'', da $10 \le 10$ ist. Daher wird als nächste die Anweisung in ''{}'' ausgeführt.|10|
 +|''println("Hallo Welt (zum " + i + "-ten Mal)!");''| Es wird ausgegeben: ''Hallo Welt (zum 10. Mal)!'' |10|
 +|''i++;''| Am Ende des Wiederholungsschrittes wird ''i++'' ausgeführt und damit der Wert von ''i'' um 1 erhöht. Der Rechner setzt die Ausführung in Zeile 1 fort.|11|
 +|Prüfe: Ist ''i <= 10''? |Das Ergebnis der Prüfung ist ''false'', da **nicht** $11 \le 10$ ist. Daher wird jetzt die Anweisung in ''{}'' übersprungen und es geht in Zeile 4 weiter!|11|
 +|''println("Fertig!", Color.lightgreen);''| | |
 +
 +
 +==== Beispiel 4: Zählen im Dreierschritt ====
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 300px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Wiederholung7'}">
 +
 +<script type="text/plain" title="Main.java">
 +println("Dreier-Einmaleins:", Color.lightgreen);
 +for(int n = 3; n <= 30; n += 3){
 +   print(n + ", ");
 +}
 +println(" -> Fertig!", Color.lightgreen);
 +</script>
 +</div>
 +
 +</HTML>
 +<WRAP center round tip 60%>
 +Du erinnerst Dich sicher: ''n += 3'' ist eine Kurzschreibweise für ''n = n + 3'' und bewirkt, dass der Wert der Variable ''n'' um ''3'' erhöht wird.
 +</WRAP>
 +
 +
 +==== Beispiel 5: Berechnung von 8! ====
 +<WRAP center round tip 80%>
 +**Berechnung von Fakultäten** \\ \\ 
 +Die **Faktultät** einer Zahl $n \in \mathbb{N}$, kurz $n!$, ist folgendermaßen definiert:
 +$$n! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot \ldots  \cdot n$$
 +Es ist beispielsweise $5! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 = 120$.
 +</WRAP>
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 300px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'Wiederholung8'}">
 +
 +<script type="text/plain" title="Main.java">
 +int zahl = 8;
 +int fakultät = 1;
 +
 +for(int i = 1; i <= zahl; i++){
 +   fakultät *= i;
 +}
 +
 +println(zahl + "! = " + fakultät);
 +</script>
 +</div>
 +</HTML>
 +
 +Probiere das Programm wieder in Einzelschritten aus und schau' Dir die Belegung der Variablen nach jedem Schritt an! 
 +  * Du kannst die ''8'' in der ersten Zeile natürlich auch durch eine andere Zahl ersetzen!
 +  * Warum wird der Variablen ''fakultät'' in Zeile 2 der Startwert ''1'' zugeordnet und nicht ''0''? \\ (Falls Du nicht auf die Antwort kommst, probier' es aus, indem Du die ''1'' im Programm durch ''0'' ersetzt!)
 +
 +==== Aufgaben zur for-Loop ====
 +[[.aufgabenfor:start|Hier geht's zu den Aufgaben.]]
wiederholung/kontrollstrukturen.1668264575.txt.gz · Zuletzt geändert: 2022/11/12 14:49 von Martin Pabst

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki