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

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

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

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

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

textual
Листинг программы
  1. typedef
  2.     struct Cell {
  3.         int health;
  4.     }
  5. *Cell;
  6.  
  7. void
  8. Cell_Init(Cell this)
  9. {
  10.     this->health = 0;
  11. }
  12.  
  13. void
  14. Cell_Infect(Cell this)
  15. {
  16.     this->health = 1;
  17. }
  18.  
  19.  
  20.  
  21. int
  22. Cell_IsIll(Cell this)
  23. {
  24.     return this->health > 0 && this->health < 7;
  25. }
  26.  
  27. void
  28. Cell_PassTime(Cell this)
  29. {
  30.     if( this->health != 0 ) {
  31.         this->health += 1;
  32.         if( this->health == 11 ) {
  33.             this->health = 0;
  34.         }
  35.     }
  36. }
  37.  
  38. typedef
  39.     struct Field {
  40.         struct Cell cells[N+2][M+2];
  41.     }
  42. *Field;
  43.  
  44. void
  45. Field_Init(Field this)
  46. {
  47.     int i, j;
  48.     for( i = 1; i < N+1; ++i ) {
  49.         for( j = 1; j < M+1; ++j ) {
  50.             cells[i][j] = 0;
  51.         }
  52.     }
  53. }

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

  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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут