Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

المعاملات المنطقية - الجزء الثالث

جزء من قسم Fundamentals في رحلة C على Coddy — الدرس 23 من 63.

عند التحقق من شروط متعددة، يتوقف البرنامج عن التحقق بمجرد معرفة النتيجة النهائية. يُسمى هذا التقييم قصير الدائرة (short-circuit evaluation).

على سبيل المثال:

int x = 0;
int y = 5;
int result = (x != 0) && (y / x > 2);

هنا x يساوي 0، لذلك، لن يتم تقييم y / x > 2. إذا قمنا بعكس الترتيب:

int result = (y / x > 2) && (x != 0);

سيؤدي هذا إلى حدوث خطأ لأن y سيتم قسمته على 0، وهو أمر غير محدد في لغة C. لذا فمن الممارسات الجيدة التفكير في العمليات بعناية، حتى تتمكن من الحصول على كود صحيح وفعال، ولكن خالٍ من الأخطاء.

تُستخدم هذه التقنية لتحسين تقييم التعبيرات المنطقية. على سبيل المثال:

int a = 0;
int b = 2;
int c = 3;
int d = 5;
int result = (a > 0 && b < 2) || (c < -5 && d < 10);

في هذا المثال، لن يتم تقييم b < 2 و d < 10 لأن كلاً من a > 0 و c < -5 قيم خاطئة (false).

challenge icon

التحدي

سهل

قم بإنشاء برنامج لتقرير ما إذا كان اليوم مناسباً لإنتاج الطاقة من الألواح الشمسية

قم بتهيئة هذه المتغيرات:

  • isSunny بالقيمة 1 (true)
  • windSpeed بالقيمة 5.4
  • temperature بالقيمة 23
  • solarPanelOutput بالقيمة 9
  • isCloudy بالقيمة 0 (false)

قم بإنشاء تعبير منطقي واحد يتحقق من جميع هذه الشروط:

  • الجو مشمس
  • سرعة الرياح أقل من 10
  • إنتاج الألواح الشمسية أقل من 15
  • درجة الحرارة فوق 20 أو لا توجد غيوم

اطبع "Good day for solar energy" إذا تحققت جميع الشروط، وإلا اطبع "Not ideal for solar energy".

ورقة مرجعية

يتوقف تقييم الدائرة القصيرة (Short-circuit evaluation) عن التحقق من الشروط بمجرد تحديد النتيجة النهائية، مما يحسن من تقييم التعبيرات المنطقية.

مع && (AND)، إذا كان الشرط الأول خطأ (false)، فلن يتم تقييم الشرط الثاني:

int x = 0;
int result = (x != 0) && (y / x > 2);  // لن يتم تقييم y/x

مع || (OR)، إذا كان الشرط الأول صحيحاً (true)، فلن يتم تقييم الشرط الثاني:

int result = (a > 0 && b < 2) || (c < -5 && d < 10);
// إذا كان a > 0 خطأ، فلن يتم تقييم b < 2
// إذا كان الجزء الأول صحيحاً، فلن يتم تقييم الجزء الثاني

الترتيب مهم - ضع الشروط التي قد تسبب أخطاء (مثل القسمة على صفر) بعد فحوصات الأمان:

// آمن: يتحقق من x != 0 أولاً
int result = (x != 0) && (y / x > 2);

// غير آمن: قد يقسم على صفر
int result = (y / x > 2) && (x != 0);

جرّب بنفسك

#include <stdio.h>

int main() {
    // تهيئة المتغيرات
    int isSunny = 1;
    float windSpeed = 5.4;
    int temperature = 23;
    int solarPanelOutput = 9;
    int isCloudy = 0;
    
    // إنشاء التعبير المنطقي
    int isGoodDay = 
    
    // لا تقم بالتغيير أدناه
    if (isGoodDay) {
        printf("Good day for solar energy\n");
    } else {
        printf("Not ideal for solar energy\n");
    }
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Fundamentals