К началу5.2 Hello World
Из множества книг по языкам программирования вам хорошо известна программа “Hello World”. Как правило, это простейшая программа, производящая видимый результат - вывод символов на экран. Однако, для Brainfuck это задача не из легких, т.к. для вывода каждого символа мы должны присвоить его ASCII-код текущей ячейке используя только имеющиеся операторы.
В отступление от текста, реализуем задачу в простейшем виде, используя единственную ячейку памяти, меняя ее значение и выводя результат:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. (ASCII 72 ‘H’)
+++++++++++++++++++++++++++++. (ASCII 101 ‘e’)
+++++++.. (ASCII 108 ‘l’; выводим дважды)
+++. (ASCII 111 ‘o’)
-------------------------------------------------------------------------------. (ASCII 32 ‘ ’)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++. (ASCII 87 ‘W’)
++++++++++++++++++++++++. (ASCII 111 ‘o’)
+++. (ASCII 114 ‘r’)
------. (ASCII 110 ‘l’)
--------. (ASCII 100 ‘d’)
-------------------------------------------------------------------. (ASCII 33 ‘!’)
-----------------------. (ASCII 10 ‘\n’)
Можно удовлетвориться данным вариантом, однако, вспомним, что в языке существуют циклы, позволяющие сократить количество кода в однообразных операциях. Ниже приведен один из оптимизированных вариантов той же самой программы.
+++++ +++++ присвоить счетчику в ячейке #0 значение 10
[ цикл для присвоения следующим четырем ячейкам значений 70/100/30/10
> +++++ ++ добавить 7 к ячейке #1
> +++++ +++++ добавить 10 к ячейке #2
> +++ добавить 3 к ячейке #3
> + добавить 1 к ячейке #4
<<<< - уменьшить на единицу счетчик в ячейке #0
]
> ++ . 'H'
> + . 'e'
+++++ ++ . 'l'
. 'l'
+++ . 'o'
> ++ . ' '
<< +++++ +++++ +++++ . 'W'
> . 'o'
+++ . 'r'
----- - . 'l'
----- --- . 'd'
> + . '!'
> . '\n'
Код отформатирован для удобства чтения и снабжен комментариями. При выполнении переносы и лишние символы будут проигнорированы. Итоговая программа представляет собой строку:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
5.3 Описание программы Hello World
Разберем отформатированную команду построчно.
Первые 7 строк подготавливают память, присваивая соседним ячейкам значения, близкие к кодам символов выводимой фразы.
Присвоим ячейке #0 значение “10”, увеличивая ее на единицу 10 раз.
Начало цикла. Значение текущей ячейки - 10, поэтому содержимое цикла будет выполнено
Каждую итерацию цикла производится ряд действий над ячейками:
#1 увеличивается на 7
#2 увеличивается на 10
#3 увеличивается на 3
#4 увеличивается на 1
#0 уменьшается на 1
Перед каждой итерацией мы возвращаемся в ячейку #0, значение которой последовательно изменяется с 10 до 0, поэтому цикл будет выполнен 10 раз
В результате в ячейках ##1-4 содержатся значения: 70, 100, 30, 10. Теперь нам потребуется гораздо меньше действий, чем в первом примере, для получения кодов символов “Hello World!”
5.4 Упражнения
1. Измените пример с вводом-выводом так, чтобы переданные значения не перезаписывали предыдущие, а сохранялись в памяти
2. Измените программу Hello World, чтобы вывести на экран ваше имя
Далее -
Простые конструкции