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

برنامج مدخلاته هي رقم و تتم طباعته بالعد الثنائي للمستخدم

بدأه omaraltakheen في 10 أكتوبر 2011 · 10 رد · 843 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم :

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

أي عندما أدخل مثلا الرقم 10 يظهر لي [1010] .

حاولت كتابة هذا البرنامج ولكن بعد محاولات عديدة لم أستطع الحصول على نتيجة جيدة لأني مبتدئ في برمجة c++ فأرجو مساعتدكم

جزاكم الله خيرا .

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

www.omaraltakheen.yolasite.com

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

#2

اولا هل تعرف كيف تحول من النظام العشري الى الثنائي؟

1

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#3
mental-driller كتب:

اولا هل تعرف كيف تحول من النظام العشري الى الثنائي؟

سؤال جميل

نعم , وإلا لم أكن لأطلب هذا البرنامج

وإذا لاحظت أنني عندما أعطيت المثال رقم 10 كتبته لكم [1010]

أنتظر جوابك أخي mental-driller

وشكرا لمشاركتك

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

www.omaraltakheen.yolasite.com

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

#4

الأمر بسيط ، تقوم بقسمة العدد بشكل متتالي حتى يصبح العدد يساوي الصفر

في كل مرة تقوم بقسمة العدد على 2 تقوم بفحص باقي القسمة فإذا كان يساوي الصفر فان العدد صفر واذا كان باقي القسمة لا يساوي الصفر فان العدد يساوي الواحد

الخوارزمية هي كالتالي

result = 0
number = input from user

while number != 0
rem = number % 2
if rem == 0
result = result * 10 + 0
else
result = result * 10 + 1
number /= 10
end while

reverse result

تم تعديل هذه المشاركة بواسطة mental-driller في 11 أكتوبر 2011 في 05:49

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#5

شوف هذا الكود.. وعافية على اللي يشرحه للأعضاء smile.gif

#include<iostream>

using namespace std;

const char* Dec_to_binary( int x )
{
	static char b[8] = {0};

	for (int z=128,y=0; z>0; z>>=1,y++)
	{
    	b[y] = ( ((x & z) == z) ? 49 : 48);
	}

	return b;
}



int main(){
cout<<"7 in binary is: "<<Dec_to_binary( 7 )<<endl;
system("pause");
	return 0;
}

تم تعديل هذه المشاركة بواسطة A.S Hack في 11 أكتوبر 2011 في 07:21

" إن الله كتب الإحسان على كل شيء"

::

الإرادة ... تحقق السيادة.

#6
A.S Hack كتب:

شوف هذا الكود.. وعافية على اللي يشرحه للأعضاء smile.gif

#include<iostream>

using namespace std;

const char* Dec_to_binary( int x )
{
	static char b[8] = {0};

	for (int z=128,y=0; z>0; z>>=1,y++)
	{
    	b[y] = ( ((x & z) == z) ? 49 : 48);
	}

	return b;
}



int main(){
cout<<"7 in binary is: "<<Dec_to_binary( 7 )<<endl;
system("pause");
	return 0;
}

الكود بيقارن اذا ما كان العدد العشري يحتوي على الpower of 2 لكل خانه فاذا كان يحتوي هذا الرقم بيكون 1 مالم صفر

مثلا العدد 10 بالثنائي 1010 لما نقارنه بالاعداد 128و64و32و16و8و4و2و1 نلاحظ ان يحتوي على 8 و 4 لذا تكون النتيجة هي 00001010 وهذه هي نتيجة الbitwise and

بس عيب الكود هو انه بيفرض ان العدد يتكون من 8 خانات بس ، في حين اننا نريد المستخدم ان يدخل اي عدد

تم تعديل هذه المشاركة بواسطة mental-driller في 11 أكتوبر 2011 في 12:07

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#7

تفضل هذه محاولتي ب recrusive >>

#include<iostream>
#include<stdlib.h>
using namespace std;
void convert(int num2,int array2[],int &ind2);
void convert(int num2,int array2[],int &ind2)
{
if(num2==0 )
{
	if(ind2==0)
	array2[ind2]=0;
	else
		ind2--;
}

else
{
	if(num2%2==0)
		array2[ind2]=0;
	else
		array2[ind2]=1;

	num2=static_cast<int>(num2/2);
	ind2++;

	convert(num2,array2,ind2);
}
}

int main()
{
int num;
int array[20];
int index=0;

cout << "ENTER A DECIMAL NUMBER : ";
cin >> num;

convert(num,array,index);

cout << "wait ....  \n  here you are :   " ;

for(;index>=0;index--)
	cout << array[index];

cout << endl;


return 0;

}

قكر ... ثم بإذن الله سأقوم بشرحه اليوم

والسلام عليكم

تم تعديل هذه المشاركة بواسطة cpp_lover في 11 أكتوبر 2011 في 13:54

.............. بسم الله الرحمن الرحيم ...............ز

"فمن إتبع هداي فلا يضل ولا يشقي " صدق الله العظيم

ماض في الطريق إلي .... C++

#8

شكرا جزيلا لكم جميعا سأقوم بتعلم ما كتبتموه

والشكر أيضا لأخي cpp_lover على التبسيط في الكتابة ولكن عندي سؤال من فضلك هل يمكن كتابة البرنامج بدون المصفوفات | array |؟

تم تعديل هذه المشاركة بواسطة omaraltakheen في 11 أكتوبر 2011 في 14:52

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

www.omaraltakheen.yolasite.com

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

#9
omaraltakheen كتب:

شكرا جزيلا لكم جميعا سأقوم بتعلم ما كتبتموه

والشكر أيضا لأخي cpp_lover على التبسيط في الكتابة ولكن عندي هل يمكن كتابة البرنامج بدون المصفوفات | array |؟

لقد قمت بوصف الخوارزمية لك مسبقا ، ام تريديني ان اكتب لك الحل بشكل مباشر؟

تذكر ان قوانين المنتدى لا تسمح بحل الواجبات بشكل مباشر

يجب ان تضع محاولاتك قبل ان يكتب لك الاعضاء اي اكواد

بالتوفيق

No intellectual battle was ever won through retreat
You do not watch Gintama? Dude, you are missing a lot!


صورةmsrgb1485.gif ocajavase7programmerclr.gif

#10
mental-driller كتب:

لقد قمت بوصف الخوارزمية لك مسبقا ، ام تريديني ان اكتب لك الحل بشكل مباشر؟

تذكر ان قوانين المنتدى لا تسمح بحل الواجبات بشكل مباشر

يجب ان تضع محاولاتك قبل ان يكتب لك الاعضاء اي اكواد

بالتوفيق

لا لا أريد الحل بشكل مباشر ولكن كما قلت لكم أني مبتدئ وعذرا منكم على كثرة أسئلتي سأحاول كتابة البرنامج بيدي بعد هذا الرشح انتظروني :)

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

www.omaraltakheen.yolasite.com

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

#11

السلام عليكم

اليك محاولة بالطريقة التراجعية

جربت المحاولة على الورق وكانت صحيحة

هذه هي الدالة

String conv(int x){
if(x==0) return NULL;
else if (x%2==0) return conv(x/2)+"0";
else return conv(x/2) + "1";
}

يمثل اكس رقم المستخدم

ملاحظة: يجب ان تتحقق من ان اكس لا يساوي الصفر منذ البداية

لانه في هذه الحالة لا يحتاج للتحويل

ارجو ان تكون الطريقة واضحة

بالتوفيق

تم تعديل هذه المشاركة بواسطة zaka88 في 13 أكتوبر 2011 في 11:17

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…