Предыдущий пост -

Представление чисел с разными законами распределения

Рубрика: C++, Дата: 28 February, 2013, Автор:
Tags:

Определить несколько классов для представления случайных чисел с разными законами распределения (например равномерным или экспоненциальным). В каждом классе должен быть конструктор, задающий параметры распределения и функция draw(), возвращающая следующее случайное число.

Ну чтож попробуем чото сделать, задачка конечно не понятная хз.Ну чтож начнем делать. Думаю мы гадать именно как правильно сделать не будем, а тупо возьмем и сделаем как то. Как то так допустим создадим всего один класс, в конструкторе определим всего два закона. Экспоненциальный допустим у нас будет числа увеличивающиеся по экспоненте, а равномерный увеличивающиеся равномерно, например по прямой.

Так как мы изучаем классы щас нам сам правильный закон не имеет смысла, нам главное щас научиться конструировать классы, поэтому пытаемся хоть как нибуть создать этот класс.

Вот, что получилось класс Racp файл Racp.h

//opredelenie klacca Racp.h
#ifndef RACP_H
#define RACP_H

class Racp
{
	int mass[300];
	int el;//element
public:
	//konctryktor
	Racp(char='r');
	//vozvrachaet cledyyuchee chiclo
	int draw();
};

#endif

Файл Racp.cpp:

//opredelenie functions
#include <iostream>
using std::cout;
using std::endl;
using std::cerr;
#include <cstdlib>
using std::exit;

#include "Racp.h"

Racp::Racp(char a)
:el(0)
{
	if(a=='r')
	{
		cout <<"ravnomernoe"<<endl;
		for(int i=0;i<300;i++)
		{
			mass[i]=i;
		}
	}
	else if(a=='e')
	{
		cout <<"exponencial6noe"<<endl;
		int ex=0;
		for(int i=0;i<300;i++)
		{
			mass[i]=i+ex;
			ex++;
			//cout <<mass[i]<<' ';
		}
	}
	else
	{
		cerr <<"owibka vubora zapolneni9"<<endl;
		exit(1);
	}
}

//vozvrachaet cledyyuchee chiclo
int Racp::draw()
{
	if(el!=300)
	{
		return mass[el++];
	}
	else if(el==300)
	{
		el==0;
		return mass[el++];
	}
}

и файл самой исполняемой программки:

//klacc racpredeleni
#include <iostream>
using std::cout;
using std::endl;

#include "Racp.h"

int main()
{
	Racp a('r');
	for(int i=0;i<300;i++)
	{
		cout <<a.draw()<<' ';
	}
	
	return 0;
}

Я  долго не думал про эти законы распределения равномерный и экспоненциальный, а просто принял, то, что якобы равномерный закон это числа увеличиваются равномерно, от 1 до бесконечности через 1, а экспоненциальный это числа от 1 и по формуле 1+1,  2+2, 3+3, 4+4, и так далее. Отак втулил. Отакая фигня и получилась. Правильно не правильно меня мало волнует главное сделал. 🙂

 

rss