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

نام تاپیک: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

  1. #1

    تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    سلام من میخوام 2 عدد تصادفی جداگانه همزمان ایجاد کنم که هر کدام در متغیر جداگانه باشند اگر تکراری هم بودند مشکلی نیست ولی مشکل اینجاست که اعداد تولید شده در هر متغیر دقیقا یکیست .

    به کد زیر توجه کنید :

      Random rand = new Random();

    var a = rand.Next(256);

    var b = rand.Next(256);


    عددهای تصادفی ایجاد شده در متغیر های a,b یکی هست با اینکه جداگانه اجرا میشوند . هر متغیر میتونه عدد تکراری هم تولید کنه ولی نمیخوام هر 2 متغیر شبیه هم باشند . الان دقیقا عدد تولید شده در متغیر a همان هست که همزمان در b ایجاد شده .

    اومدم جداگانه از روی کلاس Random نوع ایجاد کردم ولی بازم اعداد تولید شده هر 2 شبیه هم هستن .

  2. #2
    کاربر دائمی آواتار vb-sosol
    تاریخ عضویت
    خرداد 1387
    محل زندگی
    همین نزدیکی
    پست
    217

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند


  3. #3

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    نقل قول نوشته شده توسط vb-sosol مشاهده تاپیک
    مرسی
    از مطالب تاپیک این کد زیر به کارم میاد به شرط اینکه بشه براش بازه تعریف کرد که مثلا بین 0 تا 20 عدد تصادفی تولید کنه .


    byte[] randomNumber = new byte[1];
    System.Security.Cryptography.RNGCryptoServiceProvi der.Create().GetBytes(randomNumber);
    MessageBox.Show("Random Number : " + randomNumber[0].ToString());



  4. #4

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    سلام
    این شکلی هم میشه نوشت

    Random rand = new Random();

    var a = rand.Next(256);

    var b = rand.Next(255);
    if ( b >= a)
    b++;

  5. #5
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    کلاس Random از system time به عنوان seed استفاده می کنه و اگه از یک object این کلاس به طور متوالی استفاده بشه به دلیل سرعت بالای اجرا دو خط متوالی عملا seed و نتیجه یکسان می شه

    یا با یه تاخیری باید دومین Next رو اجرا کنین و یا از دو کلاس مختلف Random استفاده کنین

  6. #6
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    نقل قول نوشته شده توسط rahnema1 مشاهده تاپیک
    سلام
    این شکلی هم میشه نوشت

    Random rand = new Random();

    var a = rand.Next(256);

    var b = rand.Next(255);
    if ( b >= a)
    b++;
    این کار شما یجور کلا شرعی محسوب میشه چرا که اصلا مفهوم مستقل بودن دو متغیر تصادفی رو زیر سوال میبره

  7. #7

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    نقل قول نوشته شده توسط elec60 مشاهده تاپیک
    کلاس Random از system time به عنوان seed استفاده می کنه و اگه از یک object این کلاس به طور متوالی استفاده بشه به دلیل سرعت بالای اجرا دو خط متوالی عملا seed و نتیجه یکسان می شه

    یا با یه تاخیری باید دومین Next رو اجرا کنین و یا از دو کلاس مختلف Random استفاده کنین
    من نمیدونم دیگه چطور استفاده کنم . هرروشی رفتم هر 2 مثل هم ایجاد میشن . اومدم 2 کلاس مختلف ایجاد کردم و متد های Random را جداگانه نوشتم . بعد توی فرم اصلی جداگانه ازشون نمونه ساختم و استفاده کردم بازم مثل هم شد !

    کلاس متفاوت دیگه برای این کار چی هست که بشه براش بازه هم تعریف کرد که بین یک محدوده عدد تولید بشه ؟

    نقل قول نوشته شده توسط elec60 مشاهده تاپیک
    این کار شما یجور کلا شرعی محسوب میشه چرا که اصلا مفهوم مستقل بودن دو متغیر تصادفی رو زیر سوال میبره
    بله درسته . بازم اون روش دوستمون یجورایی شبیه به هم میشد و خوب نیست .

  8. #8

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    نقل قول نوشته شده توسط elec60 مشاهده تاپیک
    این کار شما یجور کلا شرعی محسوب میشه چرا که اصلا مفهوم مستقل بودن دو متغیر تصادفی رو زیر سوال میبره
    اتفاقا دوستمون هم میخواستند مستقل نباشند. یه بار دیگه سوالشون را بخونید گفتند می خواهند دو متغیر هیچ وقت مقادیرشون مثل هم نشه.
    این یعنی چی؟ یعنی اینکه اگه واسه اولی یک عدد انتخاب شد دومی تمام اعداد رندوم را می تونه بپذیره غیر از عددی که مربوط به اولی می شه. من هم همین کار را کردم. کجاش کلاه شرعی بود؟؟

  9. #9

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    نقل قول نوشته شده توسط elec60 مشاهده تاپیک
    کلاس Random از system time به عنوان seed استفاده می کنه و اگه از یک object این کلاس به طور متوالی استفاده بشه به دلیل سرعت بالای اجرا دو خط متوالی عملا seed و نتیجه یکسان می شه

    یا با یه تاخیری باید دومین Next رو اجرا کنین و یا از دو کلاس مختلف Random استفاده کنین
    لزومی نداره با تاخیر اجرا بشن. ما فقط یکبار شیء rand را ایجاد می کنیم و هر چه تعداد بخواهیم و بدون هیچ تاخیری می تونیم عدد رندوم درست کنیم. در واقع در سی شارپ ضمانت شده که ترتیب مقدار دهی اولیه در فیلد ها یا متغیر های محلی حفظ بشه.
    علت اینکه نتایج ممکنه یکسان بیاد اینه که چون عدد به اصطلاح ،تصادفیه تصادفا ممکنه نتایج یکی بشه. و این احتمال زمانی بیشتر میشه که دامنه مقادیری که لازمه به طور تصادفی ازشون انتخاب بشه کم باشه مثلا اینجا که 256 هست

  10. #10
    کاربر جدید آواتار msg.wizard
    تاریخ عضویت
    آذر 1386
    محل زندگی
    بهشهر
    پست
    8

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    از این کد ها استفاده کن



    byte[] g1 = Guid.NewGuid().ToByteArray();
    byte[] g2 = Guid.NewGuid().ToByteArray();
    int a = BitConverter.ToInt32(g1, 4);
    int b = BitConverter.ToInt32(g2, 4);
    b = b % 255;
    a = a%255;

  11. #11

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    نقل قول نوشته شده توسط msg.wizard مشاهده تاپیک
    از این کد ها استفاده کن



    byte[] g1 = Guid.NewGuid().ToByteArray();
    byte[] g2 = Guid.NewGuid().ToByteArray();
    int a = BitConverter.ToInt32(g1, 4);
    int b = BitConverter.ToInt32(g2, 4);
    b = b % 255;
    a = a%255;
    توجه ! در این روش ممکنه a و b یکسان بشن. هیچ ضمانتی نیست که یکسان نشوند!

  12. #12
    کاربر دائمی آواتار MehdiElexal
    تاریخ عضویت
    آذر 1388
    محل زندگی
    پشت میز
    پست
    519

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    Random rand = new Random();

    var a = rand.Next(256);
    var b = rand.Next(256);
    if ( b == a)
    var b = rand.Next(255);

    آخرین ویرایش به وسیله MehdiElexal : چهارشنبه 27 اسفند 1393 در 13:19 عصر

  13. #13

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    نقل قول نوشته شده توسط rahnema1 مشاهده تاپیک
    توجه ! در این روش ممکنه a و b یکسان بشن. هیچ ضمانتی نیست که یکسان نشوند!
    خوب اینش را دیگه باید با شرط چک کرد .

    با این کد مشکل من حل شد . تکراری بودن a,b گاهی وقتا مشکلی نیست . درواقع مشکل من این بود که اعداد تصادفی ایجاد شده اون موقع 100٪ یکی بودن ولی با این کد گاهی وقتا شاید یکی بشن که موردی نداره .

  14. #14
    کاربر دائمی آواتار MehdiElexal
    تاریخ عضویت
    آذر 1388
    محل زندگی
    پشت میز
    پست
    519

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    امکان نداره در روش پیشنهادی بنده دو عدد یکسان بشن ! شرط برای همینه
    اگر مساوی باشه مجدد انجام میده

  15. #15
    کاربر دائمی
    تاریخ عضویت
    مرداد 1388
    محل زندگی
    پونک
    سن
    42
    پست
    490

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    Random rnd = new Random();
    int random_number1 = rnd.Next(10);
    int random_number2 = rnd.Next(10);
    while (random_number2 == random_number1)
    {
    random_number2 = rnd.Next(10);
    }
    Console.WriteLine(random_number1);
    Console.WriteLine(random_number2);
    آخرین ویرایش به وسیله elec60 : چهارشنبه 27 اسفند 1393 در 14:33 عصر

  16. #16

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    نقل قول نوشته شده توسط MehdiElexal مشاهده تاپیک
    Random rand = new Random();

    var a = rand.Next(256);
    var b = rand.Next(256);
    if ( b == a)
    var b = rand.Next(255);

    خب لازمه یه حلقه بذارید که هی مرتب چک کنه که این دو برابرند یا نه که حلقه هزینه داره

  17. #17

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    نقل قول نوشته شده توسط HOSSEINONLINE7 مشاهده تاپیک
    خوب اینش را دیگه باید با شرط چک کرد .

    با این کد مشکل من حل شد . تکراری بودن a,b گاهی وقتا مشکلی نیست . درواقع مشکل من این بود که اعداد تصادفی ایجاد شده اون موقع 100٪ یکی بودن ولی با این کد گاهی وقتا شاید یکی بشن که موردی نداره .
    ببینید این کدی که شما گذاشتید که 256 به عنوان ورودی هست :

    Random rand = new Random();

    var a = rand.Next(256);

    var b = rand.Next(256);

    مطمئن باشید به احتمال 99 درصد عددهای a و b متفاوت خواهند بود
    احتمالا شما مثلا اینجور نوشتید که جواب همیشه یکسان میشه ( به علت سرعت):


    var a = new Random().Next(256);

    var b = new Random().Next(256);

  18. #18

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    یکی از قدرتمند ترین الگوریتم ها ... تو مسابقات سال 92 به کار بردم ... در یک ملیونیم ثانیه هم تکراری ازش بیرون نمیاد ...
    فایل رو پیوست کردم ... به دلایلی سورس کامل رو نمیتونم بزارم فقط کد اصلی و فایل اجرایی ...
    فایل های ضمیمه فایل های ضمیمه

  19. #19

    نقل قول: تولید 2 عدد تصادفی همزمان که مانند هم نباشند

    نقل قول نوشته شده توسط Abbas Naghdi مشاهده تاپیک
    یکی از قدرتمند ترین الگوریتم ها ... تو مسابقات سال 92 به کار بردم ... در یک ملیونیم ثانیه هم تکراری ازش بیرون نمیاد ...
    فایل رو پیوست کردم ... به دلایلی سورس کامل رو نمیتونم بزارم فقط کد اصلی و فایل اجرایی ...
    مشکل با الگوریتم نیست. اینجا که قرار بین 0 تا 255 دو تا عدد انتخاب بشه احتمال اینکه همزمان دو عدد یکسان بیاد دقیقا میشه 0.39062 درصد و احتمال اینکه دو عدد متفاوت باشند میشه 99.60938 درصد
    که تفاوت الگوریتمها تاثیر چندانی در نتیجه نداره همون طور که در پست شماره 4 اشاره کردم لازم بود با کمترین هزینه دوعدد تصادفی ایجاد بشه که هیچ وقت با هم برابر نیستند که با امکانات معمولی سی شارپ این کار به خوبی امکان پذیره

تاپیک های مشابه

  1. سوال: تولید عدد تصادفی بین دو مقدار
    نوشته شده توسط Keyhan Clever در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 2
    آخرین پست: چهارشنبه 16 اردیبهشت 1388, 20:00 عصر
  2. سوال: تولید عدد تصادفی
    نوشته شده توسط Keyhan Clever در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 6
    آخرین پست: دوشنبه 14 اردیبهشت 1388, 23:43 عصر
  3. تولید عدد تصادفی و ذخیره در اکسس
    نوشته شده توسط vahid_d_0101 در بخش مطالب مرتبط با بانکهای اطلاعاتی در VB6
    پاسخ: 1
    آخرین پست: سه شنبه 13 اسفند 1387, 20:48 عصر
  4. تولید عدد تصادفی
    نوشته شده توسط corona در بخش C#‎‎
    پاسخ: 1
    آخرین پست: یک شنبه 03 آذر 1387, 20:06 عصر
  5. تولید عدد تصادفی
    نوشته شده توسط hamhik در بخش برنامه نویسی در 6 VB
    پاسخ: 6
    آخرین پست: چهارشنبه 15 شهریور 1385, 17:42 عصر

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

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