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 08:39] – 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 39: | Zeile 39: | ||
</ | </ | ||
- | <WRAP center round tip 60%> | + | <WRAP center round tip 80%> |
Der Wert der Variable ' | Der Wert der Variable ' | ||
**Probiere es aus,** indem Du die '' | **Probiere es aus,** indem Du die '' | ||
Zeile 114: | Zeile 114: | ||
</ | </ | ||
- | Schalte rechts auf den " | + | <WRAP center round todo 80%> |
- | + | **War's das schon?** \\ \\ | |
- | == Erklärung der einzelnen Anweisungen == | + | Eigentlich ist die Aufgabe jetzt schon gelöst: |
- | <code learnj [enable_line_numbers=" | + | * Der Code ist hochgradig **[[https:// |
- | int n = 1; | + | * Wenn wir später |
- | </ | + | * Das Programm |
- | Die Variable | + | \\ \\ |
- | <code learnj [enable_line_numbers=" | + | Es muss doch möglich sein, den Computer anzuweisen, den Programmblock aus dem ersten Beispiel oben einfach 10-mal zu wiederholen! |
- | while(n <= 10){ | + | |
- | | + | |
- | n = n + 1; | + | |
- | } | + | |
- | </ | + | |
- | Die Anweisung '' | + | |
- | <code learnj | + | |
- | 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, ob die Bedingung zutrifft. Hat sie schon zu Beginn | + | |
</ | </ | ||
- | == Kleine Aufgabe == | ||
- | Ändere das Programm oben so ab, dass es 8-mal Deinen Namen in Deiner Lieblingsfarbe ausgibt! | ||
- | ===== Beispiel 2: Varianten... | + | == Bessere Lösung: zwei ineinandergeschachtelte for-loops |
- | 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 e = 1; e <= 10; e++){ |
- | int zp = 1; | + | for(int i = 1; i <= 10; i++){ |
- | + | print(e * i + " "); | |
- | while(i <= 10){ | + | } |
- | + | println(); | |
- | | + | |
- | i++; // i wird um 1 erhöht | + | |
- | zp *= 2; // Kurzform für zp = zp * 2; | + | |
} | } | ||
</ | </ | ||
Zeile 205: | Zeile 141: | ||
</ | </ | ||
- | Schalte rechts | + | <WRAP center round tip 80%> |
- | + | Schiebe den Geschwindigkeitsregler (neben dem Startbutton) | |
- | <WRAP center round tip 60%> | + | * Beobachte, nach welchem Muster |
- | {{ : | + | * Führe |
- | Wenn das Programm | + | |
</ | </ | ||
- | ===== Aufgaben zur while-Schleife ===== | + | <WRAP center round todo 60%> |
- | + | Die Tabelle sieht noch nicht perfekt aus, weil die Zahlen unterschiedlich breit sind: | |
- | Jetzt bis Du dran. [[.aufgabenwhile: | + | <code> |
- | + | 1 2 3 4 5 6 7 8 9 10 | |
- | + | 2 4 6 8 10 12 14 16 18 20 | |
- | ====== B. Die while-Schleife mit Endbedingung ====== | + | 3 6 9 12 15 18 21 24 27 30 |
- | Man kann die '' | + | 4 8 12 16 20 24 28 32 36 40 |
- | + | 5 10 15 20 25 30 35 40 45 50 | |
- | ===== Beispiel 5: while-Schleife mit Endbedingung (do...while-Schleife) ===== | + | 6 12 18 24 30 36 42 48 54 60 |
- | Wir zählen wieder von 1 bis 10: | + | 7 14 21 28 35 42 49 56 63 70 |
- | <HTML> | + | 8 16 24 32 40 48 56 64 72 80 |
- | <div class=" | + | 9 18 27 36 45 54 63 72 81 90 |
- | <script type=" | + | 10 20 30 40 50 60 70 80 90 100 |
- | int i = 0; | + | |
- | + | ||
- | do { | + | |
- | + | ||
- | | + | |
- | | + | |
- | + | ||
- | } 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 | + | |
- | | + | |
- | } | + | |
</ | </ | ||
- | * 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. | + | Im Kapitel zur Wenn-Dann-Anweisung werden wir [[wenndann: |
+ | </ | ||
- | Für alle Anwendungsfälle, | ||
- | ^ While-Schleife ^ For-Schleife ^ | + | ===== Beispiel 2: Stern-Dreieck ===== |
- | | {{:einstieg: | + | Bisher können wir zwar nur Zeichen auf dem Bildschirm ausgeben (Computergrafik und Spieleprogrammierung kommt auch noch, versprochen!), |
- | + | < | |
- | <WRAP center round info 60%> | + | * |
- | Die '' | + | ** |
- | < | + | *** |
- | // Anweisungen | + | **** |
- | } | + | ***** |
+ | ****** | ||
+ | ******* | ||
+ | ******** | ||
+ | ********* | ||
+ | ********** | ||
+ | *********** | ||
+ | ************ | ||
</ | </ | ||
- | * Die **Startanweisung** wird genau 1-mal zu Beginn der Schleife 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 = 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 <= reihe; spalte++){ |
+ | print("*"); | ||
+ | } | ||
+ | | ||
} | } | ||
- | println(" | ||
</ | </ | ||
</ | </ | ||
Zeile 295: | Zeile 198: | ||
</ | </ | ||
- | == Erklärung | + | ===== Aufgaben: ===== |
- | Die '' | + | 1. Ändere das Programm so ab, dass die Pyramide auf dem Kopf steht, also so: |
- | ^Anweisung^Erklärung^Wert von '' | + | < |
- | |'' | + | ************ |
- | |Prüfe: Ist '' | + | *********** |
- | |'' | + | ********** |
- | |'' | + | ********* |
- | |Prüfe: Ist '' | + | ******** |
- | |'' | + | ******* |
- | |'' | + | ****** |
+ | ***** | ||
+ | **** | ||
+ | *** | ||
+ | ** | ||
+ | * | ||
+ | </ | ||
- | usw... \\ \\ Die letzten Schritte sehen so aus: | + | [[.loesungen:aufgabe1:start|Hier geht's zur Lösung!]] |
- | |'' | + | |
- | |'' | + | |
- | |Prüfe: Ist '' | + | |
- | |'' | + | |
- | |'' | + | |
- | |Prüfe: Ist '' | + | |
- | |'' | + | |
+ | | ||
+ | 2. Ändere das Programm so ab, dass die Pyramide zentriert erscheint, also so: | ||
+ | < | ||
+ | * | ||
+ | *** | ||
+ | ***** | ||
+ | | ||
+ | ********* | ||
+ | | ||
+ | </ | ||
+ | **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: | ||
- | ===== Beispiel | + | ^ Reihe ^ Anzahl von Sternen ^ Anzahl von Leerzeichen ^ |
+ | |1|1|6| | ||
+ | |3|3|5| | ||
+ | |5|5|7| | ||
+ | ... | ||
- | < | + | \\ |
+ | [[.pyramidezentriert: | ||
- | <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