нужна помощь с генератором чисел!!!
Пользователи, просматривающие топик: 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 < 1000000; i++) { a = random(NX); b = random(NY); Nums[a]++; } for (int i = 0; i < NX; i++) { for (int j = 0; j < NY; j++) { std::cout.width(5); std::cout << Nums[j]; } std::cout << '\n'; } getch(); clrscr(); int f[25]; for (int i = 0; i < 25; i++) f = 0; for (int i = 0; i < NX; i++) for (int j = 0; j < NY; j++) { int c = Nums[j] - 4194; if (c >= 0 && c < 500) f[c / 20]++; } for (int i = 0; i < 25; i++) { for (int j = 0; j < f; j++) std::cout << '-'; std::cout << '\n'; } getch(); }
|
|
|
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 <> 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 <> 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. Ребят помогите разобраться в юните! т.е. напишите че за что отвечает, вернее работу каждой процедурки, ато сам я запутался
|
|
|
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<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(); } вот нашел исходничег, помгите в нем разобраться: находит период генератора у С
|
|
|
RE: нужна помощь с генератором чисел!!! - 2010-06-13 19:42:36.336666
|
|
|
hromjo
Сообщений: 434
Оценки: 0
Присоединился: 2009-12-31 15:42:15.823333
|
У тебя что конкретно не получается? Код работает, так что ещё нужно?
|
|
|
RE: нужна помощь с генератором чисел!!! - 2010-06-15 04:05:35.693333
|
|
|
spywebka
Сообщений: 35
Оценки: 0
Присоединился: 2010-06-03 13:42:22.350000
|
у меня есть прога под линукс - кто поможет мне переделать ее под виндойс. просто для линухи Ttime.h использует, -есть аналог на виндойс? ато нефурычит потом - ругается!
|
|
|
RE: нужна помощь с генератором чисел!!! - 2010-06-15 08:25:05.866666
|
|
|
hromjo
Сообщений: 434
Оценки: 0
Присоединился: 2009-12-31 15:42:15.823333
|
Раздел - работа.
|
|
|
|
|