المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : التحويل إلى النظام الثنائي


ثامر أبو بلقيس
06-02-2015, 10:56 PM
السلام عليكم ورحمة الله وبركاته
أخي المبرمج ... تعرف بأن الأعداد :12 , 255 , 301 .... الخ
هي أعداد مكتوبة في النظام العشري أما نظام العد الثنائي فهو يعتمد بالأساس على الارقام 0 و 1
و العدد المكتوب في النظام الثنائي مستمد من عملية تحويل لعدد مكتوب في النظام العشري
بمعنى يمكنك تحويل العدد من الثنائي الى العشري و العكس
و ما يهمني هو كيف أحول العدد من نظاما عشريا إلى نظاما ثنائيا بأبسط الطرق

هنااك في الموقع أعمال لافته و هادفة اضغط للاطلاع (http://www.abc4web.net/vb/showpost.php?p=277174&postcount=1)

عملية التحويل تتم كمايلي :
تتم قسمة العدد المصدر أو الذي نريد تحويله على العدد 2 ونحتفظ بالباقي
ثم تتواصل العملية باعتماد ناتج القسمة يكون دائما باهمال الجزء العشري أي نأخذ الجزء الصحيح
تتوقف عملية القسمة عندما يصبح ناتج القسمة = 0
بواقي القسمة تجمع بترتيب عكسي ذلك التجميع هو المعبر تماما عن التحويل الثنائي للعدد المراد تحويله

لاحظ الصورة : لآلية القسمة على 2 دائما مع أخذ ناتج القسمة الصحيح
ثم جمعت البواقي بترتيب عكسي فكان العدد 1100 هو التحويل للعدد 12 الذي انطلقت منه القسمة
http://www12.0zz0.com/2015/02/07/00/447634527.jpg (http://www.0zz0.com)

المطلوب أخي :
- عدم ارفاق ملف مفتوح
- الابتعاد عن الكتابة في global functions للأكواد بعض الزملاء يرون في ذلك تعقيدا برمجي
- شرح طريقة العمل أو وضع آلية حل دقيقة
تقديري :abc_138:

ساهم في دفع اخوانك خطوة للامام :abc_138:

فرح صالحي
06-02-2015, 11:25 PM
السلام عليكم ورحمة الله وبركاته
مجرد فكرة
math.fmod(x, y)
موفق بإذن الله .:abc_152:.. لك مني أجمل تحية .

القنـاص المصرى
07-02-2015, 01:44 AM
سأقوم بتصوير شرح كامل عن كيفية برمجة المحول بين النظامين واعتذر فى موضوع ال Global Functions سأقوم بتفصيل الكود ليكون اكثر وضوحا :abc_138:

ثامر أبو بلقيس
07-02-2015, 11:35 AM
السلام عليكم ورحمة الله وبركاته
شكرا أخي صالحي دالة باقي القسمة
math.fmod(x, y)
هي احد الاسس في الحصول على النتائح
وهي نفسها
math.mod(x, y)
وهي نفسها
Math.Mod(x, y)
شكرا :abc_138:

ثامر أبو بلقيس
07-02-2015, 11:38 AM
سأقوم بتصوير شرح كامل عن كيفية برمجة المحول بين النظامين واعتذر فى موضوع ال Global Functions سأقوم بتفصيل الكود ليكون اكثر وضوحا :abc_138:

بارك الله فيك

و أنا بدوري سأضع خطوات عمل للحصول على التحويل من العشري الى الثنائي كمرحلة أولى
بشكل مختلف لاثراء العمل :abc_138:
إن شاء الله

ثامر أبو بلقيس
07-02-2015, 11:49 AM
خطوات العمل :
01 - الاعلان على مصدر العدد المراد تحويله ويكون بصيغة رقمية و ليست نصية
02- افتراض متغير مساوي للقيمة 1
03-انشاء دالة تكرارية تقوم بـ :
أ - قسمة العدد على 2 مع مراعاة الجزء الصحيح "Math.Floor"
ب -قسمة الناتج السطر السابق باستمرار على 2 و الاحتفاظ بالباقي
ملاحظة : أ و ب ينفذا في وقت واحد
ج - تزايد القيمة الافتراضية
د - تخزين البواقي

04 - توقيف التكرار عند الوصول لناتج يساوي 0
05 - عرض الناتج بالمقلوب

هذا مافكرت فيه و سيتم تجسيده ان شاء الله :abc_138:

ياسرهتهت
07-02-2015, 04:11 PM
بسم الله الرحمن الرحيم
شكرا لك استاذي الكريم على هذا التوضيح الرائع
------------------------------------------------
خطوات العمل :
01 - الاعلان على مصدر العدد المراد تحويله ويكون بصيغة رقمية و ليست نصية
02- افتراض متغير مساوي للقيمة 1
03-انشاء دالة تكرارية تقوم بـ :
أ - قسمة العدد على 2 مع مراعاة الجزء الصحيح "Math.Floor"
ب -قسمة الناتج السطر السابق باستمرار على 2 و الاحتفاظ بالباقي
ملاحظة : أ و ب ينفذا في وقت واحد
ج - تزايد القيمة الافتراضية
د - تخزين البواقي

04 - توقيف التكرار عند الوصول لناتج يساوي 0
05 - عرض الناتج بالمقلوب

هذا مافكرت فيه و سيتم تجسيده ان شاء الله
----------------------------------------------

في الفقرة ج ماذا تقصد بالقيمة الافتراضية ----- ؟

موفق بإذن الله ... لك مني أجمل تحية .
:abc_152::abc_152:

ثامر أبو بلقيس
07-02-2015, 04:29 PM
الفقرة ج متعلقة بالخطوة الثانية التي افترضنا فيها قيمة افتراضية
02- افتراض متغير مساوي للقيمة 1

ثامر أبو بلقيس
07-02-2015, 09:47 PM
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته

كتبت في مشاركة سابقة طريقة معينة لانجاز المطلوب
أي تصور نظري هل يمكن تحقيقه ؟ هل يعترض التخطيط النظري
مع التنفيذ العملي

نبدأ و نشوف النتائج في الاخير :
01 - الاعلان على مصدر العدد المراد تحويله ويكون بصيغة رقمية و ليست نصية
من البديهي أن نعلن بطرق مختلفة ولتكن قراءة من أنبوت
p =Input.GetText("Input1");
حيث سيمثل P العدد الذي سنحوله و بماأنه عدد وجب التعبير عن الخطوة الاولى بصيغة
رقمية ليكون الكود المناسب للخطوة الأولى هو:
p = String.ToNumber(Input.GetText("Input1"));
--------------------------------------------------------------------------------------------
الخطوة الثانية :
02- افتراض متغير مساوي للقيمة 1
ليس صعب أن نعطي قيمة 1 لأي متغير و ليكن x
- الكود :
x=1
هذه القيمة ستتزايد في الدالة التكرارية ثم تتوقف عند حد معين
-----------------------------------------------------------------
الخطوة الثالثة :
03-انشاء دالة تكرارية تقوم بـ :
أ - قسمة العدد على 2 مع مراعاة الجزء الصحيح "Math.Floor"
ب -قسمة الناتج السطر السابق باستمرار على 2 و الاحتفاظ بالباقي
ملاحظة : أ و ب ينفذا في وقت واحد

سأختار الدالة repeat لتنفيذ التكرار
repeat

ماذا سيتكرر طبعا الخطوة أ و ب في وقت واحد
سأضع هنا حدين الحد الاول ليكن p يقابله قسمة الجزء الصحيح على 2
Math.Floor(p/2)
الحد الثاني ليكن n يقابله تنفيذا استخلاص باقي قسمة p على 2
Math.Mod(p,2)
وبماأننا نريد تنفيذ هاتين المرحلتين في وقت واحد
سيكون الكود المناسب لهذه الخطوة :
p,n =Math.Floor(p/2),Math.Mod(p,2)

في المرحلة الموالية في داخل الدالة التكرارية سيتزايد العداد x عند كل دورة
ج - تزايد القيمة الافتراضية
ليصبح الكود المضاف لما سبق
x=x+1
-------------------------------------------
نواصل تنفيذ الخطوات وصلنا إلى تخزين البواقي
د - تخزين البواقي
سنفرض متغير وليكن g في كل مرة أو في كل دورة يخزن
باقي القسمة
مع ملاحظة أن g ستكون بمثابة حاوية نتائج لذلك وجب الاعلان عليها
فارغة قبل بدء التكرار
كود :
g=g..n;
-------------------------------------------
المرحلة الرابعة توقيف التكرار = توقيف القسمة و انهاء العملية
وذلك يحدث عند ناتج القسمة يساوي 0 أو سالب
04 - توقيف التكرار عند الوصول لناتج يساوي 0

الكود :
until p <=0
----------------------------------------------------
الان صار العمل جاهز لو نكتب مثلا 12 في الانبوت و نسخرج قيمة
p في رسالة سيكون الناتج 0011 نعم هكذا و هو غير صحيح
و حتى يكون صحيح يجب قلب الناتج
نجرب و نحوصل ما تم ذكره أولا :
p = String.ToNumber(Input.GetText("Input1"));
g =""
x=1
repeat
p,n =Math.Floor(p/2),Math.Mod(p,2)
x=x+1;g=g..n;
until p <=0
Dialog.Message("Notice", g);

تبقى آخر مرحلة نلتقي بود :abc_138:

القنـاص المصرى
08-02-2015, 07:12 AM
تفضل اخى
http://www.abc4web.net/vb/showthread.php?p=277347

ثامر أبو بلقيس
08-02-2015, 06:03 PM
تفضل اخى
http://www.abc4web.net/vb/showthread.php?p=277347

بارك الله فيك أخي تم الاطلاع على الموضوع الممتاز شكرا :abc_138:

ومواصلة للموضوع
كنت قد وصلت في آخر مرة الى الحوصلة التالية
p = String.ToNumber(Input.GetText("Input1"));
g =""
x=1
repeat
p,n =Math.Floor(p/2),Math.Mod(p,2)
x=x+1;g=g..n;
until p <=0
Dialog.Message("Notice", g);

وقلنا لو نقوم بتحويل العدد 12 مثلا ستطلع النتائج بهذا الشكل 0011
وحتى تكون النتيجة صحيحة أي 1100 علينا تحقيق الخطوة الاخيرة
05 - عرض الناتج بالمقلوب
أي ناتج ؟ نعم القيمة g التي ظهرت في Message
لعكس اي نص نستعمل دالة lua :
reverse
ليصبح الاعلان على النتيجة ليس g بل مقلوبها

كود محقق لذلك :
Dialog.Message("Notice", string.reverse(g));

ومنه سيكون مظهر الكود النهائي الكفيل بالتحويل من النظام العشري
للثنائي هو :
p = String.ToNumber(Input.GetText("Input1"));
g =""
x=1
repeat
p,n =Math.Floor(p/2),Math.Mod(p,2)
x=x+1;g=g..n;
until p <=0
Dialog.Message("Notice", string.reverse(g));

جرب الان بوضع الكود في زر ليحول ما يكتب في الانبوت1 ..موفق :abc_138:
نقرأ طرق أخرى إن شاء الله و ما قدم ماهو الا اثراء لموضوع الأخ القناص
المصري بغية تنويع الحلول و تبادل الافكار :abc_138:

و نلتقي في كيفية إجراء العكس في موضوع آخر
إن شاء الله:abc_138:

سلام :abc_023:

ثامر أبو بلقيس
08-02-2015, 11:45 PM
:abc_138::abc_138: