الدرس 2 من 10
المتغيّرات والأنواع
- 11 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
الأنواع وقسمة الأعداد الصحيحة
الشرح
في C++ تكتب نوع كل متغيّر عند تعريفه، ويبقى على هذا النوع: int lives = 3; عدد صحيح، وdouble speed = 4.5; عدد عشري، وchar rank = 'S'; حرف واحد بين علامتين مفردتين، وbool alive = true; صواب أو خطأ، وstd::string name = "ليان"; نصّ بين علامتين مزدوجتين يأتي من <string>. ومن هذا الدرس سنكتب std:: صراحةً بدل using namespace std; كما يفعل أغلب المبرمجين المحترفين، لأنّ ذلك يوضّح من أين جاء كل اسم، ويمنع أن يتعارض اسم من المكتبة مع اسم من أسمائك.
والنوع يؤثّر في نتيجة الحساب، فإذا قسمت عددًا صحيحًا على عدد صحيح كان الناتج صحيحًا وحُذف الكسر دون أي تنبيه، فـ 7 / 2 تساوي 3، و45 / 60 * 100 تساوي صفرًا وليس 75، لأنّ 45 / 60 صارت صفرًا قبل أن يبدأ الضرب. والحلّ أن تحوّل أحد الطرفين إلى عشري قبل القسمة هكذا: static_cast<double>(total) / count، أو أن تضرب قبل أن تقسم. أما إذا حوّلت بعد القسمة كما في static_cast<double>(7 / 2) فالنتيجة 3.0، لأنّ الكسر ضاع قبل التحويل.
ويطبع std::cout قيمة bool رقمًا، 1 للصواب و0 للخطأ، فإذا وضعت std::boolalpha قبلها في أمر الطباعة طبع true أو false. و"\n" في آخر النصّ تنقلك إلى سطر جديد كما تفعل std::endl.
المطلوب
أصلح double average(int total, int count) لتُرجع المتوسّط عددًا عشريًّا، فتكون نتيجة average(45, 6) هي 7.5 وليس 7. وأصلح int hpPercent(int hp, int maxHp) لتُرجع نسبة الصحة عددًا صحيحًا من 100، فتكون نتيجة hpPercent(45, 60) هي 75 وليس صفرًا. ثم اكتب bool isLowHp(int hp, int maxHp) لتُرجع true إذا كانت النسبة أقلّ من 25، وأضف إلى main سطرًا ثالثًا يطبع خطر: true من isLowHp(10, 60).
الفحوص
6 فحوص- ناتج average(45, 6) يساوي 7.5 وليس 7
- الدالة average صحيحة مع قيم أخرى ومع السالب
- ناتج hpPercent(45, 60) يساوي 75 وليس صفرًا
- الدالة hpPercent صحيحة مع الصحة الكاملة والصفر والكسر
- الدالة isLowHp تعدّ ما دون 25% خطرًا، و25% فأكثر ليس خطرًا
- طُبعت الأسطر الثلاثة: 7.5 و75% وtrue