PDA

View Full Version : برنامه حدس زدن عدد



aminkk
شنبه 22 اسفند 1388, 18:30 عصر
سلام
صورت مساله این هستش : برنامه ای که یک عدد بدهد و یک عدد از ورودی بگیرد و آن را مقایسه کند.

من مشکلی که دارم اینه که بلد نیست با رندوم کار کنم.
این برنامه رو چی جوری باید نوشت؟
همون برنامه حدس زدن عددها هستش

Salar Ashgi
شنبه 22 اسفند 1388, 20:39 عصر
در هدر فایل stdlib.h ، از تابع rand استفاده کنید .

khafan_bat
شنبه 22 اسفند 1388, 21:56 عصر
سلام

الگوریتم کلی این بازی رو که میدونی ؟

برای کار با تابع تولید اعداد تصادفی به این نکات توجه کن :

1 ) خروجی تابع ()rand در حالت عادی یک عدد بین 0 و یک ثابت RAND_MAX هست که در فایل سرآیند stdlib یا cstdlib تعریف شده است. مقدار این ثابت حداقل برابر یک عدد صحیح 16 بیتی است یعنی 32756. پس نتیجه این شد که با هر بار احضار تابع ()rand در برنامه ، یک عدد بین 0 و این مقدار ثابت به خروجی میده.

2 ) با استفاده از تکنیک تغییر مقیاس میتونی این بازه رو کم و زیاد کنی. برای مثال :


Int a;
a=rand()%6;

حالا a یک عدد بین 0 و 5 به هستش.که میشه در واقع 6 نوع عدد

hossein2kk
شنبه 22 اسفند 1388, 21:57 عصر
این تکه رو از وبلاگ یکی داشتم رو هاردم آدرسش یادم نیست .
"

يکی از کاربردهای اساسی کامپيوتر، استفاده از آن در کارهای شبيه سازی می باشد. در اينجا به بررسی نحوه توليد اعداد تصادفی می پردازيم. اعداد تصادفی در مسائل شبيه سازی کاربرد فراوانی دارند، به عنوان مثال شبيه سازی پرتاب سکه، پرتاب تاس و مسائلی از اين قبيل.
برای توليد اعداد تصادفی زبان ++C تابعی با نام rand() را که در فايل کتابخانه ای stdlib.h قرار دارد، در اختيار ما گذاشته است. به عنوان مثال دستور زير :


i = rand();
يک عدد تصادفی بين 1 تا 32767 را در متغير i قرار می دهد . تابعrand()اعداد را با احتمال مساوی در اين بازه انتخاب می کند پس شانس انتخاب هر عددی در اين بازه با اعداد ديگر برابر است.
معمولاً بازه اعدادی که توسط تابع rand توليد می شود، با آنچه که مورد نياز ماست متفاوت می باشد. به عنوان مثال برای شبيه سازی پرتاب سکه به دو عدد تصادفی و برای تاس به شش عدد تصادفی نياز داريم. فرض کنيد که می خواهيد عدد 31250 را به عددی بين 1 تا 6 تبديل کنيد. چه راه کاری را در نظر می گيريد؟ راهی که برای اين تبديل وجود دارد استفاده از باقيمانده صحيح می باشد، همانطور که می دانيد باقيمانده صحيح تقسيم هر عددی بر 6 يکی از اعداد 0 تا 5 می باشد.
حال اگر به جای متغير a ، تابع rand() را قرار دهيم عبارت rand()%6+1 عددی تصادفی بين 1 تا 6 به ما می دهد به طور کلی برای بدست آوردن عددی تصادفی در بازه [a,b] می توانيم از فرمول زير استفاده کنيم.


rand()%(b-a+1)+a
به عنوان مثال خروجی قطعه برنامه زير عدد صحيحی در بازه [20,100] می باشد.


int a = 20 , b = 100;

cout<< rand()%(b-a+1)+a;
برنامه زير 20 عدد تصادفی بين 1 تا 6 را ايجاد می کند. که اين برنامه را می توان 20 بار پرتاب يک تاس در نظر گرفت :


#include <iostream.h>

#include <stdlib.h>

int main()

{

for (int i = 1; i<= 20; i++ )

{

cout << rand() % 6 + 1<<"\t";

if ( i % 5 == 0 )

cout << endl;

}

return 0;

}

يک بار ديگر برنامه فوق را اجرا کنيد و خروجی را مجدداً بررسی کنيد. خواهيد ديد خروجی دقيقاً همان اعداد قبلی می باشد. خروجی تابع rand() اعداد تصادفی می باشد ولی با اجرای دوباره برنامه همان اعداد مجدداً به همان ترتيب قبلی تکرار می شوند. اين تکرار يکی از قابليتهای تابع می باشد ودر اشکال زدايی برنامه کاربرد دارد.
اگر بخواهيم که تابع rand() اعداد کاملاً تصادفی ايجاد کند بايد از تابع srand() استفاده کنيم. اين تابع ورودی از نوع اعداد صحيح بدون علامت می گيرد و باعث تصادفی شدن تابع rand() بر اساس مقدار ورودی تابع srand() می شود. تابعsrand() نيز در فايل کتابخانه ای stdlib.h قرار دارد. در برنامه زير به نحوه استفاده از تابع srand() پی خواهيد برد.


#include <iostream.h>

#include <stdlib.h>

int main()

{

unsigned int num;

cout<<"Enter a number: ";

cin>>num;

srand(num);

for (int i = 1; i<= 20; i++ )

{

cout << rand() % 6 + 1<<"\t";

if ( i % 5 == 0 )

cout << endl;

}

return 0;
} خروجی برنامه به صورت زير می باشد.1 همانطور که می بينيد بر اساس ورودی های مختلف خروجی نيز تغيير می کند. توجه داشته باشيد که ورودی های يکسان خروجی های يکسانی دارند.
اگر بخواهيم بدون نياز به وارد کردن عددی توسط کاربر، اعداد تصادفی داشته باشيم می توانيم از تابع time که در فايل کتابخانه ای time.h قرار دارد استفاده کنيم . تابع time ساعت کامپيوتر را می خواند و زمان را بر حسب ثانيه بر می گرداند ، به اين ترتيب دستور زير:


srand(time(0));
باعث می شود که تابع rand() در هر بار اجرای برنامه اعداد متفاوتی را ايجاد کند. اگر برنامه فوق را به صورت زير باز نويسی کنيم با هر بار اجرای برنامه اعداد تصادفی متفاوتی خواهيم داشت.


#include <iostream.h>

#include <stdlib.h>

#include <time.h>

int main()

{

srand(time(0));

for (int i = 1; i<= 20; i++ )

{

cout << rand() % 6 + 1<<"\t";

if ( i % 5 == 0 )

cout << endl;

}

return 0;

}
مثال : برنامه ای بنويسيد که پرتاب سکه ای را شبيه سازی کند ، بدين صورت که سکه را 2000 بار پرتاب کند و دفعات رو يا پشت آمدن سکه را چاپ کند.


#include <iostream.h>

#include <stdlib.h>

#include <time.h>

int main()

{

int back=0,front=0,face;

srand(time(0));

for (int i = 1; i<= 2000; i++ )

{

face=rand()%2+1;

switch(face)

{

case 1:

++back;

break;

case 2:

++front;

break;

default:

cout<<"Error!";

}

}

cout<<"Front: "<< front<<endl;

cout<<"Back : "<< back<<endl;

return 0;
} "
امیوارم به درد بخوره.

ali zi zeperto
یک شنبه 23 اسفند 1388, 09:27 صبح
این بازی حدس عدده.بهترین اجرا تحت کامپایلر gcc.اگر با کامپایلر های دیگه اجرا کنی شاید بجای تغییر رنگها کد ببینی.واسه همین می گم که با gcc کامپایل کنی اون چیزی رو می بینی که من می خواستم ببینی.
http://www.filefactory.com/file/b0a3h8g/n/Game.cpp

mohsentranslator
یک شنبه 25 اردیبهشت 1390, 01:55 صبح
سلام. واقعا ممنون میشم تو ایم مسئله کمکم کنین.

یک عدد نه رقمی داریم: ---325407



توضیحات به این شرح است:



1. عدد مورد نظر زوج است.



2. حاصل جمع رقم های هفتم و هشتم عدد مورد نظر 15 است.



3. حاصلضرب رقم های هفتم و هشتم عدد مورد نظر 56 است.



4. رقم هشتم از رقم هفتم بزرگتر است.

3 رقم باقیمانده عدد مورد نظر را حدس بزنید. با این توضیحات ارقام هفتم و هشتم مشخص میشن اما رقم یکان رو چطور باید حدس زد. به نظر شما جوابش چی میشه؟ ممنون از اینکه حوصله کردین . منتظر جوابتون هر چه زودتر هستم. نیاز دارم. اگه فهمیدین فرمولشو لطف کنین بزارین. ممنون



در جایی 30 تا سوال مطرح شده که سوالات 5و10و15و20و25و30 جعبه های شانس هستن که به ترتیب 50و100و150و200و250و300 امتیاز دارند. هر کدام از جعبه شانس ها 4گزینه ای هستش. راهی وجود داره که گزینه ای رو انتخاب کنیم که بهترین امتیاز رو بگیریم.


مثلا سوال 5: گزینه های 17و18و19و20 من کدوم گزینه رو انتخاب کنم که بیشترین امتیاز رو داشته باشه؟ خیلی دنبالش گشتم نتونستم بیشترین امتیاز رو تو هر کدوم از جعبه شانس ها بگیرم.





بعضی از مسابقات انجام شده با جعبه شانس های به دست اومده رو هم پایین عنوان می کنم. هیچکی نتونست کمکم کنه امیدوارم شما بتونین.


سوال 5: 17و18و19و20 گزینه ی 18 رو انتخاب کردم که از 50 امتیاز 19 امتیاز داده.


سوال10 : 37و38و39و40 گزینه ی 38 رو انتخاب کردم که از 100 امتیاز 75 امتیاز داده.


سوال 15: 57و58و59و60 گزینه ی 58 رو انتخاب کردم که از 150 امتیاز 67 امتیاز داده.


سوال 20: 77و78و79و80 گزینه ی 79 رو انتخاب کردم که از 200 امتیاز 150 امتیاز داده.


سوال 25: 97و98و99و100 گزینه ی 99 رو انتخاب کردم که از 250 امتیاز 244 امتیاز داده.


سوال 30: 117و118و119و120 گزینه ی 117 رو انتخاب کردم که از 300 امتیاز 93 امتیاز داده.





داده دیگه:


سوال 5: 17و18و19و20 گزینه ی 19 رو انتخاب کردم که از 50 امتیاز 47 امتیاز داده.


سوال10 : 37و38و39و40 گزینه ی 39 رو انتخاب کردم که از 100 امتیاز19 امتیاز داده.


سوال 15: 57و58و59و60 گزینه ی 59 رو انتخاب کردم که از 150 امتیاز 135 امتیاز داده.


سوال 20: 77و78و79و80 گزینه ی 78 رو انتخاب کردم که از 200 امتیاز 127 امتیاز داده.


سوال 25: 97و98و99و100 گزینه ی 97 رو انتخاب کردم که از 250 امتیاز 192 امتیاز داده.


سوال 30: 117و118و119و120 گزینه ی 118 رو انتخاب کردم که از 300 امتیاز 153 امتیاز داده.





چطور میشه گزینه هایی رو انتخاب کرد بیشترین امتیاز رو بهمون بده؟ واقعا لطف بزرگی در حقم می کنین اگه فرمولشو پی ببرین.