einstieg:schleifen
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | einstieg:schleifen [2024/08/31 10:03] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Wiederholungen (" | ||
+ | Wenn man Anweisungen in ähnlicher Weise mehrfach wiederholen möchte, schreibt man sie nicht mehrfach hintereinander ins Programm, sondern nutzt Wiederholungen (" | ||
+ | <WRAP center round tip 60%> | ||
+ | **Zur Begrifflichkeit: | ||
+ | Der bayerische Lehrplan sieht den Begriff " | ||
+ | Oft werden beide Begriffe synonym verwendet, etwa im [[http:// | ||
+ | Selten (z.B. im [[https:// | ||
+ | Ich möchte mich aus der Diskussion um den deutschsprachigen Fachbegriff heraushalten, | ||
+ | </ | ||
+ | |||
+ | ====== A. while-loop (Wiederholung mit Anfangsbedingung) ====== | ||
+ | |||
+ | ===== Beispiel 1 ===== | ||
+ | Wir schreiben den Text "Hallo Welt!" 10-mal untereinander in die Ausgabe. Zuerst möchte ich Euch zeigen, wie man es **nicht** machen sollte: | ||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | println(" | ||
+ | println(" | ||
+ | println(" | ||
+ | println(" | ||
+ | println(" | ||
+ | println(" | ||
+ | println(" | ||
+ | println(" | ||
+ | println(" | ||
+ | println(" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | Viel besser ist es, den Computer anzuweisen, die Ausgabe von "Hallo Welt!" 10-mal zu wiederholen. Das geht so: | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | int n = 1; | ||
+ | |||
+ | while(n <= 10){ | ||
+ | |||
+ | | ||
+ | n = n + 1; | ||
+ | |||
+ | } | ||
+ | |||
+ | println(" | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | Schalte rechts auf den " | ||
+ | |||
+ | == Erklärung der einzelnen Anweisungen == | ||
+ | <code learnj [enable_line_numbers=" | ||
+ | int n = 1; | ||
+ | </ | ||
+ | Die Variable '' | ||
+ | <code learnj [enable_line_numbers=" | ||
+ | while(n <= 10){ | ||
+ | | ||
+ | n = n + 1; | ||
+ | } | ||
+ | </ | ||
+ | Die Anweisung '' | ||
+ | <code learnj [enable_line_numbers=" | ||
+ | println(" | ||
+ | </ | ||
+ | Sobald die Bedingung hinter '' | ||
+ | |||
+ | |||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Mit Hilfe der '' | ||
+ | <code learnj> | ||
+ | while(Bedingung){ | ||
+ | // | ||
+ | } | ||
+ | </ | ||
+ | Die Anweisungen werden wiederholt, solange die Bedingung zutrifft, also den Wert '' | ||
+ | **Beachte: | ||
+ | Schon vor der Ersten Ausführung der Anweisungen wird überprüft, | ||
+ | </ | ||
+ | == Kleine Aufgabe == | ||
+ | Ändere das Programm oben so ab, dass es 8-mal Deinen Namen in Deiner Lieblingsfarbe ausgibt! | ||
+ | |||
+ | ===== Beispiel 2: Varianten... ===== | ||
+ | Eine while-loop kann nicht nur immer wieder exakt dasselbe wiederholen. Man kann beispielsweise die Zählvariable benutzen, um auszugeben, wie oft schon wiederholt wurde: | ||
+ | < | ||
+ | <div class=" | ||
+ | <script type=" | ||
+ | int z = 1; | ||
+ | |||
+ | while(z <= 12){ | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | Die drei '' | ||
+ | <code learnj> | ||
+ | | ||
+ | </ | ||
+ | |||
+ | <WRAP center round tip 60%> | ||
+ | **Addieren von Zeichenketten** \\ \\ | ||
+ | In Java bewirkt der Operator '' | ||
+ | Wird eine Variable vom Datentyp '' | ||
+ | <code learnj> | ||
+ | int z = 12; | ||
+ | println(" | ||
+ | </ | ||
+ | gibt also aus: Das ist die Zahl 12. | ||
+ | </ | ||
+ | |||
+ | ===== Beispiel 3: Zweierpotenzen ===== | ||
+ | Oft ist es nützlich, noch zusätzliche Variablen zu deklarieren, | ||
+ | < | ||
+ | <div class=" | ||
+ | <script type=" | ||
+ | int i = 0; | ||
+ | int zp = 1; | ||
+ | |||
+ | while(i <= 10){ | ||
+ | |||
+ | | ||
+ | | ||
+ | zp *= 2; // Kurzform für zp = zp * 2; | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | Schalte rechts auf den " | ||
+ | |||
+ | <WRAP center round tip 60%> | ||
+ | {{ : | ||
+ | Wenn das Programm pausiert (etwa nach Klick auf den Pause-Button oder bei der Ausführung in Einzelschritten) kannst Du den Wert von Variablen sehen, indem Du im Programmtext mit der Maus auf die Variable fährst und etwas wartest. Es öffnet sich ein Tooltip mit dem Wert der Variable (siehe Bild rechts). | ||
+ | </ | ||
+ | |||
+ | ===== Aufgaben zur while-loop===== | ||
+ | |||
+ | Jetzt bis Du dran. [[.aufgabenwhile: | ||
+ | |||
+ | |||
+ | ====== B. Die while-loop mit Endbedingung (Wiederholung mit Endbedingung) ====== | ||
+ | Man kann die '' | ||
+ | |||
+ | ===== Beispiel 5: while-loop mit Endbedingung (do...while-loop) ===== | ||
+ | Wir zählen wieder von 1 bis 10: | ||
+ | < | ||
+ | <div class=" | ||
+ | <script type=" | ||
+ | int i = 0; | ||
+ | |||
+ | do { | ||
+ | |||
+ | | ||
+ | i++; | ||
+ | |||
+ | } while (i <= 10); | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ====== C. Die for-loop====== | ||
+ | Die '' | ||
+ | * Zum bloßen Zählen ist sie sehr umständlich, | ||
+ | <code learnj> | ||
+ | int i = 0; // Deklaration der Zählvariable | ||
+ | while(i <= 10){ // Bedingung | ||
+ | // Anweisungen | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | * 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, | ||
+ | |||
+ | ^ While-loop ^ For-loop ^ | ||
+ | | {{: | ||
+ | |||
+ | <WRAP center round info 60%> | ||
+ | Die '' | ||
+ | <code learnj> | ||
+ | // Anweisungen | ||
+ | } | ||
+ | </ | ||
+ | * Die **Startanweisung** wird genau 1-mal zu Beginn aufgerufen. | ||
+ | * Die **Bedingung** wird vor jedem Wiederholungsschritt ausgewertet. Ist ihr Wert '' | ||
+ | * Die **Anweisung am Ende jedes Wiederholungsschrittes** wird am Ende jedes Wiederholungsschrittes ausgeführt. | ||
+ | Für Einsteiger ist die '' | ||
+ | <code learnj> | ||
+ | for(int i = 1; i <= 10; i++){ | ||
+ | // Anweisungen | ||
+ | } | ||
+ | </ | ||
+ | Dieses Muster (das in diesem Fall die Anweisungen für '' | ||
+ | </ | ||
+ | |||
+ | Führe die folgenden Programme in Einzelschritten aus ("Step over": {{: | ||
+ | * zunächst mit offenem Tab " | ||
+ | * dann mit offenem Tab " | ||
+ | Beobachte genau, was jeder Einzelne Programmschritt bewirkt! | ||
+ | |||
+ | ===== Beispiel 6: Zählen mit " | ||
+ | Wir schreiben den Text "Hallo Welt!" 10-mal untereinander in die Ausgabe. Mit der Variablen '' | ||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | for(int i = 1; i <= 10; i++){ | ||
+ | | ||
+ | } | ||
+ | println(" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | == Erklärung == | ||
+ | Die '' | ||
+ | ^Anweisung^Erklärung^Wert von '' | ||
+ | |'' | ||
+ | |Prüfe: Ist '' | ||
+ | |'' | ||
+ | |'' | ||
+ | |Prüfe: Ist '' | ||
+ | |'' | ||
+ | |'' | ||
+ | |||
+ | usw... \\ \\ Die letzten Schritte sehen so aus: | ||
+ | |'' | ||
+ | |'' | ||
+ | |Prüfe: Ist '' | ||
+ | |'' | ||
+ | |'' | ||
+ | |Prüfe: Ist '' | ||
+ | |'' | ||
+ | |||
+ | |||
+ | ===== Beispiel 7: Zählen im Dreierschritt ===== | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | println(" | ||
+ | for(int n = 3; n <= 30; n += 3){ | ||
+ | | ||
+ | } | ||
+ | println(" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | <WRAP center round tip 60%> | ||
+ | Du erinnerst Dich sicher: '' | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Beispiel 8: Berechnung von 8! ===== | ||
+ | <WRAP center round tip 80%> | ||
+ | **Berechnung von Fakultäten** \\ \\ | ||
+ | Die **Faktultät** einer Zahl $n \in \mathbb{N}$, | ||
+ | $$n! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot \ldots | ||
+ | Es ist beispielsweise $5! = 1 \cdot 2 \cdot 3 \cdot 4 \cdot 5 = 120$. | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | int zahl = 8; | ||
+ | int fakultät = 1; | ||
+ | |||
+ | for(int i = 1; i <= zahl; i++){ | ||
+ | | ||
+ | } | ||
+ | |||
+ | println(zahl + "! = " + fakultät); | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Probiere das Programm wieder in Einzelschritten aus und schau' Dir die Belegung der Variablen nach jedem Schritt an! | ||
+ | * Du kannst die '' | ||
+ | * Warum wird der Variablen '' | ||
+ | |||
+ | ==== Aufgaben zur for-Loop ==== | ||
+ | [[.aufgabenfor: |