PDA

View Full Version : سوال: تبدیل مبنا به 16



Omid Jackson
جمعه 12 آبان 1391, 01:18 صبح
سلام، برای اینکه برنامه رو توجیه کنیم به جای 10 و 11 و ... a, b ... بذاره چطوری میشه این کارو کرد؟
یعنی از یه مبنا به مبنای دیگه که کاربر مشخص میکنه، وقتی تقسیم میکنم و به مبنا 10 میبرم و میخوام مثلا به مبنا 16 ببرمش عدد اشتباه میده چون تو محاسبات نمیزنه a، میزنه 10
حالا الآن نمیدونم چیکار کنم.
این حلقه ایه که تبدیل میکنه به مبنای دلخواه کاربر



int f = 1, o = 0, l;

while ( z != 0) \\ z عددیه که بردم به مبنای 10
{
l = z % p; \\ باقیمانده رو گرفتم و میخواهم با مقادیر دیگه جمع بزنم
\\ منظور از p مبنای کاربر است
l = l * f; \\بزرگتر کردن عدد، همون ضربدر توان مبناست
o = l + o; \\اعداد با هم حمع زده میشن
z /= p; \\ به اندازه مبنا کوچک میشن
f *= 10;
}

نمیخوام از دستور خود C++‎‎‎ استفاده کنم


cout<<(hex)<<z;

Ananas
جمعه 12 آبان 1391, 02:31 صبح
سلام.
اول یک رشته رو تعریف میکنی مثل زیر :
char NUMBERS[16] = "0123456789abcdef";
بعد هر رقمی رو که میخوای، با استفاده از اندیس کاراکتر معادلش رو بگیر مثلا :

char c = NUMBERS[a % 16];

و یا :

char c = NUMBERS[11];

omidshaman
دوشنبه 15 آبان 1391, 20:54 عصر
به خاطر خوانا نبودن کدنویسیتونه که نمی تونین اون جوری که می خواین برنامه رو تغییر بدین
شما همیشه سعی کن اسم متغیر ها رو جوری انتخاب کنی که بعدا وقتی می خوای برگردی برنامه رو تغییر بدی بتونی راحت بفهمی چکار کردی
و همین طور دستورات شرطیتون رو ... این حلقه ای که شما گذاشتین 10 دقیقه طول میکشه تا تاآدم بفهمه چکار می کنه!
برنامه کاملشو برات میزارم ببین سعی کن یکم مرتب تر برنامه بنویسی در ضمن 1 دونه for تو while اولی که گذاشتم اضافست اگر خواستی میتونی حذفش کنی...
و a,b هم اگر خواستی اضافه کنی باید از همون روش Ananas استفاده کنی...


#include <iostream>
#include <math.h>
#define Tak_raghami 9
#define Zero 0
using namespace std;

int main()
{
int adad,n;
int mabna_voroodi,last_number,other_number,tavan=0,kho rooji_10=0;
int Second_mabna,khorooji=0,mabna_khorooji;
cout<<"mabna avvalie: ";
cin>>mabna_voroodi;
cout<<"tabdil be mabnaye: ";
cin>>mabna_khorooji;
cout<<"adad: ";
cin>>n;
adad=n;
/************************************************** ************
* tabdil be mabna 10 *
************************************************** *************/
other_number=adad;

if(mabna_voroodi!=10)
while(adad>Tak_raghami)
{
other_number=adad/10;
last_number=adad%10;

if(last_number<=Tak_raghami)
{
khorooji_10=last_number*pow(mabna_voroodi,tavan)+k horooji_10;
tavan++;
}
if(other_number<=Tak_raghami)
{
khorooji_10=other_number*pow(mabna_voroodi,tavan)+ khorooji_10;
tavan++;
}
adad=other_number;
}
else
khorooji_10=adad;
/************************************************** ************
* tabdil b1e mabna khaste shode *
************************************************** ************/
tavan=0;
adad=n;
if(mabna_khorooji!=10)
while(adad>Zero)
{
khorooji=(adad%mabna_khorooji)*pow(10,tavan)+khoro oji;//baghimandew taghsim bar mabna khaste shode
adad=adad/mabna_khorooji;//kharej ghesmat taghsim
tavan++;
}
else
khorooji=khorooji_10;

cout<<khorooji_10<<"\n";
cout<<khorooji;
}

omidshaman
دوشنبه 15 آبان 1391, 21:00 عصر
در ضمن این سایت هم باگ داره! خط هایی که یکم بلندن بینشون فاصله میزاره ! اگر خواستی تست کنی خط فاصله ها رو پاک کن
یا از این جا دانلود کن
http://omidshaman.persiangig.com/mabna%20k%20be%20p.cpp