TI-57 Programm "NUMERI ROMANI"

  • TI-57 -- Programm "NUMERI ROMANI"

    Umwandlung von Römischer Zahlschrift nach Indischer Zahlschrift



    Römische Tastatur anno MCMLXXXI




    In der Vor-Homecomputerzeit war sie eine recht beliebte Fingerübung, die Umrechnung römischer Zahlen (lat. numeri romani) in das moderne Zahlensystem mit indischen Ziffern. Das allein wäre aber kein Grund "Numeri Romani" als erstes Beispiel eines Taschenrechnerprogramms im Forum vorzustellen. Ausschlagegebend waren vielmehr:

    1. Volle Ausschöpfung der Möglichkeiten des TI-57
    2. Einführung in einfaches AOS-Programmieren
    3. Keine technischen oder mathematischen Fachkenntnisse erforderlich
    4. Einfache Portierung auf andere Modelle


    Meist wird bei Taschenrechnerprogrammen auf ein Ablaufdiagramm verzichtet. Das ist auch hier kein Problem. Erklärungsbedarf dafür bei der Ein- und Ausgabe, denn mangels alphanumerischer Zeichen werden Zifferntasten verwendet, und zwar nach folgendem Schlüssel:


    Röm. Zahlzeichen
    Zahlwert Zifferntaste
    I 1 1
    V 5 2
    X 10 3
    L 50 4
    C 100 5
    D 500 6
    M 1 000 7
    V•M 5 000 8
    X•M 10 000 9




    Ursprünglich war nur eine Eingabe von Zahlzeichen bis M vorgesehen, da die römische Zahlschrift keine einheitliche Regelung für Werte oberhalb 3999 kennt. Die übliche Schreibweise mit Vinkulum läßt sich im gewählten numerischen Darstellungsschema nicht anwenden. Sie wäre auch algorithmisch komplizierter. Stattdessen bietet die simple Multiplikationsschreibweise an (Zahlzeichen V•M und X•M). So ist der Programmcode ohne Änderung auch oberhalb 3999 nutzbar. Streng nach Yhprums Gesetz: „Alles, was funktionieren kann, wird auch funktionieren.“ Eine andere Eigenart der römischen Zahlen läßt sich leider nicht so mühelos umgehen.


    Subtraktionsregel

    Die römische Zahlschrift beschreibt ein Additionssystem, d.h. Zahlzeichen werden unabhängig von ihrer Stellung addiert. Zwar stehen die Zeichen der Größe nach geordnet, doch auf ihren Zahlwert hat diese Anordnung zunächst keinen Einfluß. Man erkennt sofort, daß immer dann ein besonders langer römischer Zahlausdruck entsteht, wenn die darzustellende Zahl im modernen Stellenwertsystem die Ziffern 4 oder 9 enthält. So hätte Columbus in rein additiver Darstellung im Jahr MCCCCLXXXXII als erster Europäer die Karibik erreicht. Zwölf Zahlzeichen, wo dem Stellenwertsystem 4 Ziffern genügen: 1492. Da hilft es auch nicht, daß skandinavischen Siedlern unter Leif Eriksson schon um das Jahr M als ersten Europäern die Entdeckung Amerikas gelang.


    Eine Abkürzung tut not. Naheliegenderweise bedient man sich dazu in einem Additionssystem der Subtraktion:


    Steht eines der Zahlzeichen I, X oder C

    vor einem der beiden jeweils nächstgrößeren Zahlzeichen,

    so ist von diesem besagtes I, X oder C abzuziehen.



    Subtraktionsgruppe statt
    Zahlwert
    IV IIII 4
    IX VIIII 9
    XL XXXX 40
    XC LXXXX 90
    CD CCCC 400
    CM DCCCC 900



    Gebräuchlich ist außerdem, ein einzelnes I oder X auch vor noch höheren Zeichen zu schreiben. So wird z.B. 99 zu IC statt XCIX - viel kürzer und übersichtlicher.


    Zahlzeichen der sog. Fünferbündelung (V, L, D) setzt man ausschließlich vor kleineren Zahlzeichen, nie vor größeren. Ihr Wert wird also immer addiert, niemals subtrahiert.


    Aber damit genug der Theorie. Als weiterführende Lektüre kann ich empfehlen: "Universalgeschichte der Zahlen" von Georges Ifrah.



    Programmablauf


    Schritte 00 bis 12


    Nach Initialisierung wird die Anzahl der eingebenen Zahlzeichen ermittelt und die römische Zahl hinters Komma geschoben (Format "0.x").

    Beispiel: die zweistellige Eingabe 65 für DC, also die Zahl 600, liefert einen Zehnerlogarithmus log(65) = 1,81. Um 1 erhöht und zur Ganzzahl verkürzt ergibt das die gesuchte Anzahl der Stellen: 2



    Schritte 13 bis 44


    Hier ist eine Zählschleife aufgebaut, die für jedes Zahlzeichen genau einmal durchlaufen wird.

    Darin wird der Zahlwert w des Zeichens r bestimmt:


    w= [ 1/2 + r/2 - INT(r/2) ] * 10^ INT(r/2) = [ 1/2 + FRAC(r/2) ] * 10^ INT(r/2)


    mit 0 <= r <= 9 als Ziffernwert des eingebenen Zahlzeichens.


    In Register 1 werden die einzelnen Zahlwerte addiert (Schritt 41).


    Um ein paar Schritte einzusparen, wird der Zahlwert immer addiert, auch wenn er gemäß Subtraktionsregel eigentlich abzuziehen wäre. Zur Korrektur wird im nächsten Schleifendurchgang gegebenenfalls das alte Zahlzeichen zweimal subtrahiert, was platzsparend in den Schritten 35 bis 39 erfolgt.


    In den verbleibenden Schritten 48 und 49 könnten nun noch Anweisungen untergebracht werden, die den Rechner ohne Ausschalten, d.h. ohne Löschen des Programms, in einen akkuschonenden Schlafmodus versetzen. Im Batteriebetrieb ist das aber wenig sinnvoll.



    Bedienung des Programms


    Vor dem Start wird der Rechner in Ganzzahldarstellung gebracht:

    2nd INV Fix



    Eingabe


    Ganze römische Zahl, R/S


    In einem Zug läßt der TI-57 max. 8 Stellen zu, obwohl die interne Darstellung 11 Stellen umfasst. Durch Addition sind im X-Register aber Zahlen bis max. 11 Stellen darstellbar.



    Testbeispiel


    MCMXLI


    Diese Zahl können wir direkt eingeben:

    757341 R/S


    Nun huschen hektisch Zwischenergebnisse durch die Anzeige. Nach einer Viertelminute leuchtet in sattem Rot:


    1941.


    Das Entstehungsjahr der Zuse Z3, des ersten funktionsfähigen Digitalrechners.



    Weitere Beispiele



    CCCLXXXVIII


    Diese 11stellige Zahl wird indirekt eingegeben, erst acht Stellen, dann die restlichen drei:

    55543332 * 1 EE 3 + 111 = R/S


    Ergebnis: 388.


    Der Wert der kleinsten 11-stelligen römischen Zahl (siehe auch OEIS A036746)



    MDCLXXIII

    (Leibnizsche Vierspezies-Maschine)


    MCMLXXIV

    (HP-65, erster programmierbarer Taschenrechner)


    MCMLXXVII

    (Markteinführung Commodore PET 2001, Apple II, TRS-80, Atari 2600, TI-57)


    MMMMDCCXI

    (Dufte!)


    MV•MDCCXI

    (dito)


    X•MV•MMDCLXVI

    (einmal die ganze Klaviatur, OEIS A118640)


    IX•M

    Eingabe: 19 R/S

    (Wiederentdeckung des Y2K-Problems?)




    Programmcode


    Zur Eingabeprozedur siehe das Handbuch. Am besten frisch geladenen Akku oder neue Batterie verwenden.




    5 Register, 48 Programmschritte

    Autor: Postfix


    Danke für's Mitmachen!


    Freue mich schon auf Eure Programmbeispiele für den SR-56, TI-58, HP-65, HP-41C, Casio FX602P... :tüdeldü:

    : RPN ."Register-Postfix-Notation" ;

    2 Mal editiert, zuletzt von Postfix () aus folgendem Grund: Codetabelle angepasst

    • Offizieller Beitrag

    Cooles Programm


    Freue mich schon auf Eure Programmbeispiele für den ..., TI-58

    Da verweise ich mal hierhin: Fraktalprogramm fuer TI-59

  • Cooles Programm


    Freue mich schon auf Eure Programmbeispiele für den ..., TI-58

    Da verweise ich mal hierhin: Fraktalprogramm fuer TI-59

    Dein Fraktalprogramm spielt natürlich in einer gaaaaaanz anderen Liga! :anbet:


    Ich hoffe, daß hier in der Rubrik "Taschen- und Tischrechner" noch ein paar simplere Beipielprogramme zum besten gegeben werden. Kurzer Programmcode, den jeder nachvollziehen kann. Den kann man zwischendurch aus Spaß an der Sache eintippen.

    : RPN ."Register-Postfix-Notation" ;

    • Offizieller Beitrag

    So schlimm ist es auch nicht.

    Das schwierigste war den Algorithmus aus dem vorhandenen Basic-Programm zu verstehen. Ist eigentlich auch nicht so schwer, aber ich hatte mich vorher nie genau damit beschaeftigt.

    Empfehlung: Vorher Wikipedia o.ae. lesen, dann kann man das so programmieren.


    Die Printausgabe war wirklich etwas kompliziert mit den OP-Instruktionen.


    Den kann man zwischendurch aus Spaß an der Sache eintippen.

    Ich hab da noch ein paar Buecher. Aber ich denke die kennen die meisten.


    Viel Spass