Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.79
tatiankaja
Сообщений: n/a
#1

Написание генератора случайных чисел - C++

13.09.2010, 22:08. Просмотров 5296. Ответов 8
Метки нет (Все метки)

Здравствуйте!
Помогите пожалуйста выполнить лабу.
Суть состоит в том, чтобы написать генератор случайных чисел по равномерному, а также экспоненциальному, нормальному законам и закону Пуассона.
Результат генерации нужно записать в файл.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2010, 22:08     Написание генератора случайных чисел
Посмотрите здесь:

Написание своего генератора случайных чисел с различными плотностями распределения - C++
Помогите найти статьи/книги, где рассматривается написание своего генератора случайных чисел с различными плотностями распределения...

Написание генератора простых чисел - C++
Составить программу-генератор простых чисел , в основу положить формулу 2х2+29 при 0≤ х ≤28

В MVS использование генератора случайных чисел - C++
Задача такова - Даны n прямоугольников со сторонами, параллельными осям координат, заданных координатами своей левой нижней и правой...

Заполнить файл n натуральными числами с помощью генератора случайных чисел - C++
Как-то даже неудобно спрашивать. Ребят, но если не трудно помогите пожалуйста. 1. Заполнить файл n натуральными числами с помощью...

Забить char-строку 16-ричными числами из генератора случайных чисел - C++
чет не могу понять как? есть буфер char packetbuff; его нужно забить из генератора случайных чисел. 10ричными не вопрос ...

С помощью генератора случайных чисел ,задать значения элементов массива - C++
Ввести с клавиатуры размерность одномерного массива . С помощью генератора случайных чисел ,задать значения его элементов. Написать две...

Сформировать матрицу с помощью генератора случайных чисел и организовать ее вывод - C++
Составить программу для подсчета произведения нечетных элементов двумерной матрицы В размерности m × n. Сформировать матрицу с помощью...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хохол
Эксперт C++
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
13.09.2010, 22:10     Написание генератора случайных чисел #2
Вам нужно выполнить (фриланс), или подкинуть идею (могу скинуть нашу методичку по терверу, там было примерно такое задание)?
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
13.09.2010, 23:50     Написание генератора случайных чисел #3
Цитата Сообщение от tatiankaja Посмотреть сообщение
Здравствуйте!
Помогите пожалуйста выполнить лабу.
Суть состоит в том, чтобы написать генератор случайных чисел по равномерному, а также экспоненциальному, нормальному законам и закону Пуассона.
Результат генерации нужно записать в файл.
Ты начни, а мы поможем - с тем, что будет непонятно
Shaper
22 / 22 / 2
Регистрация: 05.05.2010
Сообщений: 82
14.09.2010, 12:47     Написание генератора случайных чисел #4
Думаю, начать надо с того, что взять обычный генератор псевдослучайных чисел, например rand(). Сам по себе он выдает равномерное распределение. Потом нужно найти формулы преобразования из одного распределения в другое. Преобразование применяется к массиву псевдослучайных значений.
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
14.09.2010, 12:54     Написание генератора случайных чисел #5
tatiankaja, ты бы хоть ради приличия дал ссылку какую нить, или что ни будь...
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,930
Завершенные тесты: 1
14.09.2010, 18:39     Написание генератора случайных чисел #6
Описания различных распределений есть в википедии. Если распределение описывается функцией F, надо скармливать равномерно распределённые числа обратной функции F'. В случае нормального распределения обратная функция не может быть выражена аналитически, но в той же вике указано, как это обойти.
Arl
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 22
14.09.2010, 23:55     Написание генератора случайных чисел #7
у меня курсач был по этому... на С Борланд. Все, кроме пуассона. выводит числа, и сторит гистограмму... если хочешь ,могу скинуть код!
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
15.09.2010, 08:17     Написание генератора случайных чисел #8
Arl,
Скиньте, мы тоже посмотрим)))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2010, 18:29     Написание генератора случайных чисел
Еще ссылки по теме:

Заполнение матрицы целыми числами с помощью генератора случайных чисел - C++
1.Матрицу 8*8 заполнить целыми числами с помощью генератора случайных чисел. 2.Найти определитель. 3.Найти min и max элементы матрицы. ...

Заполнить файл целыми 30 числами, полученными с генератора случайных чисел - C++
Заполнить файл целыми 20 числами, полученными с помощью генератора случайных чисел в интервале от 0 до 200. Вывести результат на экран. ...

При помощи генератора случайных чисел вычислить 10 элементов массива действительного типа и вывести их - C++
Ребят, напишите программу решения задания, используя функции: в основной функции ввести с клавиатуры или вычислить при помощи генератора...

Используя функции сформировать с помощью генератора случайных чисел двумерный массив и вывести его на экран - C++
Используя функции сформировать с помощью генератора случайных чисел двумерный массив и вывести его на экран. код в С++, не могу...

Работа с srand и установка начального значения генератора чисел - C++
Вообщем имеется вот такая строчка кода: srand( static_cast<unsigned int>(time(NULL)) ); Пишу в Borland C, но при компиляции выводит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Arl
0 / 0 / 0
Регистрация: 13.11.2009
Сообщений: 22
15.09.2010, 18:29     Написание генератора случайных чисел #9
Файл "Random":
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>
#include<iostream.h>
 
int i, j, l, r;
int const n=100;
double alpha, x[n], c[n], b, alpha1, alpha2, alpha3, ksi, w1,w2,d;
FILE* file;
 
void Expon(int l)
{
l=2;
alpha=(double)random(RAND_MAX)/RAND_MAX;
x=-l*log(1-alpha);
 
}
 
 
void gauss()
{
do
{
alpha1=(double)random(RAND_MAX)/RAND_MAX;
alpha2=(double)random(RAND_MAX)/RAND_MAX;
alpha3=(double)random(RAND_MAX)/RAND_MAX;
w1=2*alpha1-1;
w2=2*alpha2-1;
}while (w1*w1+w2*w2<=1);
d=sqrt(w1*w1+w2*w2);
w1=w1/d;
w2=w2/d;
ksi=sqrt(-2*log(alpha3)*w1);
}
 
void Ravnom(double a, double b )
{
alpha=(double)random(RAND_MAX)/RAND_MAX;
x=a+(b-a)*alpha;
}
 
 
void Sort(double c[n])
{
for(i=0; i<n; i++)
 {
  for (j=0; j<n-i-1; j++)
   {
    if (c[j]>c[j+1])
     {
      b=c[j];
      c[j]=c[j+1];
      c[j+1]=b;
     }     
   }
 }
}

Файл "Unit1":
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include <math.h>
#include <fstream.h>
//#include <fstream>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
 
 
double TForm1::Expon(double l)
{
        double alpha=(double)random(RAND_MAX)/RAND_MAX;
        return (-l*log(1-alpha));
}
 
 
double TForm1::gauss(double a, double s)
{
        double alpha1, alpha2, alpha3;
        double w1, w2, ksi;
        do
        {
                alpha1=(double)random(RAND_MAX)/RAND_MAX;
                alpha2=(double)random(RAND_MAX)/RAND_MAX;
                w1=2*alpha1-1;
                w2=2*alpha2-1;
        }while (w1*w1+w2*w2<=1);
        alpha3=(double)random(RAND_MAX)/RAND_MAX;
        w1=w1/sqrt(w1*w1+w2*w2);
        w2=w2/sqrt(w1*w1+w2*w2);
        ksi=  sqrt(-2*log(alpha3))*w1;
        return (a*ksi+s);
}
 
double TForm1::Ravnom(double a, double b )
{
        double alpha=(double)random(RAND_MAX)/RAND_MAX;
        return (a+(b-a)*alpha);
}
 
 
void TForm1::Sort(double *c)
{
        double b;
        for(int i=0; i<Edit1->Text.ToInt(); i++){
                for (int j=0; j<Edit1->Text.ToInt()-i-1; j++){
                        if (c[j]>c[j+1]){
                                b=c[j];
                                c[j]=c[j+1];
                                c[j+1]=b;
                        }
                }
        }
}
 
const int ten=10;
 
void TForm1::Graphic(double *x)
{
        double len = x[Edit1->Text.ToInt()-1] - x[0];
        double n[ten];
        for(int i=0;i<ten;i++)
                n[i]=0;
        int k=0;
        for(int i=0;i<Edit1->Text.ToInt();i++){
                k=(int)((x[i]-x[0])/len*ten);
                if (k==ten) k=k-1;
                        n[k]++;
                }
 
        for(int i=0;i<ten;i++)
                n[i]/=Edit1->Text.ToInt();
        Series1->Clear();
        k=0;
        for(int i=0;i<ten;i++){
                        Series1->AddXY((i+1)*(len/10), n[i], "", clRed);
 
 
        }
        Label4->Visible=true;
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        if(!Edit1->Text.IsEmpty()){
                ofstream fout("random.txt");
                x = new double[Edit1->Text.ToInt()];
                switch(RadioGroup1->ItemIndex){
                        case 0:{
                                if(!Edit2->Text.IsEmpty()){
                                        for(int i=0;i<Edit1->Text.ToInt();i++){
                                                x[i] = Expon(Edit2->Text.ToDouble());
                                                fout << x[i] <<  ", ";
                                        }
                                }
                                else
                                        ShowMessage("!");
                        } break;
                        case 1:{
                                if(!((Edit2->Text.IsEmpty()) || (Edit3->Text.IsEmpty()))){
                                        for(int i=0;i<Edit1->Text.ToInt();i++){
                                                x[i] = gauss(Edit2->Text.ToDouble(), Edit3->Text.ToDouble());
                                                fout << x[i] << ", ";
                                        }
                                }
                        } break;
                        case 2:{
                                if(!((Edit2->Text.IsEmpty()) || (Edit3->Text.IsEmpty()))){
                                        for(int i=0;i<Edit1->Text.ToInt();i++){
                                                x[i] = Ravnom(Edit2->Text.ToDouble(), Edit3->Text.ToDouble());
                                                fout << x[i] <<  ", ";
                                        }
                                }
                                else
                                        ShowMessage("!");
                        } break;
                        default:{
                                ShowMessage("Виберіть закон");
                        } break;
                }
                fout.close();
                Sort(x);
                Graphic(x);
                delete x;
        }
        else
                ShowMessage("Будь ласка, вкажіть кількість чисел і параметри розподілу!");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
       switch(RadioGroup1->ItemIndex){
                case 0:{
                        Edit3->Visible=false;
                        GroupBox1->Visible=true;
 
                } break;
                case 1:{
                        Edit3->Visible=true;
                        GroupBox1->Visible=true;
                } break;
                case 2:{
                        Edit3->Visible=true;
                        GroupBox1->Visible=true;
                } break;
        }
}
File "project"


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("Unit1.cpp", Form1);
USEFORM("Unit2.cpp", Frame2); /* TFrame: File Type */
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        try
        {
                 Application->Initialize();
                 Application->CreateForm(__classid(TForm1), &Form1);
                 Application->Run();
        }
        catch (Exception &exception)
        {
                 Application->ShowException(&exception);
        }
        catch (...)
        {
                 try
                 {
                         throw Exception("");
                 }
                 catch (Exception &exception)
                 {
                         Application->ShowException(&exception);
                 }
        }
        return 0;
}
Вложения
Тип файла: doc Текст програми.doc (51.0 Кб, 199 просмотров)
Тип файла: rar Project1.rar (17.4 Кб, 208 просмотров)
Yandex
Объявления
15.09.2010, 18:29     Написание генератора случайных чисел
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru