ورود

View Full Version : نیاز به کمک در مورد چند خط از برنامه



laveran
جمعه 05 خرداد 1391, 21:47 عصر
سلام... در چگونگی اجرای دوتا برنامه موندم و هرچی فکر میکنم به جایی نمیرسم دیگه مغزم سوت میکشه :عصبانی:
دستور زیر عدد را از مبنای 16 به مبنای 10 میبره اما هرچی فکر کردم کار دستورو نفهمیدم. اگه این دستورو توضیح بدید ممنون میشم..
چرا 'a' - 'A' کردیم؟؟

snum[i] -= ('a'-'A')

بعد چرا این دستورو می نویسیم

digit=snum[i]-'A'+10;
hasel *= 16;
مگه hasel در بالا صفر تعریف نشده پس هر مقداری به 16 ضرب بشه صفر میشه دیگه!!! ولی چرا صفر نمیشه؟؟:اشتباه:
سورس برنامه اینه

char snum[30];
int i, digit;
long int hasel=0;
cout<<"\nEneter a Hexadecimal number:";
cin>>snum;
for(i=0; snum[i]!=NULL; i++)
{
if(snum[i]>='a' && snum[i]<='z') /* if char is a small letter */
snum[i] -= ('a'-'A'); /* convert char to uppercase */
if(snum[i]>='0' && snum[i]<='9') /* convert ascii code to value */
digit=snum[i]-'0';
else
digit=snum[i]-'A'+10;
hasel *= 16; /* converting from hex to decimal */
hasel += digit;
}
cout<<hasel;
در مورد یک خط از یرنامه ی بازی حدس زدن عدد اگه توضیح بدید ممنون میشم... بازی به این شکله که سیستم عددی را حدس زده و در نظر میگیرد و ما آن عدد را یکی یکی وارد میکنیم هروقت عدد ما با عدد حدس زده ی سیستم برابر بود پیغام میده که عدد همین بوده... همه ی برنامه را متوجه شدم بجز این خط

number=rand()%(maxtest+1);
قسمتی از تابع برنامه اینه

void play()
{
int state,maxtest,number,n,life=5;
cout << "Select difficulty mode:\n";
cout << "1 : Numbers between (1-250) to be guessed\n";
cout << "2 : Numbers between (1-500) to be guessed\n";
cout << "3 : Numbers between (1-750) to be guessed\n";
cout<< "4 : Numbers between (1-1000) to be guessed\n";
cout<<"Select the range of numbers for guessing\n";
cin>>state;
switch (state)
{
case 1: maxtest=250;
break;
case 2: maxtest=500;
break;
case 3: maxtest=750;
break;
case 4: maxtest=1000;
default:
return ;
}
srand(time(0));
number=rand()%(maxtest+1);
cout<<"Enter your guess:";
cin>>n;
check(n,life,number,maxtest);

ASGGSA
جمعه 05 خرداد 1391, 23:25 عصر
سلام.
در مورد سوال اول نمی دونم ولی اگه می خواهید عددی را از مبنای 16 به مبنای 10 ببرید.
از این تابع می توانید استفاده کنید :

char Hexadecimal[] = "0x1A";
unsigned long Decimal = strtoul(Hexadecimal, 0, 16);

در مورد سوال دوم : تابع rand اعداد تصادفی ایجاد می کند. حالا باقیمانده ی تقسیم عددی که تابع rand بدست آورده بر maxtest+1 در متغیر number ریخته می شود.

laveran
شنبه 06 خرداد 1391, 00:37 صبح
در مورد سوال دوم : تابع rand اعداد تصادفی ایجاد می کند. حالا باقیمانده ی تقسیم عددی که تابع rand بدست آورده بر maxtest+1 در متغیر number ریخته می شود.
ممنون از راهنمایی ...
میدونم باقیمانده ی maxtest+1 و تابع rand داخل number ریخته میشه اما چرا؟؟؟ بخاطر چی اینکارو کردیم؟؟

ASGGSA
شنبه 06 خرداد 1391, 02:17 صبح
قسمتی از تابع برنامه اینه

باید کامل بنویسید تا بشه پاسخ داد.

saina2006
شنبه 06 خرداد 1391, 04:56 صبح
در مورد خط اول همونطور که تو کامنت نوشته از کوچیک به بزرگ تبدیل میکنه با تفریق کردن ۳۲

خط دوم هم اگر عدد نباشه به عددی بین بین ۱۰ تا ۱۵ تبدیل میکنه به این صورت که A رو صفر در نظر میگیره و بعدش با اضافه کردن ۱۰ به ۱۰ و بالاتر تبدیل میکنه

در مورد سوال سوم هم به این دلیل صفر نمیشه که هر دفعه داری با عدد جمعش میکنی

به خاطر این باقیمانده رو میریزه که مصمپن بشه عدد از مکزیمم بیشتر نمیشه