الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[مخالف - طلب حل : ]تحويل عدد عشري إلى عدد ثنائي

مغلق
بدأه randa في 23 مارس 2010 · 4 رد · 2,307 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

إخواني طلب مني برنامج يحول اي رقم عشري الى رقم ثنائي

ولكن المطلوب ان لا تكون على الـ Array

حاولت ولكن لم تصلح معي الا عن طريق الـ Array

وشاكرة حسن تعاونكم

#2

إستعملي الطريقة Integer.toBinaryString

المرجو اختيار عنوان مناسب لمحتوى الموضوع في المرة القادمة

#3

خوارزمية التحويل إلى رقم ثنائي بسيطة وتعتمد على التقسيم المتتالي على 2 والتخزين في مصفوفة، وهي تابع جاهز في أغلب أو كل لغات البرمجة. التابع Integer.toBinaryString(i); في لغة Java (لغتي المفضلة)

هذا هو ال source code من JDK:


return toUnsignedString(i, 1);
}

/**
* Convert the integer to an unsigned number.
*/
private static String toUnsignedString(int i, int shift) {
char[] buf = new char[32];
int charPos = 32;
int radix = 1 << shift;
int mask = radix - 1;
do {
buf[--charPos] = digits[i & mask];
i >>>= shift;
} while (i != 0);

return new String(buf, charPos, (32 - charPos));
}
public static String toBinaryString(int i) {

لا يهم لكنه لتوضيح الفكرة.

ولكن كون المطلوب أنه لا يجب استخدام مصفوفة يمكن أن نستعمل طريقة تمثيل الأرقام العشرية المعروفة (ربما)

مثلاً:

4321=1+2*10+3*100+4*1000

أي في كل مرة نأخذ باقي القسمة على ،2 نضرب ب 10 مرفوعة لأس الخطوة الحالية...

سأوضح من خلال مثال:

6 في العشري تقابل 110 في الثنائي.

res=0

exp=0

x=6

1)

y=6%2(y=0)

res=res+y*10^exp(res=0+0*10^0=0)

x=x/2

exp++

2)

y=3%2(y=1)

res=res+y*10^exp(res=0+1*10^1=10)

x=x/2

exp++

3)

y=1%2(y=1)

res=res+y*10^exp(res=10+1*10^2=110)

x=x/2

x=0 STOP

أرجو أن يكون الحل صحيحاً

تم تعديل هذه المشاركة بواسطة JDurrah في 23 مارس 2010 في 02:56

#4

هذه مجرد تجربة فكرة وجربتها بالسي ++

ولكن الناتج من اليمين لليسار . وذلك بطباعة باقي القسمة مباشرة . دون حفظ القيم .

int d=1234;
	int r=d,rem;
		do{
		 rem=r%2;
		 r=r/2;
		 cout<<rem;
	  }while(r>1);

	  if (r==1)
		  cout<<r;

	  cout<<"\n NOTE: Resault from right to left";

تحياتي

OMANI FOR EVER

-------------------------------------------------

post-12787-12780191801974.jpg

-------------------------------------------------

#5

الأخ الكريم/الأخت الكريمة

السلام عليكم ورحمة الله وبركاته.

مرحباً بكم في منتدى الفريق العربي للبرمجة

تأسف إدارة المنتدى لغلق الموضوع وذلك لمخالفته قوانين المشاركات، فقرة طلب حل الواجبات والتمارين.

قواعد طرح المشاركات

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

هذا الموضوع مغلق.

مواضيع مشابهة