قطعه کد عدد تصادفی بین محدوده خاص در سی پلاس پلاس

تابع rand که برای تولید عدد تصادفی استفاده می‌شود، همواره عددی رندوم در کل طول محدوده‌ی int را برایمان برمی‌گرداند! اما اگر بخواهیم این عدد رندوم در یک بازه‌ی دلخواه باشد، باید به چه صورت عمل کنیم؟!

برای انجام این کار، به دو عدد min و max نیاز داریم. min ابتدای بازه (کمترین مقدار ممکن) و max انتهای بازه (بیشترین مقدار ممکن) خواهد بود. و حالا برای تولید عدد رندوم در این بازه، به همان روال قبلی، یک عدد رندومی را با استفاده از تابع rand تولیده کرده و سپس آن را به کمک الگوریتم زیر، به بازه‌ی مورد نظر انتقال می‌دهیم: (عدد تولید شده می‌تواند شامل خود min و max نیز باشد)

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    int max = 122;
    int min = 97;
    srand(time(0));
    cout << (rand() % (max - min)) + min << endl;
    return 0;
}

در مورد تابع srand می‌توانید «اینجا» را مطالعه کنید.

یک تابع برای انجام این کار

کد بالا را می‌توان به صورت یک تابع نوشت:

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int randrange(int min, int max) {
	srand(time(0));
	return (rand() % (max - min)) + min;
}

int main()
{
	cout << randrange(97, 122) << endl;
	return 0;
}

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده 14 دیدگاه

    1. Angel کاربر مهمان گفت:

      اشتباهِ محضه، میتونید برایِ اعداد 97 و 122(ینی برای بدست آوردنِ عددی بین97 تا 122) امتحانش کنید …

      01
      1. هادی اکبرزاده مدیر سایت گفت:

        سپاس فراوان از توجه شما و اینکه اطلاع دادین. کم پیدا میشه کسی اطلاع رسانی کنه
        الگوریتم اصلاح شد.

    2. alek کاربر مهمان گفت:

      سلام خسته نباشید چطور میشه به ااعداد تصادفی تولید شده دسترسی داشت مثلا مثل دسترسی به اعداد یک ارایه.

      10
      1. هادی اکبرزاده مدیر سایت گفت:

        سلام. میتونین حاصل رو داخل یه متغیر قرار بدین!

        1. alek کاربر مهمان گفت:

          داخل ارایه سعی کردم قرار بدم نشد داخل متغیر هم نمیشه چون یکی عدد که نیست

          00
          1. alek کاربر مهمان گفت:

            یه چیز دیگه که هست این یه تابع هست که قطعا void هست چون داره یع تعداد عدد چاپ میکنه فک نکنم بشه اینجوری بهش دسترسی داشت مثلا مثل دسترسی به یک ارایه .

            00
            1. هادی اکبرزاده مدیر سایت گفت:

              متوجه منظورتون نمیشم! کدوم تابع void عه؟!
              تو انتهای مطلب بالا، ما تابعی به نام randrange نوشتیم که یه عدد تصادفی از نوع int برمی‌گردونه. در مثالیم که براش زدیم، فقط کافیه به جای cout کردن، اون رو داخل یه متغیر بریزین! به شکل زیر:

              int rand = randrange(97, 122);
              1. alek کاربر مهمان گفت:

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

                00
                1. alek کاربر مهمان گفت:

                  کد های اینجا رو درست نگاه نکردم فک کردم چن عدد چاپ میکنه مثلا اگه بخوایم با یه حلقه for تو تابع randrange چند عدد رو چاپ کنیم بعد به همون اعداد چاپ شده دسترسی پیدا کنیم.باید با اشاره گر یا ارایه این کارو انجام داد ؟ مثلا 10 عدد چاپ کنه بعد بشه به هر کدوم دسترسی جداگونه داشت مثل یک ارایه.

                  00
                  1. هادی اکبرزاده مدیر سایت گفت:

                    خب خودتون که دارین جواب خودتونو میدین! 😀
                    داخل یه آرایه بریزین

    3. متین کاربر مهمان گفت:

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

      20
      1. هادی اکبرزاده مدیر سایت گفت:

        منظورتون اینه اعدادی که قبلا تصادفی آورده رو دوباره نیاره؟!
        روش‌های زیادی با توجه به هدف شما وجود داره؛ در ساده‌ترین حالت می‌تونید اعداد رو داخل یه آرایه نگهدارید و بررسی کنید که اگه داخل اون وجود داشت یه عدد تصادفی دیگه بیاره.

    4. حامد کاربر مهمان گفت:

      با سلام
      برنامه شما عدد تصادفی در (min,max] پیدا می کند، یعنی عدد max جزو اعداد تصادفی قرار نمی گیرد، به نظرم کد باید به این صورت باشه:
      (rand() % (max – min)+1) + min

      10
      1. هادی اکبرزاده مدیر سایت گفت:

        سلام. ممنون از اطلاع رسانی
        بررسی میشه

توضیحات پیشنهادی نظرات اشتراک