freeCodeCamp/guide/arabic/c/if-statements/index.md

225 lines
14 KiB
Markdown
Raw Normal View History

---
title: Logical Operators and If Statements
localeTitle: مشغلات منطقية وبيانات إذا كانت
---
# إذا كانت البيانات في C
تُعرف القدرة على تغيير سلوك جزء من الكود المستندة إلى معلومات معينة في البيئة باسم تدفق الشفرة الشرطي. وفي بعض الأحيان تريد تشغيل الكود الخاص بك وفقًا لشروط معينة. في مثل هذه الحالة ، يمكننا استخدام بيانات If. يُعرف أيضًا باسم بيان اتخاذ القرار حيث أنه يتخذ القرار على أساس التعبير المعطى (أو بشرط معين). إذا تم تقييم التعبير إلى true ، فسيتم تنفيذ كتلة الكود داخل العبارة "if". إذا تم تقييم التعبير إلى false ، فسيتم تنفيذ أول مجموعة من الأكواد بعد نهاية العبارة "if" (بعد قوس التجويف الختامي). التعبير هو تعبير يحتوي على عوامل تشغيل علائقية و / أو منطقية تعمل على المتغيرات المنطقية . يتم تقييم التعبير إما صح أو خطأ.
## بناء جملة من _البيان_
`if (testExpression) {
// statements
}
`
## مثال بسيط
دعونا ننظر إلى مثال على ذلك في العمل:
`#include <stdio.h>
#include <stdbool.h>
int main(void) {
if(true) {
printf("Statement is True!\n");
}
return 0;
}
`
`output:
Statement is True!
`
تمامًا مثل helloworld.c ، تم تضمين stdio.h. الجديد في هذا البرنامج هو stdbool.h ، وهو المكتبة البوولية القياسية - فهو يحتوي على كود يتيح لنا الوصول إلى 'true' و 'false'.
جديد أيضًا في المثال أعلاه هو عبارة "if". إذا كان البيان الموجود داخل الأقواس صحيحًا ، فسيتم تشغيل التعليمة البرمجية الموجودة داخل أقواس العبارة if. في حالة هذا المثال ، يكون true صحيحًا ، بحيث تعمل الشفرة على تشغيل وظيفة `printf` .
## لو غير هذا
في العبارة "If-else" ، إذا كان البيان الموجود داخل القوس صحيحًا ، فسيتم تنفيذ التعليمة البرمجية الموجودة داخل أقواس العبارة "if" وإذا كانت العبارة داخل القوس غير صحيحة ، فإن الكود الموجود بين قوسين " سيتم تنفيذ بيان آخر.
بالطبع ، لم يكن هذا المثال مفيدًا جدًا ، لأن الصواب صحيح دائمًا. وإليك آخر آخر أكثر عملية:
`#include <stdio.h>
int main(void) {
int n = 2;
if(n == 3) { // comparing n with 3
printf("Statement is True!\n");
}
else { // if first condition is not true, then comes to this block of code.
printf("Statement is False!\n");
}
return 0;
}
`
`output:
Statement is False!
`
هناك بعض الأشياء الهامة التي تختلف هنا. أولاً ، لم يتم تضمين `stdbool.h` . هذا مقبول ، لأنه لا يتم استخدام `true` `false` . في C ، لدينا بيانات تعامل على أنها صحيحة وكاذبة حتى ولو لم تكن الكلمات صحيحة أو خاطئة في العملية.
ضمن أقواس العبارة if شيء جديد ، أيضًا: `n == 3` . هذه مقارنة بين `n` والرقم 3. `==` هي مشغل المقارنة ، وهي واحدة من عدة عمليات مقارنة في C.
## متداخلة إذا كان آخر
تسمح العبارة if-else بالاختيار بين بديلين محتملين. في بعض الأحيان ، يجب الاختيار بين أكثر من احتمالين. على سبيل المثال ، ترجع الدالة sign في الرياضيات -1 إذا كانت الوسيطة أقل من الصفر ، تُرجع +1 إذا كانت الوسيطة أكبر من الصفر وتعيد الصفر إذا كانت الوسيطة صفرًا. تطبق العبارة C ++ التالية هذه الوظيفة:
`if (x < 0)
sign = -1;
else
if (x == 0)
sign = 0;
else
sign = 1;
`
هذا هو عبارة if-else التي يكون فيها البيان الذي يلي الجملة هو نفسه عبارة if-else. إذا كانت قيمة x أقل من الصفر ، فسيتم تعيين علامة على -1 ، ومع ذلك إذا لم يكن أقل من العبارة التالية بعد تنفيذ آخر. في هذه الحالة ، إذا كانت x تساوي الصفر ، فسيتم تعيين التوقيع على الصفر وإلا يتم تعيينه على 1. غالبًا ما يستخدم المبرمجون المبتدئون تسلسلًا من عبارات if بدلاً من استخدام عبارة if-else متداخلة. هذا ما يكتبونه أعلاه في النموذج المكافئ منطقيًا:
`if (x < 0)
sign = -1;
if (x == 0)
sign = 0;
if (x > 0)
sign = 1;
`
لا ينصح بهذا الإصدار لأنه لا يوضح أنه سيتم تنفيذ واحد فقط من عبارات المهمة لقيمة معينة من x. كما أنها غير فعالة حيث يتم اختبار جميع الشروط الثلاثة دائما.
## عوامل المقارنة
اسم المشغل الاستخدام | نتيجة المشغل ---------------------------- |: ---------: | --------- -------- يساوي ل | أ == ب | صحيح إذا كان a يساوي b ، كاذبة خلاف ذلك لا يساوي ل | أ = ب | صحيح إذا كان لا يساوي b ، كاذبة خلاف ذلك أكبر من | أ> ب | صحيح إذا كان أكبر من b ، كاذبة خلاف ذلك أكبر من أو يساوي أ = ب | صحيح إذا كان أكبر من أو يساوي b ، كاذبة خلاف ذلك اقل من | أ <ب | صحيح إذا كان أقل من b ، كاذبة خلاف ذلك أقل من أو يساوي أ <= ب | صحيح إذا كان a أقل من أو يساوي b ، كاذبة خلاف ذلك
هذا المثال له أيضًا كلمة جديدة: `else` . يتم تشغيل التعليمة البرمجية الموجودة داخل المجموعة `else` فقط إذا كان الرمز الموجود داخل `if` لم يتم تشغيله.
هناك الكثير يمكننا القيام به مع كل هؤلاء المشغلين! خذ بعين الاعتبار ما يلي ، حيث سنستخدم عبارة if-else:
`#include <stdio.h>
int main(void) {
int n = 5;
if(n == 5) {
printf("n is equal to 5!\n");
}
else if (n > 5) {
printf("n is greater than 5!\n");
}
return 0;
}
`
`output:
n is equal to 5!
`
يحتوي بيان if-else على 'else if' مرتبط به. تعمل هذه التعليمة البرمجية إذا كان الشرط الموجود داخل السابق إذا كان خطأً ، ولكنه يضيف شرطًا داخل أقواسها يجب أن يكون صحيحًا قبل تشغيل الشفرة.
## العوامل المنطقية
بالطبع ، قد نرغب في حدوث شيء ما إذا لم يكن ذلك صحيحًا ، أو إذا كان صحيحًا أو غير ذلك. لذلك ، لدينا عوامل منطقية:! ل ، لا & ، و و ل أو. دعونا نلقي نظرة على هذا في العمل:
`#include <stfio.h>
int main(void) {
int n = 5;
int m = 10;
if(n > m || n == 15) {
printf("Either n is greater than m, or n is equal to 15\n");
}
else if( n == 5 && m == 10 ) {
printf("n is equal to 5 and m is equal to 10!\n");
}
else if ( !(n == 6)) {
printf("It is not true that n is equal to 6!\n");
}
else if (n > 5) {
printf("n is greater than 5!\n");
}
return 0;
}
`
`output:
n is equal to 5 and m is equal to 10!
`
إليك المجموعة الأولى من الأقواس: `n > m || n == 5` . سيكون هذا صحيحًا إذا كان n أكبر من m ، أو إذا كان n تساوي 5. n ليس أكبر من m ، ولكن n تساوي 5. لأن أحد هذه الأشياء يكون صحيحًا ، ويتم ضمها بواسطة ، أو ، سيكون البيان صحيحًا وستتم طباعة التعليمة البرمجية داخل.
ولأن الشفرة السابقة قد تم تنفيذها ، فإنها لن تتحقق من العبارات الأخرى - التي يتم التحقق منها فقط إذا لم يتم التحقق من تلك السابقة. فقط من أجل ممارسة ، مع ذلك ، ضع في اعتبارك ما الذي ستفحصه بقية التعليمات البرمجية. `n == 5 && m == 10` سيكون صحيحاً إذا كان n يساوي 5 و m يساوي 10. وهذا صحيح ، ولكن إذا كان n 6 لم يعد صحيحًا ، ولن يتم تشغيل الكود الموجود ضمن ذلك .
`!(n == 6)` يستخدم قوسين لجعل العملية أكثر وضوحا. وكما هو الحال في الرياضيات ، يمكن استخدام الأقواس لترتيب العمليات: سيتم تنفيذ الأشياء داخل الأقواس قبل الأشياء التي لا تقع ضمن قوس. لذا في هذه الحالة ، سيتم تقييم `n == 6` ، وهو خطأ. `!` ، "لا" ، يقلب هذا من false إلى true ، بحيث تُرجع هذه العملية true. إلا أنه ، كما كان من قبل ، لن يتم تشغيله إلا لأن أحد العبارات السابقة كان صحيحًا أن هذا الأمر مرتبط بالفعل.
أخيراً ، هل تقييم `n > 5` صحيح؟ الإجابة هي لا ، لأن n _هي_ 5 ، وبالتالي فهي ليست أكبر من 5. ونتيجة لذلك ، لن يتم تقييم هذا الرمز إلى true. لجعل هذا التقييم صحيحًا ، يجب استخدام `>=` عامل التشغيل.
## تفاصيل حول C المقارنات
لقد قرأت في وقت سابق أن المقارنات تتحقق مما إذا كان هناك شيء ما صحيح أم خطأ ، ولكن هذا صحيح فقط نصفه. تذكر أن C على وشك أن تكون خفيفة وقريبة من الأجهزة في الأجهزة ، فمن السهل التحقق مما إذا كان هناك شيء 0 ، وأي شيء آخر يتطلب المزيد من العمل. وبسبب ذلك ، ما تقوم به المقارنات فعلاً هو التحقق من وجود خطأ ما ، والذي يتم تعيينه بقيمة 0 ، أو التحقق مما إذا كان غير صحيح (أي قيمة أخرى).
ونتيجة لذلك ، هذه العبارة إذا كانت صحيحة وصالحة:
`if(12452) {
printf("This is true!\n")
}
`
حسب التصميم ، 0 غير صحيح ومن قبل الاصطلاح ، 1 صحيح. في الواقع ، إليك نظرة على مكتبة `stdbool.h` الموضحة مسبقًا:
`#define false 0
#define true 1
`
هناك في الواقع أكثر قليلا من ذلك ، ولكن هذا هو الجزء الذي يقوم بكل العمل.
يخبر هذان السطران من الكود المحول البرمجي أنه يجب استبدال كلمة "خطأ" بكلمة "0" ، ويجب استبدال كلمة "صواب" بكلمة "1". `stdbool.h` أيضا لديه بعض الوثائق والتعليمات التي سيتم مناقشتها المترجم في وقت لاحق ، ولكن هذين الخطين هو كل ما هو عليه حقا.
# النصائح والحيل
النظر في الكود أدناه:
`#include <stdio.h>
int main() {
int i=3;
if(i=4) {
printf("This block is executed");
}
else {
printf("NO! I am boss");
}
}
`
ماذا سيكون الناتج؟ "لا! أنا مدرب"؟ إذا كنت تخمن هذا الناتج فأنت مخطئ. لماذا حدث هذا؟ لأنه في العبارة if استخدمت "=" بدلاً من "==". "==" هو المقارنة.
سوف يقارن بين متغيرين ولكن "=" هو عامل التخصيص عندما قلنا i = 4 ، نقوم ببساطة بتعيين القيمة 4 إلى العدد الصحيح i ، وبما أنه في "C" ، تكون كل قيمة NON-ZERO صحيحة إذا كانت (i = 4) عبارة صحيحة وسيتم تنفيذ التعليمات تحت هذا
# قبل أن تذهب ...
## مراجعة
* إذا كانت العبارة "if" تتحقق مما إذا كان التعبير صحيحًا ، فحينئذٍ يتم تشغيل الكود داخل الأقواس المتعرجة.
* يمكن إضافة "else" إلى نهاية "if" ، ولن يتم تشغيله إلا إذا كانت العبارة (s) السابقة خاطئة.
* يمكن أيضًا إضافة "else if" إلى نهاية "if" ، وسيتم تشغيلها فقط إذا كانت العبارة (s) السابقة (false) خاطئة.
* يتم تمثيل كل شيء في جهاز الكمبيوتر بالأرقام ، لذلك يمكن إجراء كل مقارنة في C من خلال التعامل مع قيم مثل الأرقام - حتى true و false والأحرف.
* هناك مجموعة من مشغلي المقارنة:
* \== تساوي
* ! = لا يساوي
* \> أكبر من
* أقل من
* \> = أقل من أو يساوي
* <= أقل من أو يساوي
* لدينا أيضًا بعض المشغلين المنطقيين ، مما يسمح لنا بربط العمليات المنطقية معًا:
* ! يسمى NOT المشغل-يعكس حالة المعامل
* && تسمى AND operator-It تقوم بإرجاع true عندما يكون كلا الشرطين صحيحين
* || تسمى OR operator-It تُرجع true عندما يكون واحد على الأقل من الشرط صحيحًا