PDA

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



mandbigS
پنج شنبه 19 اردیبهشت 1387, 12:37 عصر
با سلام خدمت دوستان عزیز ...

یه برنامه می خوام که عدد رو در مبنای 10 به صورت int بگیره و اون رو به مبنای 2 برده و به صورت *char دربیاره و نمایش بده ...

میخوام از این برنامه در یک کلاس استفاده کنم ...

اما هرچی تلاش میکنم اجرا نمیشه ... یعنی اجرا میشه ولی شکلک چاپ می کنه ... اشکال ساختاری داره اونی که من نوشتم ...

قبلا به خاطر راهنماییتون ممنونم ...

A_Salimi
پنج شنبه 19 اردیبهشت 1387, 14:25 عصر
خوب کدی رو که خودت نوشتی رو بذار شاید یه کاریش کردیم !!

Nima_NF
پنج شنبه 19 اردیبهشت 1387, 14:30 عصر
به راحتی از تابع itoa می توانید استفاده کنید که در مثال زیر عدد در مبنای 2 در رشته str ذخیره می شود:



<stdlib.h>

int x = 15;
char str[65];

_itoa( x, str, 2 ); // base 2

mandbigS
پنج شنبه 19 اردیبهشت 1387, 19:04 عصر
سلام سلام ...

اونو که موفق شدم ... اما مشکل بیشتر شد دوستان ...

اینو ببینید :


#include <iostream.h>
#include <conio.h>

class change
{
public :
int dec ;
char *bay[100];
char getbay()
{
for (int i=0 ; i<10 ; i++)
{
cin << bay[i];
}
return bay[];
}
int baytodec(char &bay[])
{
int i = 0 ;
int a= 0 ;
while (s[i])
{
a = (a*2) + (s[i]-'0');
i++;
}
cout << a;
}
int dectobay(int dec)
{
int i , x , s[10] , j=0;
while (dec!=0)
{
x=dec%2;
s[j]=x;
dec=dec/2;
j++;
}
for (i=j-1;i>=0 ; i--)
{
bay[i]=s[i]+'0';
cout << bay[i];
}
}
}c1;

int main ()
{
c1.getbay();
c1.baytodec();
getch();
return 0;
}


خوب ... این برنامه که نوشتم ... محتوی کلاسی هست که در اون ما عدد رو در مبنای 10 می گیریم و می خوایم به مبنای 2 ببریم ...

خیلی خطا میده ... میدونم این برنامه در سطح بسیار مبتدی هستش ... ( یه چیزی تو مایه های نیمرو درست کردن ... :کف: ) اما به هر حال لطف کنید و کمکم کنید ...

mandbigS
پنج شنبه 19 اردیبهشت 1387, 19:06 عصر
ببخشید ... یه چیزی یادم رفت ... توجه کنید که حتما باید از *char استفاده کنیم ...

emad_67
پنج شنبه 19 اردیبهشت 1387, 19:19 عصر
خوب بزا من اول سینتکس ارور هاتو بگیرم تا برسیم به اصل برنامه :D
توی این خط:


char *bay[100];

این خطی که نوشتی یه آرایه اشاره گر رو میسازه یعنی هر خونه آرایه به یک رشته اشاره میکنه. برای این مثل باید اینجوری تعریف میکردی:


char bay[100];



cin << bay[i];

برای cin باید << رو بکار ببری!


int baytodec(char &bay[])

اگه منظورت این بوده که اشاره گر به تابع بفرستی باید اینجوری بنویسی:


int baytodec(char *bay)



while (s[i])
{

s چیه؟ من جایی از برنامه نیدیم که s رو تعریف کرده باشی.


c1.baytodec();

تابع baytodec یه پارامتر ورودی میگیره ولی اینجا چیزی ارسال نشده.

mandbigS
پنج شنبه 19 اردیبهشت 1387, 19:33 عصر
میبینی ؟ اصلا ترکوندم ... hTtp://qsmile.com/qsimages/sp/var/anger.gif

سعی میکنم درستش کنم ...

mandbigS
پنج شنبه 19 اردیبهشت 1387, 19:39 عصر
درستشون کردم ... ولی بازم ارور میده ...


#include <iostream.h>
#include <conio.h>

class change
{
public :
int dec ;
char bay[100];
char getbay()
{
for (int i=0 ; i<10 ; i++)
{
cin >> bay[i];
}
return bay[];
}
int baytodec(char *bay)
{
int i = 0 ;
int a= 0 ;
while (bay[i])
{
a = (a*2) + (bay[i]-'0');
i++;
}
cout << a;
}
int dectobay(int dec)
{
int i , x , s[10] , j=0;
while (dec!=0)
{
x=dec%2;
s[j]=x;
dec=dec/2;
j++;
}
for (i=j-1;i>=0 ; i--)
{
bay[i]=s[i]+'0';
cout << bay[i];
}
}
}c1;

int main ()
{
c1.getbay();
c1.baytodec();
getch();
return 0;
}


اشکالات رو ببین و لطفا راهنماییم کن ...

در ضمن شما گفتی که باید به تابع c1.baytodec ورودی بدیم ... اما چجوری ؟

mandbigS
پنج شنبه 19 اردیبهشت 1387, 19:46 عصر
اگه راهنماییم کنید که چه جوری میشه آرایه رو return کرد مشکلم حله ...


char getbay()
{
for (int i=0 ; i<10 ; i++)
{
cin >> bay[i];
}
return bay[];
}

تو این قسمت ارور میده ...

mandbigS
پنج شنبه 19 اردیبهشت 1387, 19:48 عصر
مرسی مرسی ... من مشکلم حل شد ... در سطح تیم ملی متحول شدم و پیشرفت کردم ... برنامم جواب داد ... hTtp://qsmile.com/qsimages/sp/var/ft.gif

moh.mon
شنبه 21 اردیبهشت 1387, 09:54 صبح
آقا ذاک شما مشکلاتتون اساسی لطفا دوباره برنامه رو بنویسید

zuck_619
شنبه 21 اردیبهشت 1387, 10:39 صبح
از این دوست عزیز (ودوستان دیگر) خواهش دارم به من بیشتر کمک کنید.همکنون نیازمند یاری سبزتان هستیم.(ستاد حمایت از برنامه نویسان تازه کار)


#include <iostream.h>
#include <conio.h>
class dec_bin
{
char binary[100] ;
int decca ;
public:
char bin[100] ;
int dec;
int t[100];
char getbin ()
{
cout<< "enter number in binary redix : ";
cin>> bin[100] ;
return bin[100] ;
}
int getdec ()
{
cout<<"enter number in decca redix : " ;
cin>> dec ;
return dec ;
}
void bintodec (char bin[100])
{
int a=0 , i=0;
cout<<" your entered number is: ";
while (bin[i])
{
if ((bin[i]-'0') > 1)
cout<<"you entered wrong binary number. ";
else
{
cout<<bin[i];
a = a*2 +(bin[i]-'0');// tabdil be int
i++ ;
}
cout <<"number in decca redix is : "<<a ;
}
}
void dectobin (int dec)
{
int i,j=0 ;
cout<<"your entered number is :"<<dec ;
do //tabdil be mabnaye 2
{
t[j] = dec % 2 ;
dec = dec/2 ;
j++ ;
}while(dec >= 2);
cout<<"number in binary redix is : ";
for (i=j-1; i>=0 ; i--)
{
bin[i] = t[i]+'0' ;
cout<< bin[i] ;
}
}
};
int main ()
{
int n ; char d ;
cout<<"enter class quantity: ";
cin>> n ;
dec_bin *s=new dec_bin[n];
for (int i=1 ; i<=n ; i++)
{
cout<<"enter number's redix (Binary = B , Decca = D ): ";
cin>> d ;
if (d == 'B')
{
s[i].bintodec(s[i].getbin()) ;
}
else
{
s[i].getdec() ;
s[i].dectobin() ;
}
}
getch ();
return 0;
}

mandbigS
شنبه 21 اردیبهشت 1387, 10:44 صبح
شما ورودی های توابعتون اشکال داره به نظر من ...

اگر خواستید من برنامه رو نوشتم بهتون میدم ...

(از طرف کسانی که در برنامه نویسی به سادگی رسیده اند ... :لبخند::لبخند::لبخند::لبخند:)

emad_67
شنبه 21 اردیبهشت 1387, 10:50 صبح
از این دوست عزیز (ودوستان دیگر) خواهش دارم به من بیشتر کمک کنید.همکنون نیازمند یاری سبزتان هستیم.(ستاد حمایت از برنامه نویسان تازه کار)این برنامه چیز زیاد سختی نیست.
کدت رو چک نکردم ولی فکر می کنم خیلی طولانیش کردی.
به نظرم اول عدد مبنای 10 رو به یه عدد مبنای 2 تبدیل کن. بعد این عدد مبنای 2 رو به رشته.
اینم تابع تبدیل عدد dec به binary:


int binery(int x)
{
int y,t=0,count=0,r,s=0;
y=x;
while(x!=0)
{
x=x/2;
count++;
}
for(int i=1;i<=count;i++)
{
r=y%2;
y=y/2;
s=r*pow(10,t++)+s;
}
s=y*pow(10,t++)+s;
return s;
}
این تابع عدد باینری رو بر میگردونه ( البته از نوع int) بعد باید تبدیلش کنی به رشته.

mandbigS
شنبه 21 اردیبهشت 1387, 10:54 صبح
int dectobay(int dec)
{
int i , x , s[10] , j=0;
while (dec!=0)
{
x=dec%2;
s[j]=x;
dec=dec/2;
j++;
}
cout << "This Is Your Number (Binary) :";
for (i=j-1;i>=0 ; i--)
{
bay[i]=s[i]+'0';
cout << bay[i];
}
}


منم اینو نوشتم ... امیدوارم بتونی ازش استفاده کنی ...

moh.mon
شنبه 21 اردیبهشت 1387, 10:57 صبح
منم دقیقا با عماد موافقم شما دارین خیلی کارو پیچیده میکنین بهتره اول رو ورق برنامه رو پیاده سازی کنید و بعد از جمع بندی اگه مشکلی بود تو سایت مطرح کنید.
اینم تابعی که میخواستی فقط تشکر یادت نره عزیزم.

int bin2dec()
{
int i=0 , a=0;
while(str[i]!='\0')
{
a=a*2+(str[i]-'0');
i++;
}
return a;
}

zuck_619
شنبه 21 اردیبهشت 1387, 10:58 صبح
1-تو این برنامه ای که نوشتی یک اشکاله اونم اینکه برای ورودی صفر جواب نمیده .
2-من میخوام از برنامه خودم جواب بگیرم تا برنامه یکی دیگه رو کپی کنم .

moh.mon
شنبه 21 اردیبهشت 1387, 11:51 صبح
اینم جواب سوالتون . اگه مشکلی داشتید در خدمتم.

#include <iostream.h>
#include <conio.h>
class Dec2Bin
{
private:
char str[50];
public:
Dec2Bin()
{
strcpy(str , " ");
}
Dec2Bin(char s[50])
{
strcpy(str , s);
}
getbin()
{
cout<<"\nlotfan yek reshte adad binary ra vared konid: ";
cin.get(str , 50);
}
int bin2dec()
{
int i=0 , a=0;
while(str[i]!='\0')
{
a=a*2+(str[i]-'0');
i++;
}
return a;
}
};

void oprator(int x, int y)
{
char s;
cout<<"\nLotfan amalghar mored nazar khod ra entekhab konid(+ , - , * , /): ";
cin>>s;
switch (s)
{
case '+': cout<<"\nMajmoe do adad= "<<(x+y); break;
case '-': cout<<"\nTafrigh do adad= "<<(x-y); break;
case '*': cout<<"\nZarb do adad= "<<(x*y);break;
case '/': cout<<"\nTaghsim do adad= "<<(x/y); break;
}
}
int main()
{
Dec2Bin a1="0110";
Dec2Bin a2;
a2.getbin();
int x=a1.bin2dec();
int y=a2.bin2dec();
oprator(x,y);
getch();
return 0;
}

manp_s
یک شنبه 22 اردیبهشت 1387, 05:15 صبح
با شیفت دادن کارتون خیلی ساه تر میشه

zuck_619
چهارشنبه 25 اردیبهشت 1387, 11:08 صبح
اگه بخواهیم یک تابع خارج تابع main بنویسیم که ورودی آن مقدار برگشتی یکی از توابع داخل کلاس باشد چه باید کرد ؟

emad_67
چهارشنبه 25 اردیبهشت 1387, 12:37 عصر
اگه بخواهیم یک تابع خارج تابع main بنویسیم که ورودی آن مقدار برگشتی یکی از توابع داخل کلاس باشد چه باید کرد ؟
ابتدا مقدار برگشتی از تابع رو در به متغیر ذخیره کن و بعد اون متغیر رو به عنوان پارامتر ورودی به تابع ازسال کن.
مثلا با توجه به کلاس مطرح شده در همین تاپیک اینو ببین:


void main ()
{
Dec2Bin obj;
int x=obj.bin2dec();
fucn(x);
}
void func(int a)
{
.....
}

zuck_619
چهارشنبه 25 اردیبهشت 1387, 15:30 عصر
مستقیم نمیشه ?

emad_67
چهارشنبه 25 اردیبهشت 1387, 16:14 عصر
مستقیم نمیشه ?
منظورت اینجوریه؟


fucn(obj.bin2dec());
چرا اینجوری هم میشه. فرقی نمیکنه.

s++ 68-87
جمعه 27 اردیبهشت 1387, 08:18 صبح
براي اين برنامه تابع dec2bin بايد يه عدد دودويي مثل 11010 جواب بده
و تابع bin2dec يه عدد دهدهي؟

و ورودي تابع bin2dec بايد رشته باشه؟ مثل salam?

emad_67
جمعه 27 اردیبهشت 1387, 09:08 صبح
براي اين برنامه تابع dec2bin بايد يه عدد دودويي مثل 11010 جواب بده
و تابع bin2dec يه عدد دهدهي؟بله، تابع dectobin یه عدد دودویی میگیره و به دهدهی تبدیل میکنه و تابع bintodec عکس این کار رو انجام میده.

و ورودي تابع bin2dec بايد رشته باشه؟ مثل salam?
ورودی این تابع یه آرایه کاراکتری هست ولی نه اینکه هر کاراکتری میتونه باشه. باید رشته ای شامل 0 و 1 ها باشه که در واقع یه عدد دودویی رو تشکیل شده.

s++ 68-87
جمعه 27 اردیبهشت 1387, 10:17 صبح
#include <iostream.h>
#include <conio.h>
#include <math.h>
int dec2bin(int x)
{
int y,t=0,count=0,r,s=0;
y=x;
while(x!=0)
{
x=x/2;
count++;
}
for(int i=1;i<=count;i++)
{
r=y%2;
y=y/2;
s=r*pow(10,t++)+s;
}
s=y*pow(10,t++)+s;
return s;
}

int main()
{
int s=45;
cout<<dec2bin(s);
getch ();
return 0;
}


اين همون تابعي هستش كه همين جا نوشته شده ولي فقط براي اعداد يك رقمي درست در مي ياره!!

s++ 68-87
جمعه 27 اردیبهشت 1387, 10:28 صبح
يا براي اين تابع :

int r;
int i=0;
int powe=1;
do{
r=dec%2;
dec=dec/2;
i=i+powe*r;
powe*=10;
}while (dec<2);
return i+dec*powe;


يه سوال ديكه :

class Dec-Bin
{
public:
Dec-Bin(int dec);
Dec-Bin(char s[100]);
.
.
};

int main()
{
Dec-Bin ob1(23);
Dec-Bin ob2("1101010");
.
.
}

مي شه اين مدلي براي تابع سازنده مقدار اوليه بديم و تو كلاس ازش استفاده كنيم؟

emad_67
جمعه 27 اردیبهشت 1387, 12:41 عصر
#include <iostream.h>
#include <conio.h>
#include <math.h>
int dec2bin(int x)
{
int y,t=0,count=0,r,s=0;
y=x;
while(x!=0)
{
x=x/2;
count++;
}
for(int i=1;i<=count;i++)
{
r=y%2;
y=y/2;
s=r*pow(10,t++)+s;
}
s=y*pow(10,t++)+s;
return s;
}

int main()
{
int s=45;
cout<<dec2bin(s);
getch ();
return 0;
}
اين همون تابعي هستش كه همين جا نوشته شده ولي فقط براي اعداد يك رقمي درست در مي ياره!!
اینو که من تست کردم درست بود. مثلا برای 45 این عدد رو میده: 101101 که درست هست. فقط به صورت 8 بیتی بیان نشده چون دو بیت اولش صفر هست.


يه سوال ديكه :

class Dec-Bin
{
public:
Dec-Bin(int dec);
Dec-Bin(char s[100]);
.
.
};

int main()
{
Dec-Bin ob1(23);
Dec-Bin ob2("1101010");
.
.
}مي شه اين مدلي براي تابع سازنده مقدار اوليه بديم و تو كلاس ازش استفاده كنيم؟
بله میشه

s++ 68-87
جمعه 27 اردیبهشت 1387, 14:06 عصر
اینو که من تست کردم درست بود. مثلا برای 45 این عدد رو میده: 101101 که درست هست. فقط به صورت 8 بیتی بیان نشده چون دو بیت اولش صفر هست.


براي من مي ياره:-2997 با turbo c++ كار مي كنم. مشكل از كام\يوتر منه؟

emad_67
جمعه 27 اردیبهشت 1387, 14:28 عصر
براي من مي ياره:-2997 با turbo c++ كار مي كنم. مشكل از كام\يوتر منه؟
نمیدونم والا. من با visual c++ کامپایل کردم مشکلی نداشت.