Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ dc(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

bc(1)

dc(1)                                                                 dc(1)

NAME
     dc - Tischrechner (desk calculator)

SYNTAX
     dc [datei]

BESCHREIBUNG
     Mit dc können Sie im Dialog mit Reliant UNIX die Funktionen eines
     Tischrechners nutzen.

     datei
          Name der Datei, in der die Rechenoperationen stehen, die ausge-
          führt werden sollen. dc liest datei bis zu ihrem Ende, dann von
          der Standardeingabe.

          datei nicht angegeben:

          dc liest von der Standardeingabe

ARBEITSWEISE VON DC
     dc arbeitet nach dem Prinzip eines Stapelspeichers (stack). Ein Sta-
     pelspeicher ist ein linearer Speicher, auf den nur nach dem Prinzip
     LIFO (Last In First Out) zugegriffen werden kann. D. h., der zuletzt
     in den Stapelspeicher geladene Wert ist der oberste, nur er ist für
     Operationen zugänglich. Wenn tieferliegende Werte abgearbeitet werden
     sollen, müssen die darüberliegenden gelöscht oder in einem anderen
     Speicher zwischengespeichert werden. Dieser Speicher ist wieder ein
     Stapelspeicher oder ein Register. Ein Register ist ein Speicher in der
     CPU, auf den schnell zugegriffen werden kann. Der Speicher, mit dem dc
     arbeitet, wird im folgenden in der Regel nur mit "Stapel" bezeichnet.
     Nur dort, wo es erforderlich ist, diesen Arbeitsspeicher von anderen
     Speichern zu unterscheiden (wiederum Stapel oder Register), wird er
     als "Hauptstapel" bezeichnet.

     dc-Eingaben erfolgen in der umgekehrten polnischen Notation (Postfix-
     Notation). Wenn Sie z. B. 3 und 4 addieren möchten, geben Sie ein:

     3 4 +

     Standardmäßig arbeitet dc mit ganzen Dezimalzahlen. Sie können jedoch
     auch eine andere Basis für Ein- und Ausgaben festlegen (siehe SYNTAX
     VON DC-PROGRAMMEN, i bzw. o) und die Zahl der Nachkommastellen verän-
     dern (siehe SYNTAX VON DC-PROGRAMMEN, k).

     dc wird von bc aufgerufen [siehe bc(1)]. bc ist ein Präprozessor für
     dc, der die Eingabe der Operatoren und Operanden in der normalen
     arithmetischen Notation ermöglicht und eine C-ähnliche Syntax zur Rea-
     lisierung von Funktionen bietet. Außerdem können bc-Programme Anwei-
     sungen zur Ablaufsteuerung enthalten.






Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

dc(1)                                                                 dc(1)

SYNTAX VON DC-PROGRAMMEN
     c    Der gesamte Stapelinhalt wird gelöscht.

     d    Der oberste Wert im Stapel wird dupliziert (ein weiteres Mal in
          den Stapel geladen).

     f    Alle im Stapel enthaltenen Werte werden ausgegeben, bleiben
          jedoch im Stapel erhalten.

     i    Der oberste Wert im Stapel wird als Basis für weitere Eingaben
          verwendet; der Wert wird dabei aus dem Stapel entfernt.

          Der voreingestellte Wert für die Basis, in der Eingaben interpre-
          tiert werden, ist 10.

     I    Die aktuell geltende Basis für Eingaben wird in den Stapel gela-
          den.

     k    Der oberste Wert im Stapel wird aus dem Stapel entfernt und als
          Skalierungsfaktor benutzt. D. h., bei allen folgenden Ausgaben
          wird eine diesem Wert entsprechende Anzahl von Nachkommastellen
          ausgegeben, und diese Anzahl wird bei Multiplikationen, Division
          und Exponentiationen beibehalten.

     lx   Der Inhalt des Registers x wird in den Stapel geladen. Das Regi-
          ster x bleibt dabei unverändert. Alle Register enthalten am
          Anfang den Wert 0.

     Lx   Der oberste Wert wird vom Stapel x gelöscht und in den Haupt-
          Stapelspeicher übertragen.

     o    Der oberste Wert im Stapel wird als Basis für weitere Ausgaben
          verwendet; der Wert wird dabei aus dem Stapel gelöscht.

          Der voreingestellte Wert für die Basis, in der Zahlen ausgegeben
          werden, ist 10.

     O    Die aktuell geltende Basis für Ausgaben wird in den Stapel gela-
          den.

     p    Der oberste Wert im Stapel wird ausgegeben, jedoch nicht aus dem
          Stapel entfernt.

     P    Der oberste Wert im Stapel wird als ASCII-Zeichenkette interpre-
          tiert und ausgegeben, wobei der Wert aus dem Stapel entfernt
          wird.

     q    Das Programm wird beendet. Wenn eine Schleife ausgeführt wird, so
          wird die Rekursionsstufe um zwei verringert.





Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

dc(1)                                                                 dc(1)

     Q    Das Programm wird beendet. Der oberste Wert im Stapel wird aus
          dem Stapel entfernt und die Ausführungsstufe der Schleife um die-
          sen Wert verringert.

     sx   Der oberste Wert des Stapels wird gelöscht und in das Register x
          geladen, d. h. als oberstes Element im Register x abgelegt. x
          kann ein beliebiges Zeichen sein.

     Sx   Der oberste Wert des Hauptstapels wird gelöscht und in den Stapel
          x geladen, d. h. als oberstes Element im Stapel x abgelegt. x
          kann ein beliebiges Zeichen sein.

     v    Der oberste Wert im Stapel wird durch seine Quadratwurzel
          ersetzt. Beim Wurzelziehen werden auch alle Nachkommastellen
          berücksichtigt (auch wenn der geltende Skalierungsfaktor kleiner
          ist als die Anzahl der vorhandenen Nachkommastellen, siehe k).

     x    Der oberste Wert im Stapel wird als Folge von Anweisungen an das
          dc-Kommando interpretiert und ausgeführt.

     X    Der zuletzt geladene Wert wird durch die aktuell geltende Zahl
          der Nachkommastellen ersetzt.

     z    Die Anzahl der Elemente des Stapels wird in den Stapel geladen.

     Z    Die oberste Zahl im Stapel wird durch ihre Länge ersetzt.

     zahl zahl wird in den Stapel geladen. zahl ist eine Zeichenkette, die
          aus den Ziffern 0-9 sowie Punkten bestehen darf und der ein
          Unterstrich _ vorangestellt sein kann.

          Der erste auftretende Punkt wird als Dezimalpunkt interpretiert,
          alle anderen Punkte werden ignoriert.

          Ein vorangestellter Unterstrich _ wird als negatives Vorzeichen
          interpretiert.

     !    Der Rest der Zeile nach dem Ausrufezeichen wird als Reliant UNIX
          Kommando interpretiert und ausgeführt.

     +
     -
     /
     *
     %
     ^    Die beiden obersten Zahlen im Stapel werden mit dem angegebenen
          Operator verknüpft. Dabei bedeutet:

          +    addieren

          -    subtrahieren



Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

dc(1)                                                                 dc(1)

          /    dividieren

          *    multiplizieren

          %    Kongruenzklassen bilden (Rest beim Teilen)

          ^    potenzieren

          Die beiden Zahlen werden aus dem Stapel gelöscht. Das Ergebnis
          der ausgeführten Operation wird anstelle der beiden Zahlen in den
          Stapel geladen.

     ;:   bc verwendet die Zeichen ; und : für Feldoperationen.

     <x
     >x
     =x   Die beiden obersten Werte werden aus dem Stapel geholt und mit-
          einander verglichen. Die Relation ist erfüllt, wenn der oberste
          Wert im Stapel kleiner bzw. größer ist als der zweitoberste Wert,
          bzw. gleich dem zweitobersten Wert ist. Wenn die angegebene Rela-
          tion erfüllt ist, dann wird Register x ausgewertet.

     ?    Eine Eingabezeile wird vom Eingabegerät (das ist normalerweise
          das Terminal) geholt und ausgeführt.

     [...]
          Die in eckigen Klammern eingeschlossene ASCII-Zeichenkette wird
          in den Stapel geladen.

FEHLERMELDUNGEN

     x is unimplemented
          x ist eine Oktalzahl, die keine gültige Anweisung für dc ist.

     stack empty
          Stapelinhalt reicht für auszuführende Operation nicht aus.

     Out of space
          Kein freier Platz mehr im Stapel (zu viele Ziffern).

     Out of headers
          Zu viele Zahlen.

     Out of pushdown
          Zu viele Werte im Stapel.

     Nesting Depth
          Zu große Schachtelungstiefe bei angeforderten Operationen.

     exp not an integer
          Exponent beim Potenzieren ist keine ganze Zahl.



Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

dc(1)                                                                 dc(1)

BEISPIELE
     Beispiel 1

     In diesem Beispiel werden die Zahlen 0-9 ausgegeben:

     [lip1+sili10>a]sa
     0si lax
     0
     1
     2
     3
     4
     5
     6
     7
     8
     9

     dc arbeitet diese Eingabe folgendermaßen ab: Zunächst wird die Zei-
     chenkette lip1+sili10>a als oberster Wert in den Stapel geladen ([ ]).
     Dann wird die Zeichenkette im Stapel gelöscht und im Register a
     gespeichert (sa). Der Befehl 0si bewirkt, daß die Zahl 0 im Register i
     gespeichert wird. Daraufhin wird die Zeichenkette lip1+sili10>a im
     Stapel abgelegt, bleibt aber zusätzlich im Register a gespeichert. Der
     Befehl x bewirkt, daß nun die Zeichenkette lip1+sili10>a als Folge von
     dc-Befehlen interpretiert und entsprechend ausgewertet wird.

     Der Ablauf sieht demnach folgendermaßen aus: Die Zahl 0 (Inhalt des
     Registers i) wird in den Stapel geladen und ausgegeben usw.

     Beispiel 2

     In diesem Beispiel werden die ersten zehn Werte von n! ausgegeben:

     [la1+dsa*pla10>y]sy
     0sa1
     lyx
     1
     2
     6
     24
     120
     720
     5040
     40320
     362880
     3628800

SIEHE AUCH
     bc(1).




Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026