Witam posiadam dosyć zapewne prosty problem. Mam napisac program symulujący chorobę Liszaja. Tzn na dwuwymiarowej tablicy mam obiekty z których środkowy jest zarażony i ma on infekować sąsiednie pola co jeden cykl. Mam funkcję składową pobierającą tę tablicę obiektów i przyjąłem że zarazony obiekt bedzie co jeden cykl infekował jeden dolny obiekt na jeden cykl, niestety infekuje mi całą linijkę obiektów w dół i na boki też jakoś tak w ogole nie stabilnie. I nie wiem w czym lezy ten problem już probowałem na wszelkie sposoby. Problem lezy w funkcji nastepny chociaż niekoniecznie.
klasa.cpp
#include <iostream>
#include "klasa.h"
using namespace std;
void Cliszaj::ustaw_xy(int n,int m) // ustawia wspolrzedne i domyslny stan 1 - zdrowy
{
x=n;
y=m;
stan=1;
przebieg=1;
}
void Cliszaj::wypisz_xy() //wypisuje tablice
{
if(stan==1)
cout<<"+";
else if(stan>1 || stan<8)
cout<<"-";
else
cout<<"0";
}
void Cliszaj::zacznij()// zaraza pole srodkowe stan 2-7
{
stan=2;
}
void Cliszaj::zaraz()
{
if(przebieg!=2)
stan=2;
przebieg=2;
}
void Cliszaj::nastepny(Cliszaj **wsk,int n)
{
for(int i=1;i<n-1;i++)
{
for(int j=1;j<n-1;j++)
{
if((wsk[i][j].stan>1)&&(wsk[i][j].stan<8))
if(wsk[i+1][j].przebieg==1)
{
wsk[i+1][j].zaraz();
}
}
}
}
main.cpp
#include <iostream>
#include "klasa.h"
#include <ctime>
using namespace std;
void czekaj( int iMilisekundy );
void main()
{
int n,x; //n rozmiar macierzy, x jednostka czasu
cout<<"Podaj szerokosc tablicy"<<endl;
Cliszaj **Pwsk;
cin>>n;
Cliszaj **tab = new Cliszaj *[n]; //dynamiczna tablica tablic obiektow
Pwsk=tab;
cout<<"Podaj przedzial czasowy"<<endl;
cin>>x;
system( "cls" );
for (int i = 0; i < n; ++i )
tab[i] = new Cliszaj[n];
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
tab[i][j].ustaw_xy(i,j);
}
}
tab[n/2][n/2].zacznij();
while(true)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
tab[i][j].wypisz_xy();
}
cout<<endl<<endl;
}
tab[0][0].nastepny(Pwsk,n);
czekaj(x*1000);
system( "cls" );
}
cin>>n;
}
void czekaj( int iMilisekundy ) //zegar
{
clock_t koniec = clock() + iMilisekundy * CLOCKS_PER_SEC / 1000.0;
while( clock() < koniec ) continue;
}