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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2010, 15:16   #1
duff
 
Регистрация: 07.04.2010
Сообщений: 9
По умолчанию генератор псевдослучайных чисел

народ помогите написать написать генератор псевдослучайных чисел

смотрите если записать так Аn[j] = random(2) то он внесет массив An[j] примерно по 50 процентов 1 и 0. Ну так надо продумать что бы он вносил не по 50 процентов а допустим 30 процентов 0 -лей и остальное загонял на единицу. Процентное соотношение можно задавать вначале, ну типо задайте процентное соотношение нулей ну или как там будет удобно.

Так как в randome этого не реализовать, то помогите написать данный генератор.....
duff вне форума Ответить с цитированием
Старый 07.04.2010, 15:42   #2
Google2010
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 316
По умолчанию

Код:
type Tar=array[1..100] of byte;
  var b:tar;
...
  procedure Rand( p:Real;var a:Tar;n:integer);
  var
  i:integer;
  k:integer;
  c:integer;
  begin
   k:=round(p*n/100);
   for I := 1 to n do
   a[i]:=0;
   for I := 1 to k do begin
     repeat
      c:=random(n)+1;

     until a[c]=0 ;
   a[c]:=1;
   end;
  for I := 1 to n  do
    write(a[i]:4);
  end;
использование

Код:
Rand(30,b,10);

Последний раз редактировалось Google2010; 07.04.2010 в 21:24.
Google2010 вне форума Ответить с цитированием
Старый 07.04.2010, 16:44   #3
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Код:
uses crt;
var
mas : array[1..100] of integer;
chisla : array[1..100] of integer;
n,p,a : integer;
i,k,j : integer;

function getrandel : integer;
var t : integer;
begin
t := random(100)+1;
getrandel := mas[t];
end;
{----------}
procedure check;
var i,j,r : integer;
k : array[1..200] of integer;
begin
for i:=1 to n do
 k[i] := 0;
for i:=1 to 100 do
 begin
 r := getrandel;
 for j:=1 to n do
  if r = chisla[j] then inc(k[j]);
 write(r);
 if i mod 20 = 0 then writeln;
 end;

writeln('-------------');
writeln('Statistic: ');
for i:=1 to n do
 writeln('Chislo ',chisla[i],' vypalo ',k[i],' raza');
writeln;
end;

begin
clrscr;
randomize;
write('Kolichestvo elementov: ');
readln(n);
k := 1;
for i:=1 to n do
 begin
 write('Vvedite chislo ',i,': ');
 readln(a);
 chisla[i] := a;
 write('Vvedite procent vypadaniya: ');
 readln(p);
 for j:=1 to p do
  begin
  mas[k] := a;
  inc(k);
  end;
 end;
{-------}
check;

readln;
end.
Вот как то так.
Писал не я.
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Старый 07.04.2010, 17:08   #4
duff
 
Регистрация: 07.04.2010
Сообщений: 9
По умолчанию

оо спасибо ща пойду подгонять под себя
duff вне форума Ответить с цитированием
Старый 07.04.2010, 17:11   #5
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

ROMA2PVT! Мона спросить, а в чем исключительная прелесть генерации случайного числа t := random(100)+1; в отличие от просто t:=random(101) Извини, дошло до тупого! ты исключаешь 0... Но, массивы обычно индексируют от 0 и до... Так что это все пионерские излишества...
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 07.04.2010 в 17:14.
Grag вне форума Ответить с цитированием
Старый 07.04.2010, 17:37   #6
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Хах!Grag Я ж говорю писал не я. А самому разбираться в ней чёт не очень хочется.Вот и подскажите парню что в ней не так,да как это исправить.
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Старый 07.04.2010, 17:44   #7
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Да и массивы в паскале с чего угодно индексируются.
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Старый 07.04.2010, 18:06   #8
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Зачем так усложнять?
Код:
ProcNul := 15;
for j := 1 to n do
  if random(100) < ProcNul then A[j] := 0 else A[j] := 1;
ProcNul - процент нулей в массиве.
P.S. Сразу скажу, чтоб не придирались - заполняется статический массив размерности n нулями и единицами, нулей будет не ровно 15%, но их количество будет стремится к этому числу справа и слева (как впрочем и random(2) не даёт ровно 50% при малых значениях n)
eoln вне форума Ответить с цитированием
Старый 07.04.2010, 18:14   #9
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от ROMA2PVT Посмотреть сообщение
Да и массивы в паскале с чего угодно индексируются.
Да и вообще можно писать как угодно... Только как напишешь, так оно и работать потом будет
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 07.04.2010, 18:26   #10
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Цитата:
Да и вообще можно писать как угодно... Только как напишешь, так оно и работать потом будет
Ну пока ни кто не жаловался.На мои проги я имею ввиду.
Тайну вы мне не открыли что если генерировать с помощью randomize не добьёшься идеального процентного соотношения.
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка качества датчика псевдослучайных чисел SerG1ON Microsoft Office Excel 0 22.10.2009 15:38
Генератор псевдослучайных чисел Max- Помощь студентам 12 21.05.2009 21:06
Генерация последовательности псевдослучайных натуральных чисел с требуемым распределением вероятности elsin Фриланс 4 19.11.2008 08:57
генератор псевдослучайных чисел - распределение elsin Общие вопросы Delphi 12 15.05.2008 16:07