Typtransfer-Funktionen
Beim Aufbau von Ein- oder Ausgaberoutinen steht man vor dem Problem,
beliebige druckbare Zeichen anhand ihrer Position in der
ASCII-Tabelle auszuwählen,
oder auch umgekehrt zu einem vorgelegten Zeichen seine Position
in der Tabelle zu bestimmen; dieses Problem tritt bereits
bei den Ziffern auf!
Dafür bietet Modula zwei Umwandlungsfunktionen
standardmäßig an:
- CHR(n) ist das Zeichen (vom Typ CHAR),
das an der Stelle n in der Tabelle steht;
- ORD(c) ist die Platznummer (vom Typ CARDINAL) des Zeichens c.
(ORD gibt es auch für andere
"Aufzählungstypen",
die wir noch kennenlernen werden).
Ein gutes Beispiel für die Verwendung
dieser Transfer-Funktionen und auch die Anwendung der
Rekursion ist die Ausgabe von CARDINAL-Werten
zur Basis 16 (hexadezimal).
Auch für andere Datentypen
gibt es Umwandlungsfunktionen:
so ist in der Mathematik die Menge N eine Teilmenge von Z,
und Z ist Teilmenge sowohl von Q wie von R.
Für die entsprechenden Datentypen CARDINAL, INTEGER, REAL
in Modula gilt dies aber keineswegs, weil die interne Darstellung
der Werte verschieden ist.
- FLOAT(n) ergibt einen REAL-Wert, wenn n INTEGER oder CARDINAL ist,
- TRUNC(r) ergibt den ganzzahligen INTEGER-Anteil des REAL-Wertes r,
- INTEGER(n) wandelt n von CARDINAL nach INTEGER,
- CARDINAL(n) wandelt n von INTEGER nach CARDINAL.
Daß die beiden letzten Funktionen ebenso heißen wie die
Ergebnis-Datentypen, ist merkwürdig, aber praktisch, da leicht zu merken.
Natürlich muß sich das Ergebnis im neuen Datentyp intern
darstellen lassen, sonst kann beliebig Fürchterliches passieren.
Auch in anderen Programmiersprachen gibt es solche Umwandlungsfunktionen,
die allerdings meist etwas anders heißen und auch etwas anders
arbeiten; manchmal wird auch automatisch bei Bedarf umgewandelt.
Hier ist man von einer Standardisierung leider weit entfernt.
Auch die oben genannten Funktionen sind in Modula nicht wirklich genormt,
sondern implementierungsabhängig.
zurück |
Inhalt | Index |
vor |
Vorlesung
Klaus Lagally, 22. Februar 2000, 19:36