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

Спрашиваю совет по стилю написания кода - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Количество треугольников и сумма их периметров http://www.cyberforum.ru/cpp-beginners/thread1004175.html
При заданных А1,...Аn, В1,...Bn, C1,...Cn, для каждой из n троек вида (Ai, Bi, Ci) проверить может ли быть построен треугольник со сторонами Ai, Bi, Ci при этом посчитать число треугольников и сумму их периметров. c++
C++ Вывод количества вершин(узлов) на заданном уровне Напишите пожалуйста прогу которая будет выводить количество вершин(узлов) на уровне который вводим с клавиатуры http://www.cyberforum.ru/cpp-beginners/thread1004173.html
C++ Как сделать нумерацию массива
есть код программы: #include <iostream> #include <conio.h> using namespace std; void pch (int i) // Ввод функци pch { cout <<"Vvedite masiv"<<i;// вывести на экран "Введите массив" нумерация под i }
Декартово произведение C++
Помогите пожалуйста написать программу для вывода декартового произведения двух и более множеств. Немного написал кода, непосредственно само заполнение множеств, а вот как вывести в виде декартового произведения не знаю. Необязательно дописывать этот код, можно и свои варианты. #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv) {
C++ Бинарные файлы http://www.cyberforum.ru/cpp-beginners/thread1004159.html
В файле содержатся числа. Сформировать из них матрицу, содержащую пять элементов в строке. Лишние числа отбросить. Вывести на печать матрицу в общепринятом виде и посчитать сумму элементов, содержащихся в предпоследней строке. Числа могут вводиться либо пользователем, либо счетчиком случайных чисел. Количество чисел в файле задавать случайным образом, и оно должно быть неизвестно в основной...
C++ Вычислить доход по депозиту, используй две функции. Помогите пожалуйста написать программу! Написать программу, содержащую две функции. Первая функция, вычисляющая доход по депозиту, располагается после функции main(). Входными данными являются: сумма на депозите, процентная ставка, срок депозита (в днях). Вторая, функция печати результата, располагается до функции main(). подробнее

Показать сообщение отдельно
Stason676
Заблокирован

Спрашиваю совет по стилю написания кода - C++

11.11.2013, 09:54. Просмотров 449. Ответов 10
Метки (Все метки)

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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
#include <vector>
#include <string>
 
class Errors
{
private:
 
    size_t i;                   //Глобальный счетчик циклов.
    std::string exp;            //Входящая строка.
 
    //Структура для хранения кода ошибки, сообщения об ошибке и индекс некоректного символа.
    struct SError
    {
        std::string message;
        size_t errCode;
        size_t chIndex;
    };
    //Вектор для хранения структур с ошибками.
    std::vector<SError> errorVector;
 
#define IsLp(a)    (a == '(')       //ture если левая скобка.
#define IsRp(a)    (a == ')')       //ture если правая скобка.
#define IsMin(a)   (a == '-')       //ture если минус.
#define IsSqr(a)   (a == '^')       //ture если квадратный корень.
#define IsStart(a) (a == '#')       //true если начало строки.
#define IsEnd(a)   (a == ';')       //true если конец стоки.
 
    //Инициализация структуры ошибок и добавление ее в контенер vektor.
    void AddEr(size_t eCod, size_t j)
    {
        std::string messages[] = 
        {
            "Ошибка.Переменная не может начинаться с цифры.\n",         //Err0
            "Ошибка.Пустые скобки.\n",                                  //Err1
            "Ошибка.Баланс скобок нарушен.\n",                          //Err2
            "Ошибка.Порядок символов нарушен\n",                        //Err3
            "Ошибка.Символ не опознан.\n",                              //Err4
            "Введите выражение.\n"                                      //Err5
 
        };
 
        SError *p = new SError;
        p -> message = messages[eCod];
        p -> errCode = eCod;
        p -> chIndex = j;
        errorVector.push_back(*p);
    }
 
    //true если цифра.
    bool IsDigit(char ch)
    {
        char table[] = { '0','1','2','3','4','5','6','7','8','9','.','\0' };
 
        for(int i = 0; table[i]; ++i)
            if(ch == table[i])
                return true;
 
        return false;
    }
 
    //true если буква.
    bool IsAlpha(char ch)
    {
        char table[] = 
        {  
            'A','a','B','b','C','c','D','d','E','e','F','f','G','g','H','h','I','i',
            'J','j','K','k','L','l','M','m','N','n','O','o','P','p','Q','q','R','r',
            'S','s','T','t','U','u','V','v','W','w','X','x','Y','y','Z','z','\0'
        };
 
        for(int i = 0; table[i]; ++i)
            if(ch == table[i])
                return true;
 
        return false;
    }
 
    //true если оператор бинарный.
    bool IsBinOp(char ch)
    {
        char table[] = { '*', '/', '+', '\0' };
 
        for(int i = 0; table[i]; ++i)
            if(ch == table[i])
                return true;
 
        return false;
    }
 
    //Состояния автомата.
    enum State { STA, END, OPR, BIO, SQR, MIN, LP, RP, BAD} state, memory;  //STA-начало строки, END-конец строки, OPR-операнд, 
                                                                            //BIO-бинарный знак операции, SQR-квадратный корень,
                                                                            //MIN-минус, LP-левая скобка, RP-правая скобка,
                                                                            //BAD-символ не опознан. state-текущее состояние,
                                                                            //memory-предыдущее состояние.
 
    //Парсер
    State Parser(char ch)
    {
        if (IsStart(ch))
        {
            state = STA;
            return state;
        }
        else if(IsEnd(ch))
        {
            state = END;
            return state;
        }
        else if(IsAlpha(ch) || IsDigit(ch))
        {
            state = OPR;
            return state;
        }
        else if(IsBinOp(ch))
        {
            state = BIO;
            return state;
        }
        else if(IsSqr(ch))
        {
            state = SQR;
            return state;
        }
        else if(IsMin(ch))
        {
            state = MIN;
            return state;
        }
        else if(IsLp(ch))
        {
            state = LP;
            return state;
        }
        else if(IsRp(ch))
        {
            state = RP;
            return state;
        }
        else
        {
            state = BAD;
            return state;
        }
    }
    
    //Проверка операндов, условие - переменная не должена начинаться с цифры,
    //true если переменная начинается с цыфры.
    bool ChekErrOp()
    {
        std::string op;
 
        for ( ; i < exp.length(); ++i)
        {
            if(IsDigit(exp[i]) || IsAlpha(exp[i]))
                op += exp[i];
            else
            {
                i--;
                break;
            }
        }
        
        if(!op.empty())
            if(IsDigit(op[0]))
                for(size_t j = 1; j < op.length(); ++j)
                    if(IsAlpha(op[j]))
                        return true;
 
        return false;
    }
 
    //Поиск недопустимых последовательностей во входящей строке.
    void BadChain()
    {
        for (i = 0; i < exp.length(); ++i)
        {
            switch(Parser(exp[i]))
            {
                case STA:
                    memory = STA;
                    break;
                case END:
                    switch(memory)
                    {
                        case STA:
                            AddEr(5, i - 1);
                            break;
                        case BIO: case SQR: case MIN: case LP:
                            AddEr(3, i - 2);
                            break;
                    }
                    memory = END;
                    break;
                case OPR:
                    if(memory == RP) { AddEr(3, i - 1); }
                    if(ChekErrOp()) { AddEr(0, i - 1); }
                    memory = OPR;
                    break;
                case BIO:
                    switch(memory)
                    {
                        case STA: case BIO: case SQR: case MIN: case LP: case BAD:
                            AddEr(3, i - 1);
                            memory = BIO;
                            break;
                    }
                    memory = BIO;
                    break;
                case SQR:
                    switch(memory)
                    {
                        case OPR: case BIO: case SQR: case MIN: case LP: case BAD:
                            AddEr(3, i - 1);
                            memory = SQR;
                            break;
                    }
                    memory = SQR;
                    break;
                case MIN:
                    switch(memory)
                    {
                        case BIO: case SQR: case MIN: case BAD:
                            AddEr(3, i - 1);
                            memory = MIN;
                            break;
                    }
                    memory = MIN;
                    break;
                case LP:
                    switch(memory)
                    {
 
                        case OPR: case RP: case BAD:
                            AddEr(3, i - 1);
                            memory = LP;
                            break;
                    }
                    memory = LP;
                    break;
                case RP:
                    switch(memory)
                    {
                        case STA: case BIO: case SQR: case MIN: case BAD:
                            AddEr(3, i - 1);
                            memory = RP;
                            break;
                        case LP:
                            AddEr(1, i - 1);
                            memory = RP;
                            break;
                    }
                    memory = RP;
                    break;
                case BAD:
                    AddEr(4, i - 1);
                    memory = BAD;
                    break;
            }
        }
    }
 
public:
    //Конструктор(привидение входящей строки в приемлемое состояние).
    Errors(std::string stIn)
    {
        this->exp = stIn;                           //Инициализация глобальной переменной(входящая строка).
 
        for(size_t j = 0; j < exp.length(); ++j)    //Замена зарезервированных символов '#' и ';' на '@'.
            if(exp[j] == '#' || exp[j] == ';')
                exp[j] = '@';
 
        exp.insert(0, "#");                         //Вcтавить в начало строки '#' чтобы переключть автомат в стстояние "STA".
        exp.insert(exp.length(), ";");              //Вcтавить в конец строки ';' чтобы переключть автомат в стстояние "END".
 
        BadChain();
    }
 
    //Возвратить вектор с ошибками.
    std::vector<SError> GetErrors()
    {
        return errorVector;
    }
};
Вот класс, определяет недопустимые последовательности математического выражение типа (1+2)-(^(a2-b2))*3, хочу узнать в хорошем стиле ли написан он. Если можно совет что в нем исправить. Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru