Witam mam problem z kodem, w który chyba polega na tym, że program odnosi się do elementu spoza zakresu wektora, ale nie mogę znaleźć błędu. Proszę o pomoc ew. radę dotyczącą kodu jeśli ktoś widzi jak można zwalczyć ten problem.
Z pozdrowieniami,
theCember
http://pastebin.com/kNk3HrJB , ewentualnie:
#include <iostream>
#include <cstring>
#include <cctype>
#include <iomanip>
#include <vector>
#include <fstream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <ctime>
#define N 200
using namespace std;
class zad
{
public:
int zadanie;
int operacja;
int czas_trwania;
bool czy_mozna;
int miejsce_przerwy;
};
vector<zad> maszyna1;
vector<zad> maszyna2;
vector<zad> przerwy;
vector<int> rozw1;
vector<int> rozw2;
void generator()
{
int suma_czasow=0;
float liczba_przerw=0.0;
int liczba_przerw1=0;
for(int i=0; i<N; i++)
{
int a=(rand()%80)+20;
maszyna1.at(i).czas_trwania=a;
maszyna1.at(i).czy_mozna=1;
maszyna1.at(i).zadanie=i;
maszyna1.at(i).operacja=1;
int b=(rand()%80)+20;
maszyna2.at(i).czas_trwania=b;
maszyna2.at(i).czy_mozna=1;
maszyna2.at(i).operacja=2;
maszyna2.at(i).zadanie=i;
}
for(int i=0; i<maszyna1.size(); i++)
{
suma_czasow=suma_czasow+maszyna1.at(i).czas_trwania+maszyna2.at(i).czas_trwania;
}
cout<<"Suma czasow: "<<suma_czasow;
suma_czasow=suma_czasow/0.45;
liczba_przerw=0.1*N;
liczba_przerw1=(int)liczba_przerw;
for(int i=0; i<liczba_przerw; i++)
{
przerwy.at(i).czas_trwania=(rand()%80)+20;
przerwy.at(i).czy_mozna=0;
przerwy.at(i).zadanie=-1;
przerwy.at(i).operacja=(rand()%2)+1;
przerwy.at(i).miejsce_przerwy=rand()%suma_czasow;
}
for(int j=0; j<N; j++)
{
int a=rand()%maszyna1.size();
for(int i=rozw1.size(); i<(rozw1.size()-1)+maszyna1.at(a).czas_trwania; i++)
{
rozw1.at(i)=maszyna1.at(a).zadanie;
maszyna1.erase(maszyna1.begin()+a);
}
int b=rand()%maszyna2.size();
for(int i=rozw2.size(); i<(rozw2.size()-1)+maszyna2.at(a).czas_trwania; i++)
{
rozw2.at(i)=maszyna2.at(b).zadanie;
maszyna2.erase(maszyna2.begin()+b);
}
}
int tmp;
for(int i=0; i<liczba_przerw; i++)
{
if(przerwy.at(i).operacja==1)
{
for(int j=przerwy.at(i).miejsce_przerwy; j<przerwy.at(i).miejsce_przerwy+przerwy.at(i).czas_trwania; j++)
{
rozw1.push_back(przerwy.at(i).zadanie);
tmp=rozw1.at(j);
rozw1.at(j)=rozw1.at(rozw1.size()-1);
rozw1.at(rozw1.size()-1)=tmp;
}
}
else if(przerwy.at(i).operacja==2)
{
for(int j=przerwy.at(i).miejsce_przerwy; j<przerwy.at(i).miejsce_przerwy+przerwy.at(i).czas_trwania; j++)
{
rozw2.push_back(przerwy.at(i).zadanie);
tmp=rozw2.at(j);
rozw2.at(j)=rozw2.at(rozw2.size()-1);
rozw2.at(rozw2.size()-1)=tmp;
}
}
}
}
int main()
{
srand (time(NULL));
generator();
cout <<rozw2.at(5);
}