مسیرها
/
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 به بعد، دستورهای شرطی می‌توانند یک دستور مقداردهی اولیه‌ی کوتاه هم داشته باشند که می‌توان از آن برای مقداردهی اولیه‌ی یک یا چند متغیر برای دستور شرطی استفاده کرد. برای مثال:

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

نکته: به هیچ‌کدام از متغیرهایی که در مقداردهی اولیه ساخته می‌شوند، پس از پایان دستور شرطی نمی‌توان دسترسی داشت.

دستورالعمل‌ها

در این تمرین، قرار است کدی بنویسید که به شما در آماده شدن برای خرید یک خودرو کمک کند.

شما سه کار دارید: یکی برای تعیین اینکه آیا به گواهینامه نیاز دارید، یکی برای کمک به انتخاب بین دو خودرو و یکی برای تخمین قیمت مناسب یک خودروی دست‌دوم.

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. محاسبه‌ی تخمینی از قیمت یک خودروی دست‌دوم

حالا که تصمیم خود را گرفته‌اید، می‌خواهید مطمئن شوید که در نمایندگی قیمت منصفانه‌ای می‌پردازید. از آنجا که می‌خواهید یک خودروی دست‌دوم بخرید، قیمت به سن خودرو بستگی دارد. برای تخمینی تقریبی، فرض کنید اگر خودرو کمتر از ۳ سال سن داشته باشد، قیمتش ۸۰٪ قیمت اصلی آن هنگام نو بودن است. اگر حداقل ۱۰ سال سن داشته باشد، ۵۰٪. اگر خودرو حداقل ۳ سال سن داشته باشد اما کمتر از ۱۰ سال، ۷۰٪ قیمت اصلی.

تابع 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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.