مسیرها
/
Go
Go
/
تمرین‌ها
/
مونتاژ خودرو
مونتاژ خودرو

مونتاژ خودرو

تمرین یادگیری

مقدمه

اعداد

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)

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

در این تمرین، کدی می‌نویسید که تولید یک کارخانه‌ی خودروسازی را تحلیل می‌کند.

1. محاسبه‌ی تعداد خودروهای سالم تولیدشده در هر ساعت

خودروها روی یک خط مونتاژ تولید می‌شوند. خط مونتاژ سرعت مشخصی دارد که می‌توان آن را تغییر داد. هرچه سرعت خط مونتاژ بیشتر باشد، خودروهای بیشتری تولید می‌شود. اما تغییر سرعت خط مونتاژ، تعداد خودروهایی را که سالم تولید می‌شوند هم تغییر می‌دهد، یعنی خودروهایی که در تولیدشان هیچ خطایی رخ نداده است.

تابعی پیاده‌سازی کنید که تعداد خودروهای تولیدشده در هر ساعت و نرخ موفقیت را دریافت کند و تعداد خودروهای سالم تولیدشده در هر ساعت را محاسبه کند. نرخ موفقیت به صورت درصد، از 0 تا 100 داده می‌شود:

CalculateWorkingCarsPerHour(1547, 90)
// => 1392.3

نکته: مقدار بازگشتی باید از نوع float64 باشد.

2. محاسبه‌ی تعداد خودروهای سالم تولیدشده در هر دقیقه

تابعی پیاده‌سازی کنید که تعداد خودروهای تولیدشده در هر ساعت و نرخ موفقیت را دریافت کند و محاسبه کند که در هر دقیقه چند خودروی سالم تولید می‌شود:

CalculateWorkingCarsPerMinute(1105, 90)
// => 16

نکته: مقدار بازگشتی باید از نوع int باشد.

3. محاسبه‌ی هزینه‌ی تولید

تولید هر خودرو به صورت تکی معمولاً ۱۰٬۰۰۰ دلار هزینه دارد، بدون توجه به اینکه سالم تولید شود یا نه. اما با کمی برنامه‌ریزی، می‌توان ۱۰ خودرو را با هم و با هزینه‌ی ۹۵٬۰۰۰ دلار تولید کرد.

برای مثال، ۳۷ خودرو را می‌توان به این صورت تولید کرد: ۳۷ = ۳ × گروه ده‌تایی + ۷ خودروی تکی

بنابراین هزینه‌ی ۳۷ خودرو می‌شود: ۳*۹۵٬۰۰۰+۷*۱۰٬۰۰۰=۳۵۵٬۰۰۰

تابع CalculateCost را پیاده‌سازی کنید که هزینه‌ی تولید تعدادی خودرو را محاسبه می‌کند، بدون توجه به اینکه سالم تولید شوند یا نه:

CalculateCost(37)
// => 355000

CalculateCost(21)
// => 200000

نکته: مقدار بازگشتی باید از نوع uint باشد.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Go Exercism

آماده‌اید مونتاژ خودرو را شروع کنید؟

در Exercism ثبت‌نام کنید تا Go را همراه با 34 مفهوم165 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.