⚙️ C++

عوامل المقارنة والعوامل المنطقية في لغة C++

ما هذا ولماذا؟

تخيل أنك تلعب لعبة فيديو. لديك 100 حياة. عندما تواجه وحشًا، تتحقق اللعبة: "هل الحياة أكبر من 0؟". إذا كانت الإجابة بنعم — يمكنك القتال. إذا لا — تقول اللعبة: "انتهت اللعبة".

في البرمجة، تقوم عوامل المقارنة و العوامل المنطقية بهذه الفحوصات. فهي تساعد البرنامج على اتخاذ القرارات. على سبيل المثال:

  • التحقق مما إذا كان هناك مال كافٍ في الحساب
  • معرفة ما إذا كان المساء قد حل
  • فهم ما إذا كان اللاعب يستطيع فتح الباب (هل لديه المفتاح أم يعرف الرمز)

بدونها، سيكون البرنامج مثل روبوت يقوم بنفس الشيء دون النظر إلى ما يحدث حوله. معها، يصبح ذكيًا!

الصيغة وأمثلة الكود

في لغة C++، تبدو عوامل المقارنة كالتالي:

==  // يساوي (انتبه: علامتا يساوي!)
!=  // لا يساوي
>   // أكبر من
<   // أصغر من
>=  // أكبر من أو يساوي
<=  // أصغر من أو يساوي

أما العوامل المنطقية فتربط عدة شروط:

&&  // و (كلا الشرطين يجب أن يكونا صحيحين)
||  // أو (شرط واحد على الأقل صحيح)
!   // ليس (يحول الصحيح إلى خطأ والعكس)

مثال 1: التحقق من العمر

#include <iostream>
using namespace std;

int main() {
    int age = 14;
    
    // نتحقق: العمر أكبر من أو يساوي 18؟
    if (age >= 18) {
        cout << "أنت بالغ!" << endl;
    } else {
        cout << "أنت لا تزال طفلاً." << endl;
    }
    // الإخراج: "أنت لا تزال طفلاً."
    // لأن 14 ليست أكبر من أو تساوي 18
    return 0;
}

مثال 2: العامل المنطقي و (&&)

#include <iostream>
using namespace std;

int main() {
    bool has_key = true;
    bool knows_code = false;
    
    // لفتح الباب، نحتاج إلى المفتاح والرمز معًا
    if (has_key && knows_code) {
        cout << "الباب مفتوح!" << endl;
    } else {
        cout << "الدخول ممنوع." << endl;
    }
    // الإخراج: "الدخول ممنوع."
    // لأن knows_code = false
    return 0;
}

مثال 3: العامل المنطقي أو (||)

#include <iostream>
using namespace std;

int main() {
    int temperature = 30; // درجة مئوية
    
    // نذهب للتنزه إذا كان الجو دافئًا أو جافًا
    if (temperature > 20 || temperature < 10) {
        cout << "لنذهب للتنزه!" << endl;
    } else {
        cout << "نبقى في المنزل." << endl;
    }
    // الإخراج: "لنذهب للتنزه!"
    // لأن 30 > 20 (الشرط الأول صحيح)
    return 0;
}

مثال 4: العامل المنطقي ليس (!)

#include <iostream>
using namespace std;

int main() {
    bool is_raining = false;
    
    // إذا لم يكن المطر يهطل، نذهب للتنزه
    if (!is_raining) {
        cout << "مرحى، نذهب للتنزه!" << endl;
    } else {
        cout << "نأخذ المظلة." << endl;
    }
    // الإخراج: "مرحى، نذهب للتنزه!"
    // لأن !false = true
    return 0;
}

مثال 5: شرط معقد

#include <iostream>
using namespace std;

int main() {
    int age = 16;
    bool has_license = false;
    bool with_parents = true;
    
    // يمكن قيادة السيارة إذا:
    // (العمر >= 18 ولديه رخصة) أو (مع الوالدين)
    if ((age >= 18 && has_license) || with_parents) {
        cout << "يمكنك الجلوس خلف المقود!" << endl;
    } else {
        cout << "لا يمكنك القيادة." << endl;
    }
    // الإخراج: "يمكنك الجلوس خلف المقود!"
    // لأن with_parents = true
    return 0;
}

المقارنة مع Python

في Python، تبدو نفس العوامل متشابهة تقريبًا، ولكن هناك اختلافات مهمة:

العملية C++ Python
يساوي == ==
لا يساوي != !=
أكبر من > >
و && and
أو || or
ليس ! not

مثال في Python:

age = 14
if age >= 18:
    print("أنت بالغ!")
else:
    print("أنت لا تزال طفلاً.")
# الإخراج: "أنت لا تزال طفلاً."

الفرق الرئيسي: في Python، تُكتب العوامل المنطقية ككلمات (and, or, not)، بينما في C++ تُكتب كرموز (&&, ||, !). أيضًا، في Python لا حاجة للفاصلة المنقوطة والأقواس المعقوفة — بدلاً من ذلك، تُستخدم المسافات البادئة.

الأخطاء النموذجية للمبتدئين

الخطأ 1: الخلط بين = و ==

علامة يساوي واحدة (=) هي للإسناد. اثنتان (==) للمقارنة.

// غير صحيح:
if (x = 5) { ... }  // خطأ! يُسند 5 إلى المتغير x

// صحيح:
if (x == 5) { ... }  // يتحقق مما إذا كانت x تساوي 5

الخطأ 2: نسيان أولوية العمليات

كما في الرياضيات: الضرب أولاً، ثم الجمع. في المنطق أيضًا ترتيب: أولاً !، ثم &&، ثم ||.

// قد يكون غير واضح:
if (a || b && c) // أولاً سيتم تنفيذ b && c، ثم a || النتيجة

// من الأفضل استخدام الأقواس:
if (a || (b && c)) // الآن واضح

الخطأ 3: مقارنة أنواع مختلفة

int x = 5;
double y = 5.0;
if (x == y) { ... } // يعمل، لكن قد يكون غير متوقع

// من الأفضل التحويل إلى نوع واحد:
if (x == (int)y) { ... }

الخطأ 4: استخدام =