Dobry wieczór,
Napisałam program rozwiązujący problem szeregowania zadań korzystając z algorytmu genetycznego (mniej istotna część wstępu :) ). Pewna część programu jest powtarzana wielokrotnie i za którymś, chyba niezbyt określonym razem program się wysypuje (przy wcześniejszych iteracjach wszystko działa bez zarzutu), więc jedyna myśl, która przychodzi mi do głowy to problemy z pamięcią, ale że jestem początkującym programistą, to nie do końca się na tym znam.
Dlatego proszę o rzucenie okiem, czy wstawiony przeze mnie fragment kodu może generować jakieś problemy pod względem pamięciowym? W felernej iteracji pojawia się "d" ale "e" już nie.
cout<<"d ";
for (int y=0; y<10; y++) ///iteracja po 10 zadaniach
{
int masz=zadania[kolejnosc[y]].operacja1[0]-1; //kazde zadanie=3 operacje
long int kolumny2=0;
if (zadania[kolejnosc[y]].operacja1[1]>0) //dopoki operacja jeszcze nieskonczona
{
for(long int kolumny=0; kolumny<10000; kolumny++)
{
if (glowna[masz][kolumny]==0)
{
if (zadania[kolejnosc[y]].operacja1[1]<=0)
break;
else
{
glowna[masz][kolumny]=1; //w tablicy uporzadkowan wstawiam 1
zadania[kolejnosc[y]].operacja1[1]--;
}
}
else
if (glowna[masz][kolumny]==2) //komorka zajeta przez maintenance
{
if (glowna[masz][kolumny-1]==1)
{
kara+=int(ceil(0.3*zadania[kolejnosc[y]].operacja1[1]));
} //naliczamy kare za przerwanie operacji
}
kolumny2=kolumny;
}
}
kolumny2+=1;
long int kolumny3=0;
int masz2=zadania[kolejnosc[y]].operacja2[0]-1;
if (zadania[kolejnosc[y]].operacja2[1]>0)
{
for(kolumny2; kolumny2<10000; kolumny2++)
{
if (glowna[masz2][kolumny2]==0)
{
if (zadania[kolejnosc[y]].operacja2[1]<=0)
break;
else
{
glowna[masz2][kolumny2]=1;
zadania[kolejnosc[y]].operacja2[1]--;
}
}
else
if (glowna[masz2][kolumny2]==2)
{
if (glowna[masz2][kolumny2-1]==1)
{
kara+=int(ceil(0.3*zadania[kolejnosc[y]].operacja2[1]));
}
}
kolumny3=kolumny2;
}
}
kolumny3++;
int masz3=zadania[kolejnosc[y]].operacja3[0]-1;
if (zadania[kolejnosc[y]].operacja3[1]>0)
{
for(kolumny3; kolumny3<10000; kolumny3++)
{
if (glowna[masz3][kolumny3]==0)
{
if (zadania[kolejnosc[y]].operacja3[1]<=0)
break;
else
{
glowna[masz3][kolumny3]=1;
zadania[kolejnosc[y]].operacja3[1]--;
}
}
else
if (glowna[masz3][kolumny3]==2)
{
if (glowna[masz3][kolumny3-1]==1)
{
kara+=int(ceil(0.3*zadania[kolejnosc[y]].operacja3[1]));
}
}
}
}
}
cout<<"e ";
Każde zadanie ma 3 operacje, dlatego w powyższym kodzie jest praktycznie 3 razy to samo.
Czy ktoś jest w stanie znaleźć problem? Cały kod w załączniku (wszystkie deklaracje itp.)
Z góry dziękuję za odpowiedź
- dobry.cpp (19 KB) - ściągnięć: 204