PDA

View Full Version : اعداد تصادفی (2)



ramin_rp
سه شنبه 06 آبان 1382, 14:51 عصر
سلام
نگفتین چه طوری رندم واقعی درست کنیم؟ :?:
:oops:

behrooz
سه شنبه 06 آبان 1382, 22:34 عصر
یکی از بهترین راهها استفاده از ثانیه شمار سیستم است.

تابع Random را در داخل یک حلقه بزار و شمارنده حلقه رو ثانیه ساعت سیستم بزار.


موفق باشی........

SReza1
چهارشنبه 07 آبان 1382, 16:59 عصر
روش بالا random واقعی نیست


Var Arr1,Arr2 : Array[1..64] of Word;
Begin
For I := 0 To 64 Do
Arr1[I + 1] := I;
Randomize;
J := 64;
For I := 1 to 64 do
Begin
Temp := Random(J);
Arr2[I] := Arr1[Temp + 1];
Arr1[Temp + 1] := Arr1[j];
Dec(J);
End;
End;


در اینجا 64 عدد rasndom واقعی میبینی که در Arr2 جمع است!! میتونی برای هر چند تا که میخواهی انجام بدی!!! من کلی از این روش استفاده مکنم!

houshmand
جمعه 09 آبان 1382, 22:23 عصر
روش بالا random واقعی نیست


Var Arr1,Arr2 : Array[1..64] of Word;
Begin
For I := 0 To 64 Do
Arr1[I + 1] := I;
Randomize;
J := 64;
For I := 1 to 64 do
Begin
Temp := Random(J);
Arr2[I] := Arr1[Temp + 1];
Arr1[Temp + 1] := Arr1[j];
Dec(J);
End;
End;


در اینجا 64 عدد rasndom واقعی میبینی که در Arr2 جمع است!! میتونی برای هر چند تا که میخواهی انجام بدی!!! من کلی از این روش استفاده مکنم!
:roll: :roll: :roll:


Var Arr1,Arr2 : Array[1..64] of Word;
//**************
For I := 0 To 64 Do
Arr1[I + 1] := I;


arr1[65] :!: :!: :!: :roll: :roll: :?: :?: :?:

SReza1
یک شنبه 11 آبان 1382, 22:24 عصر
چیه علی جان این کد اینقدر پیچیده است؟؟ :shock:


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
Arr1,Arr2 : Array[1..64] of Integer;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
Var I , J , Temp : Integer;
begin
For I := 0 To 64 Do
Arr1[I + 1] := I;
Randomize;
J := 64;
For I := 1 to 64 do
Begin
Temp := Random(J);
Arr2[I] := Arr1[Temp + 1];
Arr1[Temp + 1] := Arr1[j];
Dec(J);
End;
For I := 1 To 64 Do
Listbox1.Items.Add(IntToStr(Arr2[I]));
End;

end.


دیگه این unit اصلیشه!! ببینم ایراد داره یا نه؟؟؟
البته برای تولید 64 عدد random وواقعی است!! میتونید هر جا 64 دیدید مثلا به 100 تبدیل کنید اونوقت 100 تا عدد random واقعی میشه!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! :roll:

houshmand
دوشنبه 12 آبان 1382, 14:21 عصر
دیگه این unit اصلیشه!! ببینم ایراد داره یا نه؟؟؟ :shock:
یک

{$RANGECHECKS ON}یا

{$R+} خوشگل بگزار اولش بعد اجراش کن :mrgreen:
در مورد بقیه اش هم .... :wink:

houshmand
دوشنبه 12 آبان 1382, 17:00 عصر
procedure TForm1.Button1Click(Sender: TObject);
const
max=100;
var
i:integer;
begin
Randomize;
for i:=1 to max do
ListBox1.Items.Add(IntToStr(Random(max)));

end;
ولی اگه خیلی وسواس دارید می توانید

procedure TForm1.Button1Click(Sender: TObject);
const max=100;
var
i:integer;
begin

for i:=1 to max do
begin
Randomize;
ListBox1.Items.Add(IntToStr(Random(max)));
end;
end;
با اینکه راهنمای دلفی نوشته است این کار را نکنید :lol:
Do not combine the call to Randomize in a loop with calls to the Random function. Typically, Randomize is called only once, before all calls to Random.

SyntaxCheck
دوشنبه 12 آبان 1382, 18:53 عصر
هیچ تابع ریاضی تابحال برای بدست آوردن عدد تصادفی به معنای واقعی وجود نداره. در حقیقت اگر کسی بتونه همچین تابعی رو ارائه بده باید در انتظار تشویق جهانی باشه. تمام راه حل های فعلی از جمله توابع رندم زبانهای برنامه نویسی عدد تصادفی رو در یک پریود برمیگردونن.

SReza1
سه شنبه 13 آبان 1382, 19:04 عصر
علی آقا روش شما random واقعی نیست! بیزحمت روش من را امتحان کن با روش خودت مقایسه کن!!! بعد متلک بنداز :(
من از این روش سالهاست دارم استفاده میکنم! و جوابم داده!!! تو روش شما اعداد تکراری یافت میشه ولی در روش من نه!! از شما بعیده!!

houshmand
سه شنبه 13 آبان 1382, 23:28 عصر
ببخشید ناراحت شدید :oops:

said ali
چهارشنبه 14 آبان 1382, 14:27 عصر
با سلام
با توجه به قواعد احتمالات برای اینکه بالاترین رندوم را داشته باشیم باید احتمال هر عضو رو حد اقل کرد که این ممکن نیست مگر به افزودن طول مجموعه که محدود است ولی میتونیم با توجه به همون قواعد تعداد دفعات تکرار رو هم بالا ببریم مثلا برای یک تاس اگر یک بار بندازیم احتمال 6 یک شیشم و اگر دو بار بندازیم احتمال جفت شیش یک سی و شیشم و با توجه به این اگر ما به تعداد دفعات مکفی تابع رندوم را به صورت جدا نه به صورت توانی در هم ضرب کنیم با اینکه محدوده بزرگ میشه و باید یه جوری کوچیکش کرد ولی بهترین حالت رندوم رو میده استفاده از تایمر هم یه ایده خیلی جالب چون از یک نظم یه بی نظمی درست میکنه که اگه بشه درستش کرد خیلی باید جالب باشه.
با تشکر

SReza1
پنج شنبه 15 آبان 1382, 16:36 عصر
آقا رامین خودت نظر بده ببنیم چه روشی بهتره!!!