Пора вам реализовать мой новый язык на основе стека! Это называется StackyMath. Это будет основанный на стеке язык с 8 операциями над стеком и способами добавления чисел в стек.
Список операций:
/: Отдел. Выполняется 2 верхних номера стека. Откладывает результат обратно в стек.*Умножение. Выполняется 2 верхних номера стека. Откладывает результат обратно в стек-: Вычитание. Выполняется 2 верхних номера стека. Откладывает результат обратно в стек+Дополнение Выполняется 2 верхних номера стека. Откладывает результат обратно в стек^: Экспонирование. Выполняется 2 верхних номера стека. Откладывает результат обратно в стек%: По модулю. Выполняется 2 верхних номера стека. Откладывает результат обратно в стек!Факториал. Выполняется по верхнему номеру в стеке. Откладывает результат обратно в стекD: Дублировать верхний номер в стеке
Операции, определенные в псевдокоде:
/: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)
Как поместить числа в стек:
Добавить цифры в стек просто, просто поместите необработанный номер в свою программу там, где он вам нужен. Если вам нужно поместить несколько чисел в стек, вы можете разделить их запятой ( ,). Ваша программа не должна будет обрабатывать -числа во входных данных. Если пользователь хочет один, он должен нажать на число, которое он хочет отрицать, ноль и -. Числа на входе программы также ограничены положительными целыми числами.
Входные данные:
Ваша программа должна принимать данные из командной строки или из стандартного ввода. Ввод будет состоять только из чисел (без научных обозначений или десятичных дробей), разделенных , необходимости, и из операций, определенных выше.
Выход:
Ваша программа должна напечатать число на вершине стека.
Случаи ошибки:
- Если программа пытается перегрузить стек, вы должны распечатать
StackUnderflowException!!!. - Если у вас деление на ноль, выведите
DivisionByZeroException!!! - Если число превышает 64 бита, либо во время выполнения программы, либо при обработке числа на входе, выведите
NumberOverflowException!!! - Если каким-то образом вы получили отрицательное число на вершине стека, и вам нужно сделать факториал, выведите
NegativeFactorialException!!! - Если у вас есть число с плавающей запятой на вершинах стека, и следующая операция будет факториальной, выведите
FloatingFactorialException!!! - Если при выходе из программы в стеке нет чисел (т. Е. Программа была пуста), выведите
EmptyProgram!!!
Примечания:
- Все выходные данные об ошибках должны получить либо ошибку, либо ближайший эквивалент.
- Все числа ограничены 64-битной плавающей точкой.
Примеры программ:
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!!!
(Я могу добавить больше, если это необходимо)
654,489,48,43/5*7D+-*%должен вернуться 77.6875. ( 43/48*5-(7+7)должно быть (7+7)-43/48*5)
!вF).