المسارات
/
C++
C++
/
التمارين
/
شراء مركبة
شراء مركبة

شراء مركبة

تمرين تعلّمي

مقدمة

المقارنات

في C++، يمكنك مقارنة القيم باستخدام عوامل المقارنة.

المقارنة العامل
يساوي ==
لا يساوي !=
أصغر من <
أصغر من أو يساوي <=
أكبر من >
أكبر من أو يساوي >=

نتيجة هذه المقارنات هي دائمًا قيمة منطقية:

int a{3};

bool eq1 = a != 4; // true

bool eq2 = a > 5;  // false

يتحقق العاملان == و!= مما إذا كانت قيمة تساوي قيمة أخرى أم لا، على الترتيب. وإليك بعض الأمثلة الشائعة:

bool eq3 = 2 == 3; // false, integer comparison

bool eq4 = 2.1 != 2.2; // true, float comparison

bool eq5 = "hello" == "hello"; // true, string comparison

تتحقق العوامل الأخرى مما إذا كانت قيمة أكبر من (>) أو أكبر من أو تساوي (>=) أو أصغر من (<) أو أصغر من أو تساوي (<=) قيمة أخرى. هذا النوع من المقارنة متاح للأعداد والسلاسل النصية. وعند مقارنة السلاسل النصية، يُتبع الترتيب القاموسي (المعروف أيضًا بالترتيب المعجمي).

bool eq6 = 2 > 3; // false, integer comparison

bool eq7 = 1.2 < 1.3; // true, float comparison

bool eq8 = "Hello" < "World"; // true, string comparison

الجمل الشرطية

الجمل الشرطية في C++ تشبه الجمل الشرطية في اللغات الأخرى. النوع الأساسي لأي عملية شرطية هو النوع bool، الذي يمكن أن تكون قيمته true أو false. وغالبًا ما تُستخدم الجمل الشرطية كآليات للتحكم في التدفق للتحقق من شروط مختلفة.

يمكن استخدام الجملة الشرطية if، التي تنفّذ الكود الخاص بها إذا كان الشرط الأساسي true، هكذا:

std::string value{"val"};

if (value == "val") {
    return "was val";
}

وفي الحالات التي تنطوي على أكثر من حالة واحدة، يمكن ربط العديد من الجمل الشرطية if معًا باستخدام الجملتين الشرطيتين else if وelse.

int number{33};

if (number > 0) {
   return "positive";
} else if (number < 0) {
    return "negative";
} else {
   return "zero";
}

منذ C++17، يمكن للجمل الشرطية if أن تتضمن أيضًا عبارة تهيئة قصيرة يمكن استخدامها لتهيئة متغير واحد أو أكثر خاص بالجملة الشرطية if. على سبيل المثال:

int num{7};
if (int v{2 * num}; v > 10) {
    return v;
} else {
    return num;
}
// => 14

ملاحظة: لا يمكن الوصول إلى أي متغيرات أُنشئت في التهيئة بعد نهاية الجملة الشرطية if.

التعليمات

في هذا التمرين، ستكتب بعض الكود لمساعدتك في الاستعداد لشراء مركبة.

لديك ثلاث مهام: واحدة لتحديد ما إذا كنت بحاجة إلى رخصة، وواحدة لمساعدتك في الاختيار بين مركبتين، وواحدة لتقدير السعر المقبول لمركبة مستعملة.

1. حدّد ما إذا كنت ستحتاج إلى رخصة قيادة

تتطلب بعض أنواع المركبات رخصة قيادة لتشغيلها. افترض أن النوعين "car" و "truck" فقط هما اللذان يتطلبان رخصة، ويمكن تشغيل كل ما عدا ذلك دون رخصة.

نفّذ الدالة needs_license(kind) التي تأخذ نوع المركبة كسلسلة نصية وتُرجع قيمة منطقية تشير إلى ما إذا كنت بحاجة إلى رخصة لهذا النوع من المركبات.

needs_license("car")
// => true

needs_license("bike")
// => false

needs_license("truck")
// => true

2. اختر بين مركبتين محتملتين للشراء

أنت تقيّم خياراتك من المركبات المتاحة. لقد نجحت في تضييق الخيارات إلى اثنين، لكنك تحتاج إلى مساعدة لاتخاذ القرار النهائي. لذلك، نفّذ الدالة choose_vehicle(option1, option2) التي تأخذ مركبتين كوسيطين وتُرجع قرارًا يتضمن الخيار الذي يأتي أولًا بالترتيب المعجمي.

choose_vehicle("Wuling Hongguang", "Toyota Corolla")
// => "Toyota Corolla is clearly the better choice."

choose_vehicle("Volkswagen Beetle", "Volkswagen Golf")
// => "Volkswagen Beetle is clearly the better choice."

يجب أن تتبع السلسلة النصية المُرجعة نمط "<CHOSEN_VEHICLE> is clearly the better choice."، حيث يمثل <CHOSEN_VEHICLE> الخيار المختار من الوسائط المُمرَّرة.

3. احسب تقديرًا لسعر مركبة مستعملة

الآن بعد أن اتخذت قرارًا، تريد التأكد من حصولك على سعر عادل في معرض السيارات. بما أنك مهتم بشراء مركبة مستعملة، يعتمد السعر على عمر المركبة. لتقدير تقريبي، افترض أنه إذا كان عمر المركبة أقل من 3 سنوات، فإنها تكلّف 80% من السعر الأصلي الذي كانت عليه عندما كانت جديدة تمامًا. وإذا كان عمرها 10 سنوات على الأقل، فإنها تكلّف 50%. وإذا كان عمر المركبة 3 سنوات على الأقل ولكن أقل من 10 سنوات، فإنها تكلّف 70% من السعر الأصلي.

نفّذ الدالة calculate_resell_price(original_price, age) التي تطبّق هذا المنطق باستخدام if و else if و else (هناك طرق أخرى إذا أردت التدريب). تأخذ السعر الأصلي وعمر المركبة كوسيطين وتُرجع السعر المقدَّر في معرض السيارات.

calculate_resell_price(1000, 1)
// => 800

calculate_resell_price(1000, 5)
// => 700

calculate_resell_price(1000.0, 15)
// => 500

ملاحظة: القيمة المُرجعة من النوع double.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
C++ Exercism

مستعد لبدء شراء مركبة؟

سجّل في Exercism لتتعلّم وتتقن C++ عبر 19 مفهومًا100 تمرين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.