Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

нужна помощь с генератором чисел!!!

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> нужна помощь с генератором чисел!!!
Имя
Сообщение << Старые топики   Новые топики >>
нужна помощь с генератором чисел!!! - 2010-06-11 11:17:55.070000   
spywebka

Сообщений: 35
Оценки: 0
Присоединился: 2010-06-03 13:42:22.350000
Нужна программа (с или паскаль - неважно),
1 программа ) которая находит длину периода генератора псевдослучайной последовательности, последовательность (числовая) береться из файла. Нужно найти период (через сколько начнется зацикливание.
2 программа ) программа которая тестирует последовательность на случайность любым из методов, (аналоги тесты ДИХАРД, тесты НИСТ, тесты КНУТА) любая, но главное чтобы в ответе давала ответ: прозодит или непроходит тест, почему!

есть один у меня на С, кто может предложить другие тесты?

Вот исходник который нашел, кидает камешки в 15*15 квадратик и подсчитывает, потом строит гистограмму:

#include <iostream>
#include <stdlib.h>
#include <conio.h>

int main()
{
const int NX = 15;
const int NY = 15;
int Nums[NX][NY];

for (int i = 0; i < NX; i++)
for (int j = 0; j < NY; j++)
Nums[j] = 0;
randomize();
int a, b;
for (int i = 0; i &lt; 1000000; i++)
{
a = random(NX);
b = random(NY);
Nums[a]++;
}
for (int i = 0; i &lt; NX; i++)
{
for (int j = 0; j &lt; NY; j++)
{
std::cout.width(5);
std::cout &lt;&lt; Nums[j];
}
std::cout &lt;&lt; '\n';
}
getch();

clrscr();
int f[25];
for (int i = 0; i &lt; 25; i++)
f = 0;
for (int i = 0; i &lt; NX; i++)
for (int j = 0; j &lt; NY; j++)
{
int c = Nums[j] - 4194;
if (c &gt;= 0 && c &lt; 500)
f[c / 20]++;
}
for (int i = 0; i &lt; 25; i++)
{
for (int j = 0; j &lt; f; j++)
std::cout &lt;&lt; '-';
std::cout &lt;&lt; '\n';
}
getch();
}
Post #: 1
RE: нужна помощь с генератором чисел!!! - 2010-06-12 18:41:17.540000   
spywebka

Сообщений: 35
Оценки: 0
Присоединился: 2010-06-03 13:42:22.350000
ребята, неужели никто не может помочь?
Программа генерирует неповторяющиеся числа:
(* Тест для юнита RAND.PAS *)
(* Жуткий аналог неповтоpяющегося RANDOM'a *)
uses Rand;

var
i,t1,t :integer;
b :boolean;
mas2 : array[1..15] of integer;

begin
startrandom(1,10); {получить числа от … до }
b:=false;
mas2[1]:=1; {исключаемое значение}

for i:=1 to 15 do begin
steprandom;
t:=getrandom;
if t=mas2[1] then begin
t1:=i+1;
b:=true;
end;
mas2[i+1]:=t
end;
if b then mas2[t1]:=getrandom;
stoprandom;

for i:=1 to 15 do writeln (mas2);
readln;
end.

библиотека к проге:
(* Жуткий аналог неповтоpяющегося RANDOM'a *)

unit Rand;

interface

type

PRandomRecord = ^TRandomRecord;
TRandomRecord = record
Item: integer;
NextItem: PRandomRecord;
end;

function StartRandom(from_i, to_i: integer): boolean;
procedure StopRandom;
function GetRandom: integer;
procedure StepRandom;

var

StartItem,OldItem,CurItem: PRandomRecord;

const

VStopRandom: boolean = true;

implementation

function StartRandom(from_i, to_i: integer): boolean;
var
i, io: integer;
begin
if not VStopRandom then begin
StartRandom := false;
Exit;
end;
io := from_i;
GetMem(StartItem, sizeof(TRandomRecord));
CurItem := StartItem;
StartItem^.Item := io;
StartItem^.NextItem := nil;
for i := from_i to to_i - 1 do begin
inc(io);
OldItem := CurItem;
GetMem(CurItem,sizeof(TRandomRecord));
CurItem^.Item := io;
CurItem^.NextItem := nil;
OldItem^.NextItem := CurItem;
end;
CurItem^.NextItem := StartItem;
StartRandom := true;
VStopRandom := false;
end;

procedure StopRandom;
var
OldItem: PRandomRecord;
begin
if VStopRandom then Exit;
OldItem := CurItem;
CurItem := CurItem^.NextItem;
OldItem^.NextItem := nil;
while CurItem^.NextItem &lt;&gt; nil do begin
OldItem := CurItem;
CurItem := CurItem^.NextItem;
FreeMem(OldItem, sizeof(TRandomRecord));
end;
FreeMem(CurItem, sizeof(TRandomRecord));
VStopRandom := true;
StartItem := nil;
end;

function GetRandom: integer;
begin
GetRandom := -1;
if StartItem = nil then Exit;
GetRandom := CurItem^.Item;
OldItem := CurItem;
while CurItem^.NextItem &lt;&gt; OldItem do CurItem := CurItem^.NextItem;
CurItem^.NextItem := OldItem^.NextItem;
if CurItem = OldItem then
StopRandom
else
FreeMem(OldItem, sizeof(TRandomRecord));
end;

procedure StepRandom;
var i: integer;
begin
Randomize;
if CurItem^.NextItem = nil then StopRandom;
for i :=Random(100) to 100 do CurItem := CurItem^.NextItem;
end;

end.
Ребят помогите разобраться в юните! т.е. напишите че за что отвечает, вернее работу каждой процедурки, ато сам я запутался
Post #: 2
RE: нужна помощь с генератором чисел!!! - 2010-06-13 18:58:29.410000   
spywebka

Сообщений: 35
Оценки: 0
Присоединился: 2010-06-03 13:42:22.350000
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <conio.h>
#include <string.h>

#define NN 4

int main(){
clock_t start = clock();
time_t t;
int n1[NN],n2[NN];
srand((int)time(&t));
for(int i=0;i<NN;i++) n1=rand();
double d=0;
for(;;) {
for(int i=0;i&lt;NN-1;i++) n2=n2[i+1];
n2[NN-1]=rand();
if(memcmp(n1,n2,sizeof(n1))==0) break;
d+=1;
}
printf("Repetition period: %1.0f",d);
printf("Время работы = %f\n", (long double) (clock() - start) / CLOCKS_PER_SEC);
getch();
}

вот нашел исходничег, помгите в нем разобраться: находит период генератора у С
Post #: 3
RE: нужна помощь с генератором чисел!!! - 2010-06-13 19:42:36.336666   
hromjo

Сообщений: 434
Оценки: 0
Присоединился: 2009-12-31 15:42:15.823333
У тебя что конкретно не получается? Код работает, так что ещё нужно?
Post #: 4
RE: нужна помощь с генератором чисел!!! - 2010-06-15 04:05:35.693333   
spywebka

Сообщений: 35
Оценки: 0
Присоединился: 2010-06-03 13:42:22.350000
у меня есть прога под линукс - кто поможет мне переделать ее под виндойс. просто для линухи Ttime.h использует, -есть аналог на виндойс? ато нефурычит потом - ругается!
Post #: 5
RE: нужна помощь с генератором чисел!!! - 2010-06-15 08:25:05.866666   
hromjo

Сообщений: 434
Оценки: 0
Присоединился: 2009-12-31 15:42:15.823333
Раздел - работа.
Post #: 6
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> нужна помощь с генератором чисел!!!







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.