Задача об инфекции стригущего лишая - Lisp
Формулировка задачи:
Помогите разработать архитектуру программы для решения такой задачи:
Собственно решение, как таковое, меня не интересует, я его и сам могу написать. Например, на C/C++/C#.
Под архитектурой я понимаю взаимодействие частей программы. Например, если бы я делал программу на объектно-ориентированном языке, то сделал бы объект Клетка, объект Карта и, пожалуй, объект ИтераторКлеток. Как-то так.
Я понимаю, что задачу можно решить "в лоб", без всякой архитектуры. Видел уже такие решения. Спасибо, не надо.
Промоделировать процесс распространения инфекции — стригущего лишая по участку кожи размером n x n (n — нечетное) клеток. Предполагается, что исходной зараженной клеткой кожи является центральная. В каждый интервал времени пораженная инфекцией клетка может с вероятностью 0,5 заразить любую из соседних здоровых клеток. По прошествии шести единиц времени зараженная клетка становится невосприимчивой к инфекции, возникший иммунитет действует в течение последующих четырех единиц времени, а затем клетка оказывается здоровой. В ходе моделирования описанного процесса выдавать текущее состояние моделируемого участка кожи в каждом интервале времени, отмечая зараженные, невосприимчивые к инфекции и здоровые клетки.
Решение задачи: «Задача об инфекции стригущего лишая»
textual
Листинг программы
- typedef
- struct Cell {
- int health;
- }
- *Cell;
- void
- Cell_Init(Cell this)
- {
- this->health = 0;
- }
- void
- Cell_Infect(Cell this)
- {
- this->health = 1;
- }
- int
- Cell_IsIll(Cell this)
- {
- return this->health > 0 && this->health < 7;
- }
- void
- Cell_PassTime(Cell this)
- {
- if( this->health != 0 ) {
- this->health += 1;
- if( this->health == 11 ) {
- this->health = 0;
- }
- }
- }
- typedef
- struct Field {
- struct Cell cells[N+2][M+2];
- }
- *Field;
- void
- Field_Init(Field this)
- {
- int i, j;
- for( i = 1; i < N+1; ++i ) {
- for( j = 1; j < M+1; ++j ) {
- cells[i][j] = 0;
- }
- }
- }
Объяснение кода листинга программы
- Структура
Cell
представляет собой ячейку с двумя полями:health
(здоровье) типаint
иthis
(указатель на саму структуру). - Функция
Cell_Init
инициализирует полеhealth
структурыCell
значением 0. - Функция
Cell_Infect
изменяет значение поляhealth
структурыCell
на 1, что означает заражение. - Функция
Cell_IsIll
проверяет значение поляhealth
структурыCell
и возвращаетtrue
, если значение находится в диапазоне от 1 до 6 (включительно), иfalse
в противном случае. - Функция
Cell_PassTime
увеличивает значение поляhealth
структурыCell
на 1. Если значение поляhealth
становится равным 11, то оно заменяется на 0, что означает выздоровление. - Структура
Field
представляет собой поле (плоскость) с двумя массивами типаCell
(ячейки). - Функция
Field_Init
инициализирует все ячейки поля значением 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д