Форум программистов, компьютерный форум CyberForum.ru

Brainf**k - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Рекурсия, ошибка http://www.cyberforum.ru/cpp-beginners/thread239332.html
Здраствуйте! У меня есть одна классическая задачка про Лесенку. Лесенка Лесенкой называется набор кубиков, в котором каждый более верхний слой содержит кубиков меньше, чем предыдущий. Требуется написать программу, вычисляющую число лесенок, которое можно построить из N кубиков. Входные данные Во входном файле input.txt записано натуральное число N (1 ≤ N ≤ 225) – количество кубиков в...
C++ Рекурсия Здраствуйте! У меня есть одна классическая задачка про Лесенку. Лесенка Лесенкой называется набор кубиков, в котором каждый более верхний слой содержит кубиков меньше, чем предыдущий. Требуется написать программу, вычисляющую число лесенок, которое можно построить из N кубиков. Входные данные Во входном файле input.txt записано натуральное число N (1 ≤ N ≤ 225) – количество кубиков в... http://www.cyberforum.ru/cpp-beginners/thread239329.html
C++ Шаблонные функции
Чет не получается написать шаблонную функцию. func.h template <class T> T strnstr (T str, T substr, unsigned int count) { T* str1; T* str2 = substr;
Даны действительные числа C++
1. Даны действительные числа x, y, z Вычислить: а)max(x+y+z, xyz) б)min^2(x+y+z/2,xyz)+1 2) даны x,y,z. вычислить a,b если a=(1+y)*((x+y)/(x^2+4))/e^-x-2 + 1/(x^2+4) b=(1+cos(y-2))/x^4 / 2+sin^2 Z помогите решить пожалуйста.
Visual C++ MFC Picture Control http://www.cyberforum.ru/cpp-beginners/thread239282.html
как сделать что бы Picture Control появлялся только после нажатия кнопки ?
C++ Вычислить арифметическое выражение пожалуйста помогите : Дано натуральное число n. Вычислить подробнее

Показать сообщение отдельно
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
09.02.2011, 14:07     Brainf**k
perimetral, проверяйте, то, что вам надо?

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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <map>
 
void interpret(std::string &, const char *, const char *);
int interpret_helper(std::string &, const char *, const char *, int *, int);
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "Rus");
    
    if (argc != 4)
    {
        std::cerr << "Программа должна быть запущенна в виде" << std::endl
                  << "имя_программы имя_входного_файла имя_файла_входных_данных имя_файла_выходных_данных" << std::endl;
 
        exit(1);
    }
    
    std::ifstream fprog(argv[1]);
 
    std::string prog;
    std::string temp;
 
    while (fprog >> temp)
        prog += temp;
 
    fprog.close();
 
    interpret(prog, argv[2], argv[3]);
 
    return 0;
}
 
void interpret(std::string &prog, const char *input_file_name, const char *output_file_name)
{
    int memory[2048] = {0};
    
    interpret_helper(prog, input_file_name, output_file_name, memory, 0);
}
 
int interpret_helper(std::string &prog, const char *input_file_name, const char *output_file_name, int *memory, int index)
{
    std::ifstream input(input_file_name);
    std::ofstream output(output_file_name);
 
    std::vector< int > loop(prog.size());
 
    int level = 1;
 
    for (size_t i = 0; i < prog.size(); ++i)
    {
        loop[i] = 0;
 
        if (prog[i] == '[')
            loop[i] = level++;
        else
        {
            if (prog[i] == ']')
                loop[i] = --level;
        }
    }
 
    std::map< int, std::string > funcs;
 
    int start_index = index;
 
    for (size_t i = 0; i < prog.size(); ++i)
    {
        switch (prog[i])
        {
        case '>':
            ++index;
 
            break;
        case '<':
            --index;
 
            break;
        case '+':
            ++memory[index];
 
            break;
        case '-':
            --memory[index];
            break;
        case '.':
            output << memory[index];
 
            break;
        case ',':
            input >> memory[index];
 
            break;
        case '[':
            if (memory[index] == 0)
            {
                level = loop[i++];
 
                while (loop[i] != level)
                    ++i;
            }
 
            break;
        case ']':
            if (memory[index] != 0)
            {
                level = loop[i--];
 
                while (loop[i] != level)
                    --i;
 
                --i;
            }
 
            break;
        case '(':
        {
            size_t left_bracket, right_bracket;
 
            left_bracket = i + 1;
 
            while (prog[++i] != ')');
 
            right_bracket = i;
 
            std::string func;
 
            for (size_t k = left_bracket; k < right_bracket; ++k)
                func += prog[k];
 
            funcs.insert(std::make_pair(memory[index], func));
 
            break;
        }
        case ':':
            index = interpret_helper(funcs[memory[index]], input_file_name, output_file_name, memory, index + 1);
            
            break;
        default:
            std::cerr << "Синтаксическая ошибка в позиции " << i << std::endl;
 
            exit(1);
        }
    }
 
    return start_index - 1;
}
 
Текущее время: 07:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru