Symulacja Liszaja

0

Witam,
Muszę napisać taki program :
Zasymuluj zarażenie liszajem stosując tablicę n × n (np. n = 11) komórek skóry. Rozpocznij od
zarażenia środkowej komórki. Po upływie kolejnej jednostki czasu zarażona komórka ma 50%
szans zarażenia każdej ze zdrowych sąsiednich komórek. Po sześciu jednostkach czasu zarażona
komórka staje się na cztery jednostki odporna i następnie zdrowa. Zasymuluj tę chorobę i
wyświetlaj zawartość tablicy po upływie każdej jednostki czasu ukazując, które z komórek są
zarażone, odporne lub zdrowe.

Jak mam się za to zabrać aby zrobićto jak naprościej ?
Pomoże ktoś ?

1

Stwórz strukturę, reprezentującą jeden kawałek skóry. Nadaj jej takie własności jak aktualny stan - ZARAŻONA/ODPORNA/ZDROWA(podatna na zarażenie) i licznik określający jak dawno temu była zarażona.
Stwórz następnie tablicę takich struktur - twój połeć skóry. Następnie napisz funkcje, które przekształcą ów połeć zgodnie z podanymi wyżej warunkami. Dla każdej z komórek sprawdzisz jej stan i zrobisz co trzeba z nią oraz jej sąsiadami. Jako, że zapewne stan połcia zmienia się równocześnie wszędzie, to wynik zapisuj do nowego zbioru komórek, który następnie "nałożysz" na stary, gdy zmieni się chwila czasowa.

Poszukaj w internecie implementacji na przykład "Gry w życie" albo innych automatów komórkowych, będziesz miał pogląd jak można to wszystko zrealizować.

1
#define N 11
enum {ZDROWA,ZARAZONA,ODPORNA} Tb[N][N]={{0}};
Tb[N>>1][N>>1]=ZARAZONA;
bool more=true;
while(more)
  {
   more=false;
   ... // tu wyliczasz zarażenie/odporność oraz ustawiasz more=true jeżeli zaszla zmiana.
  }
1

@_13th_Dragon ten twój enum jest za krótki, bo nie uwzględnia czasu choroby i odporności.

najlepiej tago enuma zrobic tak:

const int CzasOdpornosci = 4;
const int CzasChoroby = 6
enum StanKomorki {
    Zdrowa,
    ZdrowaOdporna
    OzdrowialaOdporna = ZdrowaOdporna + CzasOdpornosci - 1,
    Chora,
    Zarazona = Chora + CzasChoroby - 1
};

bool czyChora(enum StanKomorki x) {
     return x>=Chora;
}

bool czyOdporna(enum StanKomorki x) {
     return x>=ZdrowaOdporna; // chorą też można uznać za odporną
}

Jeśli wartość komórki jest różna od Zdrowa to zmniejszasz jej wartość o jeden przy każdym kolejnym kroku czasowym.

1 użytkowników online, w tym zalogowanych: 0, gości: 1