Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2014, 17:06   #1
romantik1993
Пользователь
 
Регистрация: 12.03.2012
Сообщений: 99
Смех Создать программу через класс

Входные данные: массив значений
Действие: выполняет проверку входного массива значений на соответствие закону распределений (з-н Пуассона)
Выход: вывод о соответствии закону

....попросили выложить, прокоментировать ни чего не могу
romantik1993 вне форума Ответить с цитированием
Старый 25.12.2014, 17:59   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Теория (1) http://i079.radikal.ru/1412/61/77ac92cdfebb.jpg
Теория (2) http://s57.radikal.ru/i155/1412/6d/f86bd66fa7db.jpg

Общий смысл в том, что по выборке аппроксимируется неизвестная функция, которая представляет физический закон природы.

Как на практике делать, сам еще не разобрался.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 25.12.2014, 18:26   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Само распределение Пуассона строится следующим образом, но это еще не решение

Код:
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <malloc.h>
#include <math.h>
#include <windows.h>

class f
{
private:
int k; // размер 
double lambda; // параметр распределения Пуассона
double* a; //

public:

f(int ext_k, double ext_lambda)
{
a = 0;
k = ext_k;
lambda = ext_lambda;
a = new double[k];
}

~f()
{
if (a) delete a;
}

void create_r() // построение распределения Пуассона с заданным параметром
{

if (lambda <= 0) return;

int i;
double lambda_k;
int k_fact;

for(i = 0; i < k; i++)
{
if ( i != 0) lambda_k *= lambda; else lambda_k = 1.0;
if ( i != 0) k_fact *= i; else k_fact = 1;
a[i] = ( lambda_k / (double) k_fact ) * ( exp (- lambda) );
printf("%d: %f\n", i, a[i] );
}

}


};


int main()
{ 
 f* cf = new f(5, 0.8);
 cf->create_r();

 return 0;
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 25.12.2014, 19:17   #4
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Критерием соответствия распределения распределению Пуассона принимается равенство математического ожидания и дисперсии лямбде

Решение возможно такое (если критерий выбран правильно)

Код:
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <malloc.h>
#include <math.h>
#include <windows.h>

#include <iostream>

using namespace std;

class f
{
private:
int k; // размер 
double lambda; // параметр распределения Пуассона
double* a; // распределение Пуассона
double* b; // значения выборки
double* c; // вероятности 
int n; // размер выборки
double mw; // математическое ожидание выборки
double dw; // дисперсия выборки

public:

// конструктор
f(int ext_k, double ext_lambda)
{
a = 0;
k = ext_k;
lambda = ext_lambda;
a = new double[k];
b = 0;
c = 0;
}

// деструктор
~f()
{
if (a) delete a;
if (b) delete b;
if (c) delete c;
}

// математическое ожидание
void m_wait()
{
int i;
double s = 0.0;
for(i=0;i<n;i++)
s += b[i]*c[i];
printf("%f\n", s);
mw = s;
}

// дисперсия
void disp()
{
int i;
double s = 0.0;
for(i=0;i<n;i++)
s += ( (b[i] - mw)*(b[i] - mw) * c[i]  );
printf("%f\n", s);
dw = s;
}


int check()
{
if (dw == mw && mw == lambda)
return 1;
else 
return 0;
}

// ввод выборки
void create_b()
{
scanf("%d", &n);
b = new double[n];
c = new double[n];

int i;

for(i = 0;i < n;i++)
{
cin >> b[i];
cin >> c[i];
}

for(i = 0;i < n;i++)
printf("%d %f %f\n", i, b[i], c[i]); // вывод выборки
m_wait(); //  математическое ожидание
disp(); // дисперсия
check(); // проверка равны ли мат. ожидание и дисперсия и равны ли они лямбде
}

// построение распределения Пуассона с заданным параметром
void create_r() 
{

if (lambda <= 0) return;

int i;
double lambda_k;
int k_fact;

for(i = 0; i < k; i++)
{
if ( i != 0) lambda_k *= lambda; else lambda_k = 1.0;
if ( i != 0) k_fact *= i; else k_fact = 1;
a[i] = ( lambda_k / (double) k_fact ) * ( exp (- lambda) );
printf("%d: %f\n", i, a[i] );
}

}


};

// точка входа в программу
int main()
{

// ввод числа с плавающей точкой 
// double n1; // тип_переменной имя_переменной double означает число  с плавающей точкой
//cin >> n1;cout << n1;
// scanf("%f", &n1);
// printf("%f\n", n1); 
// не могу понять, почему выводит ноль .  // ГИПОТЕЗА: scanf не принимает числа с плавающей точкой
// int n2;  scanf("%d", &n2); printf("%d\n", n2);  // в данном случае выводит

// return 0;

 f* cf = new f(5, 0.8);
 cf->create_r();
 cf->create_b();
 return 0;
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 26.12.2014, 20:31   #5
romantik1993
Пользователь
 
Регистрация: 12.03.2012
Сообщений: 99
По умолчанию

А можно это в delphi пеработать?
romantik1993 вне форума Ответить с цитированием
Старый 26.12.2014, 20:39   #6
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

romantik1993 Можно в начале темы язык указывать, чтоб потом таких казусов не было.
WinCoder вне форума Ответить с цитированием
Старый 28.12.2014, 00:12   #7
romantik1993
Пользователь
 
Регистрация: 12.03.2012
Сообщений: 99
По умолчанию

не подумал сразу
romantik1993 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать программу через SQL-запрос willii БД в Delphi 22 08.10.2014 00:27
С++. Создать базовый класс список. Реализовать на базе списка стек и очередь... Объяснить программу (написать комментарии) the_faceless Помощь студентам 0 17.02.2014 01:54
Cоздать класс жидкость. определить конструкторы деструкторы и функцию печати. создать публик производный класс. (С++) Динар Габбасов Помощь студентам 0 28.05.2012 18:44
Через сортировку Шелла создать программу по убыванию Novenkaja Помощь студентам 3 29.03.2011 21:34
создать динамический Стек через класс шаблон Petruha-nsk Общие вопросы C/C++ 1 08.11.2009 12:41