From cd69a23312eff1016bc8929db13cf52dcfae9eca Mon Sep 17 00:00:00 2001 From: Arity-T Date: Thu, 5 Dec 2024 14:29:21 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20main?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab1/report/report.tex | 62 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/lab1/report/report.tex b/lab1/report/report.tex index 2e1eaee..c16f43a 100644 --- a/lab1/report/report.tex +++ b/lab1/report/report.tex @@ -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(m_fieldWidth, 0)); - m_fieldNextState.resize(m_fieldHeight, std::vector(m_fieldWidth, 0)); + m_field.resize(m_fieldHeight, std::vector(m_fieldWidth, 0)); + m_fieldNextState.resize(m_fieldHeight, std::vector(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(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{Пользовательский ввод} Одним из требований к лабораторным работам являлась защита от некорректного пользовательского ввода. Для реализации такой защиты и большей читаемости кода все функции связанные с пользовательским вводом были вынесены в отдельный файл. Все функции проверяют данные вводимые пользователем и, если что-то не так, печатают информацию о неверном выводе.