29.12.2024
| Главная | Поиск | Регистрация | Профиль | Вход | Выход |
Категории
Разное [27]
Реклама
Реклама
Интересное
Главная » Статьи » Разное » Разное

Настоящий Brainfuck №3

Ну что же, наверное заключительная статья по замечательному языку программирования с задорным именем BrainFuck. Напомню, что операторов в нем всего восемь:

> = увеличение указателя памяти или смещение право на 1 блок
< = уменьшение или смещение влево на 1 блок
+ = увеличение значения в ячейке памяти, на которую ссылается указатель
- = соответственно уменьшение на единиц
[ = аналог цикла while(cur_block_value != 0)
] = если значение в ячейке на которую указывает указатель не равно нулю, то переход на [
, = аналог getchar(), ввод одного символа
. = аналог putchar(), вывод одного символа на консоль

В прошлых статьях мы прошлись по вводу и выводу, рассмотрели разные особенности языка. Однако как же реализовать условия? Допустим, мы хотим ввести с клавиатуры код символа (x) в первый блок памяти, определить равен ли он 5 и если равен установить другое значение памяти (y) в 3. На С все это выглядит просто:

x=getchar;
if(x == 5)
{
y = 3;

В реальном BrainFuck это всего лишь такая программа:

,[>>+>+<<<-]>>>[<<<+>>>-]>+<<[-----[>]>>[<<<+++>>>[-]]

Рассмотрим что же происходит в программе:

, - ввод символа в первую ячейку памяти

[>>+>+<<<-]>>>[<<<+>>>-] - копирование из ячейки 1 в ячейку 3 используя 4 как временный буфер. Указатель остается на 4 ячейке.

Память на момент завершения выглядит так:

>+<< - запись 1 в 5 ячейку и возврат к 3.

Самая важная часть:

[-----[>]>>[<<<+++>>>[-]] - вычитаем из значения 5 и если оно именно таким и было пишем во вторую 3, возвращаемся к 5 ячейке и записываем туда 0 и в  результате цикл будет работать всего один раз. Если исходное введенное значение не равно 5, указатель останавливается на ячейке 6. Соответственно, память у нас может остаться такой:

Первый вариант если х=5, второй если не равен. Это первый пример, в котором исходное значение не "разрушается". Можно все сделать гораздо проще, но при этом потерять введенное число, получив только результат сравнения.

>>+[<<,-----[>]>>[<<+++>>[-]]]

Надеюсь вы разберетесь с нею сами :).

А теперь о программах для работы:

Категория: Разное | Добавил: MalCer (03.08.2009)
Просмотров: 403 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Реклама
Кабинет

Читать ЛС ()

Гость, мы рады вас видеть. Пожалуйста зарегистрируйтесь или авторизуйтесь!



Фраза дня:
Кто с нами

Сегодня были:
Статистика
Партнеры
Graffiti Decorations(R) Studio (TM) Site Promoter Mnogo-softa.net.ru-Софт,срипты,шаблоны и др. MEGA-ToP-ТОП раскрутка раскрутка сайтов. Рейтинг лучших сайтов
описание