الدرس 2 من 10
الأنواع والتحويل
- 12 دقيقة
- 5 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
int و double و decimal وفخّ القسمة
الشرح
في C# لكل متغيّر نوع يُعلَن مرّة ولا يتغيّر: int lives = 3; للأعداد الصحيحة، وdouble speed = 4.5; للعشرية، وdecimal price = 19.99m; للمال، وbool isAlive = true; لصواب أو خطأ، وstring name = "ليان"; للنصوص بين علامتَي تنصيص مزدوجتين، وchar grade = 'A'; لحرف واحد بين علامتين مفردتين. والنصّ سلسلة أحرف، فأوّل حرف فيه name[0] ونوعه char. أما var فتستنتج النوع من القيمة، ويبقى ثابتًا بعدها.
والفخّ الأشهر: القسمة بين عددين صحيحين تبقى صحيحة وتُسقط الكسر بصمت، فـ 7 / 2 تساوي 3. حوّل أحد الطرفين قبل القسمة: (double)7 / 2 تساوي 3.5. أما (double)(7 / 2) فتعطي 3، لأن القسمة الصحيحة حدثت أوّلًا وضاع الكسر. والتحويل في الاتجاه المعاكس يقطع ولا يقرّب: (int)7.9 تساوي 7، بخلاف Convert.ToInt32(7.9) التي تقرّب إلى 8.
وMath.Round(x, 2) تقرّب إلى منزلتين. أما decimal فللمال، لأن double يخزّن الكسور بالنظام الثنائي فلا يمثّل 0.1 تمامًا، و0.1 + 0.2 == 0.3 خاطئة. وdecimal يحفظ المنازل العشرية كما تكتبها، واللاحقة m تجعل الرقم منه. ولا يخلط C# النوعين بصمت: price * 1.15 خطأ ترجمة إن كان price من نوع decimal، والصواب price * 1.15m.
المطلوب
أصلح Average(points, games) لتُرجع المتوسّط عشريًّا مقرّبًا إلى منزلتين: 47 نقطة في 6 مباريات متوسّطها 7.83 لا 7. وأكمل WholeCoins(gold) لتُرجع عدد القطع الكاملة بالتحويل إلى int، وPriceWithTax(price) لتُرجع السعر مع ضريبة 15% مقرّبًا إلى منزلتين، وInitial(name) لتُرجع أول حرف في الاسم.
معايير التصحيح
5 معايير- Average(47, 6) تُرجع 7.83 لا 7
- التحويل قبل القسمة: Average(10, 4) تُرجع 2.5
- WholeCoins تقطع الكسر ولا تقرّب: 7.9 تصير 7
- PriceWithTax: ضريبة 15% بدقّة decimal، مقرّبة إلى منزلتين
- Initial تُرجع الحرف الأول char