PDA

View Full Version : اعداد شانسی ( منحصر به فرد )



moh3en_f1
چهارشنبه 25 خرداد 1390, 14:44 عصر
با سلام

من جواب برنامه ای که سوالش به صورت زیر هستش رو نوشتم

1- برنامه ای که از بین 40 دانشجو یک کلاس 8 نفر رو به صورت شانسی انتخاب نماید. روشی به کار ببرید که دانشجویی 2 بار یا بیشتر انتخاب نشود. ( لطفا از آرایه استفاده نشود )
البته من خودم از آرایه استفاده کردم چون نتونستم بنویسم من سورس برنامه رو گذاشتم کسی میتونه راه حل این مسئله رو بگه و کمک کنه ؟

2- سوال دوم من هم درباره چاپ کردن خروجی به صورت جدول هستش. در این باره یه خورده توضیح میدید ( اگه با مثال باشه خوب میشه ) + داده های نوع شمارشی هم کسی میدونه یعنی چی ؟




# include <iostream.h>
# include <stdlib.h>
# include <time.h>
void main() {
int ar[8]={0};
srand(time(0)) ;
for (int i=0; i<8; i++) {
ar[i]=(1+rand()%40);
for (int j=0; j<i ; j++)
if (ar[j]==ar[i]) i--; }
for (int k=0; k<8; k++)
cout<<ar[k]<<endl;
}

یوسف زالی
چهارشنبه 25 خرداد 1390, 15:02 عصر
سلام. بهترین متد اعداد شانسی اینه که حالت بر زدن shuffling داشته باشه.
مثلا از 1 تا 10 رو در آرایه میریزی، به صورت تصادفی دو تاشو جاهاشونو عوض می کنی.
پس از چند بار آرایه حاوی اعداد تصادفی غیر تکراری در محدوده 1 تا 10 هست!
اما اینجا:
یکی از راهها این هست که محدوده 40 رو به 8 قسمت مساوی تقسیم کنی که میشه 5.
حالا تو هر بازه یه عدد تصادفی برداری.
مثلا از 1 تا 5 عدد 4و از 6 تا 10 عدد 7 و به همین صورت.
Random from 40/8 * i to 40/8 * (i+1) for each i into 0 .. 7
حالا این Psudu هست.
در خصوص چاپ جدولی کاراکتر های کنترلی مثل n\ و t\ وجود دارند.
دستوراتی هم مثل gotoxy وجود دارند. در این خصوص تحقیق کنید.
نوع داده شمارشی enum هم نوع داده ای است که خودمان تعریف می کنیم و هر عنصری در آن دارای اندیس هست.
مثلا نوع داده فصل که 4 عنصر داره و در اون کلمات بعدی و قبلی مفهوم هستند.
دقیقا کجا اشکال داری؟

moh3en_f1
چهارشنبه 25 خرداد 1390, 15:12 عصر
سلام مشکل من تقریباً حل شد و فکر کنم منظور طراح سوال همونی بود که گفتین ( تقسیم به 8 قسمت ) میشه به زبان سی پلاس دستورشو بنویسید
به shuffling هم علاقه مند شدم میتونید یه خورده بیشتر توضیح بدین.
داده های شمارشی هم من اصلا نمی تونم ازش استفاده کنم فقط یه مثال بزنید تا من دقیقا بدونم یعنی چی ؟ ( مثلاً روزهای هفته رو ) ممنونم

moh3en_f1
پنج شنبه 26 خرداد 1390, 18:26 عصر
با سلام دوباره
من چند روز روش فکر کردم نتوستم جواب درست و حسابی براش پیدا کنم
من یه حلقه میزارم از یک تا 8 بچرخه اعداد رندوم رو چه جوری باید تولید کنم تا بین 1-5 و 6-10 و ... باشه ؟ هر کاری کردم نتونستم میتونید شما کدشو بگین

code_baz
پنج شنبه 26 خرداد 1390, 20:32 عصر
برای تولید اعداد توی یک رنج خاص باید از عکلگر باقیمانده و جمع استفاده کنی:

مثلا برای اینکه یه عدد بین 4 تا 9 پیدا کنی:

n=rand()%5+4
عملگر % باعث میشه که عدد تصادفی بین 0 تا 5 باشه و اگر اون رو با 4 جمع کنی رنج عدد به 4 تا 9 منتقل میشه
حالا تو میتونی توی حلقه این 4 رو همون اندازه که میخوای اضافه کنی:


main()
{
int num,lim=8;
for (int i=0;i<=8;i++)
{
srand(time(NULL));
num=rand()%lim+8
lim+=8;
}


البته توی این کد از 0 تا 8 رو پوشش نمیده ولی فقط میخواستم نشون بدم چی جوری این کاری که تو میخوای رو میشه انجام داد
میشه خارج از حلقه 0 تا 8 را محاسبه کرد