نمایش نتایج 1 تا 12 از 12

نام تاپیک: تولید اعداد تصادفی واقعی

  1. #1
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702

    تولید اعداد تصادفی واقعی

    با کد زیر متونید اعداد تصادفی واقعی تولید کنید این برنامه با دلفی نوشته شده است ولی الگوریتم اون بسیار واضح است!! برای 64 عدد( میتونید به تعداد دلخواه عوض کنید)

    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&#93 ;));
    End;

    end.

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مرداد 1382
    محل زندگی
    تهران
    پست
    484
    فکر کنم منظورت از تصادفی واقعی در حقیقت تصادفی غیر تکراری برای یک بازه مشخص بوده٬ درسته؟

  3. #3
    کاربر دائمی
    تاریخ عضویت
    مرداد 1382
    محل زندگی
    تهران
    پست
    484
    در تعریف آرایه‌ها داریم:

    Arr1,Arr2 : Array[1..64] of Integer;

    از طرفی در کد نوشته شده:

    For I := 0 To 64 Do 
    Arr1[I + 1] := I;

    در آخرین دور این حلقه مقدار متغییر I برابر 64 هست و در نتیجه مقدار 64 به خانه 65 از آرایه Arr1 انتساب داده می‌شه٬ یعنی یک خانه بیشتر از حد بالای آرایه!

    پیشتر هم یکی از دوستان در بخش دلفی این موضوع رو گوشزد کرده بود.

  4. #4
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    آقا من متوجه نشدم این الگوریتم چی کار می کنه که اعداد تصادفی واقعی تولید می کنه ! می شه دلیلش رو هم بگین ؟

  5. #5
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702
    بله!! این در واقع اعداد تصادفی غیر تکراری است!!
    من این کد رو کامل اجرا کردم و مشکلی نداشت!! میتونید این ارایه رو یه خونه بزرگ کنید!!! :P
    منظور من الگوریتم اونه!! :P :lol:

  6. #6
    کاربر دائمی آواتار Mohammad_Mnt
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    جنگلی به نام ایران
    سن
    41
    پست
    1,875
    نقل قول نوشته شده توسط Mohammad_Mnt
    می شه دلیلش رو هم بگین ؟
    :?:

  7. #7
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702
    محمد جان این بخش کد رو ببین و خط به خط اجرا کن ببین متغییرها چطور جاشون عوض میشه
    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&#93 ;));
    End;


    :oops: :shock:

  8. #8
    Mohammad_Mnt نوشته است:
    می شه دلیلش رو هم بگین ؟
    فکر کنم منظور سید کاری که این برنامه می کند باشد :lol:
       const
    max_Arr=64;
    var
    arr:array [1..max_Arr] of integer;
    i:integer;
    k,temp:integer;
    begin
    for i:=1 to max_Arr do
    arr[i]:=i;
    Randomize;
    for i:=1 to max_Arr do
    begin
    k:=random(max_Arr+1);
    //swap arr[i] , arr[k]
    temp:=arr[i];
    arr[i]:=arr[k];
    arr[k]:=temp;
    end;
    end;
    end.

  9. #9
    کاربر دائمی آواتار SReza1
    تاریخ عضویت
    تیر 1382
    محل زندگی
    کنار تعدادی تراریوم و کاکتوس!
    پست
    702
    درسته!! همین روشه! :lol:
    اگه طول آرایه من یک دونه زیاد شه درست میشه! :D
    بعد اینکه شما یک آرایعه صرفه جویی کردی :D
    من بازم میگم!! مهم الگوریتمه تولید اعداد که البته به delphiarea هم گفتم و گفته شد اعداد تصادفی بدون تکرار!! در واقع اعداد رندم دلفی دست کرا میکنه چون اگه قرار باشه تکراری نباشه که دیگه رندم نیست :shock: :twisted:

  10. #10
    کاربر دائمی
    تاریخ عضویت
    مرداد 1382
    محل زندگی
    تهران
    پست
    484
    نقل قول نوشته شده توسط ali11ali112000
    Mohammad_Mnt نوشته است:
    می شه دلیلش رو هم بگین ؟
    فکر کنم منظور سید کاری که این برنامه می کند باشد :lol:
       const
    max_Arr=64;
    var
    arr:array [1..max_Arr] of integer;
    i:integer;
    k,temp:integer;
    begin
    for i:=1 to max_Arr do
    arr[i]:=i;
    Randomize;
    for i:=1 to max_Arr do
    begin
    k:=random(max_Arr+1);
    //swap arr[i] , arr[k]
    temp:=arr[i];
    arr[i]:=arr[k];
    arr[k]:=temp;
    end;
    end;
    end.
    خط زیر
    k:=random(max_Arr+1); 

    باید بشه
    k:=random(max_Arr)+1; 

  11. #11
    باید بشه
    k:=random(max_Arr)+1;
    درست است :D من اول فکر می کردم random بزرگتر از صفر تولید میکند ولی ممکن است صفر هم بشود :lol:

  12. #12
    کاربر دائمی آواتار bijibuji
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    تهران
    پست
    370

    نقل قول: تولید اعداد تصادفی واقعی

    کسی می تونه تابع رندوم بنویسه بدون استفاده از تایمر (ساعت) کامپیوتر؟

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •