المعاملات المنطقية - الجزء الثالث
جزء من قسم 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).
التحدي
سهلقم بإنشاء برنامج لتقرير ما إذا كان اليوم مناسباً لإنتاج الطاقة من الألواح الشمسية
قم بتهيئة هذه المتغيرات:
isSunnyبالقيمة 1 (true)windSpeedبالقيمة 5.4temperatureبالقيمة 23solarPanelOutputبالقيمة 9isCloudyبالقيمة 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;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
2المتغيرات
أنواع البياناتالأعداد الصحيحة (Integer)الأعداد العشرية (Float - Double)المحارف (Characters)القيم المنطقية (Booleans)الثوابتأساسيات printfقواعد تسمية المتغيراتتحويل الأنواع (Type Casting) - الجزء 1تحويل الأنواع (Type Casting) - الجزء 2تحدي المراجعة3المعاملات
المعاملات الحسابيةمعامل باقي القسمةالزيادة والنقصانمعاملات الإسنادالمعاملات العلائقيةالمعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيالمعاملات المنطقية - الجزء الثالثتحدي المراجعة