Zahlenraten mit dem programmierbaren Solarrechner Casio fx-50F
Chip's Hi-Lo Zahlenratespiel für den TI-66 wartet u.a. mit einem cleveren Ausgabeformat des Spielergebnisses auf - unbedingt nachahmenswert!
Wahrscheinlich ist das Zahlenratespiel schon für so ziemlich jeden programmierbaren TR realisiert worden. Also keine echte Herausforderung, es sei denn man hat kaum Programmspeicher oder das Programmiermodell kennt nur Sprünge an den Programmanfang. Wie etwa beim Casio fx-50F, für den ich Chip's Ausgabeformat, soweit umsetzbar, schamlos abgekupfert habe.
Spielregel
Es gilt, eine Zielzahl zwischen 0 und 999 zu erraten. Ist der Tipp zu groß, gibt der Rechner die Anzeige "1" aus, ist er zu niedrig wird "-1" angezeigt. Darauf gibt man den nächsten Tipp ein. Errät man die Zielzahl, lautet die Ausgabe "Anzahl_der_Versuche.Zielzahl".
Zum Casio fx-50F
Wie andere (halb-)programmierbare Modelle von Casio aus den 80ern (z.B. fx-180P, fx-3600P) erlaubt das solarbetriebene Modell fx-50F nur Sprünge an den Programmanfang. Keine Unterprogramme, kein Programmeditor, etc. Komplizierte Algorithmen lassen sich natürlich nicht realisieren, zumal nicht einmal 3 Dutzend Programmschritte zur Verfügung stehen. Die darf man immerhin auf zwei Programmbereiche verteilen. Die Eckpunkte:
- 29 Programmschritte (in 2 Programmbereichen P1 und P2)
- 6 Register K1 bis K6 mit Registerarithmetik
- Ein/Ausgabe mit HLT, ENT oder Shift ALPHA A bis F (zugeordnet K1 bis K6)
- Unbedingter Sprung zum Programmanfang mit RTN
- Bedingter Sprung zum Programmanfang mit x>0 oder x<=M
Programmtechnisches
Um Variablen zu initialisieren, bringt man die entsprechenden Anweisungen im zweiten Programmbereich P2 unter - damals ein beliebter Trick. Vor dem Start des Hauptprogramms ruft man also mit Shift P2 zuerst die Initialisierung auf. Darin wird u.a. die zu ratende Zahl bestimmt. Danach gibt man den Tipp ein, gefolgt von P1.
Es werden die Register K1 bis K4 belegt:
K1: Anzahl_der_Versuche + Zielzahl
K2: Zielzahl (per eingebautem Pseudozufallszahlengenerator)
K3: per P1 einzugebende Tippzahl
K4: Parameter p2, Anzeigewert
Wann immer möglich, wird Registerarithmetik verwendet (z.B. Kin- 3 statt -, Kout 3, =, Kin 3). Das spart einige Programmschritte ein.
Da nur Sprünge zum Programmanfang möglich sind, wird in P1 nicht in drei getrennten Programmteilen (1. Tipp zu hoch. 2. Tipp zu niedrig, 3. Tipp richtig) gearbeitet, sondern nur in einem einzigen, der die drei Fälle gemeinsam in den Zeilen 1 bis 25 behandelt. Die Unterscheidung der drei Fälle geschieht über den Parameter p1, der den Wert -1, 1 oder 0 annimmt. Diesen Parameter berechnen wir als Betrag der Differenz zwischen Tippzahl und Zielzahl:
p1 = (K3 - K2) / |(K3 - K2 + h)| = -1, 1 oder 0.
Darin ist h das im Casio fx-50F als Konstante gespeicherte Plancksche Wirkungsquantum (6,626E-34 Js). Keine Sorge, hier folgt kein Ausflug in die Quantenmechanik. Der kleine Wert von h soll lediglich eine Division durch Null verhindern, falls die Differenz K3-K2 Null wird (Tippzahl=Zielzahl).
Da eine Betragsfunktion ABS fehlt, wird stattdessen quadriert und danach die Quadratwurzel gerechnet (Zeilen 15 und 16).
Mit dem Parameter p1 wird der Anzeigenwert gesteuert. Er zeigt "-1" an, wenn die Tippzahl zu niedrig ist und "1", fall zu hoch. Im Trefferfall steuert p1 nichts zum Anzeigewert bei, dafür aber ein weiterer Parameter p2, der in den Zeilen 7 und 19 bis 20 bestimmt wird:
p2 = 1 - |p1| = 0 oder 1.
Der Anzeigewert wird in den Zeilen 21 bis 25 zusammengesetzt. Über p2 wird dabei die formatierte Anzeige "Anzahl_der_Versuche.Zielzahl" ausgeblendet (p2= 0) bzw. eingeblendet (p2= 1).
Programmcode
Mode EXP, Shift PCL, Shift P2 (nach Programmeingabe, Löschen des Speichers, Wahl Bereich P2)
Shift RAN# #3stellige Zufallszahl 0 <= RAN# < 1
Shift Kin 1 #Anzahl Versuche + Zielzahl
Shift Kin 2 #Zielzahl
AC #Zielzahl verstecken
Mode . (Zurück in Rechenmodus)
4 Programmschritte für P1
Mode EXP, P1
Shift Kin 3 #Tippzahl
3
Shift 10^x
Shift Kin/ 3 #Tippzahl im Format "0.nnn"
1
Shift Kin+ 1 #Zähler erhöhen: "Anzahl.Zielzahl"
Shift Kin 4 #Parameter p1= 1
Kout 2
Shift Kin- 3
Kout 3
/
Shift h(Js) #6,626E-34 Js (Plancksches Wirkungsquantum)
Shift Kin+ 3 #verhindert Division durch Null
Kout 3
x^2
RDX
= #p1= -1, 1 oder 0
Shift Kin 3 #Ganzzahlteil des Ergebnisses
x^2 #1 oder 0
Shift Kin- 4 #p2= 0 oder 1
Kout 1 #"Anzahl.Zielzahl"
Shift Kin* 4 #Anzahl ausgeblendet oder angezeig
Kout 3
Shift Kin+ 4
Kout 4 #"-1", "1" oder "Anzahl.Zielzahl"
Alles anzeigen
Mode . (Zurück in Rechenmodus)
29 Programmschritte für P2
Programmstart
Shift P2
Eingabe 1. Tippzahl
P1
Eingabe 2. Tippzahl
P1
...
Endanzeige: Zielzahl 237 nach glorreichen 15 (Fehl-)Versuchen.
Ausprobieren! Besser machen!