Форум программистов, компьютерный форум, киберфорум
Другие языки программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 2
Регистрация: 02.03.2014
Сообщений: 29

[Brainfuck] Interpreter in C++

20.05.2014, 15:54. Показов 1684. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я написал интерпретвтор Brainfuck на C++. Но некоторые программы работают неправильно. Подскажите пожалуйста где ошибка.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    vector<char> array;
    int i;
    int status = -1;
    int br = 0;
    vector<int> loop;
    string op;
    int k = 0;
    cin >> op;
    for (i = 0; i < op.length(); i++)
    {
        if (op[i] == '>')
        {
            array.push_back(0);
        }
    }
    array.push_back(0);
    for (i = 0; i < op.length(); i++)
    {
        if (op[i] == '[')
        {
            loop.push_back(0);
        }
    }
    loop.push_back(0);
    for (int j = 0; j < op.length(); j++)
    {
        if (op[j] == '>')
        {
            k++;
        }
        else if (op[j] == '<')
        {
            k--;
        }
        else if (op[j] == '+')
        {
            array[k]++;
        }
        else if (op[j] == '-')
        {
            array[k]--;
        }
        else if (op[j] == '.')
        {
            cout << array[k];
        }
        else if (op[j] == ',')
        {
            cin >> array[k];
        }
        else if(op[j]=='[')
        {
            if (array[k] != 0)
            {
                status++;
                loop[status] = j;
            }
            else
            {
                for (i = j; i < op.length(); i++)
                {
                    if ((op[i] == ']')&&(br == 0))
                    {
                        j = i;
                        break;
                    }
                    else if (op[i] == '[')
                    {
                        br++;
                    }
                    else if ((op[i] == ']')&&(br != 0))
                    {
                        br--;
                    }
                }
            }
        }
        else if(op[j]==']')
        {
            if (array[k] != 0)
            {
                j = loop[status];
            }
            else 
                status--;
        }
        else
            cout << "Error";
    }
    cout << endl;
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.05.2014, 15:54
Ответы с готовыми решениями:

[Brainfuck] Как использовать Dictionary для разбора команд языка BrainFuck
Необходимо написать IDE для работы с BrainFuck, в ходе выполнения задания у меня возникли вопросы, подскажите, пожалуйста, способы их...

[Brainfuck] Написать интерпритатор языка brainfuck
Добрый день, форумчане. Поступил я в университет, начал учить С++ Начались домашние задания, но я совсем не понимаю что к чему. Нужна...

[Brainfuck] Интерпритатор BrainFuck на Prolog(VIP 5.2)
Была у нас такая лаба(точнее должна быть в декбре8-)). Решил я поделится с вами кодом,мб кому-то пригодится. domains file=f ...

1
0 / 0 / 2
Регистрация: 02.03.2014
Сообщений: 29
21.05.2014, 23:04  [ТС]
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

всё разобрался.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    vector<char> array;
    int i;
    int status = -1;
    int br = 0;
    vector<int> loop;
    string op;
    int k = 0;
    cin >> op;
    cin.ignore();
    for (i = 0; i < op.length(); i++)
    {
        if (op[i] == '>')
        {
            array.push_back(0);
        }
    }
    array.push_back(0);
    for (i = 0; i < op.length(); i++)
    {
        if (op[i] == '[')
        {
            loop.push_back(0);
        }
    }
    loop.push_back(0);
    for (int j = 0; j < op.length(); j++)
    {
        if (op[j] == '>')
        {
            k++;
        }
        else if (op[j] == '<')
        {
            k--;
        }
        else if (op[j] == '+')
        {
            array[k]++;
        }
        else if (op[j] == '-')
        {
            array[k]--;
        }
        else if (op[j] == '.')
        {
            cout << array[k];
        }
        else if (op[j] == ',')
        {
            cin.get(array[k]);
        }
        else if(op[j]=='[')
        {
            if (array[k] != 0)
            {
                status++;
                loop[status] = j;
            }
            else
            {
                for (i = j+1; i < op.length(); i++)
                {
                    if ((op[i] == ']')&&(br == 0))
                    {
                        j = i;
                        break;
                    }
                    else if (op[i] == '[')
                    {
                        br++;
                    }
                    else if ((op[i] == ']')&&(br != 0))
                    {
                        br--;
                    }
                }
            }
        }
        else if(op[j]==']')
        {
            if (array[k] != 0)
            {
                j = loop[status];
            }
            else 
                status--;
        }
        else
            cout << "Error";
    }
    cout << endl;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.05.2014, 23:04
Помогаю со студенческими работами здесь

[Brainfuck] PBF (Pseudo BrainFuck)
Pseudo-Brainfuck (PBF) — диалект языка Brainfuck. Основным отличием является возможность упрощать код за счет выделения часто повторяемых...

[Brainfuck] Ищу учебник по Brainfuck
Всем привет. Долго искал учебник какой-либо по брейнфаку, но ничего не нашел Здесь ни у кого нету такого добра?

[Brainfuck] интерпритатор Brainfuck
Можете пожалуйста помочь с Brainfuck задание y:=x^4+2X^3 я написал по примеру только что то неправильно делаю и невыводит что надо а выводи...

Parser, interpreter
Поставил мне преподаватель тему проекта, написать парсер арифметических высказываний в языке ассемблер для процессора Pentium или...

Паттерн Interpreter и грамматика
Может не особо по теме C++, но все же. Столкнулся с некоторой трудностью. Читал про паттерн Interpreter, который, вроде как , служит для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru