Czas na wdrożenie mojego nowego języka opartego na stosie! Nazywa się StackyMath. Będzie to język oparty na stosie z 8 operacjami na stosie i sposobami dodawania liczb do stosu.
Lista operacji:
/: Podział. Wykonywany na 2 najwyższych numerach stosu. Odkłada wynik z powrotem na stos.*: Mnożenie. Wykonywany na 2 najwyższych numerach stosu. Odkłada wynik z powrotem na stos-: Odejmowanie. Wykonywany na 2 najwyższych numerach stosu. Odkłada wynik z powrotem na stos+: Dodawanie Wykonywany na 2 najwyższych numerach stosu. Odkłada wynik z powrotem na stos^: Potęgowanie. Wykonywany na 2 najwyższych numerach stosu. Odkłada wynik z powrotem na stos%: Modulo. Wykonywany na 2 najwyższych numerach stosu. Odkłada wynik z powrotem na stos!: Factorial. Wykonywany na najwyższym numerze na stosie. Odkłada wynik z powrotem na stosD: Zduplikuj najwyższy numer na stosie
Operacje zdefiniowane w pseudokodzie:
/: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)
Jak wypychać liczby na stos:
Dodawanie liczb do stosu jest łatwe, wystarczy umieścić nieprzetworzoną liczbę w swoim programie tam, gdzie jest to potrzebne. Jeśli musisz umieścić wiele liczb na stosie, możesz oddzielić je przecinkiem ( ,). Twój program nie będzie musiał przetwarzać -liczb na wejściu. Jeśli użytkownik chce taki numer, powinien wypchnąć liczbę, którą chce zanegować, zero i -. Liczby na wejściu programu są również ograniczone do dodatnich liczb całkowitych.
Wejście:
Twój program powinien pobierać dane z wiersza poleceń lub ze standardowego wejścia. Dane wejściowe będą się składały tylko z liczb (bez notacji naukowej lub miejsc po przecinku), rozdzielonych według ,potrzeb i operacji zdefiniowanych powyżej.
Wynik:
Twój program powinien wydrukować liczbę na górze stosu.
Przypadki błędów:
- Jeśli program spróbuje przesłonić stos, powinieneś wydrukować
StackUnderflowException!!!. - Jeśli masz dzielenie przez zero, wydrukuj
DivisionByZeroException!!! - Jeśli liczba przekraczająca 64 bity, podczas wykonywania programu lub przetwarzania liczby na wejściu, drukuj
NumberOverflowException!!! - Jeśli jakoś dostaniesz liczbę ujemną na górze stosu i musisz zrobić silnię, wydrukuj
NegativeFactorialException!!! - Jeśli masz liczbę zmiennoprzecinkową na górze stosu, a następna operacja jest silna, wydrukuj
FloatingFactorialException!!! - Jeśli na wyjściu programu nie ma żadnych liczb (tzn. Program był pusty), wydrukuj
EmptyProgram!!!
Uwagi:
- Wszystkie dane wyjściowe błędów powinny otrzymać yo std err lub najbliższy odpowiednik.
- Wszystkie liczby są ograniczone do 64-bitowej liczby zmiennoprzecinkowej.
Przykładowe programy:
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!!!
(W razie potrzeby mogę dodać więcej)
654,489,48,43/5*7D+-*%powinien wrócić 77.6875. ( 43/48*5-(7+7)powinno być (7+7)-43/48*5)
!naF).