تابع 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; }
اشتباهِ محضه، میتونید برایِ اعداد 97 و 122(ینی برای بدست آوردنِ عددی بین97 تا 122) امتحانش کنید …
سپاس فراوان از توجه شما و اینکه اطلاع دادین. کم پیدا میشه کسی اطلاع رسانی کنه
الگوریتم اصلاح شد.
سلام خسته نباشید چطور میشه به ااعداد تصادفی تولید شده دسترسی داشت مثلا مثل دسترسی به اعداد یک ارایه.
سلام. میتونین حاصل رو داخل یه متغیر قرار بدین!
داخل ارایه سعی کردم قرار بدم نشد داخل متغیر هم نمیشه چون یکی عدد که نیست
یه چیز دیگه که هست این یه تابع هست که قطعا void هست چون داره یع تعداد عدد چاپ میکنه فک نکنم بشه اینجوری بهش دسترسی داشت مثلا مثل دسترسی به یک ارایه .
متوجه منظورتون نمیشم! کدوم تابع void عه؟!
تو انتهای مطلب بالا، ما تابعی به نام randrange نوشتیم که یه عدد تصادفی از نوع int برمیگردونه. در مثالیم که براش زدیم، فقط کافیه به جای cout کردن، اون رو داخل یه متغیر بریزین! به شکل زیر:
اها یه اشتباه بزرگ میکردم اون رنج عدد رو نمیزاشتم واسه همین ارور میداده مرسی
کد های اینجا رو درست نگاه نکردم فک کردم چن عدد چاپ میکنه مثلا اگه بخوایم با یه حلقه for تو تابع randrange چند عدد رو چاپ کنیم بعد به همون اعداد چاپ شده دسترسی پیدا کنیم.باید با اشاره گر یا ارایه این کارو انجام داد ؟ مثلا 10 عدد چاپ کنه بعد بشه به هر کدوم دسترسی جداگونه داشت مثل یک ارایه.
خب خودتون که دارین جواب خودتونو میدین! 😀
داخل یه آرایه بریزین
چطور میشه بهش فهموند از اعدادی که یکبار استفاده شدن دیگه استفاده نکنه
منظورتون اینه اعدادی که قبلا تصادفی آورده رو دوباره نیاره؟!
روشهای زیادی با توجه به هدف شما وجود داره؛ در سادهترین حالت میتونید اعداد رو داخل یه آرایه نگهدارید و بررسی کنید که اگه داخل اون وجود داشت یه عدد تصادفی دیگه بیاره.
با سلام
برنامه شما عدد تصادفی در (min,max] پیدا می کند، یعنی عدد max جزو اعداد تصادفی قرار نمی گیرد، به نظرم کد باید به این صورت باشه:
(rand() % (max – min)+1) + min
سلام. ممنون از اطلاع رسانی
بررسی میشه