Das HP-28C Beispielpaket

Der programmierbare Taschenrechner HP-28C erschien 1987 und damals hieß es, dass man niemals wieder einen anderen, programmierbaren Taschenrechner brauchen würde. Ich habe mir dieses Modell zu meinen Studienzeiten gekauft und verwende es tatsächlich seitdem bis auf den heutigen Tag.

Im Laufe der Jahre sind dabei so einige Programme für das Gerät entstanden. Leider hat sich 1987 noch niemand um ein Backup oder externe Schnittstellen gekümmert. Es gab noch keine USB-Anschlüsse und die seriellen Schnittstellen waren einfach zu groß, um sie in die flachen Taschenrechner zu integrieren. So alle drei bis vier Jahre sind die Batterien des HP-28C erschöpft und er meldet eines Tages beim Einschalten "memory lost". Alle Benutzerprogramme sind damit auch gelöscht und müssen nach dem Batteriewechsel wieder neu eingegeben werden.

Ich habe mich deshalb entschlossen, diese Seite als Backup zu benutzen und einige wenige Programme aus meinem HP-28C hier als "HP-28C Beispielpaket" unter der Creative Commons Lizenz zu veröffentlichen.

Mehrwertsteuerberechnung

Das folgende Programm berechnet aus dem Nettowert in der Stack-Ebene #1 die Mehrwertsteuer zum Steuersatz von 19% sowie die Gesamtsumme.

« DUP DUP .19 * SWAP 1.19 * »

Das Programm dupliziert die Stack-Ebene #1 zunächst zweimal mit Hilfe des Befehls DUP. Danach wird der unterste Wert durch die Befehle .19 * mit 0,19 multipliziert. Der Befehl SWAP tauscht die erste mit der zweiten Stack-Ebene. Dadurch landet die berechnete Mehrwertsteuer auf der Stack-Ebene #2 und in Stack-Ebene #1 liegt wieder der duplizierte Ausgangswert, der anschließend mit den Befehlen 1.19 * die Endsumme berechnet.

Mit der Eingabe von 100 sieht das Ergebnis dann z.B. so aus:

3:                100.00
3:                 19.00
1:                119.00

Umrechnung in Dezimalminuten

Beim Geocaching kann es mitunter vorkommen, dass man eine Koordinate von Dezimalgrad in Grad und Dezimalminuten umrechnen muss. Das folgende Beispiel macht diese Berechnung mit dem Wert in Stack-Ebene #1 und gibt das Ergebnis formatiert auch dorthin zurück.

Die Anweisung → DG speichert den Wert aus Stack-Ebene #1 in eine Variable, die den Namen DG erhält. Danach wird ein eingebetteter Programmblock zwischen « und » definiert, der Zugriff auf die Variable hat. Die erste Anweisung DG ruft die Variable DG auf und schneidet mit IP (integer part) den ganzahligen Teil heraus. Das ganze wird mit →STR in einen String verwandelt. anschließend wird ein weiterer String mit dem Inhalt "° " in die unterste Stack-Ebene gebracht und mit + werden diese beiden Strings zusammengefasst. Hier wird die Intelligenz des HP-28C deutlich, der den Plus-Operator auch auf Strings anwenden kann.

Im nächsten Schritt wird die Variable DG erneut aufgerufen. Diesmal wird mit dem Befehl FP (fractional part) der Teil nach dem Komma ausgeschnitten und durch 60 * mit 60 multipliziert. Wir erhalten dadurch die Winkelminuten, die ebenfalls mit →STR in einen String gewandelt werden. Den Winkelminuten wird noch der String mit dem Inhalt "'" durch den Operator + als Kennzeichnung der Dezimalminuten angehangen. Das letzte + fügt die beiden Teilstrings zusammen und bildet damit das Ergebnis in der untersten Stack-Ebene.

«
   DG
  «
    DG IP →STR
    "° " +
    DG FP
    60 *
    →STR
    "'" + +
   »
 »

Mit der der Koordinate 50,02527 wird daraus:

1:         "50° 1.5162'"

Umrechnung in Dezimalgrad

Dieses Programm bildet die Umkehrfunktion zum vorhergehenden Beispiel. Zur Übersichtlichkeit habe ich dem Beispiel Zeilennummern beigefügt, sie sind allerdings kein Bestandteil der Syntax.

Die erste Anweisung → DM kennen wir schon. Hier wird der Wert aus Stackebene #1 in der Variablen DM gespeichert.

Die Anweisungen DM 1 in Zeile 4 bereiten einen späteren Schritt vor. Wir behalten Sie erstmal im Kopf. Danach werden in Zeile 5 mit DM "°" die Stackebenen #1 und #2 mit der Eingabe und dem String "°" belegt. Darauf wird anschließend die Funktion POS angewended. Sie sucht im String der Stackebene #2 nach dem Vorkommen des Strings in Stackebene #1 und liefert die gefundene Position in Stackebene #1 zurück. Wir suchen also nach dem Gradzeichen in der Eingabe. Wir ziehen anschließend mit 1 - von der Position eins ab und erhalten damit den Index des letzten Zeichens vor dem Gradzeichen. Unser Stack sieht zu dieser Zeit etwa so aus:

3:         "50° 1.5162'"
2:                     1
1:                     2

Durch die Vorbereitung in Zeile 4 können wir jetzt den Gradanteil durch die Funktion SUB herausschneiden. SUB ermittelt einen Teilstring und erwartet zwei Parameter. Die Positionen von Anfang und Ende des Teilstrings. Nach Ausführung der Funktion ist das Ergebnis der String "50". Wir wandeln diesem mit STR→ in eine Zahl und erhalten den numerischen Wert 50 in der ersten Stackebene.

Die Anweisung DM in Zeile 8 ist wieder eine Vorbereitung. Doch zunächst werden mit DM "°" POS 1 + und DM "'" POS 1 - die Anfangs- und Endposition für die Dezimalminuten ermittelt. Unser Stack sieht dann etwa so aus:

4:                    50
3:         "50° 1.5162'"
2:                     4
1:                    10

Jetzt können wir mit SUB den Teilstring, der die Dezimalminuten enthält, herausschneiden und ihn mit STR→ in eine Zahl wandeln. Die Umrechnung erfolgt dann mit 60 / und im letzten Schritt erfolgt die Addition der Teilergebnisse mit +.

 1 «
 2    DM
 3   «
 4     DM 1
 5     DM "°" POS 1 -
 6     SUB
 7     STR→
 8     DM
 9     DM "°" POS 1 +
10     DM "'" POS 1 -
11     SUB
12     STR→
13     60 / +
14   »
15 »

Aus der Eingabe "50° 1.5162''" erhält man dann wieder das Ergebnis:

1:              50.02527

Creative Commons Lizenzvertrag
Die Software-Beispiele dieser Seite stehen sofern nicht anders angegeben unter einer Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz .

Falls Ihnen dieser Artikel gefällt, können Sie ihn auch mit Ihren Kontakten teilen. Wir haben uns dazu zur datenschutzfreundlichen Version, dem 2-Klick Empfehlungsbutton von Heise entschieden.

Weitere Informationen zum Hintergrund und dem verwendeten Verfahren erhalten Sie über den Artikel 2 Klicks für mehr Datenschutz.