Dies ist der Befehls-DC, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann
PROGRAMM:
NAME/FUNKTION
dc – ein Rechner mit beliebiger Präzision
ZUSAMMENFASSUNG
dc [-V] [--version] [-h] [--help]
[-e Skriptausdruck] [--expression=Skriptausdruck]
[-f Skriptdatei] [--file=Skriptdatei]
[Datei ...]
BESCHREIBUNG
dc ist ein umgekehrter Tischrechner, der unbegrenzt präzise Arithmetik unterstützt. Es
Außerdem können Sie Makros definieren und aufrufen. Normalerweise dc liest von der Standardeingabe; Wenn
Alle Befehlsargumente werden ihm übergeben, es sind Dateinamen und dc liest und führt die aus
Inhalte der Dateien vor dem Lesen aus der Standardeingabe. Die gesamte normale Ausgabe erfolgt an
Standardausgabe; Alle Fehlerausgaben beziehen sich auf die Standardfehlerausgabe.
Ein Reverse-Polish-Rechner speichert Zahlen auf einem Stapel. Durch die Eingabe einer Nummer wird diese auf die Schaltfläche gedrückt
Stapel. Arithmetische Operationen entfernen Argumente vom Stapel und verschieben die Ergebnisse.
Um eine Zahl einzugeben dc, geben Sie die Ziffern ein (in Großbuchstaben). A bis F als „Ziffern“
bei der Arbeit mit Eingabebasen größer als zehn), mit optionalem Dezimalpunkt.
Exponentialschreibweise wird nicht unterstützt. Um eine negative Zahl einzugeben, beginnen Sie die Zahl mit
„_“. „-“ kann hierfür nicht verwendet werden, da es sich stattdessen um einen binären Operator zur Subtraktion handelt.
Um zwei Zahlen nacheinander einzugeben, trennen Sie diese durch Leerzeichen oder Zeilenumbrüche. Diese haben keine
Bedeutung als Befehle.
OPTIONAL
dc kann mit den folgenden Befehlszeilenoptionen aufgerufen werden:
-V
--Version
Drucken Sie die Version von . aus dc das gerade ausgeführt wird, und einen Copyright-Hinweis, dann beenden.
-h
--help Drucken Sie eine Nutzungsmeldung aus, die diese Befehlszeilenoptionen und den Fehler kurz zusammenfasst.
Meldeadresse, dann beenden.
-e Skript
--Ausdruck=Skript
Fügen Sie die Befehle hinzu Skript auf den Befehlssatz, der während der Verarbeitung ausgeführt werden soll
Eingang.
-f Skriptdatei
--Datei=Skriptdatei
Fügen Sie die in der Datei enthaltenen Befehle hinzu Skriptdatei auf den Befehlssatz, der ausgeführt werden soll
während die Eingabe verarbeitet wird.
Sollten nach der oben genannten Verarbeitung noch Befehlszeilenparameter übrig bleiben, handelt es sich um diese Parameter
werden als Namen der zu verarbeitenden Eingabedateien interpretiert. Ein Dateiname von - bezieht sich auf
Standard-Eingabestream. Die Standardeingabe wird verarbeitet, wenn keine Skriptdateien oder vorhanden sind
Ausdrücke angegeben werden.
Veredlung Befehle
p Druckt den Wert oben auf dem Stapel, ohne den Stapel zu ändern. Eine neue Zeile ist
wird nach dem Wert gedruckt.
n Druckt den Wert oben auf dem Stapel, hebt ihn ab und druckt kein a
Zeilenumbruch nach.
P Legt den Wert oben auf den Stapel. Wenn es sich um eine Zeichenfolge handelt, wird sie einfach gedruckt
ohne abschließenden Zeilenumbruch. Ansonsten ist es eine Zahl und der ganzzahlige Teil davon
Sein absoluter Wert wird als Bytestrom „Basis (UCHAR_MAX+1)“ ausgedruckt. Vorausgesetzt
dass (UCHAR_MAX+1) 256 ist (wie es auf den meisten Maschinen mit 8-Bit-Bytes der Fall ist), die
Reihenfolge KSK0k1/_1Ss [ls*]Sxd0>x [256~Ssd0 qaPlxx]
dsxxsx0sqLqsxLxLK+k könnte diese Funktion auch erfüllen. (Ein Großteil der Komplexität
Der obige native DC-Code ist darauf zurückzuführen, dass ~ die Zeichen rückwärts berechnet, und
der Wunsch, sicherzustellen, dass alle Register wieder in ihrem ursprünglichen Zustand sind.)
f Druckt den gesamten Inhalt des Stapels, ohne etwas zu ändern. Das ist gut
Befehl, den Sie verwenden können, wenn Sie sich verlaufen haben oder herausfinden möchten, welche Auswirkungen einige haben
Befehl war.
Arithmetik
+ Nimmt zwei Werte vom Stapel, fügt sie hinzu und verschiebt das Ergebnis. Die Präzision von
Das Ergebnis wird nur durch die Werte der Argumente bestimmt und reicht aus
genau.
- Ermittelt zwei Werte, subtrahiert den ersten vom zweiten Wert und
treibt das Ergebnis voran.
* Erfasst zwei Werte, multipliziert sie und überträgt das Ergebnis. Die Anzahl der Brüche
Die Anzahl der Stellen im Ergebnis hängt vom aktuellen Präzisionswert und der Anzahl ab
Bruchstellen in den beiden Argumenten.
/ Erfasst zwei Werte, dividiert den zweiten Wert vom ersten Wert und dividiert den zweiten Wert
treibt das Ergebnis voran. Die Anzahl der Bruchstellen wird durch die Genauigkeit angegeben
Wert.
% Erfasst zwei Werte und berechnet den Rest der Division / Befehl würde
tun, und treibt das voran. Der berechnete Wert ist derselbe wie der, der von berechnet wurde
Reihenfolge Sd dld/ Ld*- .
~ Erfasst zwei Werte und dividiert den zweiten Wert vom ersten Wert. Der
Der Quotient wird zuerst und der Rest als nächstes verschoben. Die Anzahl der Brüche
Die Anzahl der bei der Division verwendeten Ziffern wird durch den Präzisionswert angegeben. (Der Ablauf
SdSn lnld/ LnLd% könnte diese Funktion auch ausführen, mit etwas anderem Fehler
Überprüfung.)
^ Ermittelt zwei Werte und potenziert sie, wobei der erste ermittelte Wert als Exponent und verwendet wird
der zweite platzte als Basis. Der Bruchteil des Exponenten wird ignoriert. Der
Der Präzisionswert gibt die Anzahl der Bruchstellen im Ergebnis an.
| Erfasst drei Werte und berechnet eine modulare Potenzierung. Der erste angezeigte Wert ist
wird als Reduktionsmodul verwendet; Dieser Wert muss eine Zahl ungleich Null sein und sollte es auch sein
eine ganze Zahl. Der zweite Popup wird als Exponent verwendet; Dieser Wert muss ein Nicht-Wert sein.
eine negative Zahl, und alle Bruchteile dieses Exponenten werden ignoriert. Der
Der dritte angezeigte Wert ist die Basis, die potenziert wird, was ein sein sollte
ganze Zahl. Für kleine ganze Zahlen ist dies wie die Folge Sm^Lm%, aber nicht wie ^Dieser
Der Befehl funktioniert mit beliebig großen Exponenten.
v Nimmt einen Wert auf, berechnet seine Quadratwurzel und überträgt diesen. Der Präzisionswert
Gibt die Anzahl der Bruchstellen im Ergebnis an.
Die meisten arithmetischen Operationen werden durch den „Genauigkeitswert“ beeinflusst, den Sie festlegen können
k Befehl. Der Standardwert für die Genauigkeit ist Null, was bedeutet, dass alles arithmetisch ist
Mit Ausnahme von Addition und Subtraktion werden ganzzahlige Ergebnisse erzielt.
Stapeln Control
c Löscht den Stapel und macht ihn leer.
d Dupliziert den Wert oben auf dem Stapel und verschiebt eine weitere Kopie davon. Daher,
„4d*p“ berechnet 4 zum Quadrat und gibt es aus.
r Kehrt die Reihenfolge der beiden obersten Werte auf dem Stapel um (vertauscht sie). (Das kann auch sein
mit der Sequenz erreicht SaSbLaLb.)
Register
dc Bietet mindestens 256 Speicherregister, die jeweils mit einem einzelnen Zeichen benannt sind. Du kannst
Speichern Sie eine Zahl oder eine Zeichenfolge in einem Register und rufen Sie sie später ab.
sr Ziehen Sie den Wert oben vom Stapel ab und speichern Sie ihn im Register r.
lr Kopieren Sie den Wert in das Register r und auf den Stapel schieben. Dies ändert nichts an der
Inhalt von r.
Jedes Register enthält auch einen eigenen Stapel. Der aktuelle Registerwert ist der oberste Wert
Registerstapel.
Sr Nehmen Sie den Wert oben vom (Haupt-)Stapel und schieben Sie ihn auf den Stapel
Registrieren r. Der vorherige Wert des Registers wird unzugänglich.
Lr Ziehen Sie den Wert oben in das Register r's Stapel und schiebe ihn auf den Hauptstapel.
Der vorherige Wert im Register rDer Stapel von 's, falls vorhanden, ist jetzt über die zugänglich lr
Befehl.
Parameter
dc verfügt über drei Parameter, die seinen Betrieb steuern: die Genauigkeit, die Eingabebasis und
die Ausgabebasis. Die Genauigkeit gibt die Anzahl der Bruchstellen an, die beibehalten werden sollen
Ergebnis der meisten arithmetischen Operationen. Die Eingabebasis steuert die Interpretation von
eingegebene Zahlen; Alle eingegebenen Zahlen verwenden diese Basis. Die Ausgabebasis wird für verwendet
Zahlen drucken.
Die Eingabe- und Ausgaberadices sind separate Parameter; Sie können sie ungleich machen, was möglich ist
nützlich oder verwirrend sein. Die Eingabebasis muss zwischen 2 und 16 liegen. Die Ausgabe
radix muss mindestens 2 sein. Die Genauigkeit muss null oder größer sein. Die Präzision ist immer
wird in Dezimalstellen gemessen, unabhängig von der aktuellen Eingangs- oder Ausgangsbasis.
i Entfernt den Wert vom oberen Rand des Stapels und verwendet ihn zum Festlegen der Eingabebasis.
o Entfernt den Wert vom oberen Rand des Stapels und verwendet ihn zum Festlegen der Ausgabebasis.
k Nimmt den Wert oben auf dem Stapel ab und verwendet ihn zum Festlegen der Genauigkeit.
I Schiebt die aktuelle Eingabebasis auf den Stapel.
O Schiebt die aktuelle Ausgabebasis auf den Stapel.
K Schiebt die aktuelle Genauigkeit auf den Stapel.
Streicher
dc hat eine begrenzte Fähigkeit, sowohl mit Zeichenfolgen als auch mit Zahlen zu arbeiten; die einzigen Dinge, die du
Mit Strings können Sie sie ausdrucken und als Makros ausführen (was bedeutet, dass die
Der Inhalt der Zeichenfolge wird verarbeitet als dc Befehle). Alle Register und der Stack können
Saiten halten und dc Weiß immer, ob ein bestimmtes Objekt eine Zeichenfolge oder eine Zahl ist. Manche
Befehle wie arithmetische Operationen erfordern Zahlen als Argumente und geben Fehler aus, wenn
gegebene Zeichenfolgen. Andere Befehle können entweder eine Zahl oder eine Zeichenfolge akzeptieren; zum Beispiel die p
Der Befehl kann beides akzeptieren und druckt das Objekt entsprechend seinem Typ.
[Zeichen]
Erstellt eine Zeichenfolge mit Zeichen (enthalten zwischen ausgeglichen [ und ]
Zeichen) und schiebt es auf den Stapel. Zum Beispiel, [foo]P druckt die Zeichen
foo (ohne Zeilenumbruch).
a Die oberste Seite des Stapels ist aufgeplatzt. Wenn es eine Zahl war, dann das niederwertige Byte davon
Die Zahl wird in einen String umgewandelt und auf den Stapel gelegt. Ansonsten ist das Top-of-
stack war eine Zeichenfolge und das erste Zeichen dieser Zeichenfolge wird zurückgeschoben.
x Entnimmt einen Wert vom Stapel und führt ihn als Makro aus. Normalerweise sollte es ein sein
Schnur; Handelt es sich um eine Zahl, wird diese einfach zurück auf den Stapel geschoben. Zum Beispiel,
[1p]x führt das Makro aus 1p was drückt 1 auf dem Stapel und druckt 1 auf einem separaten
Linie.
Makros werden am häufigsten in Registern gespeichert; [1p]sa speichert ein Makro zum Drucken 1 ins Register
a und lax ruft dieses Makro auf.
>r Nimmt zwei Werte vom Stapel und vergleicht sie unter der Annahme, dass es sich um Zahlen handelt.
Ausführen des Registerinhalts r als Makro, wenn der ursprüngliche Top-of-Stack vorhanden ist
größer. Daher, 1 2>a ruft die Registrierung auf aDer Inhalt und 2 1>a wird nicht.
!>r Ähnlich, ruft jedoch das Makro auf, wenn der ursprüngliche Top-of-Stack nicht größer ist als
(kleiner oder gleich) dem Zweitplatzierten.
<r Ähnlich, ruft jedoch das Makro auf, wenn der ursprüngliche Top-of-Stack kleiner ist.
!<r Ähnlich, ruft jedoch das Makro auf, wenn der ursprüngliche Top-of-Stack nicht kleiner als ist
(größer oder gleich) was der zweitbeste war.
=r Ähnlich, ruft jedoch das Makro auf, wenn die beiden ausgegebenen Zahlen gleich sind.
!=r Ähnlich, ruft jedoch das Makro auf, wenn die beiden ausgegebenen Zahlen nicht gleich sind.
? Liest eine Zeile vom Terminal und führt sie aus. Mit diesem Befehl kann ein Makro ausgeführt werden
Eingaben vom Benutzer anfordern.
q beendet ein Makro und auch das Makro, das es aufgerufen hat. Bei einem Anruf von der
oberste Ebene, oder von einem Makro, das direkt von der obersten Ebene aufgerufen wurde, die q
Befehl wird verursachen dc beenden.
Q Entnimmt einen Wert vom Stapel und verwendet ihn als Zählung der Makroausführungsebenen
verlassen werden. Daher, 3Q verlässt drei Ebenen. Der Q Befehl wird niemals dazu führen dc zu
Ausfahrt.
Status Anfrage
Z Entfernt einen Wert vom Stapel und berechnet die Anzahl der Ziffern, die er hat (oder die Anzahl der Ziffern).
Zeichen, wenn es sich um eine Zeichenfolge handelt) und überträgt diese Zahl. Die Ziffernanzahl für a
Zahl tut es nicht Fügen Sie alle führenden Nullen ein, auch wenn diese rechts davon stehen
Basispunkt.
X Entnimmt einen Wert vom Stapel, berechnet die Anzahl der Bruchstellen, die er hat, und
schiebt diese Zahl. Für eine Zeichenfolge ist der übertragene Wert 0.
z Verschiebt die aktuelle Stapeltiefe: die Anzahl der Objekte auf dem Stapel vor dem
Ausführung der z Befehl.
Weitere Anwendungsbereiche
! Der Rest der Zeile wird als Systembefehl ausgeführt. Beachten Sie, dass das Parsen von !<,
Die Befehle != und !> haben Vorrang, wenn Sie also einen Befehl ausführen möchten, der mit beginnt
<, = oder > müssen Sie nach dem ! ein Leerzeichen hinzufügen.
# Der Rest der Zeile wird als Kommentar interpretiert.
:r Die beiden obersten Werte werden vom Stapel entfernt. Der alte zweitbeste Wert wird sein
im Array gespeichert r, indiziert durch den alten Top-of-Stack-Wert.
;r Öffnet den obersten Stapel und verwendet ihn als Index im Array r. Der ausgewählte Wert
wird dann auf den Stapel geschoben.
Beachten Sie, dass jeder gestapelten Instanz eines Registers ein eigenes Array zugeordnet ist. Daher
1 0: a 0Sa 2 0: a La 0;ap wird 1 ausgeben, da die 2 in einer Instanz von 0:a gespeichert wurde
wurde später geknallt.
Nutzen Sie DC online über die Dienste von onworks.net