Дано $$$0 \le N \le 100$$$ целых неотрицательных чисел, выведите их сумму.
Эх, как было бы хорошо, если бы вам нужно было написать программу для решения такой задачи на C++ или Python...
У вас есть машина, память которой — это стек, элементы которого являются целыми числами. Количество элементов стека в данный момент мы будем обозначать как $$$sz$$$.
Напомним, что стек — это абстрактная структура данных, хранящая коллекцию элементов, и работающая по принципу LIFO (последним пришёл — первым вышел). Стек поддерживает две базовые операции: положить элемент на вершину стека, взять элемент с вершины стека. В качестве аналогии можно представить стопку тарелок: вы не можете оперировать с тарелками не на вершине стопки.
Список доступных инструкций приведен ниже. RTE (Run-Time Error) обозначает, что выполнение программы завершилось с ошибкой, вам следует избегать таких ситуаций.
Также доступны условный оператор и цикл while. Чтобы их использовать, сначала нужно научиться задавать какие-то условия:
К любому условию можно добавить NOT в начале, например NOT GZ (обратите внимание на пробел) TRUE если на вершине стека 0 или отрицательное число.
Условный оператор:
IF cond THEN
BEGIN
body
END
Цикл while:
WHILE cond DO
BEGIN
body
END
В обоих случаях cond — одно из условий, описанных выше, body — тело условного оператора или цикла — последовательность команд, которые будут выполнены, если cond=TRUE (один раз в случае условного оператора, или много раз в случае цикла). Циклы и условные операторы могут быть вложенными.
Вы должны написать программу для этой машины, котора решает следующую задачу:
Изначально стек был пуст. Числа $$$N, a_{1}, a_{2}, \ldots, a_{N}$$$ положили на стек в таком порядке (наверху стека лежит $$$a_{N}$$$, $$$N$$$ лежит в самом низу). После выполнения программы на вершине стека должно лежать число $$$a_{1} + a_{2} + \ldots + a_{N}$$$ (также в стеке могут лежать другие числа).
Гарантируется, что $$$0 \le N \le 100$$$, $$$0 \le a_{i}$$$. Каждая инструкция (а также проверки условия для условного оператора и цикла) выполняется 1 такт. Выполнение программы должно занимать не более $$$(N+22)^{2}$$$ тактов. В процессе выполнения программы не должно происходить RTE.
В этой задаче нет входных данных.
Выведите программу для стековой машины, решающую описанную задачу.
Вы не обязаны использовать отступы. Любой пробельный символ может быть заменён на любое ненулевое количество пробельных символов, вставлять пробельные символы внутрь инструкций нельзя.
Все инструкции должны быть записаны именно так, как они записаны в тексте условия.
PUSHZ
SWAP2
WHILE NOT EZ DO
BEGIN
COPY
SWAP3
ADD
SWAP2
DEC
END
POP
WHILE NOT EZ DO
BEGIN
COPY
DEC
END
WHILE HAVE2 DO
BEGIN
ADD
END
Ответ на пример из условия содержит две программы, которые вычисляют сумму чисел от 1 до $$$N$$$ для $$$N \ge 0$$$.
В стеке могут храниться числа произвольного размера. И ваша программа должна работать для $$$a_{i}$$$ произвольного размера.
Намеренные попытки дестабилизировать работу проверяющей системы могут повлечь дисквалификацию команды. Жюри оставляет за собой право решать, что является невинной ошибкой, а что — намеренной попыткой дестабилизировать работу проверяющей системы.
| Name |
|---|


