قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 11-10-2014, 05:42 PM المشاركة 17   
افتراضي



متغير واحد أو متغيرين ؟
هناك مشكلة شائعة فى كتابة البرنامج ، وهى الاستخدام عن طريق الخطأ اسمين لمتغيرين تكون مختلفة قليلا عندما تقصد متغير واحد فقط . البرنامج التالى به خطأ شخصى Bug :


كود:
' Calculate Miles per Gallon (Buggy Version) ' ' second odometer reading is 45,678.3 ' first odometer reading is 45,149.6 ' gallons of gas used is 12.5 ' LET MILES = (45678.3 - 45149.6) PRINT MILE / 12.5 END

السؤال رقم 10 :
أوجد الخطأ الشخصى فى البرنامج السابق ، واكتب البرنامج الصحيح .
الإجابة :
البرنامج الصحيح يكون بالشكل التالى :

كود:
' Calculate Miles per Gallon (Correct Version) ' ' second odometer reading is 45,678.3 ' first odometer reading is 45,149.6 ' gallons of gas used is 12.5 ' LET MILES = (45678.3 - 45149.6) PRINT MILES / 12.5 END

البرنامج الذى به خطأ شخصى يستخدم اسمين : MILES و MILE فى حين يجب أن يكون هناك اسم واحد فقط . أى من الاسمين يكون اسم متغير صحيح ، ولكن يجب أن تستخدم اسم واحد فقط من أجل المتغير الواحد .

اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 11-10-2014, 05:51 PM المشاركة 18   
افتراضي


متى يتم حجز ذاكرة من أجل المتغيرات :
عندما يتم استخدام المتغير فى البرنامج لأول مرة ، فإن نظام QBasic يجد (يحجز) الذاكرة من أجله . وينطبق هذا على أى عبارة ، وليس عبارة LET فقط . إذا لم تكن هناك أى معلومات أخرى ، فإن النظام سوف يضع الصفر zero كقيمة عددية بالمتغير . فيما يلى البرنامج الخطأ السابق :


كود:
' Calculate Miles per Gallon (Buggy Version) ' LET MILES = (45678.3 - 45149.6) PRINT MILE / 12.5 END
اسم المتغير MILE يظهر لأول مرة فى عبارة PRINT ( الاسم MILES اسم مختلف تماما من وجة نظر QBasic) . نتيجة لذلك فإن النظام يحجز ذاكرة من أجل هذا الاسم الجديد MILE ، وهو ليس له أى معلومات أخرى ، فيتم وضع الصفر به . الآن يوجد متغيرين فى الذاكرة :







التعبير الرياضى "MILE / 12.5" سوف يحصل على الصفر من المتغير MILE ويقسمه على "12.5" ، والنتيجة هى الصفر . وفى النهاية سوف يطبع "0" على الشاشة .
وهذا خطأ Bug ، ويصعب تعقبه إلا إذا كنت تنظر بعناية فى هجاء كل اسم لمتغير فى البرنامج . إذا أعطى برنامج نتيجة حسابات خاطئة بقيمة الصفر ، تحقق من هجاء كل اسم متغير .

السؤال رقم 11 :
ما الذى سوف يكتبه البرنامج التالى على شاشة الكمبيوتر ؟
كود:
' Calculate Miles per Gallon (Buggy? or not?) ' LET MILE = (45678.3 - 45149.6) PRINT MILE# / 12.5 END
الإجابة :
البرنامج سوف يطبع ما يلى :

كود:
0
وذلك لأن MILE و MILE# هى اسماء مختلفة ، لمتغيرين مختلفين . الاسم MILE# يستخدم لأول مرة فى العبارة PRINT لذلك يتم حجز ذاكرة من أجله كما يتم وضع الصفر به ، ومن ثم تكون محتوياته هى الصفر عند تنفيذ عملية القسمة MILE# / 12.5 .


التعديل الأخير تم بواسطة : F.Abdelaziz بتاريخ 11-10-2014 الساعة 05:54 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-10-2014, 11:25 AM المشاركة 19   
افتراضي


استخدام عدة متغيرات فى البرنامج :
قد يستخدم البرنامج العديد من المتغيرات . المتغيرات تكون مفيدة لتخزين الأجزاء الوسيطة من العمليات الحسابية .
مثال :
المطلوب حساب عدد الأكواب المستهلكة من صودا العنب ، سعة الكوب 8 أونس ، إذا تبقى 1.5 جالون من برميل سعته 5 جالون ( يوجد 128 أونس بكل جالون ) .

كود:
' Glasses of Grape soda ' LET KEGSIZE = 5 ' statement 1 LET LEFTOVER = 1.5 ' statement 2 LET GALLONS = KEGSIZE - LEFTOVER ' statement 3 LET OUNCES = GALLONS * 128 ' statement 4 PRINT "glasses of soda =", OUNCES / 8 ' statement 5 END
تذكر فكرة التنفيذ المتسلسل . عبارات هذا البرنامج سوف يتم تنفيذها واحدة تلو الأخرى بالترتيب بدءا من العبارة الأولى .
فى العبارة الأولى :
يتم استخدام المتغير KEGSIZE لأول مرة ، لذلك يتم حجز ذاكرة له . الأمر LET يضع القيمة "5" فى هذه الذاكرة . الشكل التالى يبين شكل الذاكرة بعد تنفيذ العبارة الأولى :





الآن يتم تنفيذ العبارة الثانية :
يتم حجز ذاكرة للمتغير LEFTOVER وحفظ القيمة "1.5" فيه ، وتكون الذاكرة كما يلى :




العبارة الثالثة أكثر تعقيدا :

كود:
LET GALLONS = KEGSIZE - LEFTOVER ' statement 3
هذه العبارة تقوم بعمل عدة أشياء :
1- حجز ذاكرة من أجل المتغير GALLONS .
2- البحث فى المتغير KEGSIZE للحصول على القيمة "5" .
3- البحث فى المتغير LEFTOVER للحصول على القيم "1.5" .
4- أجراء العملية الحسابية "5 – 1.5" .
5- وضع النتيجة "3.5" فى المتغير GALLONS .
تذكر أن استخدام المتغيرات KEGSIZE و LEFTOVER فى العبارة الثالثة لا يغير من محتوياتها . بعد تنفيذ العبارة الثالثة ، يكون شكل الذاكرة الرئيسية كما يلى :







بعد الانتهاء من العبارة الثالثة ، يتم تنفيذ العبارة الرابعة .

السؤال رقم 12 :
ما هى الأربعة أشياء التى تقوم بعملها العبارة الرابعة ؟

كود:
LET OUNCES = GALLONS * 128 ' statement 4
الإجابة :
العبارة الرابعة تقوم بعمل أربعة أشياء :
1- حجز ذاكرة من أجل المتغير OUNCES .
2- البحث فى المتغير GALLONS للحصول على القيمة "3.5" .
3- إجراء العملية الحسابية "3.5 * 128" .
4- وضع النتيجة "448" فى المتغير OUNCES .
يتم إجراء الخطوة الأولى لأن المتغير OUNCES لم يتم رؤيته من قبل فى البرنامج لذلك يجب حجز ذاكرة له الآن .
بعد تنفيذ العبارة الرابعة يكون شكل الذاكرة كما يلى :







بالطبع ، هناك الكثير من الأشياء فى الذاكرة ، ولكنها ليست محور اهتمامنا الآن .
وأخيرا يتم تنفيذ العبارة الأخيرة :

كود:
PRINT "glasses of soda =", OUNCES / 8 ' statement 5
السؤال رقم 15 :
ما الذى سوف تكتبه هذه العبارة على شاشة الكمبيوتر ؟
الإجابة :
هذا البرنامج سوف يطبع ما يلى :

كود:
glasses of soda = 56
هذه العبارة تقوم بعمل أربعة أشياء :
1- كتابة السلسة "glasses of soda =" على الشاشة .
2- الحصول على القيمة "448" من المتغير OUNCES .
3- قسمة هذه القيمة على "8" ( لكن مع ترك محتويات المتغير OUNCES بدون تغيير ) .
4- كتابة النتيجة "56" على الشاشة .
ملاحظات :
· غالبا يتم وضع جزء من العمليات الحسابية فى متغير واستخدامها فى وقت لاحق فى باقى العمليات الحسابية . وهذا يقسم العمل بين عدة عبارات من البرنامج .
· احيانا يتم استخدام متغيرات مؤقتة داخل البرنامج للوصول إلى الجواب . هذه المتغيرات تستخدم فى حفظ خطوة على طول طريق النتيجة التى تريدها . عبارة PRINT النهائية قد لا تستخدم هذه المتغيرات .


الصورة الرمزية قطر الندى 89
قطر الندى 89
:: مهندس متميز ::
تاريخ التسجيل: Aug 2013
الدولة: IRAQ
المشاركات: 332
نشاط [ قطر الندى 89 ]
قوة السمعة:
قديم 12-10-2014, 11:52 AM المشاركة 20   
افتراضي


استمر بالابداع يامبدع


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-10-2014, 12:38 PM المشاركة 21   
افتراضي


شكرا جزيلا

مع تمنياتى بدوام التوفيق


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-10-2014, 01:43 PM المشاركة 22   
افتراضي


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


كود:
' Changing the contents of a variable ' LET NUMBER = 23.5 ' create NUMBER, put 23.5 into it PRINT "First", NUMBER ' look in NUMBER to find a value to print LET NUMBER = 45.1 ' put 45.1 into NUMBER (erasing the 23.5) PRINT "Second", NUMBER ' look in NUMBER to find a value to print END
يبدأ التنفيذ بأول عبارة ، عبارة LET الأولى . هذه هى المرة الأولى التى يستخدم فيها المتغير NUMBER ، لذلك يتم حجز ذاكرة له . ثم وضع العدد "23.5" به :






الآن يتم تنفيذ عبارة PRINT الأولى . وهى تبحث فى المتغير NUMBER لتجد القيمة "23.5" ، وتطبعها على الشاشة . قيمة المتغير NUMBER لن تتغير .

السؤال رقم 16 :
هل العبارة LET دائما تحجز ذاكرة جديدة للمتغير ؟

الإجابة :
لا . فقط يتم حجز ذاكرة للمتغير الذى يستخدم لأول مرة فى العبارة .

عبارة LET الثانية :
عبارة LET الثانية تغير محتويات المتغير .

كود:
LET NUMBER = 45.1 ' put 45.1 into NUMBER (erasing the 23.5)
· حيث أن المتغير NUMBER موجود بالفعل ، فلن يتم حجز ذاكرة جديدة له .
· القيمة "45.1" تحل محل المحتويات السابقة للمتغير NUMBER .
إذا فكرت فى المتغير كصندوق ، وهذا الصندوق يمكن أن يحفظ شىء واحد فقط . ومن ثم بعد عبارة LET الثانية تكون الذاكرة بالشكل التالى :



الآن ، يتم تنفيذ عبارة PRINT الثانية . وهى تبحث فى المتغير NUMBER ، لتجد القيمة "45.1" ، وتطبعها على الشاشة . عبارة PRINT لن تغير من محتويات المتغير NUMBER .

السؤال رقم 17 :
أنظر مرة أخرى إلى البرنامج الكامل :

كود:
' Changing the contents of a variable ' LET NUMBER = 23.5 ' create NUMBER, put 23.5 into it PRINT "First", NUMBER ' look in NUMBER to find a value to print LET NUMBER = 45.1 ' put 45.1 into NUMBER (erasing the 23.5) PRINT "Second", NUMBER ' look in NUMBER to find a value to print END
ما الذى تتوقع أن يتم طباعته على الشاشة ؟

الإجابة :
كود:
First 23.5 Second 45.1


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-10-2014, 01:47 PM المشاركة 23   
افتراضي


استبدال محتويات المتغير بالنتيجة :
محتويات المتغير يمكن أن تأتى من نتيجة عملية حسابية . يمكنك استخدام النتيجة لاستبدال محتويات متغير . انظر إلى البرنامج التالى :



كود:
' Which earns the most money? ' 40 hours at $5 an hour, or ' 30 hours at $6 an hour ' LET RATE = 5 LET HOURS = 40 LET PAY = HOURS * RATE PRINT "Pay for ", HOURS, "hours at ", RATE, " = " , PAY ' LET RATE = 6 LET HOURS = 30 LET PAY = HOURS * RATE PRINT "Pay for ", HOURS, "hours at ", RATE, " = " , PAY ' END
فيما يلى كيف يعمل النصف الأول من البرنامج :
1- حجز ذاكرة للمتغير RATE ، وتخزين القيمة "5" به .
2- حجز ذاكرة للمتغير HOURS وتخزين القيمة "40" به .
3- عبارة LET الثالثة :
· تحجز ذاكرة للمتغير PAY .
· تستخدم القيمة "40" الموجودة فى المتغير HOURS .
· تستخدم القيمة "5" الموجودة فى المتغير RATE .
· إجراء العملية الحسابية "40 * 5 " .
· حفظ النتيجة "200" فى المتغير PAY .
4- عبارة PRINT :
· تكتب السلسلة "Pay for " .
· تبحث فى المتغير HOURS ، لتحصل على القيمة "40" وتكتبها .
· تكتب السلسلة "hours at " .
· تبحث فى المتغير RATE ، لتحصل على القيمة "5" وتكتبها .
· تكتب حرف علامة التساوى " = " .
· تبحث فى المتغير PAY ، لتحصل على القيمة "200" وتكتبها .
عند هذه النقطة تكون ذاكرة الكمبيوتر بالشكل التالى :

السؤال رقم 18 :
ما الذى سوف يطبعه الجزء الأول من البرنامج على شاشة الكمبيوتر ؟

الإجابة :
كود:
Pay for 40 hours at 5 = 200

النصف الثانى من البرنامج :
النصف الثانى من البرنامج يماثل الجزء الأول . فهو يعيد استخدام المتغيرات التى تم إنشاؤها فى الجزء الأول :


كود:
' Which earns the most money? 40 hours at $5 an hour ' or 30 hours at $6 an hour ' LET RATE = 5 LET HOURS = 40 LET PAY = HOURS * RATE PRINT "Pay for ", HOURS, "hours at ", RATE, " = " , PAY ' LET RATE = 6 LET HOURS = 30 LET PAY = HOURS * RATE PRINT "Pay for ", HOURS, "hours at ", RATE, " = " , PAY ' END

فيما يلى كيف يعمل الجزء الثانى من البرنامج :
1- القيمة الموجودة فى المتغير RATE يتم استبدالها بالقيمة "6" .
2- القيمة الموجودة فى المتغير HOURS يتم استبدالها بالقيمة "30" .
3- عبارة LET الثالثة :
· تستخدم القيمة "30" الموجودة فى المتغير HOURS .
· وتستخدم القيمة "6" الموجودة فى المتغير RATE .
· إجراء العملية الحسابية "30 * 6 " .
· تخزين النتيجة "180" فى المتغير PAY .
4- عبارة PRINT :
· تكتب السلسلة "Pay for " .
· تبحث فى المتغير HOURS ، لتحصل على القيمة "30" وتكتبها .
· تكتب السلسلة "hours at " .
· تبحث فى المتغير RATE ، لتحصل على القيمة "6" وتكتبها .
· تكتب حرف علامة التساوى " = " .
· تبحث فى المتغير PAY ، لتحصل على القيمة "180" وتكتبها .

السؤال رقم 19 :
ما الذى سوف يطبعه البرنامج الكامل على شاشة الكمبيوتر ؟

الإجابة :
كود:
Pay for 40 hours at 5 = 200
Pay for 30 hours at 6 = 180



الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 12-10-2014, 01:50 PM المشاركة 24   
افتراضي


استبدال محتويات المتغير عدة مرات :
يمكن استبدال محتويات المتغير عدة مرات . انظر إلى البرنامج التالى :


كود:
' Changing the contents of VALUE ' LET VALUE = 1 PRINT VALUE LET VALUE = 2 PRINT VALUE LET VALUE = 3 PRINT VALUE END
السؤال رقم 20 :
ما الذى سوف يطبعه البرنامج السابق على شاشة الكمبيوتر ؟

الإجابة :
كود:
1 2 3

ثلاث خطوات لعبارة LET :
عبارة LET يمكن أن تقوم بقدر كبير من العمل . لقد رأيت أمثلة على هذا بالفعل . انظر إلى العبارة التالية :

كود:
LET SUM = A + 23

فيما يلى ملخص لما يمكن أن يحدث :
عبارة LET :
1- توجد (تحجز) ذاكرة من أجل كل متغير "جديد" فى العبارة . سوف يتم وضع الصفر فى المتغيرات العددية إذا لم يكن هناك معلومات أخرى ، ( إذا لم يكن هناك متغيرات جديدة ، فإن هذه الخطوة لا تقوم بعمل أى شىء) .
2- القيام بإجراء العمليات الحسابية الموجودة "يمين" علامة التساوى ( إذا لم يكن هناك أى عمليات حسابية ، فقط يتم استخدام القيمة الموجودة هناك) .
3- استبدال محتويات المتغير الموجود "يسار" علامة التساوى بنتيجة العملية الحسابية .

السؤال رقم 21 :
ما الذى سوف يطبعه البرنامج التالى ؟
كود:
' LET example
'
LET A = 2
LET B = 4
LET C = (A + B) / 2
PRINT A, B, C
END

الإجابة :
كود:
2 4 3

شرح البرنامج :
العبارة الأولى :
1- تحجز ذاكرة للمتغير "A" .
2- تستخدم القيمة "2" .
3- تخزن هذه القيمة فى هذا المتغير .
العبارة الثانية :
1- تحجز ذاكرة للمتغير "B" .
2- تستخدم القيمة "4" .
3- تخزن هذه القيمة فى هذا المتغير .
العبارة الثالثة :
1- تحجز ذاكرة للمتغير "C" ( المتغير A والمتغير B لا تحتاج لذاكرة جديدة) .
2- إجراء العملية الحسابية "(A + B ) / 2 ".
3- تخزين النتيجة فى المتغير "C" .

وأخيرا عبارة PRINT تبحث فى كل من المتغيرات A,B,C وتكتب محتوياتها .

السؤال رقم 22 :
هل ظهور المتغير لأول مرة على يمين علامة التساوى فى عبارة LET يعتبر خطأ ؟

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

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



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 01:44 AM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)