Обсуждение:Немного программирования
"На базовом языке BASE написать алгоритм выполнения программы на языке ZIPPER. На входе функции, в памяти содержится набор чисел — инструкций." Правильно ли я понимаю, что "элегантно" решить эту задачу не получится без введения таких внешних данных как максимальная длина программы, максимальное натуральное число, используемое в программе, и программа будет выглядеть достаточно громоздко. примерно так (?):[1]
- В разделе задача сформулирована не полно. На вход алгоритма должны поступать как текст программы на языке ZIPER, так и входные данные для этой программы. Поэтому первые 4n ячейки памяти занимает программа из n инструкций, затем разделитель (например 0), затем данные. Кроме этого, самому алгоритму нужна память для хранения промежуточных результатов (счетчика для перемещения по программе ZIPER). Поэтому необходимо зарезервировать первую ячейку, считая, что инструкции программы ZIPER начинаются со второй ячейки. Далее потребуется функция, перемещающаяся по программе и выясняющая её длину (точнее номер ячейки с нулем, после которой начинаются данные программы). Эта функция может выглядеть так (после подчеркивания идет индекс - номер ячейки):
d(m_1,m_2,...) { if(m_2=0) return m_2; m_2 <- 6; m_3 <- 4; while(m_{m_2} =/= 0){ m_2 <- m_2+m_3; } return m_2; }
- По аналогичному принципу строится и основной алгоритм. Сергей Степанов
- Спасибо! Я не понял из описания языка BASE, что индекс памяти в программе можно указывать не только в прямом виде натурального числа (m1, m2), но и в виде значения другой ячейки памяти (m(m2)). Так программу сделать, конечно, проще. --Scioplus 00:24, 30 апреля 2012 (UTC)