نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
العمليات الحسابية في C# (Arithmetic Operators) الجمع (Addition +): جمع قيمتين رقميتين مثل 5 + 3 = 8. الطرح (Subtraction -): طرح القيم مثل 10 - 4 = 6. الضرب (Multiplication *): ضرب الأرقام مثل 6 * 7 = 42. القسمة (Division /): قسمة الأرقام، مع الانتباه لفخ الأعداد الصحيحة. باقي القسمة (Modulus %): يحسب المتبقي بعد القسمة مثل 10 % 3 = 1 لمعرفة الأعداد الزوجية والفردية. فخ قسمة الأعداد الصحيحة (Integer Division Trap) ⚠️ قسمة عدد صحيح على عدد صحيح تعطي دائماً عدداً صحيحاً وتتجاهل الكسور: 5 / 2 تعطي 2 وليس 2.5! الحل الذهبي: جعل أحد الطرفين على الأقل عدداً عشرياً بنوع double. المثال الدقيق: 5.0 / 2 تعطي 2.5 بدقة تامة. العمليات الحسابية في C# (Arithmetic Operators) الجمع (Addition +): جمع قيمتين رقميتين مثل 5 + 3 = 8. الطرح (Subtraction -): طرح القيم مثل 10 - 4 = 6. الضرب (Multiplication *): ضرب الأرقام مثل 6 * 7 = 42. القسمة (Division /): قسمة الأرقام، مع الانتباه لفخ الأعداد الصحيحة. باقي القسمة (Modulus %): يحسب المتبقي بعد القسمة مثل 10 % 3 = 1 لمعرفة الأعداد الزوجية والفردية. فخ قسمة الأعداد الصحيحة (Integer Division Trap) ⚠️ قسمة عدد صحيح على عدد صحيح تعطي دائماً عدداً صحيحاً وتتجاهل الكسور: 5 / 2 تعطي 2 وليس 2.5! الحل الذهبي: جعل أحد الطرفين على الأقل عدداً عشرياً بنوع double. المثال الدقيق: 5.0 / 2 تعطي 2.5 بدقة تامة. اختصارات التعديل السريع (Compound Assignment) 🚀 زيادة بمقدار واحد (Increment): كود ++score يعادل تماماً score = score + 1. نقصان بمقدار واحد (Decrement): كود --lives يعادل تماماً lives = lives - 1. الجمع والتحديث المباشر: كود score += 50 يضيف 50 مباشرة. الضرب والتحديث المباشر: كود price *= 2 يضاعف السعر مباشرة. معاملات المقارنة والمنطق (Comparison & Logic) ⚖️ التساوي (Equal ==) وعدم التساوي (Not Equal !=). أكبر من وأصغر من: مثل age >= 18. الواو المنطقية (AND &&): تشترط تحقق جميع الشروط معاً. الأو المنطقية (OR ||): يكفي تحقق شرط واحد فقط. النفي المنطقي (NOT !): تعكس القيمة من true إلى false والعكس. التحويل بين الأنواع (Type Casting) 🔄 التحويل التلقائي الآمن (Implicit): من نوع أصغر إلى أكبر كتحويل int إلى double. التحويل الصريح الإجباري (Explicit): وضع النوع بين قوسين مثل (double)itemsCount. قص الكسور: تحويل double إلى int يقص الجزء العشري مباشرة. أسبقية وترتيب تنفيذ العمليات (Operator Precedence) 📐 أولوية الأقواس أولاً: ما بين الأقواس () ينفذ دائماً قبل أي عملية أخرى. أولوية الضرب والقسمة: عمليات الضرب * والقسمة / وباقي القسمة % تسبق الجمع والطرح. أولوية الجمع والطرح: عمليات الجمع + والطرح - تنفذ في النهاية. مثال الفارق الكبير: 5 + 2 * 3 ينتج 11، بينما (5 + 2) * 3 ينتج 21! القاعدة الذهبية للمطور: عند الشك في الأولوية، استخدم الأقواس لتوضيح قصدك للمترجم والمبرمجين. جدول الصواب والتقييم السريع (Truth Table & Short-Circuit) 🎯 جدول واو المنطقية (AND &&): لا تعطي true إلا إذا كانت جميع الشروط صحيحة معاً (true && true). جدول أو المنطقية (OR ||): تعطي true إذا تحقق شرط واحد على الأقل، وتعطي false فقط إذا كلاهما خطأ. جدول النفي (NOT !): تعكس الحالة تماماً وتحول الصواب لخطأ والعكس (!true تصبح false). ميزة التقييم القصير (Short-Circuit): في && إذا كان الشرط الأول خطأ لا يفحص الثاني، وفي || إذا كان الأول صواباً لا يفحص الثاني توفيراً للأداء. أسبقية وترتيب تنفيذ العمليات (Operator Precedence) 📐 أولوية الأقواس أولاً: ما بين الأقواس () ينفذ دائماً قبل أي عملية أخرى. أولوية الضرب والقسمة: عمليات الضرب * والقسمة / وباقي القسمة % تسبق الجمع والطرح. أولوية الجمع والطرح: عمليات الجمع + والطرح - تنفذ في النهاية. مثال الفارق الكبير: 5 + 2 * 3 ينتج 11، بينما (5 + 2) * 3 ينتج 21! القاعدة الذهبية للمطور: عند الشك في الأولوية، استخدم الأقواس لتوضيح قصدك للمترجم والمبرمجين. جدول الصواب والتقييم السريع (Truth Table & Short-Circuit) 🎯 جدول واو المنطقية (AND &&): لا تعطي true إلا إذا كانت جميع الشروط صحيحة معاً (true && true). جدول أو المنطقية (OR ||): تعطي true إذا تحقق شرط واحد على الأقل، وتعطي false فقط إذا كلاهما خطأ. جدول النفي (NOT !): تعكس الحالة تماماً وتحول الصواب لخطأ والعكس (!true تصبح false). ميزة التقييم القصير (Short-Circuit): في && إذا كان الشرط الأول خطأ لا يفحص الثاني، وفي || إذا كان الأول صواباً لا يفحص الثاني توفيراً للأداء. طرق التحويل الذكية للدوال (Convert vs Parse vs Cast) 🛠️ التحويل عبر الكاستينج (Casting): مثل (int)3.9 يكتفي بقص الجزء العشري مباشرة ليعطي 3 (Truncation). التحويل عبر فئة كونفرت (Convert Class): مثل Convert.ToInt32(3.9) تقرب الرقم لأقرب عدد صحيح ليعطي 4 (Rounding). تحويل النصوص إلى أرقام (String to Number): دالة int.Parse("150") تحول النصوص القادمة من المستخدم إلى أرقام صالحة للحساب. التحويل الآمن (TryParse): دالة int.TryParse تفحص النص أولاً وتمنع انهيار البرنامج إذا أدخل المستخدم نصاً خاطئاً. أشهر أخطاء العمليات وكيف تتفاداها (Common Pitfalls) 🛑 فخ القسمة على صفر (Divide By Zero): قسمة أي عدد صحيح على صفر تسبب انهيار البرنامج فوراً (Crash). فخ الخلط بين المقارنة والإسناد: علامة = تستخدم لإعطاء وتخزين قيمة، بينما == تستخدم لفحص التساوي. فخ نسيان الأقواس المنطقية: كتابة الشروط المعقدة بدون أقواس تجعل التقييم غير متوقع؛ افصل الشروط بأقواس (). فخ فيضان الذاكرة (Integer Overflow): تجاوز الحد الأقصى للرقم (أكثر من 2 مليار في int) يقلب الرقم إلى سالب. Program.cs // =======================================================
// الدرس الثاني: العمليات الحسابية والمنطقية — بناء حاسبة ذكية
// =======================================================
// 1. العمليات الحسابية الأساسية وفخ القسمة:
/*int itemsCount = 5;
int boxes = 2;
double result = (double)itemsCount / boxes;
Console.WriteLine($"the result of the division = {result}");
int remainder = itemsCount % boxes;
Console.WriteLine($"the result of the Modulus = {remainder}");*/
/*int score = 100;
score += 50; // 150
score++; //151
score--;//150
score *=2; //300
score -= 50; //250
Console.WriteLine($"the score after the update = {score}");*/
int userAge = 20;
int score = 100;
bool hasDrivingLicense = true;
bool canRentCar = (userAge >= 18) && hasDrivingLicense;
Console.WriteLine($"Can he rent a car : {canRentCar}");
bool hasSpecialDiscount = (userAge < 19 ) || (score > 99);
Console.WriteLine($"Does he have a disc : {hasSpecialDiscount}");
// (اكتب الكود مع المعلم خطوة بخطوة أثناء الشرح)