einstieg:geschachtelt:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
einstieg:geschachtelt:start [2020/06/26 09:40] – Martin Pabst | einstieg:geschachtelt:start [2020/09/30 07:15] – [Beispiel 3: Grafik] Martin Pabst | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Ineinandergeschachtelte Schleifen ====== | + | ====== Ineinandergeschachtelte |
- | Es kommt häufig vor, dass ein Programmteil wiederholt werden muss, in dem selbst schon eine Schleife | + | Es kommt häufig vor, dass ein Programmteil wiederholt werden muss, in dem selbst schon eine Wiederholung |
===== Beispiel 1: Einmaleinstabelle ===== | ===== Beispiel 1: Einmaleinstabelle ===== | ||
Zeile 118: | Zeile 118: | ||
Eigentlich ist die Aufgabe jetzt schon gelöst: Die Einmaleinstabelle wird korrekt ausgegeben. Trotzdem hoffe ich, dass Ihr mit der gefundenen Lösung genauso unzufrieden seid wie ich: | Eigentlich ist die Aufgabe jetzt schon gelöst: Die Einmaleinstabelle wird korrekt ausgegeben. Trotzdem hoffe ich, dass Ihr mit der gefundenen Lösung genauso unzufrieden seid wie ich: | ||
* Der Code ist hochgradig **[[https:// | * Der Code ist hochgradig **[[https:// | ||
- | * Wenn wir später in der for-Schleife | + | * Wenn wir später in der for-loop etwas ändern wollen (z.B. weil wir einen Fehler entdeckt haben), dann müssen wir es **10-Mal ausbessern**. |
* Das Programm **belegt sehr viel Speicherplatz**. | * Das Programm **belegt sehr viel Speicherplatz**. | ||
\\ \\ | \\ \\ | ||
Zeile 124: | Zeile 124: | ||
</ | </ | ||
- | == Bessere Lösung: zwei ineinandergeschachtelte | + | == Bessere Lösung: zwei ineinandergeschachtelte |
< | < | ||
Zeile 147: | Zeile 147: | ||
</ | </ | ||
- | + | <WRAP center round todo 60%> | |
- | + | Die Tabelle sieht noch nicht perfekt | |
- | + | < | |
- | + | 1 2 3 4 5 6 7 8 9 10 | |
- | + | 2 4 6 8 10 12 14 16 18 20 | |
- | Schalte rechts auf den " | + | 3 6 9 12 15 18 21 24 27 30 |
- | + | 4 8 12 16 20 24 28 32 36 40 | |
- | == Erklärung der einzelnen Anweisungen == | + | 5 10 15 20 25 30 35 40 45 50 |
- | < | + | 6 12 18 24 30 36 42 48 54 60 |
- | int n = 1; | + | 7 14 21 28 35 42 49 56 63 70 |
+ | 8 16 24 32 40 48 56 64 72 80 | ||
+ | 9 18 27 36 45 54 63 72 81 90 | ||
+ | 10 20 30 40 50 60 70 80 90 100 | ||
</ | </ | ||
- | Die Variable '' | + | Im Kapitel zur Wenn-Dann-Anweisung werden wir [[wenndann:if: |
- | <code learnj [enable_line_numbers=" | + | </WRAP> |
- | while(n <= 10){ | + | |
- | | + | |
- | n = n + 1; | + | |
- | } | + | |
- | </ | + | |
- | Die Anweisung | + | |
- | <code learnj [enable_line_numbers=" | + | |
- | println(" | + | |
- | </code> | + | |
- | Sobald die Bedingung hinter '' | + | |
- | + | ===== Beispiel 2: Stern-Dreieck ===== | |
- | <WRAP center round info 60%> | + | Bisher |
- | Mit Hilfe der '' | + | < |
- | < | + | * |
- | 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 Schleife kann nicht nur immer wieder exakt dasselbe wiederholen. Man kann beispielsweise die Zählvariable in der Schleife benutzen, um auszugeben, wie oft die Schleife schon durchlaufen wurde: | ||
< | < | ||
- | <div class=" | ||
- | <script type=" | ||
- | int z = 1; | ||
- | while(z | + | <div class="java-online" |
- | + | ||
- | | + | |
- | | + | |
- | | + | |
- | | + | |
+ | <script type=" | ||
+ | for(int reihe = 1; reihe <= 12; reihe++){ | ||
+ | | ||
+ | print(" | ||
+ | } | ||
+ | | ||
} | } | ||
</ | </ | ||
Zeile 207: | Zeile 198: | ||
</ | </ | ||
- | Die drei '' | + | ===== Aufgaben zum Stern-Dreieck: ===== |
- | < | + | 1. Ändere das Programm so ab, dass die Pyramide auf dem Kopf steht, also so: |
- | println(" | + | < |
+ | ************ | ||
+ | *********** | ||
+ | ********** | ||
+ | ********* | ||
+ | ******** | ||
+ | ******* | ||
+ | ****** | ||
+ | ***** | ||
+ | **** | ||
+ | *** | ||
+ | ** | ||
+ | * | ||
</ | </ | ||
- | <WRAP center round tip 60%> | + | [[.loesungen: |
- | **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: Quadratzahlen ===== | + | |
- | Oft ist es nützlich, noch zusätzliche Variablen zu deklarieren, | + | 2. Ändere |
- | < | + | <code> |
- | <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-Schleife ===== | + | |
- | + | ||
- | Jetzt bis Du dran. [[.aufgabenwhile: | + | |
- | + | ||
- | + | ||
- | ====== B. Die while-Schleife mit Endbedingung ====== | + | |
- | Man kann die '' | + | |
- | + | ||
- | ===== Beispiel 5: while-Schleife mit Endbedingung (do...while-Schleife) ===== | + | |
- | Wir zählen wieder von 1 bis 10: | + | |
- | < | + | |
- | <div class=" | + | |
- | <script type=" | + | |
- | int i = 0; | + | |
- | + | ||
- | do { | + | |
- | + | ||
- | println(i); | + | |
- | | + | |
- | + | ||
- | } while (i <= 10); | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | + | ||
- | ====== C. Die for-Schleife ====== | + | |
- | 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 | + | |
- | | + | |
- | } | + | |
</ | </ | ||
- | | + | **Tipps:** |
+ | * Jede Reihe besteht jetzt aus einer ungeraden Anzahl von Sternen. Die Variable '' | ||
+ | * Vor jeder Reihe von Sternen stehen unterschiedlich viele Leerzeichen. Wie kann man die Anzahl der Leerzeichen aus der Anzahl der Sterne ( = Reihennummer) berechnen? Dazu eine Hilfstabelle: | ||
- | Für alle Anwendungsfälle, | + | ^ Reihe ^ Anzahl von Sternen ^ Anzahl von Leerzeichen ^ |
+ | |1|1|6| | ||
+ | |3|3|5| | ||
+ | |5|5|7| | ||
+ | ... | ||
- | ^ While-Schleife ^ For-Schleife ^ | + | |
- | | {{: | + | [[.pyramidezentriert:start|Hier geht's zur Lösung!]] |
- | <WRAP center round info 60%> | + | ===== Beispiel 3: Grafik ===== |
- | Die '' | + | Die Erzeugung von Grafikobjekten lernen wir [[klassen1: |
- | < | + | < |
- | // Anweisungen | + | new Circle(300, 200, 100); |
- | } | + | |
</ | </ | ||
- | * Die **Startanweisung** wird genau 1-mal zu Beginn der Schleife aufgerufen. | + | erzeugt ein Kreis-Objekt |
- | * 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 = 0; 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=" | + | <div class=" |
<script type=" | <script type=" | ||
- | for(int | + | for(int |
- | println("Hallo Welt (zum " | + | for(int spalte = 1; spalte <= 16 - zeile; spalte++){ |
+ | new Circle(30*spalte, | ||
+ | new Circle(30*(16-spalte), 30*(16-zeile), | ||
+ | } | ||
} | } | ||
- | 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 | + | ===== Weitere Aufgaben |
- | + | [[.geschachteltewh:weitereaufgaben:start|Weitere Aufgaben zu geschachtelten Wiederholungen findest | |
- | < | + | |
- | + | ||
- | <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 '' | + |
einstieg/geschachtelt/start.txt · Zuletzt geändert: 2021/12/29 11:29 von 127.0.0.1