ورود

View Full Version : مبتدی: تابع srand و آرایه



smemamian
چهارشنبه 20 دی 1391, 23:09 عصر
سلام دوستان

من اگه یه آرایه 100تایی مثلا داشته باشم و تک تک اعداد رو کاربر وارد کنه
چگونه می تونم به صورت رندوم هر تعداد که خواستم رو نشون بدم ؟

اصلا با این تابع میشه ؟ اگه میشه هسته ی تابع راندوم رو چی قرار بدم ؟

اسم آرایه رو قرار دادم که نشد :متفکر:

lexical_error
پنج شنبه 21 دی 1391, 15:58 عصر
سلام
اگر منظورتون این هست شرط اجرای حلقه رو به صورت random ایجاد کنید،میتونید این کار رو انجام بدید
اول هدر time.h رو به برنامه اضافه کنید
بعد، قبل از حلقه این کد رو قرار بدید

srand ( time(NULL) );

حالا باید شرط شمارنده حلقه رو به این صورت بنویسید که در هربار اجرا یه عدد تصادفی تولید بکنه !
j = rand()%90+1;
for (i = 0 ; i< j ; i++)

smemamian
جمعه 22 دی 1391, 01:38 صبح
با عرض معذرت، نفهمیدم !

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

using namespace std;

int main()
{
int a[10];

for(int i=1; i<10 ; i++)
{
cin >> a[i];
}
srand(time(NULL));
int j = rand()%90+1;
cout << "--------------";
for (int i = 0 ; i< j ; i++)
{
cout << a[i] << endl ;
}
return 0;
}

mahak006
جمعه 22 دی 1391, 02:35 صبح
با عرض معذرت، نفهمیدم !

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

using namespace std;

int main()
{
int a[10];

for(int i=1; i<10 ; i++)
{
cin >> a[i];
}
srand(time(NULL));
int j = rand()%90+1;
cout << "--------------";
for (int i = 0 ; i< j ; i++)
{
cout << a[i] << endl ;
}
return 0;
}

اگه الآن مشکلت اینه که تو برنامت ارور هست ، به خاطر اینه که تو خط 16 عددی بین 1 تا 90 انتخاب می شه . و در نتیجه باید آرایت به اندازه ی همون 90 تا ، طولش باشه .
الآن آرایت 10 تایی هست . و در صورتی که عدد تصادفی ، بیش تر از 10 بیافته ، حین اجرا از برنامه خارج می شه و ارور می ده .
پس شما یا تو خط 16 باید تغییر ایجاد کنید و به جای 90 ، عدد متناسب با طول آرایتون رو بدین یا باید تو خط 9 بره تعریف آرایتون طول آرایه رو متناسب با ماکزیمم بازه ی عدد تصادفیتون در نظر بگیرید .
اگه مشکل از جای دیگه ای هم هست ، بگید تا حل بشه .

smemamian
جمعه 22 دی 1391, 09:41 صبح
سوالم رو انگار بد مطرح کردم !

الان همین آرایه 10تایی که تعریف کردم کاربر میاد 9 عدد رو وارد می کنه !‌حالا اگه من مثلا 5 عدد(یا هر تعداد دیگه ای) به صورت تصادفی بین اون 9 عدد که کاربر وارد کرده رو بخوام باید چی کار کنم ؟!

lexical_error
جمعه 22 دی 1391, 11:09 صبح
خب اگر منظورتون این هست باید به این صورت عمل کنید

int a[10];
int i;

srand(time(NULL));

for (i = 0;i<10;i++)
a[i]=i;
for (i = 0;i<5;i++)
cout<<a[rand()%9+1];

خط 9 به هر تعدادی که حلقه اجرا بشه از بین خانه های آرایه به صورت تصادفی مقدارشون رو نمایش میده
درواقع شما باید ایندکس آرایه رو به صورت random تعریف کنید.

smemamian
جمعه 22 دی 1391, 14:24 عصر
ببخشید ولی چون مبتدی هستم این 9+1 رو میشه در خط 9 توضیح بدین ؟

mahak006
جمعه 22 دی 1391, 14:48 عصر
ببخشید ولی چون مبتدی هستم این 9+1 رو میشه در خط 9 توضیح بدین ؟

rand()%9+1;

این کد در واقع چنین کاری می کنه :
اول با تابع rand یه عدد تصادفی می گیری ( خروجی تابع rand از نوع عدد صحیحه . در نتیجه یه عدد بین -32768 تا 32767 میده ) حالا بره تبدیل این عدد به عدد تصادفی تو بازه ی 1 تا 9 باید اول باقیمونده ی تقسیم عدد به 9 رو بگیریم ( a%9 یعنی باقیمانده تقسیم عدد a به 9 که می تونه عددی از 0 تا 8 باشه ) . بعد از اینکه باقیمونده رو حساب کردی ، بره اینکه عدد تصادفیت ( که الآن تو بازه ی 0 تا 8 هست ) تو بازه ی 1 تا 9 قرار بگیره ، یکی بهش اضافه می کنی .