در 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
نکته: به هیچکدام از متغیرهایی که در مقداردهی اولیه ساخته میشوند، پس از پایان دستور شرطی نمیتوان دسترسی داشت.
در این تمرین، قرار است کدی بنویسید که به شما در آماده شدن برای خرید یک خودرو کمک کند.
شما سه کار دارید: یکی برای تعیین اینکه آیا به گواهینامه نیاز دارید، یکی برای کمک به انتخاب بین دو خودرو و یکی برای تخمین قیمت مناسب یک خودروی دستدوم.
برخی از انواع خودرو برای راندن به گواهینامهی رانندگی نیاز دارند.
فرض کنید فقط انواع "car" و "truck" به گواهینامه نیاز دارند و هر مورد دیگری را میتوان بدون گواهینامه راند.
تابع needs_license(kind) را پیادهسازی کنید که نوع خودرو را بهصورت یک رشته میگیرد و یک «مقدار منطقی» برمیگرداند که نشان میدهد آیا برای آن نوع خودرو به گواهینامه نیاز دارید یا نه.
needs_license("car")
// => true
needs_license("bike")
// => false
needs_license("truck")
// => true
شما گزینههای خودروهای موجود را بررسی میکنید.
موفق میشوید آنها را به دو گزینه محدود کنید، اما برای گرفتن تصمیم نهایی به کمک نیاز دارید.
برای این کار، تابع 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> گزینهای است که از میان آرگومانهای دادهشده انتخاب شده است.
حالا که تصمیم خود را گرفتهاید، میخواهید مطمئن شوید که در نمایندگی قیمت منصفانهای میپردازید. از آنجا که میخواهید یک خودروی دستدوم بخرید، قیمت به سن خودرو بستگی دارد. برای تخمینی تقریبی، فرض کنید اگر خودرو کمتر از ۳ سال سن داشته باشد، قیمتش ۸۰٪ قیمت اصلی آن هنگام نو بودن است. اگر حداقل ۱۰ سال سن داشته باشد، ۵۰٪. اگر خودرو حداقل ۳ سال سن داشته باشد اما کمتر از ۱۰ سال، ۷۰٪ قیمت اصلی.
تابع 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است.