Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: О rand и srand  (Прочитано 4212 раз)
0 Пользователей и 1 Гость смотрят эту тему.
romeo
Гость
« : 29-06-2008 16:43 » 

Вопрос знатокам: в классе есть функция случайного заполнения массива двоичными значениями. Однако при каждом вызове этой функции генериться одна и та же последовательность. Чем это может быть вызвано и как этого можно избежать?
Код:
#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;
}
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 29-06-2008 17:07 » 

функция srand должна вызываться всего один раз в программе. Вынеси ее в main и прибудет тебе счастье.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
romeo
Гость
« Ответ #2 : 29-06-2008 17:25 » 

Счастье прибыло!!! Спасибо большое, Finch!:))
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines