الدرس 2 من 10

الأنواع والتحويل

هدف الدرس

int و double و decimal وفخّ القسمة

01

الشرح

في 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.

02

المطلوب

أصلح Average(points, games) لتُرجع المتوسّط عشريًّا مقرّبًا إلى منزلتين: 47 نقطة في 6 مباريات متوسّطها 7.83 لا 7. وأكمل WholeCoins(gold) لتُرجع عدد القطع الكاملة بالتحويل إلى int، وPriceWithTax(price) لتُرجع السعر مع ضريبة 15% مقرّبًا إلى منزلتين، وInitial(name) لتُرجع أول حرف في الاسم.

معايير التصحيح

5 معايير
  1. Average(47, 6) تُرجع 7.83 لا 7
  2. التحويل قبل القسمة: Average(10, 4) تُرجع 2.5
  3. WholeCoins تقطع الكسر ولا تقرّب: 7.9 تصير 7
  4. PriceWithTax: ضريبة 15% بدقّة decimal، مقرّبة إلى منزلتين
  5. Initial تُرجع الحرف الأول char
Program.cs
المخرجاتC# · Mono 6.6 · Judge0

يُترجَم الكود ويعمل على السيرفر…

–/5

يُترجَم الكود ويعمل على السيرفر…

5 معايير في بطاقة «المطلوب».