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

برنامج يقوم بالتحويل من النظام العشري للثنائي

مغلق
بدأه Miss PC في 3 مارس 2006 · 10 رد · 993 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

إخوتي في الله ..

بديت أيئس والله وأنا أحاول أعمل برنامج يقوم بتحويل الأعداد العشريه إلى أعداد ثنائيه بإستخدام الـ Recursion

شرط التوقف ماعرفت له :unsure: .. وبرضو طريقة العرض ؟؟ كيف راح أعرض العدد الثنائي ؟؟ :^)

ياريت اللي يقدر يساعدني يكتب لي الكود وأكون شاكره ومقدره لكم حسن تعاونكم معي .. :(

وجزاكم الله ألف خير مقدما .. بانتظاركم

#2

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

اولاً: لا ياس مع الحياة ولا حياة مع اليأس ( مصطفى كامل)

ثانياً : بم انك جديد على المنتدى رجاء منك مراجعة قوانين المنتدى في طرح المشاركات , والتي تمنع طلب حل واجبات وما شابه هذا

ولكن يمكنك عرض محاولتك , والمساعده من الأعضاء في تعديل الكود , أو تصحيح معلومه , لكن طلب حل مشكله وطلب كود جاهز ممنوع

وحتى لا يلقى موضوعك الغلق يمكنك وضع ما توصلت اليه من نتائج , والجميع هنا للمساعده

#3

معليش أخوي آسفه والله ماكنت اعرف ان هذا من القوانين

بإذن ا لله اليوم احط لكم محاولاتي في أقرب فرصه ...

وألف شكر لك مره ثانيه

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


 int convert(int a , int b , int z)
 {
  int byte[z]; //an array to put the values of the binary number in it

  if ( a%b=0 )
  {
    return (a-b , byte[z]=0 , z ++);//z as a countet to spicefy where to put 1 in the array
   else
  return (a\b , byte[z]=1 , z++);//if a mod b =! 0 >> return a\b  and put 1 in the array
  }//here I don't know how to stop the recursion and how to display the result ??


  int main ()
  {
    int aa , bb , zz;
      bb=2;
      zz=0;
      cout<<"Please Enter The Number That You Want To Convert >> \t";
      cin>>a;
      convert(aa,bb,zz);

     getch();
     return;
  }
#5

أنا عارفه ان الكود مليان أخطاء ..

مثل ماوضحت في الكود ان اللي ماعرفته هو طريقة ايقاف الداله التي تستدعي نفسها .. يعني شرط التوقف ..

أنا أتوقع انه إذا كانت a>b لازم يتوقف ويرجع قيمة 1 للمصفوفه .. لأن اذا صارت الـ a أكبر من الـ b معناتها راح تتوقف عملية القسمه ..

وشيء آخر أيضا هو طريقة عرض المصفوفه .. فكرت أن أضع نواتج عملية القسمه (1و0) في متغير من نوع char ويتم لصقها بجانب بعض وتعرض كـ string ولكن أيضا لم أعرف طريقة لصقها .. هل يكون بالرابط + ؟؟ واذا كان كذلك فكيف أكتب الكود ؟؟

أسئلتي كثيره ولكن أرجو أن تستحملوني فأنا والله من ثلاث أيام أحاول فيه وعندي أفكار لكن المشكله ماعرفت أكتبها كأكواد ..

ألف شكر لكم إخوتي

#6

طيب , محاولة جيدة , بس خليكي معايا في الحل ده

#include <iostream.h>


void convert(int i) {
  if(i > 0) {
    convert(i/2);
    cout << i %2;
  }
}
int main() {
  int a;
  cout<< "Please Enter The Number That You Want To Convert >> \t";
  cin >> a;
  convert(a);
  return 0;
}

مثال :

22 = 10110

كيف نحصل عليها ؟؟ لو قسمنا 22 / 2 يكون الناتج 11 = 1011 وخارج القسمة 0 - نطبعه على الشاشه !!!

طيب بعدها 11 / 2 الناتج 5 = 101 وخارج القسمة 1 - نطبعه

5 / 2 الناتج 2 = 10 وخارج القسمة 1 - نطبعه

2 / 2 الناتج 1 وخارج القسمة 0 - نطبعه

1 / 2 الناتج 0 وخارج القسمة 1 - نطبعه

لاحظي الناتج اصبح صفر , سنتوقف هنا ( الشرط اصبح ان القيمة تساوي 0 )

طيب لو نلاحظ ان الخرج شكله كده

0

1

1

0

1

يعني سوف يطبع على الشاشة بهذه الطريقة من الأول الى الأخير

01101

ولكن هذا في حالة استدعاء الدالة داخليا بعد الطباعة يعني بهذا الشكل

void convert(int i) {
  cout << i %2;
  if(i > 0) convert(i/2);
}

ولكن هذا ليس المطلوب

المطلوب هو الشكل

10110

وطبعا تعرفي ان السطر لا يتم تنفيذ ما يليه قبل تنفيذ كل محتوياته

لهذا لو وضعنا استدعاء الدالة قبل الطباعه , فسوف تنفذ عملية الطباعه من الأخير الى الأول

لو يوجد سؤال او في لبس في الطريقة اطرحي السؤال

#7

جزاك الله ألف خير أخوي ماقصرت ..

فعلا الكود بسيط جدا لكن ماجات على بالي هالفكره .. يمكن لأني استصعبته من البدايه ..

شرحك جدا رائع .. بارك الله فيك وجعله في موازين حسناتك ..

لك احترامي وتقديري استاذي الفاضل..

#8

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

في الكود الي حطيته ماكان فيه بيس كيس

هل هذا معناه ان الكود هيبقى انفنت؟؟

اعتقد ان لازم نخلي قبل الاف ستيتمنت الاولى كوندشن

(If(i<=0

;return

#9

هل تقصد

void convert(int i) {
 if(i > 0) {
   convert(i/2);
   cout << i %2;
 }
}

تريد ان تكون بهذا الشكل

void convert(int i) {
 if(i <= 0) return;
 if(i > 0) {
   convert(i/2);
   cout << i %2;
 }
}

???

لو تقصد هذا يا أخي فهي ضمنيا نفس المعنى

لأن شرط استدعاء الدالة داخليا هو أن يكون i > 0 , يعني لو i <= 0 لن يتم تنفيذ الكود , وسيتم العوده من الدالة , فلا داعي لكتابة السطر الجديد لأن هذا ما سيتم تنفيذه بالفعل

كتابة هذا الشرط يعتبر تحصيل حاصل , يعني فائدته موجوده بيه و بدونه

#10

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

جزاك الله خير

بالضبط اريد ان يكون بهذا الشكل

شكرا على الرد

#11

مشكوووووووووووووووووور يااااااا Miss PC وAsm4all....................

على هذا الموضووووع وأتمنى أن تنشرو المزيد من الأكوووااااد....................

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

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