Schleifen: Unterschied zwischen den Versionen
(39 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
Schleifen | ==[[Datei:icon_play.png|20px|Icon]] Video== | ||
'''Schleifen''' | |||
[[Datei:icon_you_tube.png|20px|Icon]] https://youtu.be/9hvM5ip19Mg | |||
==Was ist das?== | |||
Schleifen werden beim Programmieren immer dann eingesetzt, wenn bestimmte Befehle mehrmals oder unendlich oft '''wiederholt''' werden sollen. | |||
Man nennt sie daher auch '''Wiederholungsanweisungen'''. Je nach Programmiersprache gibt für die Erzeugung einer Schleife bestimmte Befehle. | |||
== | ==Befehle== | ||
Für die Programmierung des BBC micro:bit stehen die folgenden 3 Befehle zur Verfügung: | Für die Programmierung des BBC micro:bit stehen die folgenden 3 Befehle zur Verfügung: | ||
* Manchmal ist es erwünscht, dass bestimmte Befehle (theoretisch) unendlich oft ausgeführt werden. Man spricht dann von einer '''Endlosschleife''' (engl. infinite loop). | * Manchmal ist es erwünscht, dass bestimmte Befehle (theoretisch) unendlich oft ausgeführt werden. Man spricht dann von einer '''Endlosschleife''' (engl. infinite loop). | ||
<pre id="schl01"> | |||
basic.forever(function () { | |||
}) | |||
</pre> | |||
Bei den folgenden beiden Schleifenblöcken muss eine '''Abbruchbedingung''' angegeben werden. Dabei ist zu überlegen, wie oft die Befehle in der Schleife ausgeführt werden sollen. | Bei den folgenden beiden Schleifenblöcken muss eine '''Abbruchbedingung''' angegeben werden. Dabei ist zu überlegen, wie oft die Befehle in der Schleife ausgeführt werden sollen. | ||
* Ist die '''Anzahl der Wiederholungen bekannt''', so kann der folgende | * Ist die '''Anzahl der Wiederholungen bekannt''', so kann der folgende grüne Befehl verwendet werden: | ||
<pre id="schl02"> | |||
for (let index = 0; index < 4; index++) { | |||
} | |||
</pre> | |||
* Wenn '''nicht klar''' ist, '''wie oft''' bestimmte Befehle wiederholt werden müssen, kann der folgende grüne Befehl verwendet werden: | |||
<pre id="schl03"> | |||
while (false) { | |||
} | |||
</pre> | |||
Dabei werden die Befehle in der Schleife '''solange wiederholt''', bis eine '''bestimmte Bedingung nicht mehr erfüllt''' ist. | Dabei werden die Befehle in der Schleife '''solange wiederholt''', bis eine '''bestimmte Bedingung erfüllt oder nicht mehr erfüllt''' ist. | ||
=Beispielprogramm - blinkendes Herz= | =Beispielprogramm - blinkendes Herz= | ||
Zeile 35: | Zeile 49: | ||
Die folgenden beiden Programme erzeugen dasselbe Ergebnis: ein blinkendes Herz am LED-Display des BBC micro:bit. | Die folgenden beiden Programme erzeugen dasselbe Ergebnis: ein blinkendes Herz am LED-Display des BBC micro:bit. | ||
Im | Im zweiten (unteren) Programm wird eine Schleife verwendet. Das bringt einige Vorteile mit sich: | ||
*Die Anzahl der Wiederholungen kann schnell geändert werden, z.B. 20-mal anstatt 3-mal. | *Die Anzahl der Wiederholungen kann schnell geändert werden, z.B. 20-mal anstatt 3-mal. | ||
*Der Programmcode wird übersichtlicher. | *Der Programmcode wird übersichtlicher. | ||
'''ohne''' Schleife: | |||
<pre id="schl04"> | |||
basic.showIcon(IconNames.Heart) | |||
basic.pause(500) | |||
basic.clearScreen() | |||
basic.pause(500) | |||
basic.showIcon(IconNames.Heart) | |||
basic.pause(500) | |||
basic.clearScreen() | |||
basic.pause(500) | |||
basic.showIcon(IconNames.Heart) | |||
basic.pause(500) | |||
basic.clearScreen() | |||
basic.pause(500) | |||
</pre> | |||
'''mit''' Schleifen: | |||
<pre id="schl05"> | |||
for (let index = 0; index < 3; index++) { | |||
basic.showIcon(IconNames.Heart) | |||
basic.pause(500) | |||
basic.clearScreen() | |||
basic.pause(500) | |||
} | |||
</pre> | |||
Zeile 48: | Zeile 84: | ||
Um das Herz '''dauerhaft''' blinken zu lassen, | Um das Herz '''dauerhaft''' blinken zu lassen, muss eine Endlosschleife erzeugt werden: | ||
<pre id="schl06"> | |||
basic.forever(function () { | |||
basic.showIcon(IconNames.Heart) | |||
basic.pause(500) | |||
basic.clearScreen() | |||
basic.pause(500) | |||
}) | |||
</pre> | |||
=Beispielprogramm - Countdown= | =Beispielprogramm - Countdown= | ||
Zeile 63: | Zeile 106: | ||
Nach der 11. Wiederholung bricht die Schleife ab und ein Symbol erscheint am LED-Display des BBC micro:bit. | Nach der 11. Wiederholung bricht die Schleife ab und ein Symbol erscheint am LED-Display des BBC micro:bit. | ||
<pre id=schl07"> | |||
let Counter = 0 | |||
Counter = 10 | |||
input.onButtonPressed(Button.A, function () { | |||
for (let index = 0; index < 11; index++) { | |||
basic.showNumber(Counter) | |||
basic.pause(500) | |||
Counter += -1 | |||
} | |||
basic.showIcon(IconNames.No) | |||
}) | |||
</pre> | |||
Zum Programm: https://makecode.microbit.org/_0Vq0RgL2FTf2 | Zum Programm: https://makecode.microbit.org/_0Vq0RgL2FTf2 | ||
Zeile 71: | Zeile 123: | ||
=Beispielprogramm - Komponieren= | =Beispielprogramm - Komponieren= | ||
Der im vorherigen Beispiel verwendete | Der im vorherigen Beispiel verwendete Schleifen-Befehl kann auch für das Komponieren von Melodien sehr hilfreich sein, wie das folgende Beispiel zeigt: | ||
<pre id=schl09"> | |||
for (let index = 0; index < 3; index++) { | |||
music.playTone(262, music.beat(BeatFraction.Half)) | |||
music.playTone(294, music.beat(BeatFraction.Half)) | |||
music.playTone(330, music.beat(BeatFraction.Half)) | |||
basic.pause(500) | |||
music.playTone(330, music.beat(BeatFraction.Half)) | |||
music.playTone(294, music.beat(BeatFraction.Half)) | |||
music.playTone(262, music.beat(BeatFraction.Half)) | |||
basic.pause(500) | |||
} | |||
</pre> | |||
Zum Programm: https://makecode.microbit.org/_EVsK9DEAkgTi | Zum Programm: https://makecode.microbit.org/_EVsK9DEAkgTi | ||
Zeile 81: | Zeile 143: | ||
=Beispielprogramm - Drück mich!= | =Beispielprogramm - Drück mich!= | ||
Hier werden 2 | Hier werden 2 Schleifen ineinander verschachtelt. | ||
Betrachten wir zuerst die innere Schleife: | Betrachten wir zuerst die innere Schleife: | ||
Zeile 89: | Zeile 151: | ||
Die äußere Endlosschleife wird benötigt, um dauerhaft zu überprüfen, ob der Knopf A gedrückt wird oder nicht. | Die äußere Endlosschleife wird benötigt, um dauerhaft zu überprüfen, ob der Knopf A gedrückt wird oder nicht. | ||
<pre id="schl09"> | |||
basic.forever(function () { | |||
while (input.buttonIsPressed(Button.A)) { | |||
basic.showIcon(IconNames.Heart) | |||
} | |||
basic.clearScreen() | |||
}) | |||
</pre> | |||
Zum Programm: https://makecode.microbit.org/_UwUTgsahfcb5 | Zum Programm: https://makecode.microbit.org/_UwUTgsahfcb5 | ||
Zeile 103: | Zeile 170: | ||
* Du findest die Aufgabe auf Seite 16. | * Du findest die Aufgabe auf Seite 16. | ||
<htmlet>makecode_embed</htmlet> |
Aktuelle Version vom 28. April 2022, 16:13 Uhr
Video
Schleifen
Was ist das?
Schleifen werden beim Programmieren immer dann eingesetzt, wenn bestimmte Befehle mehrmals oder unendlich oft wiederholt werden sollen.
Man nennt sie daher auch Wiederholungsanweisungen. Je nach Programmiersprache gibt für die Erzeugung einer Schleife bestimmte Befehle.
Befehle
Für die Programmierung des BBC micro:bit stehen die folgenden 3 Befehle zur Verfügung:
- Manchmal ist es erwünscht, dass bestimmte Befehle (theoretisch) unendlich oft ausgeführt werden. Man spricht dann von einer Endlosschleife (engl. infinite loop).
basic.forever(function () { })
Bei den folgenden beiden Schleifenblöcken muss eine Abbruchbedingung angegeben werden. Dabei ist zu überlegen, wie oft die Befehle in der Schleife ausgeführt werden sollen.
- Ist die Anzahl der Wiederholungen bekannt, so kann der folgende grüne Befehl verwendet werden:
for (let index = 0; index < 4; index++) { }
- Wenn nicht klar ist, wie oft bestimmte Befehle wiederholt werden müssen, kann der folgende grüne Befehl verwendet werden:
while (false) { }
Dabei werden die Befehle in der Schleife solange wiederholt, bis eine bestimmte Bedingung erfüllt oder nicht mehr erfüllt ist.
Beispielprogramm - blinkendes Herz
Die folgenden beiden Programme erzeugen dasselbe Ergebnis: ein blinkendes Herz am LED-Display des BBC micro:bit.
Im zweiten (unteren) Programm wird eine Schleife verwendet. Das bringt einige Vorteile mit sich:
- Die Anzahl der Wiederholungen kann schnell geändert werden, z.B. 20-mal anstatt 3-mal.
- Der Programmcode wird übersichtlicher.
ohne Schleife:
basic.showIcon(IconNames.Heart) basic.pause(500) basic.clearScreen() basic.pause(500) basic.showIcon(IconNames.Heart) basic.pause(500) basic.clearScreen() basic.pause(500) basic.showIcon(IconNames.Heart) basic.pause(500) basic.clearScreen() basic.pause(500)
mit Schleifen:
for (let index = 0; index < 3; index++) { basic.showIcon(IconNames.Heart) basic.pause(500) basic.clearScreen() basic.pause(500) }
zum Programm: https://makecode.microbit.org/_MYPiLRiL6FbH
Um das Herz dauerhaft blinken zu lassen, muss eine Endlosschleife erzeugt werden:
basic.forever(function () { basic.showIcon(IconNames.Heart) basic.pause(500) basic.clearScreen() basic.pause(500) })
Beispielprogramm - Countdown
In diesem Beispiel wird ein Countdown programmiert:
- Gestartet wird bei 10.
- Dann wird schrittweise bis 0 hinuntergezählt.
Dazu müssen die Befehle innerhalb der Schleife insgesamt 11-mal ausgeführt werden.
Nach der 11. Wiederholung bricht die Schleife ab und ein Symbol erscheint am LED-Display des BBC micro:bit.
let Counter = 0 Counter = 10 input.onButtonPressed(Button.A, function () { for (let index = 0; index < 11; index++) { basic.showNumber(Counter) basic.pause(500) Counter += -1 } basic.showIcon(IconNames.No) })
Zum Programm: https://makecode.microbit.org/_0Vq0RgL2FTf2
Beispielprogramm - Komponieren
Der im vorherigen Beispiel verwendete Schleifen-Befehl kann auch für das Komponieren von Melodien sehr hilfreich sein, wie das folgende Beispiel zeigt:
for (let index = 0; index < 3; index++) { music.playTone(262, music.beat(BeatFraction.Half)) music.playTone(294, music.beat(BeatFraction.Half)) music.playTone(330, music.beat(BeatFraction.Half)) basic.pause(500) music.playTone(330, music.beat(BeatFraction.Half)) music.playTone(294, music.beat(BeatFraction.Half)) music.playTone(262, music.beat(BeatFraction.Half)) basic.pause(500) }
Zum Programm: https://makecode.microbit.org/_EVsK9DEAkgTi
Beispielprogramm - Drück mich!
Hier werden 2 Schleifen ineinander verschachtelt.
Betrachten wir zuerst die innere Schleife:
Die Befehle in der Schleife werden solange wiederholt, bis eine bestimmte Bedingung nicht mehr erfüllt ist. Im folgenden Beispiel wird solange das Herz-Symbol auf der LED-Matrix des BBC micro:bit angezeigt bis der Knopf A losgelassen wird.
Die äußere Endlosschleife wird benötigt, um dauerhaft zu überprüfen, ob der Knopf A gedrückt wird oder nicht.
basic.forever(function () { while (input.buttonIsPressed(Button.A)) { basic.showIcon(IconNames.Heart) } basic.clearScreen() })
Zum Programm: https://makecode.microbit.org/_UwUTgsahfcb5
Übung
Versuche die Biber-der-Informatik-Aufgabe Cassy, die Schildkröte zu lösen.
- Klicke dazu auf den folgenden Link:
http://www.ocg.at/sites/ocg.at/files/Biberheft_2016_ohne_neu.pdf
- Du findest die Aufgabe auf Seite 16.