Schleifen: Unterschied zwischen den Versionen

Aus microbit - Das Schulbuch
Wechseln zu: Navigation, Suche
(Beispielprogramm 1)
(Beispielprogramm - Drück mich!)
 
(56 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
 +
==[[Datei:icon_play.png|20px|Icon]] Video==
 +
 +
'''Schleifen'''
 +
 +
[[Datei:icon_you_tube.png|20px|Icon]] https://youtu.be/9hvM5ip19Mg
 +
 
==Was ist das?==
 
==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.
+
Schleifen werden beim Programmieren immer dann eingesetzt, wenn bestimmte Befehle mehrmals oder unendlich oft '''wiederholt''' werden sollen.  
  
==Erklärungsvideo==
+
Man nennt sie daher auch '''Wiederholungsanweisungen'''. Je nach Programmiersprache gibt für die Erzeugung einer Schleife bestimmte Befehle.
  
[[Datei:icon_progress.png|20px]]  In Arbeit!
+
==Befehle==
 
 
==Befehlsblöcke==
 
 
   
 
   
 
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>
 +
 +
  
[[Datei:schleife_dauerhaft.png|200px]]
 
 
 
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 Schleifenblock verwendet werden:
+
* 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>
 +
 
  
[[Datei:schleife_zaehler.png|200px]]
+
* Wenn '''nicht klar''' ist, '''wie oft''' bestimmte Befehle wiederholt werden müssen, kann der folgende grüne Befehl verwendet werden:
  
* Wenn '''nicht klar''' ist, '''wie oft''' bestimmte Befehle wiederholt werden müssen, kann der folgende Schleifenblock verwendet werden:
+
<pre id="schl03">
 +
while (false) {
  
[[Datei:schleife_bedingung.png|200px]]
+
}
 +
</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 1==
+
=Beispielprogramm - blinkendes Herz=
  
 
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 rechten Programm wird eine Schleife verwendet. Das bringt einige Vorteile mit sich:
+
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>
  
[[Datei:schleife_blinkendes_herz_ohne.png|200px]]
 
[[Datei:schleife_blinkendes_herz_mit.png|200px]]
 
  
 
zum Programm: https://makecode.microbit.org/_MYPiLRiL6FbH
 
zum Programm: https://makecode.microbit.org/_MYPiLRiL6FbH
  
Um das Herz '''dauerhaft''' blinken zu lassen, kann der folgende Schleifenblock verwendet werden:
 
  
[[Datei:endlosschleife_blinkendes_herz.png|200px]]
+
Um das Herz '''dauerhaft''' blinken zu lassen, muss eine Endlosschleife erzeugt werden:
  
=Beispielprogramm 2=
+
<pre id="schl06">
 +
basic.forever(function () {
 +
    basic.showIcon(IconNames.Heart)
 +
    basic.pause(500)
 +
    basic.clearScreen()
 +
    basic.pause(500)
 +
})
 +
</pre>
 +
 
 +
=Beispielprogramm - Countdown=
  
 
In diesem Beispiel wird ein Countdown programmiert:
 
In diesem Beispiel wird ein Countdown programmiert:
Zeile 57: 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.  
  
[[Datei:schleife_countdown.png|200px]]
+
<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
  
=Beispielprogramm 3=
+
=Beispielprogramm - Komponieren=
  
Der im vorherigen Beispiel verwendete Schleifenblock kann auch für das Komponieren von Melodien sehr hilfreich sein, wie das folgende Beispiel zeigt:
+
Der im vorherigen Beispiel verwendete Schleifen-Befehl kann auch für das Komponieren von Melodien sehr hilfreich sein, wie das folgende Beispiel zeigt:
  
[[Datei:schleife_melodie.png|300px]]
 
  
zum Programm: https://makecode.microbit.org/_EVsK9DEAkgTi
+
<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>
  
=Beispielprogramm 4=
+
Zum Programm: https://makecode.microbit.org/_EVsK9DEAkgTi
  
Hier werden 2 Schleifenblöcke ineinander verschachtelt.
+
=Beispielprogramm - Drück mich!=
 +
 
 +
Hier werden 2 Schleifen ineinander verschachtelt.
  
 
Betrachten wir zuerst die innere Schleife:
 
Betrachten wir zuerst die innere Schleife:
Zeile 79: 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.  
  
[[Datei:schleife_beispielprogramm_bedingung.png|300px]]
+
<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
 +
 
 +
=Ü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.
  
zum Programm: https://makecode.microbit.org/_UwUTgsahfcb5
+
<htmlet>makecode_embed</htmlet>

Aktuelle Version vom 28. April 2022, 17:13 Uhr

Icon Video

Schleifen

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:

  • 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.