Описание функции main
This commit is contained in:
@@ -214,8 +214,8 @@ public:
|
||||
CellularAutomaton::CellularAutomaton(int width, int height, bool fillWithRandom, BoundaryCondition boundaryCondition)
|
||||
: m_fieldWidth(width), m_fieldHeight(height), m_boundaryCondition(boundaryCondition)
|
||||
{
|
||||
m_field.resize(m_fieldHeight, std::vector<int>(m_fieldWidth, 0));
|
||||
m_fieldNextState.resize(m_fieldHeight, std::vector<int>(m_fieldWidth, 0));
|
||||
m_field.resize(m_fieldHeight, std::vector<int>(m_fieldWidth, 0));
|
||||
m_fieldNextState.resize(m_fieldHeight, std::vector<int>(m_fieldWidth, 0));
|
||||
|
||||
if (fillWithRandom) initializeRandom();
|
||||
else initializeManual();
|
||||
@@ -346,6 +346,64 @@ void CellularAutomaton::displayField() const
|
||||
|
||||
|
||||
\subsection{Функция main}
|
||||
В функции main, код которой представлен в листинге~\ref{lst:main}, содержится бесконечный цикл, который обрабатывает пользовательский ввод. На каждой итерации цикла, пользователю предлагается выбрать конфигурацию конечного двумерного автомата и количество итераций. Затем внутри функции создаётся объект класса \texttt{CellularAutomaton}, с заданными пользователем параметрами, и у него вызывается метод \texttt{update} согласно указанному количеству итераций. Функция \texttt{main} возвращает целое число, которое является кодом завершения программы - 0, если программа выполнилась успешно, и ненулевое значение, если произошла какая-либо ошибка.
|
||||
|
||||
|
||||
\begin{lstlisting}[caption={Код функции main.}, label={lst:main}]
|
||||
int main()
|
||||
{
|
||||
setlocale(LC_ALL, "Russian");
|
||||
|
||||
while (true) {
|
||||
clear();
|
||||
|
||||
cout << "Выберите граничные условия:\n"
|
||||
"Единичные (0)\n"
|
||||
"Нулевые (1)\n"
|
||||
"Торроидальные (2)\n"
|
||||
"Завершить работу (3)\n\n";
|
||||
int actionId = inputNumber(0, 3);
|
||||
|
||||
clear();
|
||||
|
||||
if (actionId == 3) {
|
||||
cout << "Выйти из программы? (yes/no)\n";
|
||||
if (userApprove()) return 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
BoundaryCondition boundaryCondition = static_cast<BoundaryCondition>(actionId);
|
||||
|
||||
cout << "Укажите ширину поля (min 1): ";
|
||||
int fieldWidth = inputNumber(1);
|
||||
|
||||
cout << "Укажите высоту поля (min 1): ";
|
||||
int fieldHeight = inputNumber(1);
|
||||
|
||||
cout << "Укажите количество итераций (min 1): ";
|
||||
int iterationsCount = inputNumber(1);
|
||||
|
||||
cout << "Заполнить поле случайными значениями? (yes/no)\n";
|
||||
bool fillWithRandom = userApprove();
|
||||
|
||||
CellularAutomaton ca(fieldWidth, fieldHeight, fillWithRandom, boundaryCondition);
|
||||
clear();
|
||||
|
||||
cout << "\nИтерация 0:\n";
|
||||
ca.displayField();
|
||||
|
||||
for (int i = 0; i < iterationsCount; ++i)
|
||||
{
|
||||
cout << "\nИтерация " << i + 1 << ":\n";
|
||||
ca.update();
|
||||
ca.displayField();
|
||||
}
|
||||
|
||||
cout << "\nНажмите на enter, чтобы продолжить...";
|
||||
waitForEnter();
|
||||
}
|
||||
}
|
||||
\end{lstlisting}
|
||||
|
||||
\subsection{Пользовательский ввод}
|
||||
Одним из требований к лабораторным работам являлась защита от некорректного пользовательского ввода. Для реализации такой защиты и большей читаемости кода все функции связанные с пользовательским вводом были вынесены в отдельный файл. Все функции проверяют данные вводимые пользователем и, если что-то не так, печатают информацию о неверном выводе.
|
||||
|
||||
Reference in New Issue
Block a user