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

مشاهدة النسخة كاملة : شرح انظمه الارقام + شرح كتابه اكواد التحويل بينها


القنـاص المصرى
08-02-2015, 06:10 AM
السلام عليكم ورحمة الله وبركاته
بسم الله الرحمن الرحيم
رب اشرح لى صدرى ويسر لى امرى واحلل عقده من لسانى يفقهوا قولى
اللهم لا علم لنا الا ماعلمتنا انك انت العليم الحكيم
اللهم صلى على نبينا محمد وعلى اله وصحبه وسلم امين

قبل البدأ فى الموضوع اتقدم بالشكر لجميع اخوانى القائمين على هذا المنتدى
فوالله الذى لا اله لا هو ماوصلت لمستواى هذا الا بعدما اتعبتهم معى فى استفسارات كثيرة
والله انى تعلمت اولى خطواتى فى البرمجه على ايديكم والان تعلمت لغات برمجه اخرى بحكم دراستى
وكما قلنا سابقا ان هذا الموقع سيظل صرحا عظيما للتعليم وان شاء الله يتكاثر عدد المحترفين فيه لينتشر هذا العلم بين المسلمين
واعدكم ان شاء الله بدروس جديده وحصريه فى لغتنا Lua ان شاء الله
اما بعد ..
وانا بالكليه كان الدكتور يشرح لنا انظمه العد ال Binary وال Decimal وال Hexa الخ..
وراودتنى فكره تطبيق هذا المشروع على برنامج Autoplay Media Studio
وان اقوم ببرمجة برنامج يفعل عمليه التحويل هذه :abc_051:
ينقسم الشرح فى هذا الموضوع الى عده اقسام

اولا شرح انظمه العد باستفاضه
ثانيا شرح التحويل بينها وبين بعضها
ثالثا كيف يتم نقوم بعمل كود للتحويل بين نظامي ال Binary وال Decimal
رابعا كيف نقوم بعمل كود يحول بين ال Decimal وال Binary

اولا شرح انظمه العد باستفاضه
الان دعونا نشرح بأستفاضه ماهى انظمه العد وما فائدتها وما هو كل نوع
اولا انظمه العد المعروفة لدى مبرمجين الحاسب الالى او مهندسين الالكترونيات بصفه عامه
هى اربعه انظمه
1- النظام العشرى - Decimal
2- النظام الثنائى - Binary
3- النظام الثمانى - Octal
4- النظام السادس عشر - Hexadecimal

ماهى انظمه العد ؟
هى طريقه معينه تمكننا من معرفه ارقام متتاليه للتعبير عن عدد معين (تعريف معقد شوية)(فلسفى)
اذا كان لدى عدد معين من السيارات فكيف اعبر عن هذا العدد ؟؟
لدى سيارة بورشه + سياره فيرارى + سياره اودى + وبى ام دابليو + الفاروميو + لامبورجينى + فيات + هونداى + رينو + مازاراتى
كم عدد السيارات ؟
لعلنا فى هذا السؤال نقوم بالاجابه بالرقم 10 !
ولكن هل هذه الاجابه صحيحه ؟؟
وهل هناك اجابات اخرى ؟؟
ياصديقى عندما خلق الله لنا الكون علم البشر كيفيه العد والارقام لكى يسهل علينا التواصل مع بيننا لبعض
نحن البشر نتقن العد ولكن على نظام واحد فقط
وهو النظام العشرى (Decimal) بمعنى ان تعبيرنا للاعداد فى اى لغه مبنى على هذا النظام !
ولكن مع ذلك تبقى الاجابه الخاصه بسؤال عدد السيارات مجهوله
فلو ذهبنا الى عدد السيارات التى امتلكها ستكون هناك 4 اجابات
1- اول اجابه فى نظام العد عند البشر هى : 10 وهى بالتعبير عن هذا العدد فى النظام العشرى
2- 1010 فى عالم الالات يمثل الرقم الذى امامك الرقم 10 وهو بالنظام الثنائى
3- A فى عالم الذاكره العشوائيه داخل الالات Ram يكون التمثيل بهذا الرقم ولاتستغرب انه حرف لان فى النظام السادس عشر يتم استبدال بعض الارقام بحروف
4- 12 وهى الاجابه فى نظام ال Octal
اكتشفنا الان ان الاجابه تتعدد بتعدد الانظمه
رغم تعدد هذه الانظمه الا ان الاساس والقاعده الخاصه فيها ثابته
سأتناول فى هذا الشرح شرح للانظمه العددية وسنبدأ بنظامنا النظام العشرى
قبل البدأ فيه اعلم اخى الكريم ان جميع هذه الانظمه مشتركه فى ان لكل نظام
خانة احاد - خانة عشرات - خانة مئات - خانة الاف
النظام العشرى يتكون من عشر ارقام بدايه من الصفر حتى الرقم 9 وبغض النظر ان الصفر ليس له قيمه الا انه عدد
واليك هذا الجدول الذى يحتوى على جميع اعداد الانظمه الاربعه :abc_156:
http://img673.imageshack.us/img673/3756/0kcvVc.jpg
نلاحظ هنا انا النظام السادس عشر
الارقام من 10 الى 15 تتمثل بالحروف ولاننسى لماذا اخر رقم 15 مع انه نظام مكون من 16 رقم ؟ السبب هو ان الصفر رقم بغض النظر عن انه ليس له قيمه :abc_051:
الان نكمل موضوعنا
لاننسى ان اقل قيمه رقميه فى النظام العشرى لاى خانه 0 واعلى قيمه فى هذا النظام هى 9 وهذا لاى خانه سواء الاحاد او العشرات او المئات الخ...
النظام العشرى يتم العد فيه على النحو الاتى
0
1
2
3
4
5
6
7
8
9
وهنا خانه الاحاد
امتلأت بأعلى رقم وهو 9 لذلك سنبدأ فى خانه جديده وهى العشرات ونضيف فيها رقم جديد
وبعد ذلك نقوم بتصفير خانه الاحاد التى تم ملئها وهكذا
10
11
12
حتى نصل ل 19
بعد ذلك نجد الخانه امتلئت من جديد فنضيف للخانه التى تليها رقم جديد ثم نقوم بتصفيرها من جديد
20
ثم نبدأ من جديد 21 الى 29 وتتكرر العمليه
حتى نصل لرقم 99 فاذا وصلنا الى هذه الخانه نجد ان الاحاد امتلئ وايضا العشرات امتلأ فنجد اننا نقوم بالانتقال لخانه جديده ونقوم بالتصفير اول خانيتن
100
الى الان الامور بسيطه
لنرى نظره بسيطه الان عن كيفية تمثيل الارقام فى هذا النظام ايضا
لنأخذ على سبيل المثال هذا الرقم
9240
هذا الرقم تم تمثيله على النحو الاتى

http://img538.imageshack.us/img538/9573/q5UaZ4.jpg

قم بجمع هذه الارقام مع بعضها ليكون الناتج هو
9240

لو لاحظنا لماذا 10pow0 و 10pow1
الرقم 10 هو ال Base الخاص بالنظام والذى يمثل عدد ارقام هذا النظام اللى هما 10 ارقام من 0-9 كما قلنا سابقا !
الان قد تعلمنا الفكره كيف يتم تمثيل الاعداد
فى النظام العشرى وهنا ينتهى الجزء الخاص بالنظام العشرى .
الان نأتى للنظام الثنائى Binary
يتكون هذا النظام من رقمين فقط 0 و 1 والسبب هو ان الالة لا تفهم سوى الشارات الكهربية
حين يكون هناك تيار يعنى الدائره مغلقه يكون هناك قيمه ولذلك رمزنا لها بال 1
وحينما تكون الدائرة الكهربية مفتوحه لا يكون هناك قيمه ولذلك رمزنا لها بالرقم 0
وهذه اللغه التى تفهمها الالات بحكم انها داره كهربيه .
حينما كنا نتكلم فى النظام العشرى بدأنا خانه الاحاد
واشرنا ان خانه الاحاد هى 10pow0
وننتقل الى الخانة التى تليها حينما تمتلئ الخانه بأكبر رقم نطبق هذا الكلام الان
نعلم جميعا ان الصفر ليس له قيمه
لذلك لايعبر عن قيمه
لنتابع هذه الصوره

http://img908.imageshack.us/img908/2469/dnmKuN.jpg
تعلمنا كيف الان نعد بالبينارى
لكن كيف نقوم بالتحويل من النظام العشرى الى النظام الثنائى
مثلا عندى الرقم 50 كيف اقوم بتحويله الى النظام الثنائى
نقوم بقسمه ال 50 على ال Base تبعنا اللى هو 2
ونأخذ باقى القسمه سنرى الان هذا فى الجدول
http://img913.imageshack.us/img913/4026/XCwdba.png
هذه هى طريقة التحويل
هناك طريقة اخرى وسنطبقها على العدد 120 وهى اننا نقوم بصناعه هذا الجدول
يشير كلمه 2pwr1 الى 2 مرفوعه لاس 1
نقوم بصناعه هذا الجدول ونحدد قيمته كما بالشكل التالى
2pwr7 - 2pwr6 - 2pwr5 - 2pwr4 - 2pwr3 - 2pwr2 - 2pwr1 -2pwr0
http://img540.imageshack.us/img540/10/HOQdYL.png
نبحث عن رقم 120 او اقرب رقم اصغر منه
سنجد ان اقرب رقم اصغر منه هو 64 نضع تحته 1
الان نطرح 120-64 يتبقى عندنا 56
نعيد الكره ونبحث عن رقم 56 او رقم اصغر منه سنجد ال32 نضع تحتها 1
نطرح الان 56 من 32 يتبقى لنا 24 نعود للجدول مرة اخره سنجد ان الرقم الاصغر هو 16 نضع تحتها 1
الان نطرح 24-16 سيكون الناتج 8 نضع تحتها فى الجدول 1
ثم نضع باقى الارقام من الجهة اليمنى اصفار يعطينا هذا العدد المقابل له فى البينارى
نعيد حل مثال ال 120 بطريقة القسمه
120 / 2 تساوى 60 والباقى 0 وهذا هو اول رقم من جهة اليمين
60 / 2 تساوى 30 وباقى القسمه 0 الرقم الان وصلنا ل00
30 / 2 تساوى 15 وباقى القسمه 0 الان وصلنا ل 000
15 / 2 تساوى 7 وباقى القسمه 1 الان صار الرقم 1000
7 / 2 تساوى 3 وباقى القسمه 1 صار الرقم الان 11000
3 / 2 تساوى 1 وباقى القسمه 1 صار الرقم 111000
1 / 2 يساوى صفر وباقى القسمه 1 صار الرقم النهائى 1111000
الان نستطيع بكل سهولة تحويل النظام العشرى الى نظام ثنائى
:abc_050:
الان كيف نعكس الموضوع
يعنى نحول النظام الثنائى لنظام عشرى
لنقل ان عندنا الرقم 1101
كيف نعرف ماهو بالنظام العشرى
ارجع الى هذه الصوره
http://img538.imageshack.us/img538/9573/q5UaZ4.jpg
لاننا سنستخدمها مرة اخرى ولكن بشكل اخر
قم بإستبدال كل رقم 10 ب رقم 2
ونكتب 1101 تحتها
مثل هذا الشكل
http://img540.imageshack.us/img540/4665/JppUnT.png
عرفنا الان كيف تكون عمليه التحويل بين النظامين

نظام الهكسا هو نفس الموضوع ولكن ال Base تبعه بيكون 16 يعنى كل الخطواط بنكررها بس بنستخدم 16
ولا ننسى ان الارقام من 10-15 فيه تكون برموزمن a-f
والنظام الثمانى نفس الحكاية ولكنه من 8 ارقام بيكون من 0 ل 7
الان نأتى لطريقة البرمجه
https://www.youtube.com/watch?v=UAJjQj03qQ0

CODE

function convert_to_bin(decimal)
bin = "";
while decimal > 0 do
if decimal % 2 == 1 then
decimal = (decimal -1) / 2;
bin = '1'..bin;

else
bin = '0'..bin
decimal = decimal / 2;
end
end
return bin;
end

function Convert_To_Decimal(numb)-- 1101
size = String.Length(numb); -- 4
current = nil;
counter = size
total = 0;
value = 1;
current_value = 0;
for i=1 , size do
current = String.Mid(numb, counter, 1);
current_value = current * value
total = total + current_value;
value = value * 2;
counter = counter - 1;
end
return total;
end

فرح صالحي
08-02-2015, 09:42 AM
شـكــ وبارك الله فيك ـــرا لك ...:abc_022: لك مني أجمل تحية .
لماذا وضعت الكود على شكل صورة ؟
:abc_152::abc_152:

أبو يوسف
08-02-2015, 01:27 PM
جزاك الله خيرا اخانا القناص وبارك الله فيك

ليت كل الأعضاء مثلك يستفدوا ويفيدوا فيكونوا أعضاء فاعلين

.

ثامر أبو بلقيس
08-02-2015, 04:44 PM
السلام عليكم ورحمة الله وبركاته
بارك الله فيك أخي القناص المصري .. متوقع منك تقديم هذا الشرح كما وعدتَ:abc_138:
لقد أبدعت أخي الكريم مجهود في ميزان حسناتك إن شاء الله :abc_138:
شكرا على هذه البرمجة :abc_138:

وسأحاول أن أكمل مابدأته أنت بغية تحقيق التنوع المفيد :abc_138:
إن شاء الله

المبرمج المبتدئ
08-02-2015, 08:23 PM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .

نسيم الجزائر
09-02-2015, 07:34 AM
شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية . :abc_152:

ثامر أبو بلقيس
09-02-2015, 11:05 AM
إليك أخي القناص هذه المحاولة
لحالة ارجاع أو تحويل العدد من الثنائي للعشري
التجربة تحتاج لمراجعة صحتها نظريا ظهرت لي صحيحة
لذلك وجب اخضاعها لتجربة عملية لتتبع أي خطأ في محاولة حاولت كتابتها
بفكرة مختلفة
p = Input.GetText("Input1");
k=String.ToNumber((0*2)+String.Mid(p, 1, 1));
for i = 2, String.Length(p) do
k = math.max(1,String.ToNumber((k*2)+String.Mid(p, i,1)));
end
Dialog.Message("Notice", k);

موفق :abc_138:
وسأحاول أن أكتب كود تحويل للنظام الست عشري
إن شاء الله :abc_138:

ثامر أبو بلقيس
09-02-2015, 08:40 PM
وهذه محاولة للتحويل من النظام الثنائي
للنظام الست عشري بناء على شروحاتك أخي الكريم

كتبتها كذلك تدعيما لموضوعك
p = String.ToNumber(Input.GetText("Input1"));
g =""
x=1
repeat
p,n =Math.Floor(p/16),Math.Mod(p,16)
if n==10 then
n = String.Replace(n, n, "a", false);
elseif n==11 then
n = String.Replace(n, n, "b", false);
elseif n==12 then
n = String.Replace(n, n, "c", false);
elseif n==13 then
n = String.Replace(n, n, "d", false);
elseif n==14 then
n = String.Replace(n, n, "e", false);
elseif n==15 then
n = String.Replace(n, n, "f", false);
end
x=x+1;g=g..n;
until p <=0
Dialog.Message("Notice", string.reverse(g));

:abc_138:

azizsoft
09-02-2015, 08:52 PM
بسم الله الرحمن الرحيم

بارك الله فيكم اخي القناص على هذا الشرح المستفيض
وشكرا للاستاذ أبو بلقيس لاثراء الموضوع

abohmam
10-02-2015, 06:35 PM
جزاك الله خيرا قناصنا الرائع

شرح رائع وجهد مشكور

بارك الله فيك ودائما مبدع ومميز

القنـاص المصرى
10-02-2015, 10:25 PM
شكرا يا اخى الكريم ابا بلقيس على اكوادك فهى والله خير مرجع وساعدتنى كثيرا
=:abc_139: