мне нужно построить бар gragh, которые иллюстрируют распределение псевдослучайных чисел, который определяется методом линейной конгруэнтнойКласс для подсчета частоты чисел в интервале
Xn+1 = (a * Xn + c) mod m
U = X/m
на интервале [0,1]
Например: Интервал частот
[0;0,1] 0,05
[0,1;0,2] 0,15
[0,2;0,3] 0,1
[0,3;0,4] 0,12
[0,4;0,5] 0,1
[0,5;0,6] 0,15
[0,6;0,7] 0,05
[0,7;0,8] 0,08
[0,8;0,9] 0,16
[0,9;1,0] 0,4
Я написал такую программу
lcg.h:
class LCG {
public:
LCG();
~LCG();
void setSeed(long);
float getNextRand();
void countFrequency();
void printFrequency();
private:
vector<int>frequencies;
long seed;
static const long a = 33;
static const long c = 61;
static const long m = 437;
};
lcg.cpp:
void LCG::setSeed(long newSeed)
{
seed = newSeed;
}
LCG::LCG() {
setSeed(1);
}
LCG::~LCG() { }
float LCG::getNextRand() {
seed = (seed * a + c) % m;
return (float)seed/(float)m;
}
void LCG::countFrequency()
{
for (int i = 0; i < 10; ++i)
frequencies[i] = 0;
for (int i = 0; i < m; ++i)
{
float u = getNextRand();
int r = ceil(u * 10.0);
frequencies[r] = frequencies[r] + 1;
}
}
void LCG::printFrequency()
{
for (int i = 0; i < 10; ++i)
{
const float rangeMin = (float)i/10.0;
const float rangeMax = (float)(i + 1)/10.0;
cout << "[" << rangeMin << ";" << rangeMax << "]"
<< " | " << frequencies[i] << endl;
}
}
main.cpp:
int main()
{
LCG l;
l.countFrequency();
l.printFrequency();
}
Она компилирует и ворсинки правильно, но не хотят работать. Я не знаю, что не так с моей программой. что-то не так с функциями countFrequency и printFrequency. Но я не могу понять, что. Может быть, вы знаете?
Это ваша полная программа? Если это так: вам нужна функция 'main'. Если нет, можете ли вы прояснить проблему? Как вы его скомпилируете? Что вы подразумеваете, говоря, что он «не хочет бегать»? Что происходит, когда вы пытаетесь запустить его? –
Вы пробовали работать в отладчике? Что происходит тогда? –
1. 'frequency' не имеет правильного размера, 2. Используйте' double', а не 'float', 3. Ditch that destructor. Пусть компилятор использует значение по умолчанию. – Bathsheba