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

Подскажите, что делает программа - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Составить программу, которая печатает true, если точка с координатами (х,у) принадлежит заштрихованной области, и false в противном случае http://www.cyberforum.ru/cpp-beginners/thread712485.html
помогите
C++ ООП. header файл. Функцию объекта вынести в файл класса #ifndef DRAW_H #define DRAW_H #include "mainwindow.h" #include "ui_mainwindow.h" #include <QFile> #include <QTextStream> #include <QString> #include <QByteArray> #include <QPushButton> http://www.cyberforum.ru/cpp-beginners/thread712477.html
C++ Как создать игру на с++
Здраствуйте!Подскажите как создать какую нет игру на с++!?
C++ Среднее элементов массива
Смысл задачи таков: дан массив. вывести новый массив без повторяющихся элементов и посчитать среднее. Данный код выводит только массив а среднее не могу найти. #include <stdio.h> #include <conio.h> int main () { int p; int i, n, j; int count=1; // счётчик не повторяющихся символов float res;
C++ Обращение к значению элемента http://www.cyberforum.ru/cpp-beginners/thread712473.html
Всех приветствую!Подскажите пожалуйста,как обратится к значению элемента цикла (i)?!Что необходимо ещё создать? Например цикл for (i=7;i>=0;i--)...
C++ Найти и вывести все числа на промежутке Есть натуральное число n. Найти и вывести все числа на промежутке от 1 до n-1, сума цифр которых совпадает с сумой цифр числа n. Например, n=44, числа:17,26,35 подробнее

Показать сообщение отдельно
systemofadown
0 / 0 / 0
Регистрация: 02.05.2011
Сообщений: 16
28.11.2012, 20:34     Подскажите, что делает программа
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
// BrackStack.cpp - автомат с магазинной памятью,
// распознающий вложенность круглых скобок.
// Построен на основе таблицы переходов,
// созданной по следующей q-грамматике:
// 1. S -> (B)B
// 2. B -> (B)B
// 3. B -> empty
 
#include <iostream>
#include <string>
#include <vector>
#include <stack>
 
using namespace std;
 
// Магазинными символами автомата являются:
// S, B, маркер дна (bottom).
 
// Их значение должно быть за пределами видимых символов.
enum stackSymb {S = 256, B, bottom}; 
 
// Строка с входной цепочкой, имитирующая входную ленту
string str;
int i; // Текущее положение входной головки
stack <int, vector<int> > stck; // Стек для магазинных символов
 
 
 
// Функция, реализующая чтение символов в буфер из входного потока.
// Используется для ввода с клавиатуры распознаваемой строки.
// Ввод осуществляется до нажатия на клавишу Enter.
// Символ '\n' яляется концевым маркером входной строки.
 
void GetOneLine(istream &is, string &str) {
  char ch;
  str = "";
  for(;;) {
    is.get(ch);
    if(is.fail() || ch == '\n') break;
    str += ch;
  }
  str += '\n'; // Добавляется концевой маркер
}
 
 
 
// Инициализация устройств АМП
 
void Init() {
  // Инициализация стека
  while(!stck.empty())  stck.pop();
  stck.push(bottom);
  stck.push(S);
 
  // Инициализация входной головки
  i = 0;
}
 
 
 
// Устройство управления АМП, анализирующего вложенность скобок.
// Имитирует таблицу переходов АМП.
 
bool Parser() {
 
  // Инициализация устройств АМП
  Init();
  int step = 0;
 
  // Цикл анализа состояний
  for(;;) {
    // Тестовый вывод информации о текущем шаге, 
    // текущем символе, вершине стека
    cout <<"step " << step++ << ": str[" << i << "] = "<< str[i] 
         << " Top = "<< stck.top() << "\n";
 
    // Проверка содержимого на вершине стека
    switch(stck.top()) {
    // Анализ первой строки таблицы переходов
    case S:
        switch(str[i]) {
        case '(': // [S, (]
            stck.top() = B; // эквивалентно stck.pop(); stck.push(B);
            stck.push(')');
            stck.push(B);
            i++; // следующий входной символ
            break;
        case ')': // [S, )] - ) не может стоять в начале
            cout << "Position " << i << ", " 
                 << "Error 1: \')\' can not is in begin!\n";
            return false;
        case '\n': // [S, концевой маркер]
            cout << "Position " << i << ", " 
                 << "Error 2: Empty string!\n";
            return false;
        default: // Ошибка, такой символ не допустим
            cout << "Position " << i << ", " 
                 << "Incorrect symbol! " << str[i] << "\n";
            return false;
        }
        break;
    // Анализ второй строки таблицы переходов
    case B:
        switch(str[i]) {
        case '(': // [B, (]
            stck.top() = B; // эквивалентно stck.pop(); stck.push(B);
            stck.push(')');
            stck.push(B);
            i++; // следующий входной символ
            break;
        case ')': // [B, )] - вытолкнуть без сдвига 
            stck.pop();
            break;
        case '\n': // [B, концевой маркер] - вытолкнуть без сдвига
            stck.pop();
            break;
        default: // Ошибка, такой символ не допустим
            cout << "Position " << i << ", " 
                 << "Incorrect symbol! " << str[i] << "\n";
            return false;
        }
        break;
    // Анализ третьей строки таблицы переходов
    case ')':
        switch(str[i]) {
        case '(': // [), (] - в принципе недостижимо
            cout << "Position " << i << ", " 
                 << "Error 3: I want \')\'!\n";
            return false;
        case ')': // [), )] - вытолкнуть со сдвигом 
            stck.pop(); // вытолкнуть
            i++;  // сдвиг
            break;
        case '\n': // [), концевой маркер]
            cout << "Position " << i 
                 << ", Error 4: I want \')\'!\n";
            return false;
        default: // Ошибка, такой символ не допустим
            cout << "Position " << i << ", " 
                 << "Incorrect symbol! " << str[i] << "\n";
            return false;
        }
        break;
    // Анализ четвертой строки таблицы переходов
    case bottom:
        switch(str[i]) {
        case '(': // [bottom, (] - невозможно при пустом магазине
            cout << "Position " << i << ", "
                 << "Error 4: Impossible situation [bottom, \'(\']!\n";
            return false;
        case ')': // [bottom, )] - лишняя )
            cout << "Position " << i << ", "
                 << "Error 5: unnecessary \')\'!\n";
            return false;
        case '\n': // [bottom, концевой маркер] - допустить!
            return true;
        default: // Ошибка, такой символ не допустим
            cout << "Position " << i << ", " 
                 << "Incorrect symbol! " << str[i] << "\n";
            return false;
        }
        break;
    }
  }
}
 
 
 
// Главная функция используется для инициализации устройств
// АМП перед каждым новым прогоном и тестирования до тех пор,
// пока не будет прочитана пустая строка.
int main () {
  string strCursor;
  str = "";
 
  // Цикл распознавания различных входных цепочек
  do {
    // Чтение очередной входной цепочки в буфер
    cout << "Input bracket\'s expression!: ";
 
    // Формируем очередную строку скобок для распознавания.
    GetOneLine(cin, str);
 
    // Здесь начинается разбор принятой строки.
    if(Parser())
        cout << "+++++ OK! +++++\n";
    else
        cout << "--- Fatal error (look upper error message)! ---\n";
 
    // Вывод разобранной строки и значения позиции входой головки.
    cout << "Line: " << str;
    strCursor = " Pos: " + string(i, '-');
    strCursor +='^';
    cout << strCursor << " i = " << i << "\n\n";
  } while(str != "\n");
 
  cout << "Goodbye!\n";
  return 1;
}
Я не понимаю, что надо вводить >< Подскажите, пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru