يمكن تقسيم أنواع الأعداد المدمجة في C++ إلى أعداد صحيحة وأعداد عشرية.
الأعداد الصحيحة هي أعداد كاملة مثل 0 و691 و-2.
الأعداد العشرية هي أعداد تحتوي على فاصلة عشرية مثل 6.02214076 و0.1 و-1.616.
يوضح المثال التالي تعريف وتهيئة أربعة متغيرات مختلفة
int m_morales{9241}; // base 10: 0-9
int a_apaec{0x24CD}; // base 16: 0-9 and A-F
int m_gargan{0b10010000011001}; // base 2: 0-1
int b_reilly{022031}; // base 8: 0-7
// Leading with a 0 not the letter o.
عندما تُسند قيمة إلى متغير من النوع int، يمكنك فعل ذلك مباشرة باستخدام قيمة حرفية.
القيمة الحرفية هي عدد مثبت في الكود مثل 9241.
توجد قيم حرفية مختلفة للأعداد الصحيحة بعدة أسس للتمثيل.
القيم الحرفية العشرية هي الأكثر شيوعًا وتستخدم الأرقام من 0 إلى 9.
وبإضافة بادئة خاصة، مثل 0x، يمكن استخدام أسس أخرى.
يعرض المثال أعلاه العدد 9241 بتمثيلاته وبادئاته الأربعة.
جميع المتغيرات مهيأة إلى القيمة نفسها.
لمزيد من التفاصيل حول أنظمة التمثيل المختلفة، ألقِ نظرة على درس تعليمي صغير.
يمكنك استخدام علامة الفاصلة العليا لفصل الأرقام لتسهيل القراءة.
9'241 هي نفسها 0b0100'100'0001'1001 أو 92'4'1.
تأتي القيم الحرفية للأعداد العشرية بنوعين.
بالإضافة إلى الصيغة البديهية 0.0024، يمكن استخدام صيغتها العلمية 2.4e-3.
النوع الأكثر شيوعًا للأعداد العشرية هو double.
تدعم C++ العوامل + و- و* و/ و( و) و% لتكوين تعبيرات.
نتيجة العملية بين عددين صحيحين هي أيضًا عدد صحيح.
ستكون نتيجة 5 / 2 هي 2.
وعندما يكون أحد النوعين المشتركين نوعًا عشريًا، تكون النتيجة أيضًا عددًا عشريًا.
ستكون نتيجة 5.0 / 2 و5 / 2.0 هي 2.5.
% هو عامل الباقي ويُرجع باقي قسمة عددين صحيحين: ناتج 5%3 هو 2.
يقوم عامل الإسناد بإسناد قيمة حرفية إلى متغير. وتحدث عملية الإسناد دائمًا من اليمين إلى اليسار، ولا تحدث أبدًا في الاتجاه المعاكس.
int length = 5;
int width = 2;
length = width;
هنا تُسند القيمة الصحيحة 5 إلى المتغير length.
ثم تُسند القيمة الصحيحة 2 إلى المتغير width.
وأخيرًا تُنسخ قيمة width إلى المتغير length، وتضيع القيمة السابقة 5.
لاحظ أيضًا أننا نُسند قيمة width إلى length فقط في لحظة عملية الإسناد.
لذلك، إذا تغيرت قيمة width في وقت لاحق، فلن يؤثر ذلك على القيمة التي يأخذها length.
يمكن دمج عامل الإسناد مع العوامل الأخرى (الحسابية وعوامل البتات)، وتُعرف باسم عوامل compound assignment += و-= و*= و/= و%=.
تُعدّل هذه العوامل القيمة الحالية لمتغير بإجراء عملية عليها.
// we start with 0 people
int people{};
// we need 0 eggs
int eggs{};
// two people joined:
people += 2;
// people is now 2
// let's add 3 eggs per person
eggs += 3 * people;
// eggs is now 6
المتغيران people وeggs مهيآن إلى 0.
ثم نضيف القيمة الصحيحة 2 إلى القيمة الحالية 0 للمتغير people ونُسند الناتج مرة أخرى إلى people.
أصبح people الآن 2.
لاحقًا، نضيف 3 بيضات لكل شخص، فيصبح المجموع 6 بيضات.
الآن، أضف هذا العدد 6 إلى القيمة الحالية 0 للمتغير eggs وأسند الناتج مرة أخرى إلى eggs.
سيصبح eggs الآن 6.
والتعبير المكافئ سيكون people = people + 2 وeggs = eggs + (3 * people).
في هذا التمرين، ستكتب كودًا لمساعدة مستقل على التواصل مع مدير مشروع. مهمتك هي توفير بعض الأدوات لحساب السعر اليومي والشهري بسرعة، مع خصم معيّن عند الحاجة.
أولًا، نضع بعض القواعد بين المستقل ومدير المشروع:
أحيانًا يعرض المستقل تطبيق خصم على سعره اليومي (مثلًا لعملائه الأكثر وفاءً أو للعملاء غير الربحيين).
تُمثَّل الخصومات كأعداد عشرية تعبّر عن نسب مئوية، مثل 25.0 (25%).
نفّذ دالة باسم daily_rate لحساب السعر اليومي عندما يُمرَّر سعر الساعة كمعامل.
يحدّد العقد أن اليوم يحتوي على 8 ساعات قابلة للفوترة.
daily_rate(60)
// => 480.0
يجب أن يكون السعر اليومي المُرجَع من النوع double.
نفّذ دالة apply_discount لحساب السعر بعد الخصم.
يجب أن تستقبل معاملين: السعر الأصلي ونسبة الخصم المئوية.
apply_discount(150, 10)
// => 135.0
يجب أن تكون القيمة المُرجَعة دائمًا من النوع double، دون أي تقريب.
نفّذ دالة monthly_rate لحساب السعر الشهري بعد الخصم.
يجب أن تحتوي على معاملين: سعر الساعة ونسبة الخصم المئوية.
monthly_rate(77, 10.5)
// => 12130
يجب تقريب السعر الشهري المُرجَع إلى الأعلى (أي أخذ السقف) إلى أقرب عدد صحيح.
نفّذ دالة days_in_budget تستقبل ميزانية وسعر الساعة وخصمًا، وتحسب عدد أيام العمل الكاملة التي تغطيها هذه الميزانية.
days_in_budget(20'000, 80, 11.0)
// => 35
يجب تقريب عدد الأيام المُرجَع إلى الأسفل (أي أخذ الأرضية) إلى أقرب عدد صحيح.
سجّل في Exercism لتتعلّم وتتقن C++ عبر 19 مفهومًا100 تمرين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.