Задача об инфекции стригущего лишая - Lisp

Узнай цену своей работы

Формулировка задачи:

Помогите разработать архитектуру программы для решения такой задачи:
Промоделировать процесс распространения инфекции — стригущего лишая по участку кожи размером n x n (n — нечетное) клеток. Предполагается, что исходной зараженной клеткой кожи является центральная. В каждый интервал времени пораженная инфекцией клетка может с вероятностью 0,5 заразить любую из соседних здоровых клеток. По прошествии шести единиц времени зараженная клетка становится невосприимчивой к инфекции, возникший иммунитет действует в течение последующих четырех единиц времени, а затем клетка оказывается здоровой. В ходе моделирования описанного процесса выдавать текущее состояние моделируемого участка кожи в каждом интервале времени, отмечая зараженные, невосприимчивые к инфекции и здоровые клетки.
Собственно решение, как таковое, меня не интересует, я его и сам могу написать. Например, на C/C++/C#. Под архитектурой я понимаю взаимодействие частей программы. Например, если бы я делал программу на объектно-ориентированном языке, то сделал бы объект Клетка, объект Карта и, пожалуй, объект ИтераторКлеток. Как-то так. Я понимаю, что задачу можно решить "в лоб", без всякой архитектуры. Видел уже такие решения. Спасибо, не надо.

Решение задачи: «Задача об инфекции стригущего лишая»

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;
        }
    }
}

Объяснение кода листинга программы

  1. Структура Cell представляет собой ячейку с двумя полями: health (здоровье) типа int и this (указатель на саму структуру).
  2. Функция Cell_Init инициализирует поле health структуры Cell значением 0.
  3. Функция Cell_Infect изменяет значение поля health структуры Cell на 1, что означает заражение.
  4. Функция Cell_IsIll проверяет значение поля health структуры Cell и возвращает true, если значение находится в диапазоне от 1 до 6 (включительно), и false в противном случае.
  5. Функция Cell_PassTime увеличивает значение поля health структуры Cell на 1. Если значение поля health становится равным 11, то оно заменяется на 0, что означает выздоровление.
  6. Структура Field представляет собой поле (плоскость) с двумя массивами типа Cell (ячейки).
  7. Функция Field_Init инициализирует все ячейки поля значением 0.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

6   голосов , оценка 4.167 из 5