Описание функции main

This commit is contained in:
2024-12-05 14:29:21 +03:00
parent 018235e02b
commit cd69a23312

View File

@@ -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{Пользовательский ввод}
Одним из требований к лабораторным работам являлась защита от некорректного пользовательского ввода. Для реализации такой защиты и большей читаемости кода все функции связанные с пользовательским вводом были вынесены в отдельный файл. Все функции проверяют данные вводимые пользователем и, если что-то не так, печатают информацию о неверном выводе.