Описание функции main
This commit is contained in:
@@ -346,6 +346,64 @@ void CellularAutomaton::displayField() const
|
|||||||
|
|
||||||
|
|
||||||
\subsection{Функция main}
|
\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{Пользовательский ввод}
|
\subsection{Пользовательский ввод}
|
||||||
Одним из требований к лабораторным работам являлась защита от некорректного пользовательского ввода. Для реализации такой защиты и большей читаемости кода все функции связанные с пользовательским вводом были вынесены в отдельный файл. Все функции проверяют данные вводимые пользователем и, если что-то не так, печатают информацию о неверном выводе.
|
Одним из требований к лабораторным работам являлась защита от некорректного пользовательского ввода. Для реализации такой защиты и большей читаемости кода все функции связанные с пользовательским вводом были вынесены в отдельный файл. Все функции проверяют данные вводимые пользователем и, если что-то не так, печатают информацию о неверном выводе.
|
||||||
|
|||||||
Reference in New Issue
Block a user