 |
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,894
|
|
نشاط [ F.Abdelaziz ]
قوة السمعة:333
|
|
26-03-2020, 06:31 PM
المشاركة 1
|
|
دورة برمجة الاردوينو : الدرس الخامس
عوامل العلاقة (الارتباط - المقارنة) Relational Operators :
تختبر عوامل العلاقية العلاقة relationship بين القيم ، على سبيل المثال هل الرقم 7 أكبر من الرقم 5 ؛ أو القيمة التي يحملها holds المتغير أقل من 10.
نتيجة تقييم مقارنة قيمتين بواسطة عامل علاقة ستكون إما صحيحة true أو خاطئة false ، على سبيل المثال ، هل القيمة الموجودة في متغير تساوي 8؟ ستكون الإجابة إما صحيحة true (يحتوي على القيمة 8) أو خاطئة false (لا يحتوي على القيمة 8).
في البرمجة ، يتم تمثيل true بالقيمة 1 ويتم تمثيل false بالقيمة 0. سيساعد المثال التالي على توضيح هذا التفسير للعوامل العلاقية.
مثال على عامل علاقة (إرتباط ) :
يستخدم البرنامج التالي عامل العلاقة "أكبر من" (>) وعامل العلاقة "أصغر أو أقل من" (<) لمقارنة رقمين.
كود:
void setup() {
Serial.begin(9600);
Serial.print("Is 7 greater than 5? ");
Serial.println(7 > 5);
Serial.print("Is 7 less than 5? ");
Serial.println(7 < 5);
}
void loop() {
}
خرج البرنامج مبين أدناه :

يختبر عامل العلاقة الأول ما إذا كانت 7 أكبر من 5 : 7 > 5
7 أكبر من 5 ، لذا يكون الناتج من هذه المقارنة true أو 1.
يختبر عامل العلاقة الثاني ما إذا كان 7 أقل من 5: 7 < 5
7 ليس أقل من 5 ، وبالتالي فإن الناتج من المقارنة false أو 0.
أنواع عوامل العلاقة (الارتباط) Types of Relational Operators :
تحتوي لغة برمجة Arduino على 6 عوامل علاقة (ارتباط) مدرجة أدناه.
1- العامل أكبر من Greater Than >
لقد رأينا بالفعل عامل العلاقة أكبر من يعمل في المثال أعلاه. هنا مثال آخر يستخدم نفس العامل لمقارنة محتويات متغيرين.
كود:
int a = 2;
int b = 3;
Serial.println(a > b);
يسأل عامل العلاقة السؤال "هل a أكبر من b؟" "Is a greater than b?".
ستكون نتيجة المقارنة 0 (false) في هذا المثال لأن القيمة التي يحتوي عليها المتغير a ليست أكبر من القيمة التي يحتوي عليها المتغير b.
2- العامل أصغر من Less Than <
هنا نستخدم عامل العلاقة أصغر من لمقارنة محتويات نفس المتغيرين.
كود:
int a = 2;
int b = 3;
Serial.println(a < b);
يسأل عامل العلاقة السؤال "هل a أصغر من b؟" "Is a less than b?" .
سيكون خرج هذا البرنامج 1 (true) لأن القيمة التي يحتوي عليها المتغير a أقل من القيمة التي يحتوي عليها المتغير b.
3- العامل أكبر من أوتساوى Greater Than or Equal To >=
يعمل هذا العامل بنفس الطريقة التي يعمل بها عامل أكبر من ، ولكنه سيقيم evaluate أيضًا بالقيمة true (1) إذا كانت القيمتان قيد المقارنة متساويتين.
4- العامل أصغر من أو تساوى Less Than or Equal To <=
سيتم تقييم نتيجة هذا العامل إلى القيمة true (1) إذا كانت القيمة على يسار العامل أقل من القيمة الموجودة على يمين العامل ؛ أو إذا كانت القيمتان متساويتان.
5- العامل يساوى Equal To ==
يتم تقييم نتيجة العامل يساوى فقط بالقيمة true (1) إذا كانت القيمتان قيد المقارنة متساوية equal ، وإلا فسيتم تقييمها إلى false (0) .
من السهل نسيان استخدام علامتين تساوى (==) واستخدام علامة يساوى واحدة فقط لمعامل العلاقة يساوى . سيؤدي استخدام علامة تساوى واحدة فقط إلى تعيين المتغير على يسار العامل القيمة للمتغير أو الثابت على اليمين. إذا كانت القيمة على اليسار ثابتة ، فسيحدث خطأ في الترجمة compile error إذا تم استخدام يساوي واحد (=) بدلاً من يساوي مزدوجة (==).
6- عامل عدم التساوى Not Equal To !=
يتم تقييم عامل عدم التساوى فقط بالقيمة true إذا كانت القيمتان التي تتم مقارنتها مع بعضها البعض غير متساوية ، وإلا فسيتم تقييمها إلى false .
برنامج (سكيتش) عامل العلاقة Relational Operator Sketch
يوضح سكيتش الاردوينو أدناه العوامل العلائقية.
كود:
void setup() {
int a = 2;
int b = 3;
Serial.begin(9600);
Serial.print("Is a greater than b? ");
Serial.println(a > b);
Serial.print("Is a less than 25? ");
Serial.println(a < 25);
Serial.print("Is a greater than or equal to b? ");
Serial.println(a >= b);
a = 3;
Serial.print("Is a greater than or equal to b? ");
Serial.println(a >= b);
a = 4;
Serial.print("Is a greater than or equal to b? ");
Serial.println(a >= b);
Serial.print("Is a equal to b? ");
Serial.println(a == b);
b = 4;
Serial.print("Is a equal to b? ");
Serial.println(a == b);
}
void loop() {
}
انسخ هذا الاسكيتش وقم بتشغيله على Arduino. جرب مع عوامل الارتباط العلائقية للتأكد من فهمك لها.
أشياء يجب ملاحظتها في الاسكيتش :
• تقييم وطباعة تعبير Evaluating and Printing an Expression
ما يجب ملاحظته في الاسكتشات أعلاه هو أن التعبير expression يتم تقييمه evaluated وطباعته في عبارة statement واحدة. لا يتم حفظ نتيجة تعبير العامل العلائقي أولاً في متغير ثم تتم طباعته.
يمكن القيام بذلك أيضًا مع عوامل الحساب كما هو موضح هنا:
كود:
void setup() {
int a = 2;
int b = 3;
Serial.begin(9600);
Serial.print("a + b = ");
Serial.println(a + b);
}
void loop() {
}
خرج الاسكيتش أعلاه مبين بالشكل التالى :

يتم تقييم التعبير a + b (للحصول على القيمة 5) ويتم طباعته في نفس العبارة.
• الارتباك Confusing بين = و == :
كما ذكرنا من قبل ، من السهل نسيان علامة التساوي الثانية عند استخدام عامل يساوي equal. يوضح الاسكيتش أدناه ما يمكن أن يحدث مع هذا الخطأ.
كود:
void setup() {
int a = 2;
int b = 3;
Serial.begin(9600);
Serial.print("a == b: ");
Serial.println(a == b);
Serial.print("a = b: ");
Serial.println(a = b);
}
void loop() {
}
إن المقارنة بين a و b في التعبير a == b صحيحة ويتم تقييمها إلى 0 كما هو متوقع.
إذا تم ترك علامة التساوي الثانية كما هو موضح في التعبير الثاني a = b ، فسيتم استخدام عامل التخصيص (=) عن طريق الخطأ بدلاً من عامل التساوي (==).
يؤدي هذا إلى تعيين a لقيمة b وهي 3 ثم تتم طباعة 3. سيتم تقييم الرقم غير الصفري non-zero على أنه true كما سنرى لاحقًا .
|