Wetterstation Lösung: Unterschied zwischen den Versionen

Aus microbit - Das Schulbuch
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „=Schritt für Schritt= Öffne den micro:bit Block-Editor, um ein Programm für den BBC micro:bit zu schreiben: https://makecode.microbit.org/ ==Einleitung==…“)
 
(Lösungsschritte)
 
(61 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:
 
Öffne den micro:bit Block-Editor, um ein Programm für den BBC micro:bit zu schreiben: https://makecode.microbit.org/
 
Öffne den micro:bit Block-Editor, um ein Programm für den BBC micro:bit zu schreiben: https://makecode.microbit.org/
  
==Einleitung==
+
==Grundgerüst der Lösung==
In diesem Beispiel werden die englischen Begriffe von Ei <b>(egg)</b> und Korb <b>(basket)</b> für die Bezeichnung der [[Variablen]] verwendet.
+
:<ol>
 +
:<li>Durch Ansteuern des digitalen Sensors mit der Makecode Erweiterung DHT11/22 über einen Daten-Pin übergibt dieser die aktuellen Messwerte an den micro:bit.</li>
 +
:<li>Wir lesen danach entweder die Temperatur oder die Luftfeuchtigkeit, und geben diese Werte jeweils auf Knopfdruck aus.</li>
 +
:<li>Wenn der Knopf A gedrückt wird soll die Temperatur erscheinen. Und bei Drücken von Knopf B soll die Luftfeuchtigkeit angezeigt werden.</li>
 +
</ol>
  
Beim Start des Programms soll der micro:bit in der obersten Zeile ein Ei vorbereiten <b>(Koordinaten eggX/eggY = 2/0)</b> und in der untersten Zeile unten einen Korb <b>(Koordinaten basketX/y = 2/4)</b> hinstellen. <br/>Das Koordinatensystem beginnt links oben. <spoiler text="Koordinaten">[[Datei:03 fangdasei05.png|border|Koordinaten micro:bit]]</spoiler>
 
Durch verschieben des Korbs wird sichergestellt, dass das Ei gefangen werden kann und ganz bleibt. Dazu wird der Microbit nach links und rechts gekippt. Vorsichtig dosiert kann der Korb mittels Beschleunigungssensor (X-Achse) auch ziemlich genau gesteuert werden. <spoiler text="Kippen">[[Datei:03_fangdasei_kippen.png|border|Beschleunigungssensor]]</spoiler>
 
 
==Lösungsschritte==
 
==Lösungsschritte==
<ol>
+
<ol start=0>
<li>Wähle unter dem rot gefärbten Begriff Platzhalter den Block "ändere Platzhalter auf 0" und ziehe ihn in die Klammer "beim Start." Klicke auf das kleine, nach unten zeigende Pfeilzeichen neben dem Wort Platzhalter und wähle dort "Variable umbenennen" aus. Benenne die erste Variable basketX und setzte den Wert auf 2. <br/>
+
<li>Klappe die schwarz gefärbte Kategorie '''Fortgeschritten''' auf und klicke dort auf '''Erweiterungen'''. Tippe in der erscheinenden Suchmaske '''dht22''' und EINGABE ein. Nun fügst du durch Klicken auf das Bild '''DHT11_DHT22''' die Erweiterung für den hier verwendeten Sensor hinzu. <spoiler text="Vorbereitung - Erweiterung">[[Datei:Dht11-22-erweiterung.png|200px]]</spoiler></li>
Wiederhole diesen Schritt zwei Mal für den Platzhalter eggX mit Wert 2 und eggY mit Wert 0. Etwa so ... <spoiler text="Schritt 1 - Blöcke">[[Datei:03_block_01.PNG|border]]<pre id="pre1">let basketX = 2;let eggX = 2;</pre></spoiler></li>
+
 
 +
<li>Wähle unter dem blau gefärbten Begriff '''Grundlagen''' den Block '''zeige LEDs''' und ziehe diesen nach rechts in den Arbeitsbereich direkt in den Block '''beim Start'''. <spoiler text="Schritt 1 - Blöcke"><pre id="pre01">basic.showLeds(`. . . . . . . . . . . . . . . . . . . . . . . . .`)</pre></spoiler></li>
 +
 
 +
<li>Ändere nun im Block '''zeige LEDs''' z.B. das mittlere LED der Anzeige und setz hier einen Punkt. So signalisiert uns der micro:bit, dass er zum Messen bereit ist nachdem das Programm gestartet wurde. <spoiler text="Schritt 2 - Blöcke"><pre id="pre02">basic.showLeds(`. . . . . . . . . . . . # . . . . . . . . . . . .`)</pre></spoiler></li>
 +
 
 +
<li>Wähle unter dem rosa gefärbten Begriff '''Eingabe''' den Block '''wenn Knopf A gedrückt''' und ziehe ihn nach rechts in den Arbeitsbereich. Wir wollen den digitalen Wert der Temperatur bei Druck auf den Knopf A auslesen und anzeigen. <spoiler text="Schritt 3 - Blöcke"><pre id="pre03">input.onButtonPressed(Button.B, function () {}</pre></spoiler></li>
 +
 
 +
<li>Wähle nun den neu hinzugekommen '''orangen''' Begriff '''DHT11/DHT22''' für die Erweiterung von Makecode zur Verwendung des externen Sensors. Ziehe den dort einzig vorhandenen großen Block '''Query DHT11''' nach rechts direkt in den Block '''wenn Knopf A gedrückt'''. <spoiler text="Schritt 4 - Blöcke">[[Datei:Dht11-22-block.png|300px]]</spoiler></li>
 +
 
 +
<li>Ändere den neuen '''orangen''' Block '''Query DHT11''' auf DHT22, falls du diese Sensortype, wie hier im Beispiel angegeben, benutzt. Setzte im selben Block '''Data pin P0''' auf den PIN P0 und alle drei weiteren Einstellungen auf '''wahr'''. <spoiler text="Schritt 5 - Blöcke">[[Datei:Dht11-22-block-fertig.png|300px]]</spoiler></li>
 +
 
 +
<li>Wähle unter dem blau gefärbten Begriff '''Grundlagen''' den Block '''zeige Text "&nbsp;"''' und füge diesen Block in die Klammer '''wenn Knopf A gedrückt''' als letzte Zeile unter den großen Block '''Query DHT22''' hinzu. Ändere den leeren Platz ("&nbsp;") gleich, sodass '''zeige Text "T"''' zur Anzeige der Temperatur erscheint. <spoiler text="Schritt 6 - Blöcke">[[Datei:Dht11-22-zeigeT.png|300px]]</spoiler></li>
 +
 
 +
<li>Wähle unter dem blau gefärbten Begriff '''Grundlagen''' den Block '''pausiere (ms) 100''' und füge diesen Block in die Klammer '''wenn Knopf A gedrückt''' als letzte Zeile hinzu.  Ändere den Wert '''100''' auf '''1000''' ms zur Verbesserung der Anzeige. <spoiler text="Schritt 7 - Blöcke">[[Datei:Dht11-22-pausiere.png|300px]]</spoiler></li>
 +
 
 +
<li>Wähle unter dem blau gefärbten Begriff '''Grundlagen''' den Block '''zeige Text ""''' und füge diesen Block in die Klammer '''wenn Knopf A gedrückt''' als letzte Zeile hinzu. <spoiler text="Schritt 8 - Blöcke">[[Datei:Dht11-22-zeigeT2.png|300px]]</spoiler></li>
 +
 
 +
<li>Wähle unter dem neu hinzugekommen '''orangen''' Begriff '''DHT11/DHT22''' den Block '''Read humidity''' und ziehe ihn gleich in der leeren Bereich von '''zeige Text "&nbsp;"''' aus vorigem Schritt hinein. Ändere '''Read humidity''' sogleich in '''Read temperature''', da wir ja bei Knopf A die Temperatur anzeigen wollen. <spoiler text="Schritt 9 - Blöcke">[[Datei:Dht11-22-leseTemp.png|300px]]</spoiler></li>
  
<li>Nun werden die beiden Elemente auf die LED-Anzeige gezeichnet. Wähle für das Ei den violetten Baukasten LED und dort den Block "Zeichne x 0 y 0" und ziehe ihn unterhalb der 3 Variablen an die letzte Stelle der Klammer "beim Start". Setzte bei x mit Platzhalter (nach unten zeigende Pfeilzeichen) die Variable eggX und bei y die Variable eggY ein. <br/>
+
Du bist schon beinahe fertig, dein Messinstrument für die Temperatur ist einsatzbereit.<br>
Füge für den Korb noch einmal im violetten Baukasten über LED und dort den Block "Zeichne x 0 y 0" ein. Setzte hier bei x mit Platzhalter die Variable basketX und bei y den Wert für die unterste Zeile, also 4 ein. Etwa so ... <spoiler text="Schritt 2 - Blöcke">[[Datei:03_block_02.PNG|border]]<pre id="pre2">let basketX = 2;let eggX = 2;let eggY = 0;led.plot(eggX, eggY);led.plot(basketX, 4);</pre></spoiler></li>
 
  
<li>Zu Beginn der Klammer dauerhaft wird immer eine Zeile weitergeschaltet, da das Ei ja durch die Schwerkraft herunterfällt. Somit muss die Anzeige einmal gelöscht werden bevor die nächste Zeile erscheinen kann.
+
<li>Zur Komplettierung der Aufgabe ist nun Kopieren erlaubt ;-). Kopiere den gesamten Code des Blocks '''wenn Knopf A gedrückt''' durch Drücken der rechten Maustaste und der Auswahl '''Duplizieren'''. Der kopierte Code wird nun schraffiert dargestellt. Keine Sorge, das reparieren wir gleich wieder.</li>
Dazu wählst du im violett gefärbten Baukasten LED den Block "schalte Pixel x 0 y 0" und ziehst ihn an erster Stelle in die Klammer "dauerhaft" (schalte heißt eigentlich schalte-aus, dies ist eine unglückliche Übersetzung). Ändere x auf eggX und y auf eggY mit Hilfe des roten Baukastens Platzhalter. Füge nun nochmals den Block "schalte Pixel x 0 y 0" ein und ändere x auf basketX und y auf 4. <br/>
 
Nun kann eine Zeile weitergeschaltet werden. Füge über den roten Baukasten "ändere Platzhalter auf 0" ein. Nun benötigen wir einen kleinen Trick um 2 Elemente in den Platz der 0 einzusetzen. Gehe in den violetten Baukasten der Mathematik und hole dir dort den Block "0 + 0" und füge ihn in das Feld 0 ein. Die erste Null erhält den Wert eggY und die zweite änderst du per Tastatur in eine 1. Somit steht dort "ändere Platzhalter auf (eggY + 1)". Nun kann das Ei wieder gezeichnet werden mit LED und "zeichne x 0 y 0". Den Wert x setzte auf eggX und Wert y auf eggY. Schau mal hier ...
 
<spoiler text="Schritt 3 - Blöcke">[[Datei:03_block_03.PNG|border]]
 
<pre id="3">
 
basic.forever(function () {
 
    led.unplot(eggX, eggY)
 
    led.unplot(basketX, 4)
 
    eggY = eggY + 1
 
    led.plot(eggX, eggY)
 
})
 
</pre>
 
</spoiler></li>
 
  
<li>Für die Steuerung des Korbs wird nun der Beschleunigungssensor ausgelesen und in einem Platzhalter zwischengespeichert. Füge den roten Block "ändere Platzhalter auf 0" ein und ändere Platzhalter in accX. In den Platz der 0 füge den rosa Block der Eingabe [[Datei:Iconmonstr-arrow-20re-120.png|20px]] "Beschleunigung (mg) x" hinzu. <br/>
+
<li>Wähle im schraffierten Bereich der Kopie '''wenn Knopf A gedrückt''' das kleine, nach unten zeigende Pfeilzeichen A und ändere dies auf B damit dein Code nicht schraffiert angezeigt wird und wieder gültig wird.</li>
Beginne wieder mit dem roten Block "ändere Platzhalter auf 0" und ändere Platzhalter in basketX. Die Mittelstellung der Position des Korbs befindet sich bei 2, die durch den Beschleunigungssensor <b>verändert</b> werden soll. Dazu wird im nächsten Schritt eine Berechnung erstellt, die die gemessene Beschleunigung der X-Achse <b>durch 200 teilt</b> um verwertbare Ergebnisse für die Korbposition zu erhalten (accX ÷ 200). <br/>
 
<b>Berechnung:</b> basketX = 2 + minimal(2, maximal(-2, accX ÷ 200)) <spoiler text="Berechnungsdetails">
 
Die Funktionen minimal und maximal geben den jeweils geforderten Wert der dahinter in Klammer stehenden Zahlenreihe aus.<br/>
 
z.B. minimal(1 ,5, 7, -2) [[Datei:Iconmonstr-arrow-20re-120.png|20px]] -2<br/>
 
od. maximal(1, 5, 7, -2) [[Datei:Iconmonstr-arrow-20re-120.png|20px]] 7<br/>
 
<br/>
 
accX kann Werte von ± 1024 darstellen, d.h. bei maximaler Neigung links -1024 und rechts +1024.<br/>
 
D.h. bei maximal(-2, accX ÷ 200) wird der Maximalausschlag nach links (-1024 ÷ 200 ≈ -5) nivelliert und auf maximal -2 festgelegt. <br/>
 
Gleiches gilt für den Maximalausschlag nach rechts (1024 ÷ 200 ≈ 5) der mit minimal(2, ≈5) auf minimal 2 nivelliert wird.<br/>
 
</spoiler>
 
Somit erreicht man eine Verschiebung des Korbs um nicht mehr als 2 Positionen nach links (0) oder rechts (4) von der Mittelposition (2) ausgehend.<br/>
 
Füge dazu den violetten Block "0 + 0" ein, in die zweite 0 füge den erweiterten Mathematik Block (…More) "minimal von 0 und 0" und in dessen zweite 0 den erweiterten Mathematik Block (…More) "maximal von 0 und 0" ein. <br/>Dies sieht so aus. <spoiler text="Blöcke">[[Datei:03_block_04a.PNG|border]]
 
<pre id=4a">
 
basketX = 2 + Math.min(2, Math.max(-2, 0))
 
</pre>
 
</spoiler>
 
In die allerletzte 0 von "maximal von 0 und 0" ziehe den violetten Mathematik Block "0 ÷ 0". Ersetzte dort die erste 0 durch Platzhalter accX und die zweite 0 durch 200 mit der Tastatur. <br/>Der Block sieht nun wie folgt aus.<spoiler text="Blöcke">[[Datei:03_block_04b.PNG|border]]
 
<pre id=4b">
 
basketX = 0 + Math.min(0, Math.max(0, Math.idiv(accX, 200)))
 
</pre></spoiler>
 
Nun werden die restlichen Teile der Berechnung für den Maximalausschlag der Steuerung (-2 / + 2) wie oben erklärt eingesetzt.
 
<spoiler text="Blöcke">[[Datei:03_block_04c.PNG|border]]
 
<pre id=4c">
 
basketX = 2 + Math.min(2, Math.max(-2, Math.idiv(accX, 200)))
 
</pre></spoiler>
 
Abschließend für Schritt 4 soll der nun seiner Position entsprechend <b>positionierte Korb wieder gezeichnet</b> werden mit LED und "Zeichne x 0 y 0". Den Wert x setzte auf basketX und Wert y auf 4.
 
<br/><spoiler text="Schritt 4 - Alle Blöcke">[[Datei:03_block_04.PNG|border]]
 
<pre id="4d">
 
basic.forever(function () {
 
    led.unplot(eggX, eggY)
 
    led.unplot(basketX, 4)
 
    eggY = eggY + 1
 
    led.plot(eggX, eggY)
 
    accX = input.acceleration(Dimension.X)
 
    basketX = 2 + Math.min(2, Math.max(-2, Math.idiv(accX, 200)))
 
    led.plot(basketX, 4)
 
})
 
</pre>
 
</spoiler></li>
 
  
<li>Zu guter Letzt soll überprüft werden, ob das Ei durch die letzte Zeile unten durchfallen würde (wenn eggY > 4) und ein neues Ei wieder von oben erscheinen soll (ändere eggY auf -1). Allerdings soll hier die Position nicht mittig (2) starten, sondern per Zufall weiter links oder rechts – sonst wäre das Spiel ja zu einfach (ändere eggX auf pick random 0 to 4). <br/>
+
<li>Nun müssen nur noch die Einstellungen von '''Temperatur''' auf '''Luftfeuchtigkeigt''' ''engl. hunmidity'' geändert werden. Klicke dazu in '''zeige Text "T"''' und ändere dies auf '''zeige Text "H"'''. Ändere danach '''zeige Text Read temperature''' auf '''zeige Text Read humidity'''. <spoiler text="Schritt 12 - Blöcke">[[Datei:Dht11-22_knopfB.png|300px]]</spoiler></li>
Beginne mit einem dunkelgrünen Logik-Block "wenn wahr dann" und setzte die Logik "0 = 0" in den Bereich von wahr. In die linke 0 kommt eggY in die rechte "4" und das "=" wird in ein ">" umgewandelt.<br/>
 
Danach füge zwei Mal den Block "ändere Platzhalter auf 0" ein.
 
Beim ersten Block wird eggY auf "-1" geändert und beim zweiten eggX auf "wähle eine zufällige Zahle zwischen 0 und 4". Dies findest du unter dem Bereich Mathematik.<br/>
 
Da das Ei nun wie eine Rakete von oben herunter saust und wir keine Zeit bekommen den Korb zu verschieben wird als allerletzter Block eine Pause "pausiere (ms) 300" unterhalb der dunkelgrünen Klammer wenn wahr dann eingefügt. Somit bleibt uns genügend Zeit zu reagieren. <spoiler text="Schritt 5 - Blöcke">[[Datei:03_block_05.PNG|border]]
 
<pre id="5">
 
basic.forever(function () {
 
    led.unplot(eggX, eggY)
 
    led.unplot(basketX, 4)
 
    eggY = eggY + 1
 
    led.plot(eggX, eggY)
 
    accX = input.acceleration(Dimension.X)
 
    basketX = 2 + Math.min(2, Math.max(-2, 0))
 
    led.plot(basketX, 4)
 
    if (eggY > 4) {
 
        eggY = -1
 
        eggX = randint(0, 4)
 
    }
 
    basic.pause(300)
 
})
 
</pre>
 
</spoiler></li>
 
  
Großartig, du hast es geschafft. Gratuliere!
+
Voila, du hast es geschafft. Gratuliere!
 
</ol>
 
</ol>
 
==Flussdiagramm==
 
[[Datei:Mbit_fangdasei.png]]
 
  
 
==Lösung==
 
==Lösung==
Eine vollständige Lösung kannst du hier vergleichen. <spoiler text="Lösung">[[Datei:03_fangdasei_all.png|border|Lösung]]
+
Eine vollständige Lösung kannst du hier vergleichen. <spoiler text="Lösung">
<pre id="6">
+
[[Datei:Dht11-22-komplett.png|400px]]
let accX = 0
 
let basketX = 2
 
let eggX = 2
 
let eggY = 0
 
led.plot(eggX, eggY)
 
led.plot(basketX, 4)
 
basic.forever(function () {
 
    led.unplot(eggX, eggY)
 
    led.unplot(basketX, 4)
 
    eggY = eggY + 1
 
    led.plot(eggX, eggY)
 
    accX = input.acceleration(Dimension.X)
 
    basketX = 2 + Math.min(2, Math.max(-2, 0))
 
    led.plot(basketX, 4)
 
    if (eggY > 4) {
 
        eggY = -1
 
        eggX = randint(0, 4)
 
    }
 
    basic.pause(300)
 
})
 
</pre>
 
 
</spoiler>
 
</spoiler>
  
[[Fang_das_Ei|Zurück zur Aufgabe]]
+
[[Wetterstation|zurück zur Aufgabe]]
 +
 
 
<htmlet>makecode_embed</htmlet>
 
<htmlet>makecode_embed</htmlet>

Aktuelle Version vom 11. März 2022, 19:52 Uhr

Schritt für Schritt

Öffne den micro:bit Block-Editor, um ein Programm für den BBC micro:bit zu schreiben: https://makecode.microbit.org/

Grundgerüst der Lösung

  1. Durch Ansteuern des digitalen Sensors mit der Makecode Erweiterung DHT11/22 über einen Daten-Pin übergibt dieser die aktuellen Messwerte an den micro:bit.
  2. Wir lesen danach entweder die Temperatur oder die Luftfeuchtigkeit, und geben diese Werte jeweils auf Knopfdruck aus.
  3. Wenn der Knopf A gedrückt wird soll die Temperatur erscheinen. Und bei Drücken von Knopf B soll die Luftfeuchtigkeit angezeigt werden.
  4. Lösungsschritte

    1. Klappe die schwarz gefärbte Kategorie Fortgeschritten auf und klicke dort auf Erweiterungen. Tippe in der erscheinenden Suchmaske dht22 und EINGABE ein. Nun fügst du durch Klicken auf das Bild DHT11_DHT22 die Erweiterung für den hier verwendeten Sensor hinzu. Vorbereitung - Erweiterung
    2. Wähle unter dem blau gefärbten Begriff Grundlagen den Block zeige LEDs und ziehe diesen nach rechts in den Arbeitsbereich direkt in den Block beim Start. Schritt 1 - Blöcke
    3. Ändere nun im Block zeige LEDs z.B. das mittlere LED der Anzeige und setz hier einen Punkt. So signalisiert uns der micro:bit, dass er zum Messen bereit ist nachdem das Programm gestartet wurde. Schritt 2 - Blöcke
    4. Wähle unter dem rosa gefärbten Begriff Eingabe den Block wenn Knopf A gedrückt und ziehe ihn nach rechts in den Arbeitsbereich. Wir wollen den digitalen Wert der Temperatur bei Druck auf den Knopf A auslesen und anzeigen. Schritt 3 - Blöcke
    5. Wähle nun den neu hinzugekommen orangen Begriff DHT11/DHT22 für die Erweiterung von Makecode zur Verwendung des externen Sensors. Ziehe den dort einzig vorhandenen großen Block Query DHT11 nach rechts direkt in den Block wenn Knopf A gedrückt. Schritt 4 - Blöcke
    6. Ändere den neuen orangen Block Query DHT11 auf DHT22, falls du diese Sensortype, wie hier im Beispiel angegeben, benutzt. Setzte im selben Block Data pin P0 auf den PIN P0 und alle drei weiteren Einstellungen auf wahr. Schritt 5 - Blöcke
    7. Wähle unter dem blau gefärbten Begriff Grundlagen den Block zeige Text " " und füge diesen Block in die Klammer wenn Knopf A gedrückt als letzte Zeile unter den großen Block Query DHT22 hinzu. Ändere den leeren Platz (" ") gleich, sodass zeige Text "T" zur Anzeige der Temperatur erscheint. Schritt 6 - Blöcke
    8. Wähle unter dem blau gefärbten Begriff Grundlagen den Block pausiere (ms) 100 und füge diesen Block in die Klammer wenn Knopf A gedrückt als letzte Zeile hinzu. Ändere den Wert 100 auf 1000 ms zur Verbesserung der Anzeige. Schritt 7 - Blöcke
    9. Wähle unter dem blau gefärbten Begriff Grundlagen den Block zeige Text "" und füge diesen Block in die Klammer wenn Knopf A gedrückt als letzte Zeile hinzu. Schritt 8 - Blöcke
    10. Wähle unter dem neu hinzugekommen orangen Begriff DHT11/DHT22 den Block Read humidity und ziehe ihn gleich in der leeren Bereich von zeige Text " " aus vorigem Schritt hinein. Ändere Read humidity sogleich in Read temperature, da wir ja bei Knopf A die Temperatur anzeigen wollen. Schritt 9 - Blöcke
    11. Du bist schon beinahe fertig, dein Messinstrument für die Temperatur ist einsatzbereit.

    12. Zur Komplettierung der Aufgabe ist nun Kopieren erlaubt ;-). Kopiere den gesamten Code des Blocks wenn Knopf A gedrückt durch Drücken der rechten Maustaste und der Auswahl Duplizieren. Der kopierte Code wird nun schraffiert dargestellt. Keine Sorge, das reparieren wir gleich wieder.
    13. Wähle im schraffierten Bereich der Kopie wenn Knopf A gedrückt das kleine, nach unten zeigende Pfeilzeichen A und ändere dies auf B damit dein Code nicht schraffiert angezeigt wird und wieder gültig wird.
    14. Nun müssen nur noch die Einstellungen von Temperatur auf Luftfeuchtigkeigt engl. hunmidity geändert werden. Klicke dazu in zeige Text "T" und ändere dies auf zeige Text "H". Ändere danach zeige Text Read temperature auf zeige Text Read humidity. Schritt 12 - Blöcke
    15. Voila, du hast es geschafft. Gratuliere!

    Lösung

    Eine vollständige Lösung kannst du hier vergleichen. Lösung


    zurück zur Aufgabe