Go انواع عددی پایهای دارد که میتوانند مجموعهای از مقادیر صحیح یا اعشاری را نمایش دهند. انواع مختلفی وجود دارد که به اندازهی مقداری که لازم دارید و معماری رایانهای که برنامه روی آن اجرا میشود بستگی دارد (مثلاً ۳۲بیتی و ۶۴بیتی).
در این تمرین، شما فقط با این انواع سر و کار خواهید داشت:
int: مثلاً 0، 255، 2147483647.
یک عدد صحیح علامتدار که اندازهی آن حداقل ۳۲ بیت است (محدودهی مقدار: از -۲۱۴۷۴۸۳۶۴۸ تا ۲۱۴۷۴۸۳۶۴۷).
اما این به معماری سیستم بستگی دارد.
بیشتر رایانههای امروزی ۶۴بیتی هستند، بنابراین int اندازهی ۶۴ بیت خواهد داشت (محدودهی مقدار: از -۹۲۲۳۳۷۲۰۳۶۸۵۴۷۷۵۸۰۸ تا ۹۲۲۳۳۷۲۰۳۶۸۵۴۷۷۵۸۰۷).
float64: مثلاً 0.0، 3.14.
مجموعهی همهی اعداد اعشاری ۶۴بیتی را در خود دارد.
uint: مثلاً 0، 255.
یک عدد صحیح بدون علامت که هماندازهی int است (محدودهی مقدار: از ۰ تا ۴۲۹۴۹۶۷۲۹۵ برای ۳۲ بیت و از ۰ تا ۱۸۴۴۶۷۴۴۰۷۳۷۰۹۵۵۱۶۱۵ برای ۶۴ بیت)
اعداد را میتوان از طریق «تبدیل نوع» به انواع عددی دیگر تبدیل کرد.
Go از بسیاری از عملگرهای حسابی استاندارد پشتیبانی میکند:
| عملگر | مثال |
|---|---|
+ |
4 + 6 == 10 |
- |
15 - 10 == 5 |
* |
2 * 3 == 6 |
/ |
13 / 3 == 4 |
% |
13 % 3 == 1 |
در تقسیم صحیح، باقیمانده حذف میشود (مثلاً 5 / 2 == 2).
Go برای عملگرهای بالا شکل کوتاهشدهی انتساب را دارد (مثلاً a += 5 کوتاهنوشت a = a + 5 است).
Go همچنین دستورهای افزایش و کاهش ++ و -- را پشتیبانی میکند (مثلاً a++).
تبدیل بین نوعها با فراخوانی تابعی انجام میشود که نامش همان نوع مقصد است. مثلاً:
var x int = 42 // x has type int
f := float64(x) // f has type float64 (ie. 42.0)
var y float64 = 11.9 // y has type float64
i := int(y) // i has type int (ie. 11)
در بسیاری از زبانها میتوانید عملیات حسابی را روی متغیرهایی با نوعهای مختلف انجام دهید، اما در Go این کار خطا میدهد. مثلاً:
var x int = 42
// this line produces an error
value := float32(2.0) * x // invalid operation: mismatched types float32 and int
// you must convert int type to float32 before performing arithmetic operation
value := float32(2.0) * float32(x)
در این تمرین، کدی مینویسید که تولید یک کارخانهی خودروسازی را تحلیل میکند.
خودروها روی یک خط مونتاژ تولید میشوند. خط مونتاژ سرعت مشخصی دارد که میتوان آن را تغییر داد. هرچه سرعت خط مونتاژ بیشتر باشد، خودروهای بیشتری تولید میشود. اما تغییر سرعت خط مونتاژ، تعداد خودروهایی را که سالم تولید میشوند هم تغییر میدهد، یعنی خودروهایی که در تولیدشان هیچ خطایی رخ نداده است.
تابعی پیادهسازی کنید که تعداد خودروهای تولیدشده در هر ساعت و نرخ موفقیت را دریافت کند و تعداد خودروهای سالم تولیدشده در هر ساعت را محاسبه کند.
نرخ موفقیت به صورت درصد، از 0 تا 100 داده میشود:
CalculateWorkingCarsPerHour(1547, 90)
// => 1392.3
نکته: مقدار بازگشتی باید از نوع float64 باشد.
تابعی پیادهسازی کنید که تعداد خودروهای تولیدشده در هر ساعت و نرخ موفقیت را دریافت کند و محاسبه کند که در هر دقیقه چند خودروی سالم تولید میشود:
CalculateWorkingCarsPerMinute(1105, 90)
// => 16
نکته: مقدار بازگشتی باید از نوع int باشد.
تولید هر خودرو به صورت تکی معمولاً ۱۰٬۰۰۰ دلار هزینه دارد، بدون توجه به اینکه سالم تولید شود یا نه. اما با کمی برنامهریزی، میتوان ۱۰ خودرو را با هم و با هزینهی ۹۵٬۰۰۰ دلار تولید کرد.
برای مثال، ۳۷ خودرو را میتوان به این صورت تولید کرد: ۳۷ = ۳ × گروه دهتایی + ۷ خودروی تکی
بنابراین هزینهی ۳۷ خودرو میشود: ۳*۹۵٬۰۰۰+۷*۱۰٬۰۰۰=۳۵۵٬۰۰۰
تابع CalculateCost را پیادهسازی کنید که هزینهی تولید تعدادی خودرو را محاسبه میکند، بدون توجه به اینکه سالم تولید شوند یا نه:
CalculateCost(37)
// => 355000
CalculateCost(21)
// => 200000
نکته: مقدار بازگشتی باید از نوع uint باشد.