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
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.