Вопрос знатокам: в классе есть функция случайного заполнения массива двоичными значениями. Однако при каждом вызове этой функции генериться одна и та же последовательность. Чем это может быть вызвано и как этого можно избежать?
#pragma once
#include <iostream>
#include <ctime>
using namespace std;
class Chromosome
{
bool **Chromos;
static int GeneQty, GeneSize;
public:
Chromosome ();
~Chromosome();
void ShowChrom();
void FillGenInChrom(int GeneNum, bool* Gene[]);
void FillRandChrom();
static void SetDim(int GQty, int GSize)
{
GeneQty = GQty;
GeneSize = GSize+2;
}
};
Chromosome::Chromosome()//создание пустой хромосомы, как массива генов
{
srand(time(NULL));
Chromos = new bool* [GeneQty];
for (int i=0; i<GeneQty; i++)
{
Chromos[i] = new bool[GeneSize];
};
for (int l=0; l<GeneQty; l++)
for (int j=0; j<GeneSize; j++)
Chromos[l][j]= false;
};
Chromosome::~Chromosome()
{
//cout<<"destr";
for(int i=0; i<GeneQty; i++)
delete [] Chromos[i];
delete [] Chromos;
}
void Chromosome::FillRandChrom() //заполнение хромосомы случайными значениями генов
{
srand(time(NULL));
for (int i=0; i<GeneQty; i++)
for (int j=0; j<GeneSize; j++) Chromos[i][j]=(bool)(rand() > RAND_MAX/2);
};
void Chromosome::ShowChrom()
{
cout<<"Cromosome "<<endl;
for (int i=0; i<GeneQty; i++)
{
for (int j=0; j<GeneSize; j++) cout<<Chromos[i][j];
cout<<" ";
}
cout<<endl;
};
#include <iostream>
#include <ctime>
#include "class.h"
using namespace std;
int Chromosome::GeneQty; //добавил, чтобы однажды задавался размер хромосомы для всех ее экземпляров
int Chromosome::GeneSize; //без этого проблемы с линкером
int main()
{
int r=5, z=4;
srand(time(0));
Chromosome::SetDim(r,z);
Chromosome Ch1, Ch2;
Ch1.ShowChrom(); Ch2.ShowChrom();
Ch1.FillRandChrom(); Ch1.ShowChrom();
Ch2.FillRandChrom(); Ch2.ShowChrom();
int j;
cin>>j;
return 0;
}