CleverRaten Lösung: Unterschied zwischen den Versionen

Aus microbit - Das Schulbuch
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 18: Zeile 18:
; Warum ist es sinnvoll eine [[Funktionen|Funktion]] zu verwenden?
; Warum ist es sinnvoll eine [[Funktionen|Funktion]] zu verwenden?
: Beobachte, dass wir nun schon bei drei verschiedenen Ereignissen (beim Start, nach links neigen, nach rechts neigen) immer das gleiche machen müssen: einmal Raten im Bereich "von"-"bis".
: Beobachte, dass wir nun schon bei drei verschiedenen Ereignissen (beim Start, nach links neigen, nach rechts neigen) immer das gleiche machen müssen: einmal Raten im Bereich "von"-"bis".
: Nun könnte man einfach an allen drei Stellen jeweils den gleichen Programmcode hinschreiben. <spoiler>Zum Beispiel: zähle bei der Anzahl der Versuche eins dazu, berechne neue Ratezahl und gib sie aus.</spoiler>
: Nun könnte man einfach an allen drei Stellen jeweils den gleichen Programmcode hinschreiben. <spoiler>Zum Beispiel: zähle bei der Anzahl der Versuche eins dazu, berechne die neue Ratezahl und gib sie aus.</spoiler>
: Eleganter ist es, statt dessen eine Funktion zu definieren, die an diesen drei Stellen aufgerufen wird.
: Eleganter ist es, statt dessen eine Funktion zu definieren, die an diesen drei Stellen aufgerufen wird.
: Das hat die Vorteile, dass das Programm kürzer und übersichtlicher wird, man weniger schreiben muss und dass, wenn man einen Fehler sucht oder etwas ändern möchte, dies nur an einer und nicht an drei Stellen machen muss.
: Das hat die Vorteile, dass das Programm kürzer und übersichtlicher wird, man weniger schreiben muss und dass, wenn man einen Fehler sucht oder etwas ändern möchte, dies nur an einer und nicht an drei Stellen machen muss.
Zeile 42: Zeile 42:
: Das kann zum Beispiel so aussehen: <spoiler text="Lösung">[[Datei:CleverRaten - Nach Rechts.png|border|350px|Was passieren könnte, wenn nach rechts geneigt wird]]</spoiler>
: Das kann zum Beispiel so aussehen: <spoiler text="Lösung">[[Datei:CleverRaten - Nach Rechts.png|border|350px|Was passieren könnte, wenn nach rechts geneigt wird]]</spoiler>
; Wenn die Tasten A und B gleichzeitig gedrückt werden, soll die Anzahl der Versuche ausgegeben werden.
; Wenn die Tasten A und B gleichzeitig gedrückt werden, soll die Anzahl der Versuche ausgegeben werden.
: Der Programmteil könnte inklusive Abschlusstext zum Beispiel so aussehen: <spoiler text="Lösung">[[Datei:CleverRaten - AB gedrückt.png|border|500px|Was passieren könnte, wenn die Tasten A und B gleichzeitig gedrückt werden]]</spoiler>
: Der Programmteil könnte inklusive Abschlusstext zum Beispiel so aussehen: <spoiler text="Lösung">[[Datei:CleverRaten - AB gedrueckt.png|border|500px|Was passieren könnte, wenn die Tasten A und B gleichzeitig gedrückt werden]]</spoiler>
; Was muss die zentrale Funktion alles machen, die die neue Zahl innerhalb des aktuellen Bereichs berechnet?
; Was muss die zentrale Funktion alles machen, die die neue Zahl innerhalb des aktuellen Bereichs berechnet?
: Wir raten einmal, das heißt, die Anzahl der Versuche muss um eins erhöht werden.
: Wir raten einmal, das heißt, die Anzahl der Versuche muss um eins erhöht werden.

Aktuelle Version vom 20. Juli 2018, 11:43 Uhr

Tipps und Tricks

Beim Starten des Programms, was müssen wir alles festlegen?
Wir müssen alle Variablen auf einen passenden Startwert setzen. <spoiler>In unserer Beispielslösung haben wir drei Variablen: die Variable "von" (Start des aktuellen Ratebereichs) wird auf 1 gesetzt, die Variable "bis" (Ende des aktuellen Ratebereichs) wird auf 100 gesetzt und die "Anzahl Versuche" wird auf 0 gesetzt.</spoiler>
Außerdem könnten wir einen Begrüßungstext oder ein Symbol ausgeben, damit man weiß, dass das Programm läuft. Überlege dir, wie dein eigener Startbildschirm aussehen soll!
Außderdem können wir sofort unseren ersten Rateversuch starten!
Was soll passieren, wenn der micro:bit nach links geneigt wird?
Zur Erinnerung: die gesuchte Zahl ist damit kleiner als die zuletzt geratene.
Wir wissen auch, dass es nicht die geratene Zahl sein kann.
Somit können wir unseren Ratebereich neu eingrenzen. <spoiler>Der Startwert des Ratebereichs kann der gleiche bleiben, der Endwert ist um eins kleiner als die zuletzt geratene Zahl</spoiler>
Und wir starten unseren nächsten Rateversuch!
Was soll passieren, wenn der micro:bit nach rechts geneigt wird?
Eigentlich fast das gleiche wie beim nach links Neigen.
Was wissen wir (rechts bedeutet, die gesuchte Zahl ist größer als die zuletzt geratene)? <spoiler>Diesmal bleibt der bisherige Endwert des Ratebereichs der gleiche und der Startwert wird neu, auf einer Wert um eins mehr als die zuletzt geratene Zahl, gesetzt.</spoiler>
Und wir starten unseren nächsten Rateversuch!
Warum ist es sinnvoll eine Funktion zu verwenden?
Beobachte, dass wir nun schon bei drei verschiedenen Ereignissen (beim Start, nach links neigen, nach rechts neigen) immer das gleiche machen müssen: einmal Raten im Bereich "von"-"bis".
Nun könnte man einfach an allen drei Stellen jeweils den gleichen Programmcode hinschreiben. <spoiler>Zum Beispiel: zähle bei der Anzahl der Versuche eins dazu, berechne die neue Ratezahl und gib sie aus.</spoiler>
Eleganter ist es, statt dessen eine Funktion zu definieren, die an diesen drei Stellen aufgerufen wird.
Das hat die Vorteile, dass das Programm kürzer und übersichtlicher wird, man weniger schreiben muss und dass, wenn man einen Fehler sucht oder etwas ändern möchte, dies nur an einer und nicht an drei Stellen machen muss.
Was muss man bei jedem Rateversuch alles machen? Was könnte in so einer Funktion stehen?
Die Anzahl der Versuche um eins erhöhen.
Die Zahl innerhalb des Bereiches "von"-"bis" berechnen, die wir als nächsten Rateversuch ausgeben wollen. <spoiler>Verwenden wir doch einfach den arithmetischen Mittelwert des Ratebereichs: zahl = (von + bis) / 2</spoiler>
Die Zahl ausgeben. Fertig.
Was machen wir, wenn die Tasten A und B gleichzeitig gedrückt werden?
Wir verkünden, dass wir die Zahl erraten haben und wie viele Versuche notwendig waren.

Komplettlösungen

Beim Starten des Programms, was müssen wir alles festlegen?
Eine mögliche Lösung für den Start? <spoiler text="Lösung">Was passieren könnte, wenn das Programm startet</spoiler>
Wenn der micro:bit nach links geneigt wird?
Es wird der "linke Teil" des bisherigen Ratebereichs als neuer Ratebereich verwendet.
Die Funktion "rateZahl" wird aufgerufen.
Das kann zum Beispiel so aussehen: <spoiler text="Lösung">Was passieren könnte, wenn nach links geneigt wird</spoiler>
Wenn der micro:bit nach rechts geneigt wird?
Es wird der "rechte Teil" des bisherigen Ratebereichs als neuer Ratebereich verwendet.
Die Funktion "rateZahl" wird aufgerufen.
Das kann zum Beispiel so aussehen: <spoiler text="Lösung">Was passieren könnte, wenn nach rechts geneigt wird</spoiler>
Wenn die Tasten A und B gleichzeitig gedrückt werden, soll die Anzahl der Versuche ausgegeben werden.
Der Programmteil könnte inklusive Abschlusstext zum Beispiel so aussehen: <spoiler text="Lösung">Was passieren könnte, wenn die Tasten A und B gleichzeitig gedrückt werden</spoiler>
Was muss die zentrale Funktion alles machen, die die neue Zahl innerhalb des aktuellen Bereichs berechnet?
Wir raten einmal, das heißt, die Anzahl der Versuche muss um eins erhöht werden.
Die neue Zahl wird aus den aktuellen Bereichsgrenzen berechnet.
Die berechnete Zahl wird ausgegeben.
Der Programmteil könnte nun zum Beispiel so aussehen: <spoiler text="Lösung">Die Funktion zur Berechnung und Ausgabe der Zahl</spoiler>