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/22 09:33] – [Aufgaben:] 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=" |
- | | ||
- | | ||
- | | ||
- | | ||
- | |||
- | } | ||
- | </ | ||
- | </ | ||
- | |||
- | </ | ||
- | |||
- | 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: Quadratzahlen ===== | ||
- | Oft ist es nützlich, noch zusätzliche Variablen zu deklarieren, | ||
- | < | ||
- | <div class=" | ||
<script type=" | <script type=" | ||
- | int i = 0; | + | for(int reihe = 1; reihe <= 12; reihe++){ |
- | int zp = 1; | + | for(int spalte |
- | + | print("*"); | |
- | while(i | + | } |
- | + | println(); | |
- | | + | |
- | i++; // i wird um 1 erhöht | + | |
- | zp *= 2; // Kurzform für zp = zp * 2; | + | |
} | } | ||
</ | </ | ||
Zeile 243: | Zeile 198: | ||
</ | </ | ||
- | Schalte rechts auf den " | + | ===== Aufgaben: ===== |
- | + | 1. Ändere das Programm | |
- | <WRAP center round tip 60%> | + | <code> |
- | {{ : | + | ************ |
- | 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 | + | ******** |
- | + | ******* | |
- | 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); | + | |
- | i++; | + | |
- | + | ||
- | } while (i <= 10); | + | |
- | </ | + | |
- | </ | + | |
- | + | ||
- | </ | + | |
- | + | ||
- | + | ||
- | ====== C. Die for-Schleife ====== | + | |
- | Die '' | + | |
- | | + | |
- | <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, | + | [[.loesungen: |
- | ^ While-Schleife ^ For-Schleife ^ | + | |
- | | {{: | + | 2. Ändere das Programm so ab, dass die Pyramide zentriert erscheint, also so: |
- | + | <code> | |
- | <WRAP center round info 60%> | + | * |
- | Die '' | + | *** |
- | <code learnj> | + | ***** |
- | // Anweisungen | + | ******* |
- | } | + | ********* |
+ | *********** | ||
</ | </ | ||
- | | + | **Tipps:** |
- | * Die **Bedingung** wird vor jedem Wiederholungsschritt ausgewertet. Ist ihr Wert '' | + | * Jede Reihe besteht jetzt aus einer ungeraden Anzahl von Sternen. |
- | * 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": {{: | + | ^ Reihe ^ Anzahl von Sternen ^ Anzahl von Leerzeichen ^ |
- | * zunächst mit offenem Tab " | + | |1|1|6| |
- | * dann mit offenem Tab " | + | |3|3|5| |
- | Beobachte genau, was jeder Einzelne Programmschritt bewirkt! | + | |5|5|7| |
+ | ... | ||
- | ===== Beispiel 6: Zählen mit " | + | |
- | Wir schreiben den Text "Hallo Welt!" 10-mal untereinander in die Ausgabe. Mit der Variablen | + | [[.pyramidezentriert: |
- | < | + | |
- | <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! | + | ===== Weitere Aufgaben ===== |
- | | + | [[.geschachteltewh: |
- | * Warum wird der Variablen '' | + |
einstieg/geschachtelt/start.txt · Zuletzt geändert: 2021/12/29 11:29 von 127.0.0.1