Lazarus/Spielen mit dem Zufall: Unterschied zwischen den Versionen

Aus ZUM-Unterrichten
main>Peterdauscher
main>Peterdauscher
Zeile 35: Zeile 35:
# Kartenlegerin Esmeralda steigt endlich auf moderne Technik um. Sie verwendet seit jeher Skat-Karten. Dort gibt es die “Farben” Kreuz, Pique, Herz und Karo. Außerdem gibt es die Zahlen bzw. Figuren 7, 8, 9, 10, Bube, Dame, König, Ass. <br />Insgesamt gibt es also 4 · 8 = 32 Karten. Schreiben Sie für Esmeralda ein Programm, das eine zuf¨allige Karte erzeugt (also zum Beispiel “Pique 10”). <br />Hinweis: Man kann es sehr umständlich machen und eine Zufallszahl zwischen 1 und 32 ziehen und entsprechend eine bestimmte Karte zuordnen. Es geht aber auch deutlich eleganter.
# Kartenlegerin Esmeralda steigt endlich auf moderne Technik um. Sie verwendet seit jeher Skat-Karten. Dort gibt es die “Farben” Kreuz, Pique, Herz und Karo. Außerdem gibt es die Zahlen bzw. Figuren 7, 8, 9, 10, Bube, Dame, König, Ass. <br />Insgesamt gibt es also 4 · 8 = 32 Karten. Schreiben Sie für Esmeralda ein Programm, das eine zuf¨allige Karte erzeugt (also zum Beispiel “Pique 10”). <br />Hinweis: Man kann es sehr umständlich machen und eine Zufallszahl zwischen 1 und 32 ziehen und entsprechend eine bestimmte Karte zuordnen. Es geht aber auch deutlich eleganter.
{{Lazarus-Buch}}
{{Lazarus-Buch}}
== Projekt ==
Mit den bisher erworbenen Fähigkeiten kann man nun auch ein richtiges Programmierprojekt starten: <br>In der Grundschule lernen die meisten Kinder das Rechnen in den Grundrechenarten "Plus", "Minus", "Mal" und "Geteilt". Ein Computerprogramm soll die Grundschulkinder beim Üben "im Zahlenraum von 0 bis 20" unterstützen. Es soll auf Knopfdruck Aufgaben mit Zufallszahlen erstellen. Die Kinder können dann eine Lösung eingeben und auf Richtigkeit überprüfen lassen. <br>
Es bietet sich an, schrittweise vorzugehen und ein zunächst ganz einfaches Programm immer mehr verfeinern bzw. erweitern.
* Man kann mit einer einzigen und einfachen Rechenart (z.B. "Plus") anfangen.
* Man sollte dann überlegen, wie man garantiert, dass Summanden und Ergebnis alle im Zahlenraum von 0..20 liegen.
* Dann kann man andere Rechenarten hinzunehmen. Aber Vorsicht: Gerade Subtraktion und Division führen zum Teil auf Zahlen, die unsere Grundschüler noch gar nicht kennen.
* Nun kann man versuchen, den Trainer spannender und schöner zu machen.
** Man könnte wie bei einem Computerspiel ein Punktekonto führen.
** Gerade Grundschüler mögen es graphisch und bunt. <tt>TImage-</tt>Komponenten können helfen, Programme ansprechend zu gestalten.
** Man könnte dafür sorgen, dass die Zeit zwischen Stellen der Aufgabe und der Eingabe der Antwort für die erreichten Punkte eine Rolle spielt, um die Grundschüler zum zügigen Rechnen zu motivieren. Aber Vorsicht: Richtigkeit sollte immer noch Vorrang vor Schnelligkeit haben. Zum Einführen eines Zeit-Aspekts lohnt sich ein Blick auf die Komponente <tt>TTimer</tt>.
** Methodisch ist es für ein Lernprogramm eine große Herausforderung, wenn es sich an die Leistungen der Schüler anpasst. Wie bei einem Computerspiel könnte man verschiedene "Level" konstruieren, die sich in der Anforderung an die Geschwindigkeit unterschieden, vielleicht auch im Zahlenraum.
* Viele andere Dinge lassen sich ebenfalls überlegen ...

Version vom 18. April 2014, 14:11 Uhr


Bisher haben wir Zahlenwerte immer entweder fest im Programm vorgegeben (etwa a:=42), vom Benutzer während der Eingabe erfragt (etwa mit a:=StrToInt(...)) oder aber irgendwie aus bereits bekannten Werten ausgerechnet (z.B. a:=sqrt(c)). Für viele Anwendungen – vor allem für die, die ein bisschen Spaß machen – wäre es jedoch nett, zufällige Zahlen zu haben. Das gilt z.B. für Glücksspiele genauso wie für Geschicklichkeitsspiele.

Für solche Fragen ist der Befehl random nützlich. Ohne Klammer hinter dem Befehl (also etwa x:=random;) “würfelt” der Befehl eine (reelle) Zufallszahl im Bereich zwischen 0 und 1. Damit ist es mit ein bisschen Mathematik nicht schwierig, auch natürliche Zufallszahlen in beliebigen Zahlenbereichen zu basteln. Allerdings nimmt Lazarus einem einen Teil dieser Arbeit ab, wenn man eine Zahl in Klammern hinter den Befehl schreibt (also etwa k:=random(bereich);). Der Computer würfelt dann eine ganzzahlige Zufallszahl zwischen 0 und bereich-1.


Vorlage:Kasten blau

Tatsächlich: Auf den ersten Blick kommt bei jedem Knopfdruck eine vollkommen zufällige Zahl heraus. Doch der Schein trügt: Wenn man sich die ersten 3 Zahlen nach dem ersten Knopfdruck notiert, dann das Programm neu startet und das Vorgehen noch ein paar mal wiederholt, wird man feststellen: Die Zahlenfolge ist nach dem Programm-Neustart immer die gleiche.

So großartig zufällig ist das nun wirklich nicht. Dem kann man jedoch abhelfen, wenn man gleich nach dem Programmstart den Befehl randomize; ausführen lässt. Der sorgt dafür, dass die Zufallszahlen tatsächlich bei jedem Programmlauf andere sind. Zusätzlich zum Click-Ereignis des Buttons bauen wir jetzt einfach noch ein Programmstück, was beim Erzeugen des Fensters ausgeführt wird.

Vorlage:Kasten blau

Anmerkung: Es schadet nichts, zu wissen, was dieses randomize eigentlich tut. Eigentlich kann ein klassischer Computer keine wirklich zufälligen Zahlen erzeugen sondern nur Pseudozufallszahlen. Diese berechnet man aus einer anfänglich gegebenen Zahl durch Gleichungen, die scheinbar ungeordnete, aber eben nicht wirklich zufällige Zahlen erzeugen. Da die Anfangszahl ohne die Verwendung von randomize immer die gleiche ist, ist auch die daraus berechnete Folge von Pseudozufallszahlen immer die gleiche. randomize ermittelt jetzt bei jedem Programmlauf eine andere Anfangszahl. Dafür benutzt der Befehl die Zeit der Computeruhr, die "Systemzeit". Die ist bei jedem Programmstart eine andere und sie hängt -- irgendwie dann doch zufällig -- davon ab, wann genau der Benutzer das Programm startet.

Aufgaben

  1. Schreibe ein Lazarus-Programm zum Würfeln, bei dem nach dem Drücken eines Knopfes in einem Edit-Feld eine Zahl zwischen 1 und 6 erscheint.
  2. In manchen Würfelspielen wird mit zwei Würfeln gewürfelt. Schreibe ein Programm, das bei jedem Wurf mit zwei (gedachten) Würfeln würfelt und die Zahlen ausgibt; außerdem die Augensumme. Weiterhin soll das Programm ausgeben, wenn es bei einem Wurf ein „Pasch“ gegeben hat (Augenzahl bei beiden Würfeln gleich).
  3. Schreibe ein (sehr vereinfachtes) Roulette-Rad, das zufällig eine Zahl zwischen 0 und 36 erzeugt. Für die Zahlen zwischen 1 und 36 soll die Maschine ausgeben, ob die Zahl gerade ist (PAIR) oder ungerade (IMPAIR). Wenn sie Null ist, soll die Maschine ZERO ausgeben.
  4. Schreibe einen wirklichen Roulette-Generator, der für die gewürfelte Zahl nicht nur die Geradzahligkeit bestimmt, sondern auch die Farbe der Zahl (ROUGE/NOIR) und die Hälfte, in der die Zahl liegt (PASSE/MANQUE).
  5. Kartenlegerin Esmeralda steigt endlich auf moderne Technik um. Sie verwendet seit jeher Skat-Karten. Dort gibt es die “Farben” Kreuz, Pique, Herz und Karo. Außerdem gibt es die Zahlen bzw. Figuren 7, 8, 9, 10, Bube, Dame, König, Ass.
    Insgesamt gibt es also 4 · 8 = 32 Karten. Schreiben Sie für Esmeralda ein Programm, das eine zuf¨allige Karte erzeugt (also zum Beispiel “Pique 10”).
    Hinweis: Man kann es sehr umständlich machen und eine Zufallszahl zwischen 1 und 32 ziehen und entsprechend eine bestimmte Karte zuordnen. Es geht aber auch deutlich eleganter.


Projekt

Mit den bisher erworbenen Fähigkeiten kann man nun auch ein richtiges Programmierprojekt starten:
In der Grundschule lernen die meisten Kinder das Rechnen in den Grundrechenarten "Plus", "Minus", "Mal" und "Geteilt". Ein Computerprogramm soll die Grundschulkinder beim Üben "im Zahlenraum von 0 bis 20" unterstützen. Es soll auf Knopfdruck Aufgaben mit Zufallszahlen erstellen. Die Kinder können dann eine Lösung eingeben und auf Richtigkeit überprüfen lassen.
Es bietet sich an, schrittweise vorzugehen und ein zunächst ganz einfaches Programm immer mehr verfeinern bzw. erweitern.

  • Man kann mit einer einzigen und einfachen Rechenart (z.B. "Plus") anfangen.
  • Man sollte dann überlegen, wie man garantiert, dass Summanden und Ergebnis alle im Zahlenraum von 0..20 liegen.
  • Dann kann man andere Rechenarten hinzunehmen. Aber Vorsicht: Gerade Subtraktion und Division führen zum Teil auf Zahlen, die unsere Grundschüler noch gar nicht kennen.
  • Nun kann man versuchen, den Trainer spannender und schöner zu machen.
    • Man könnte wie bei einem Computerspiel ein Punktekonto führen.
    • Gerade Grundschüler mögen es graphisch und bunt. TImage-Komponenten können helfen, Programme ansprechend zu gestalten.
    • Man könnte dafür sorgen, dass die Zeit zwischen Stellen der Aufgabe und der Eingabe der Antwort für die erreichten Punkte eine Rolle spielt, um die Grundschüler zum zügigen Rechnen zu motivieren. Aber Vorsicht: Richtigkeit sollte immer noch Vorrang vor Schnelligkeit haben. Zum Einführen eines Zeit-Aspekts lohnt sich ein Blick auf die Komponente TTimer.
    • Methodisch ist es für ein Lernprogramm eine große Herausforderung, wenn es sich an die Leistungen der Schüler anpasst. Wie bei einem Computerspiel könnte man verschiedene "Level" konstruieren, die sich in der Anforderung an die Geschwindigkeit unterschieden, vielleicht auch im Zahlenraum.
  • Viele andere Dinge lassen sich ebenfalls überlegen ...