اطلاعیه

Collapse
No announcement yet.

اعداد تصادفی با c

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    اعداد تصادفی با c

    سلام به همگی
    دوستان من میخوام اعداد 1 تا 50 رو به صورت رندوم و با استفاده از avr تولید کنم. اعداد همه صحیح باشن و تکراری هم نباشن. یعنی همه اعداد یه بار انتخاب شن و بعد از نو شروع بشه این روند.
    کسی برنامه ای برای این کار میدونه ؟ یا اینکه چطور میشه این کارو انجام داد ؟
    ممنون
    ---------
    .
    .
    ...........

    #2
    پاسخ : اعداد تصادفی با c

    به نام خدا
    سلام
    روش های مختلفی وجود داره برای این کار
    یکی از روش هایی که خودم هم استفاده کردم اینه:
    - ذخیره ی عدد رندوم تولیدی و مقایسه با آن
    البته این روش برای تولید دسته ای بزرگ از اعداد رندوم غیر تکراری
    زیاد مناسب نیست، چون زمان زیادی مورد استفاده قرار میگیره.

    قبل از اینکه روش کار رو هم بگم، یک روش دیگه هست
    بدین صورت که از رندوم جنریتور هایی استفاده میشه که اعداد تکراری تولید نمیکنن
    (البته بعد از مدتی، هر تولید کننده ی اعداد تصادفی، به تکرار میرسه)
    از نظر ریاضی میشه اثبات کرد که هر رندوم جنریتور چه دوره ی تناوبی داره
    و اینکه اولین عدد تکراری کی خواهد بود.

    برای اطلاعات بیشتر از رندوم جبریتورهای غیر تکراری عبارت زیر رو جستجو کن:
    no repeat random generator for c
    البته عبارت زیر هم مشابهه:
    non-repeat random generator for c

    و اما روش مقایسه چطوره؟
    فرض کن شما میخوای 50 تا عدد تصادفی غیر تکراری تولید کنی.
    معمولا avr ها اعداد 16 بیتی تولید میکنن
    یعنی تابع ()rand اونها، خروجی int داره
    عدد تولیدی بین 0 و 65535 میشه
    حالا برای اینکه عدد تولیدی بین 1 و 50 باشه
    باید در هر بار که یک عدد تولید میکنی باقیمانده ش بر 51 رو حساب کنی!
    از نظر برنامه نویسی اینطوری میشه:
    کد:
    int rand_num;
    rand_num = rand() % 51;
    خب پس اعداد تولیدی میشه بین 1 و 50
    اما حالا چطور از تکرار جلوگیری کنیم؟
    فرض کن عدد اول رو تولید کردی
    حالا میای عدد دوم رو تولید میکنی، میبینی آیا باقبلی یکسانه یا نه؟
    اگه نبود که میری مرحله بعد اگه بود، دوباره میسازی!
    در مرحله سوم باید عدد سومی تولیدی رو با 2 تا عدد قبلی مقایسه کنی!
    در مرحله بعد عدد چهارم تولیدی با 3 عدد قبلی
    الی آخر ...
    مثلا در مرحله 45، باید با 44 تا قبلی مقایسه بشه!
    بخاطر همینه که میگم یک الگوریتمیه که برای اعداد زیاد کمی طولانی میشه!
    اما خب برای میکرو avr برای 50 تا عدد خیلی سخت نیست ...

    بازهم میگم: روش های دیگه ای هم هست
    یه جستجویی بکنید ...

    اینم یه سایت نسبتا جالب:
    http://www.random.org/
    1: اللهم صل علی محمد و آل محمد و عجل فرجهم و ...
    2: دانش بهتره یا ثروت؟ بدون شعور هیچکدوم!
    3: دلا معاش چنان کن که گر بلغزد پای *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

    دیدگاه


      #3
      پاسخ : اعداد تصادفی با c

      نوشته اصلی توسط ajapyy
      سلام به همگی
      دوستان من میخوام اعداد 1 تا 50 رو به صورت رندوم و با استفاده از avr تولید کنم. اعداد همه صحیح باشن و تکراری هم نباشن. یعنی همه اعداد یه بار انتخاب شن و بعد از نو شروع بشه این روند.
      کسی برنامه ای برای این کار میدونه ؟ یا اینکه چطور میشه این کارو انجام داد ؟
      ممنون
      از یه پورت adc که مدار بازه بخون.
      عملا مقدار نویز رو داری اندازه گیری میکنی.
      استفاده از نویز برای تولیذ اعداد رندم نسبتا معمول تره (مثلا سیستم عامل لینوکس نویز دستگاه ها رو توی /dev/random بهتون میده)

      دیدگاه

      لطفا صبر کنید...
      X