PDA

View Full Version : راهنمایی برایه تولید عدد تصادفی از 0 تا 15 بدون تکرار



alieblice
چهارشنبه 23 آذر 1390, 13:52 عصر
سلام

من میخام عدد تصادفی از 0 تا 15 بدون تکرار ایجاد کنم یعنی عدد تکراری نباید وجود داشته باشه این عمل داخل یک تابع انجام میشود و به main برمیگردد

تابع رو این شکلی نوشتم ولی بازم تکراری دارد


int f2(int number)
{// start of random number
int flag='0',number3='-1',number2[15]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
while(flag=='0')
{
number3 = random(15);
//number2[number3]=number3;
if(number3!=number2[number3])
{
number2[number3]=number3;
number=number3;
flag='1';
// break;
}
}
return number;
}// end of random number


پیشاپیش ممنون

shahmohammadi
چهارشنبه 23 آذر 1390, 17:40 عصر
سلام
وقتی تابع در هر فراخانی فقط یه عدد بر می گردونه معلومه که از فراخوانی های قبلی خودش خبر نداره و نمی دونه چی قبلا تولید کرده.
نیازی به تابع ندارید ولی اگه می خواهید با تابع بنویسید آرایه رو سراسری تعریف کنید حلقه رو داخل تابع حلقه ننویسید، داخل تابع main بنویسید و 15 بار بیاد تابع رو فراخوانی کنه.
درضمن وقتی می نویسیدflag='0' در متغیر فلق عدد 48 ذخیره میشه چون شما بهش کاراکتر دادید و کد اسکی کاراکتر 0 48 هست.'-1' هم درست نیست چون در داخل این علامت فقط یه کاراکتر ذخیره میشه.

alieblice
پنج شنبه 24 آذر 1390, 02:42 صبح
سلام
وقتی تابع در هر فراخانی فقط یه عدد بر می گردونه معلومه که از فراخوانی های قبلی خودش خبر نداره و نمی دونه چی قبلا تولید کرده.
نیازی به تابع ندارید ولی اگه می خواهید با تابع بنویسید آرایه رو سراسری تعریف کنید حلقه رو داخل تابع حلقه ننویسید، داخل تابع main بنویسید و 15 بار بیاد تابع رو فراخوانی کنه.
درضمن وقتی می نویسیدflag='0' در متغیر فلق عدد 48 ذخیره میشه چون شما بهش کاراکتر دادید و کد اسکی کاراکتر 0 48 هست.'-1' هم درست نیست چون در داخل این علامت فقط یه کاراکتر ذخیره میشه.



سلام
ممنون برایه پاسخ
چند چیز رو متوجه نشدم

1- چرا فراخانی قبلی خودش خبر نداشته باشه ؛ عدد قبلی که داخل رشته number 2 ذخیره میشه و چک میشه که با عدد جدید مطابقت داره یا نه ؟
2- اینم نفهمیدم "حلقه رو داخل تابع حلقه ننویسید"

به flag چی باید بدم تا درست باشه ؟
یک سوال هم خارج از این سوال:
چه موقع از ' ' استفاده میکنیم ؟

پیشاپیش ممنون

AMIBCT
پنج شنبه 24 آذر 1390, 09:05 صبح
استفاده از حلقه کار نادرستی است
چون اگر تعداد عدد‌ها زیاد باشد اجرای برنامه ممکن است خیلی طول بکشد و فشار زیادی به پردازنده وارد شود

الگوریتمی که برای این کار استفاده می‌شود معمولا به یکی از دو صورت زیر است

یک آرایه را از 1 تا 15 پر کنید
به صورت اتفاقی جای اعضا را به مقدار کافی عوض کنید

روش دوم
یک آرایه را با اعداد اتفاقی پر کنید
مقادیر موجود در آرایه را به ترتیب از کوچک به بزرگ با اعداد 1 تا 15 پر کنید

روش اول کارایی بهتری دارد و زودتر به نتیجه می‌رسد ولی اتفاقی بودن آن تحت تاثیر تعداد دفعات جابجایی است

shahmohammadi
پنج شنبه 24 آذر 1390, 09:57 صبح
1- چرا فراخانی قبلی خودش خبر نداشته باشه ؛ عدد قبلی که داخل رشته number 2 ذخیره میشه و چک میشه که با عدد جدید مطابقت داره یا نه ؟

چون آرایه number2 بعد از اجرای تابع ازبین میره و مقادیری که ذخیره کردین هم ازبین میرن. و دفعه بعد که تابع اجرا شه از نوع ساخته میشه که همه عناصرش -1 هستند.

2- اینم نفهمیدم "حلقه رو داخل تابع حلقه ننویسید"میبخشید: "حلقه رو داخل تابع ننویسید"
حلقه ای که نوشتید چند بار عدد تصادفی تولید میکنه و هر بار در number می ذاره. بعد از اینکه حلقه تموم شد تابع number رو برمیگردونه. همه اعدادکه برنمی گردن فقط آخرین مقداری که داشته بر میگرده.
فلق اشکالی در برنامه ایجاد نکرده ولی خوبه که 0 و 1 بدید نه '0' و '1'. خواستم متوجه فرقشون بشید.
'' برای نشون دادن یه کاراکتر به کار میره.
اگه برنامه رو اینطوری درست کنید مشکل برنامه تون حل میشه و اگه خواستید بهتر از این بشه روش دوستمون AMIBCT [/URL]هم خوبه.
[URL="http://barnamenevis.org/member.php?73933-AMIBCT"] (http://barnamenevis.org/member.php?73933-AMIBCT)