PDA

View Full Version : در مورد تبدیل یک عدد در مبنای 10 به مبنای 2



smemamian
جمعه 26 آبان 1391, 15:01 عصر
سلام دوستان
برنامه زیر یک عدد در مبنای 10 رو به مبنای 2 تبدیل میکنه .
دوستان می تونن مرحله به مرحله توضیح مختصری بدن ؟

برای مثال ورودی عدد 5 می شود : 101
چگونه ؟
عدد 50 استفاده شده برای چیه ؟

در ضمن حلقه ی for استفاده شده کارش چیه ؟

using namespace std;

void vbinary(int ivalue);

int main(int argc, char *argv[])

{
int ivalue;
cout <<"enter a number (base 10) for conversion to "
<< "binary -> " ;
cin >> ivalue;
vbinary(ivalue);

system("PAUSE");
return EXIT_SUCCESS;
}

void vbinary(int idata)
{
int t = 0;
int iyourarray[50];
while (idata !=0){
iyourarray[t] = (idata % 2);
idata =idata / 2 ;
t++;
}


for (--t; t>=0;t--)
cout << iyourarray[t];
cout << endl;
}

omidshaman
جمعه 26 آبان 1391, 20:07 عصر
اول این که شما همون طور که میدونی برای تبدیل از مبنا یک عدد به مبنا مثلا عدد 2 باید اون عدد رو بصورت متوالی به 2 تقسیم کرد (تا وقتی که خارج قسمت 0 بشه)و باقیمانده ها و خارج قسمت اخری میشد عدد تو مبنا2
این برنامه هم این جوری کار می کنه شما فرض کن عدد و.رودی همون 5 ایه که گفتی 5 میره داخل حلقه while خط 22
تو خط 23 خونه اول ارایه ای که از قبل تعریف کردیم( اون 50 طول ارایست شما می تونستی 5 بزاری ولی خوب اگر عددت تو مبنا 2 بیشتر از 5 رقم میشد دیگه درست نشون نمیداد ) رو برابر باقیمانده تقسیم به 2میزاره
تو خط 24 عدد رو به 2 تقسیم می کنه و تو خط 24 میره به خونه بعدی ارایه و این کار همین جوری ادامه پیدا می کنه تا خارج قسمت تقسیم 0 باشه
خوب حالا وقتی که برنامه از حلقه While خارج شد یک ارایه داریم که محتویاتش میشن خونه 1: باقیمانده اولین خونه2 :باقیمانده دومین خونه ... خون n :خارج قسمت اخری
که خوب حالا کافیه محتویاتن ارایه رو از اخر به اول نشون بدیم خط 29 و30
البته این برنامه رو کاملترشو قبلا برای یک نفر نوشته بودم می تونی اونو هم نگاه کنی

http://barnamenevis.org/showthread.php?367017-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-%D9%85%D8%A8%D9%86%D8%A7-%D8%A8%D9%87-16