struct chromosom
{
int numer;
chromosom * pNext;
};
struct osobnik
{
double f;
chromosom * glowa;
osobnik * pNext;
};
void dopasowanie(osobnik*&pierwszy, osobnik*&nowa, double r,double w)
{
osobnik*entity = pierwszy;
while (pierwszy)
{
if (entity->f == -1)
{
int f = 0;
double q = 0;
chromosom*wsk = entity->glowa;
while (wsk)
{
f = f + wsk->numer;
wsk = wsk->pNext;
}
q = f = (f % 100);
q = q / 100;
cout << q << endl;
entity->f = q;
}
if (entity->f > w)
{
chromosom*wskg = nullptr;
osobnik*wsk = dodajOsobnika(nowa, entity->f);
while (entity->glowa)
{
chromosom*p = new chromosom{ entity->glowa->numer };
if (wskg)
{
wskg->pNext = p;
wskg = p;
}
else
wsk->glowa = wskg = p;
entity->glowa = entity->glowa->pNext;
}
}
if (entity->f > r)
{
chromosom*wskg = nullptr;
osobnik*wsk = dodajOsobnika(nowa, entity->f);
while (entity->glowa)
{
chromosom*p = new chromosom{ entity->glowa->numer };
if (wskg)
{
wskg->pNext = p;
wskg = p;
}
else
wsk->glowa = wskg = p;
entity->glowa = entity->glowa->pNext;
}
}
pierwszy = pierwszy->pNext;
}
}
Problem polega na tym, że chcę skopiować struktury ze "starej" listy do listy tymczasowej, po czym tymczasowa ma stać się "starą". Pierwszy if tyczy się stricte czego innego i mam pewność że działa poprawnie ale dwa kolejne ify sprawiają mi problem bo średnio radzę sobie z poruszaniem się po listach list. Dla f danego osobnika większego od w osobnik ma zostać przepisany raz, dla większego od r jeszcze kolejny raz, innymi słowy dla w<f<r osobnik w nowej liście będzie raz, dla r<f 2 razy. Lista chromosomów dla danego klonowanego osobnika też ma się sklonować do nowej listy.