[Casio fx-50F] Zahlenraten

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

    Code
    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

    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! 8)

    : RPN ."Register-Postfix-Notation" ;

  • Da die Zahl <2^10 müsste man doch max. 10 Versuche brauchen? Oder liege ich da falsch?

    ... aus der Matrix :arrow: Peter

  • Da könnte man dann ein zweites Programm zum Raten schreiben, um möglichst effektiv zu „raten“ 😉

    Mein Schwerpunkt sind Taschenrechner und Pockets. Aktuell suche ich zB. nach: Casio FX-5500, Privileg PR55NC, Commodore N-60, NSC 4640, Casio pro fx-1, HP-10C, HP-16C, HP-34C, HP-27, HP-38C,, HP-55, HP-70, HP-71, HP-75, HP-80 :fp:... gern im Tausch gegen "Kollegen" oder andere Oldies (HCs, Laptops, ...)

    Abzugeben wären: Thomson TO7, CPC 6128, Schneider PC 1512/1640, div.TR (HP, TI, ...), Pockets (Sharp, Casio, ...) und Zubehör

  • Da die Zahl <2^10 müsste man doch max. 10 Versuche brauchen? Oder liege ich da falsch?

    Genau!


    Das Ding schrieb ich heute während einer verlängerten Pause bei (meist) voller Mittagssonne. Gegen Ende beim Austesten kochte wohl schon die Birne...


    Übrigens: Das Programm müsste ohne Änderungen auch auf folgenden Modellen von Casio laufen:


    fx-180P

    fx-200P

    fx-3400P

    fx-3500P

    fx-3600P

    fx-3800P

    : RPN ."Register-Postfix-Notation" ;