]]> ]]>

Факториал в Befunge

Пример для версий befungee 0.2.0

Программа состоит из двух циклов — первый вычисляет числа от 16 до 1, второй — собственно факториалы.

Прежде всего в стек заносится 16 (как 4*4) — максимальное число, факториал которого нужно вычислить. Затем следует первый цикл, выполняющийся по часовой стрелке. За одну итерацию в стек дописывается число, равное предыдущему, уменьшенному на 1. Когда это число становится нулем, цикл прерывается (_ во второй строке), и указатель инструкций направляется вправо.

Перед входом во второй цикл из стека удаляется верхний элемент (0) и добавляется 1 (текущее значение факториала). Затем следует второй цикл, выполняющийся против часовой стрелки. За одну итерацию происходит следующее:

  • \ — два верхних элемента (ранее вычисленный факториал и следующее число) стека меняются местами (число становится верхним элементом). Если в стеке всего один элемент, поверх него записывается 0.
  • :_ — если следующее число — 0 (или стек пуст), цикл прерывается.
  • . — следующее число выводится на печать (копия остается в стеке).
  • блок ,,,,"! = " — помещает в стек символы строки и сразу же их выводит. Строка проходится справа налево, но и символы выводятся от самого верхнего к нижним, так что для программиста строка выглядит так же, как на печати.
  • .:* — вычисляется новый факториал и выводится на печать (копия остается в стеке).
  • ,*25 — вывод перевода строки.
44* >:1-:v    v ,*25 .:* ,,,,"! = ".:_ @ 
    ^    _ $1 > \:                   ^ 

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам