Zeit für Sie, meine neue Stack-basierte Sprache zu implementieren! Es heißt StackyMath. Dies ist eine stapelbasierte Sprache mit 8 Operationen auf dem Stapel und Möglichkeiten, dem Stapel Zahlen hinzuzufügen.
Liste der Operationen:
/
: Einteilung. Wird auf den obersten 2 Nummern des Stapels ausgeführt. Schiebt das Ergebnis auf den Stapel zurück.*
: Multiplikation. Wird auf den obersten 2 Nummern des Stapels ausgeführt. Schiebt das Ergebnis auf den Stapel zurück-
: Subtraktion. Wird auf den obersten 2 Nummern des Stapels ausgeführt. Schiebt das Ergebnis auf den Stapel zurück+
: Ergänzung. Wird auf den obersten 2 Nummern des Stapels ausgeführt. Schiebt das Ergebnis auf den Stapel zurück^
: Potenzierung. Wird auf den obersten 2 Nummern des Stapels ausgeführt. Schiebt das Ergebnis auf den Stapel zurück%
: Modulo. Wird auf den obersten 2 Nummern des Stapels ausgeführt. Schiebt das Ergebnis auf den Stapel zurück!
: Fakultät. Wird auf der obersten Zahl des Stapels ausgeführt. Schiebt das Ergebnis auf den Stapel zurückD
: Dupliziere die oberste Zahl auf dem Stapel
Im Pseudocode definierte Operationen:
/
:push(pop divided by pop)
*
:push(pop times pop)
-
:push(pop minus pop)
+
:push(pop plus pop)
^
:push(pop to the pop)
%
:push(pop mod pop)
!
:push(factorial pop)
D
:t = pop; push(t); push(t)
So legen Sie Zahlen auf den Stapel:
Das Hinzufügen von Zahlen zum Stapel ist ganz einfach. Geben Sie einfach die Rohzahl in Ihr Programm ein, wo Sie sie benötigen. Wenn Sie mehrere Zahlen auf den Stapel legen müssen, können Sie diese durch ein Komma ( ,
) trennen . Ihr Programm muss keine -
Zahlen in der Eingabe verarbeiten. Wenn der Benutzer eine will, muss er die zu negierende Zahl, Null und drücken -
. Zahlen in der Eingabe des Programms sind ebenfalls auf positive ganze Zahlen beschränkt.
Eingang:
Ihr Programm sollte die Eingabe in der Befehlszeile oder von std in übernehmen. Die Eingabe besteht nur aus Zahlen (keine wissenschaftliche Notation oder Dezimalstellen), die nach ,
Bedarf durch und die oben definierten Operationen begrenzt werden.
Ausgabe:
Ihr Programm sollte die Nummer oben auf dem Stapel drucken.
Fehlerfälle:
- Wenn das Programm versucht, den Stapel zu überladen, sollten Sie drucken
StackUnderflowException!!!
. - Wenn Sie eine Division durch Null haben, drucken Sie
DivisionByZeroException!!!
- Wenn eine Zahl größer als 64 Bit ist, drucken Sie sie, entweder während Sie das Programm ausführen oder wenn Sie eine Zahl in der Eingabe verarbeiten
NumberOverflowException!!!
- Wenn Sie auf irgendeine Weise eine negative Zahl oben auf dem Stapel haben und eine Fakultät erstellen müssen, drucken Sie
NegativeFactorialException!!!
- Wenn Sie eine Gleitkommazahl oben auf dem Stapel haben und die nächste Operation faktoriell ist, drucken Sie
FloatingFactorialException!!!
- Wenn sich beim Beenden des Programms keine Zahlen auf dem Stapel befinden (dh das Programm war leer), wird gedruckt
EmptyProgram!!!
Anmerkungen:
- Alle Fehler, die ausgegeben werden sollen, sollten "std err" oder ein gleichwertiges Ergebnis haben.
- Alle Zahlen sind auf 64-Bit-Gleitkommazahlen beschränkt.
Beispielprogramme:
50,47* -> 2350
50,47/ -> 0.94
100,8! -> 40320
100D* -> 10000
! -> StackUnderflowException!!!
5,2/! -> FloatingFactorialException!!!
4,3!2*/ -> 3
654,489,48,43/5*7D+-*% -> 77.68749999999909
-> EmptyProgram!!!
(Ich kann bei Bedarf weitere hinzufügen)
654,489,48,43/5*7D+-*%
sollte zurückkehren 77.6875
. ( 43/48*5-(7+7)
sollte sein (7+7)-43/48*5
)
!
inF
).