head += ", " + ComboBox3->Items->Strings[1]; // Статистика
ListBox1->Items->Add(head); // Добавляем заголовок в ListBox1
ListBox1->Items->Add("0 "+Edit4->Text); // Добавляем в ListBox1 строку "0 m"
for(int k=0;k<Edit4->Text.ToInt();k++) // Цикл по количеству выборок
{
//-----Формирование массива случайных чисел
for(int i=0;i<Edit3->Text.ToInt();i++) // Цикл по количеству элементов выборки
{
//-----Генерация случайной величины распределенной по выбранному закону
if(ComboBox2->ItemIndex==0)
{
//-----Геометрическое распределение
random = G(Edit1->Text.ToDouble());
};
if(ComboBox2->ItemIndex==1)
{
//-----Биномиальное распределение
random = Bi(Edit2->Text.ToInt(),Edit1->Text.ToDouble());
};
if(ComboBox2->ItemIndex==2)
{
//-----Распределение Пуассона
random = P(Edit1->Text.ToDouble());
};
//-----Добавление случайной величины в массив
int flag=0; // Флаг существования такой СВ в выборке
for(int i=0;i<seed->Count;i++) // Ище такую СВ в выборке
{
AStruct = (PAList) seed->Items[i]; // перебирая ее элементы
if(AStruct->Random == random) { AStruct->Count++; flag=1; break; }; // нашли
}; //-----Если такое значение уже есть в массиве, то увеличить count
if(flag==0) // Если не нашли
{
AStruct = new TAList; // - создаем новый элемент выборки
AStruct->Random = random; // СВ
AStruct->Count = 1; // Кол-во :=1
if(ComboBox2->ItemIndex==0) // Считаем Теоретич. Функцию распределения
{
//-----Геометрическое распределение
F = GF(Edit1->Text.ToDouble(),random);
};
if(ComboBox2->ItemIndex==1)
{
//-----Биномиальное распределение
F = BiF(Edit2->Text.ToInt(),random,Edit1->Text.ToDouble());
};
if(ComboBox2->ItemIndex==2)
{
//-----Распределение Пуассона
F = PF(Edit1->Text.ToDouble(),random);
};
AStruct->F = F;
seed->Add(AStruct); // добавить элемент в выборку
};
};
seed->Sort(&compare); // Сортировка выборки, когда все величины
// сгенерированы. Используем Функцию сравнеия
// compare (см. выше)
//-----Формирование массива статистик
//-----Статистика Колмогорова
statis=0; // Статистика :=0
double Fx=0, // Теор. функ. распред.
Fnx=0, // Эмп. функ. распред.
Max=-10, // Максимум Dn
Dn; // Текущкее Dn
int ii=0; // Счетчик
for(int i=0;i<seed->Count;i++) // Перебираем элеенты упорядоченной выборки
{
AStruct = (PAList) seed->Items[i]; // получаем элемент
Fx = AStruct->F; // получаем теор. функ. распред.
Fnx += double(AStruct->Count)/Edit3->Text.ToDouble();
// считаем эмп. функ. распред.
Dn=fabs(Fnx-Fx); // считаем Dn
if(Dn>Max) Max=Dn; // проверяем на максимум
};
statis=(6.*Edit3->Text.ToDouble()*Max+1.)/(6.*sqrt(Edit3->Text.ToDouble()));
// Считаем статистику
//------Добавляем статистику в массив
AStruct1 = new TAStat;
AStruct1->Stat = statis;
stat->Add(AStruct1);
//------Вывод времени
ftime(&f);
ft = double(f.time) + double(f.millitm)/1000;
tt = ft-st;
StatusBar1->Panels->BeginUpdate();
StatusBar1->Panels->Items[0]->Text = "Затрачено времени : "
+ FloatToStr(floor(tt*100)/100) + " с.";
StatusBar1->Panels->EndUpdate();
//------Чистим память от выборки
for(int i=0;i<seed->Count;i++)
{
AStruct = (PAList) seed->Items[i];
delete AStruct; // Удаляем элементы выборки
};
seed->Clear(); // Удаляем указатели
};
//-----Вывод массива статистик
for(int i=0;i<stat->Count;i++) // Идем по массиву
{
AStruct1 = (PAStat) stat->Items[i]; // Получаем элемент
ListBox1->Items->Add(FloatToStr(AStruct1->Stat)); // Выводим элемент
};
}
//--------------------------------------------------------------------------
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.